diff --git a/.gitignore b/.gitignore index d1f3bcbd6..19794af85 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,9 @@ venv/ /builds/ .fvm/ .fvmrc + +# copilot-instructions.md +.github/copilot-instructions.md # Web related docs/tailwind.css @@ -78,6 +81,10 @@ olm needed-translations.txt .venv +# Generated files from find_unused_intl_keys.py +scripts/unused_intl_keys_report.txt +scripts/unused_intl_keys.json + docs/node_modules/.package-lock.json docs/node_modules/.bin/detect-libc docs/node_modules/.bin/jiti diff --git a/.vscode/launch.json b/.vscode/launch.json index 12f26c9a3..cf7f041c9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,65 +7,7 @@ { "name": "pangea-chat", "request": "launch", - "type": "dart", - // "args": [ - // "-d", - // "chrome", - // "--web-port", - // "49632" - // ], - }, - { - "name": "pangea-chat (profile mode)", - "request": "launch", - "type": "dart", - "flutterMode": "profile" - }, - { - "name": "pangea-chat (release mode)", - "request": "launch", - "type": "dart", - "flutterMode": "release" - }, - { - "name": "pangea_choreographer", - "cwd": "pangea_packages\\pangea_choreographer", - "request": "launch", "type": "dart" - }, - { - "name": "pangea_choreographer (profile mode)", - "cwd": "pangea_packages\\pangea_choreographer", - "request": "launch", - "type": "dart", - "flutterMode": "profile" - }, - { - "name": "pangea_choreographer (release mode)", - "cwd": "pangea_packages\\pangea_choreographer", - "request": "launch", - "type": "dart", - "flutterMode": "release" - }, - { - "name": "pangea_language", - "cwd": "pangea_packages\\pangea_language", - "request": "launch", - "type": "dart" - }, - { - "name": "pangea_language (profile mode)", - "cwd": "pangea_packages\\pangea_language", - "request": "launch", - "type": "dart", - "flutterMode": "profile" - }, - { - "name": "pangea_language (release mode)", - "cwd": "pangea_packages\\pangea_language", - "request": "launch", - "type": "dart", - "flutterMode": "release" } ] } \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b6ee3c31a..1b2e5b616 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -109,6 +109,20 @@ + + + + + + + + + + diff --git a/assets/pangea/Avatar_1.png b/assets/pangea/Avatar_1.png deleted file mode 100644 index 6bb59107f..000000000 Binary files a/assets/pangea/Avatar_1.png and /dev/null differ diff --git a/assets/pangea/Avatar_2.png b/assets/pangea/Avatar_2.png deleted file mode 100644 index 78733639e..000000000 Binary files a/assets/pangea/Avatar_2.png and /dev/null differ diff --git a/assets/pangea/Avatar_3.png b/assets/pangea/Avatar_3.png deleted file mode 100644 index e38807d8c..000000000 Binary files a/assets/pangea/Avatar_3.png and /dev/null differ diff --git a/assets/pangea/Avatar_4.png b/assets/pangea/Avatar_4.png deleted file mode 100644 index ba23b31d2..000000000 Binary files a/assets/pangea/Avatar_4.png and /dev/null differ diff --git a/assets/pangea/Avatar_5.png b/assets/pangea/Avatar_5.png deleted file mode 100644 index 5deb9c218..000000000 Binary files a/assets/pangea/Avatar_5.png and /dev/null differ diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 8c6e56146..d57061dd6 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 13.0 diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements index 91e1a0719..787b57fb8 100644 --- a/ios/Runner/Runner.entitlements +++ b/ios/Runner/Runner.entitlements @@ -7,6 +7,7 @@ com.apple.developer.associated-domains applinks:app.pangea.chat + applinks:app.staging.pangea.chat com.apple.security.application-groups diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 9f052678f..3617539e3 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -27,7 +27,7 @@ abstract class AppConfig { static const bool allowOtherHomeservers = true; static const bool enableRegistration = true; // #Pangea - static const double toolbarMaxHeight = 225.0; + static const double toolbarMaxHeight = 250.0; static const double toolbarMinHeight = 150.0; static const double toolbarMinWidth = 350.0; static const double toolbarMenuHeight = 50.0; @@ -35,7 +35,7 @@ abstract class AppConfig { static const double toolbarButtonsHeight = 50.0; static const double toolbarSpacing = 8.0; static const double toolbarIconSize = 24.0; - static const double readingAssistanceInputBarHeight = 140.0; + static const double readingAssistanceInputBarHeight = 175.0; static const double reactionsPickerHeight = 48.0; static const double chatInputRowOverlayPadding = 8.0; static const double selectModeInputBarHeight = 0; diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 58da1b0cb..a2487a95a 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'package:flutter/material.dart'; @@ -32,18 +33,21 @@ 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'; +import 'package:fluffychat/pangea/common/utils/p_vguard.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/course_creation/course_invite_page.dart'; import 'package:fluffychat/pangea/course_creation/selected_course_page.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/find_your_people/find_your_people_constants.dart'; -import 'package:fluffychat/pangea/guard/p_vguard.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import 'package:fluffychat/pangea/join_codes/join_with_link_page.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; import 'package:fluffychat/pangea/login/pages/add_course_page.dart'; import 'package:fluffychat/pangea/login/pages/course_code_page.dart'; import 'package:fluffychat/pangea/login/pages/create_pangea_account_page.dart'; @@ -53,9 +57,9 @@ import 'package:fluffychat/pangea/login/pages/new_course_page.dart'; import 'package:fluffychat/pangea/login/pages/public_courses_page.dart'; import 'package:fluffychat/pangea/login/pages/signup.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; -import 'package:fluffychat/pangea/spaces/utils/join_with_link.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_page.dart'; import 'package:fluffychat/widgets/config_viewer.dart'; import 'package:fluffychat/widgets/layouts/empty_page.dart'; import 'package:fluffychat/widgets/layouts/two_column_layout.dart'; @@ -347,7 +351,7 @@ abstract class AppRoutes { child: CachedNetworkImage( width: 250.0, imageUrl: - "${AppConfig.assetsBaseURL}/${FindYourPeopleConstants.sideBearFileName}", + "${AppConfig.assetsBaseURL}/${SpaceConstants.sideBearFileName}", ), ) // Pangea# @@ -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,26 +534,27 @@ 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: [ GoRoute( path: ':construct', pageBuilder: (context, state) { - final construct = ConstructIdentifier.fromString( - state.pathParameters['construct']!, + final construct = ConstructIdentifier.fromJson( + jsonDecode(state.pathParameters['construct']!), ); + return defaultPageBuilder( context, state, - AnalyticsPage( - indicator: ProgressIndicatorEnum.morphsUsed, + ConstructAnalyticsView( construct: construct, + view: ConstructTypeEnum.morph, ), ); }, @@ -561,26 +566,36 @@ 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: [ + GoRoute( + path: 'practice', + pageBuilder: (context, state) { + return defaultPageBuilder( + context, + state, + const VocabPractice(), + ); + }, + ), GoRoute( path: ':construct', pageBuilder: (context, state) { - final construct = ConstructIdentifier.fromString( - state.pathParameters['construct']!, + final construct = ConstructIdentifier.fromJson( + jsonDecode(state.pathParameters['construct']!), ); return defaultPageBuilder( context, state, - AnalyticsPage( - indicator: ProgressIndicatorEnum.wordsUsed, + ConstructAnalyticsView( construct: construct, + view: ConstructTypeEnum.vocab, ), ); }, @@ -592,11 +607,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: [ @@ -609,9 +622,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, + ); + }, ), ), ), @@ -624,11 +640,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, ), @@ -989,30 +1003,7 @@ abstract class AppRoutes { ), ); }, - // #Pangea - // redirect: loggedOutRedirect, - redirect: (context, state) { - String subroute = state.fullPath!.split('roomid').last; - if (state.uri.queryParameters.isNotEmpty) { - final queryString = state.uri.queryParameters.entries - .map((e) => '${e.key}=${e.value}') - .join('&'); - subroute = '$subroute?$queryString'; - } - - final roomId = state.pathParameters['roomid']!; - final room = Matrix.of(context).client.getRoomById(roomId); - if (room != null && room.isSpace) { - return "/rooms/spaces/${room.id}$subroute"; - } - - final parent = room?.firstSpaceParent; - if (parent != null && state.fullPath != null) { - return "/rooms/spaces/${parent.id}/$roomId$subroute"; - } - return loggedOutRedirect(context, state); - }, - // Pangea# + redirect: loggedOutRedirect, routes: [ GoRoute( path: 'search', diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index ba423e4b3..37cbcb133 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -1,6 +1,6 @@ { "@@locale": "ar", - "@@last_modified": "2026-01-06 13:02:07.966839", + "@@last_modified": "2026-01-07 14:27:10.974178", "about": "حول", "@about": { "type": "String", @@ -3263,26 +3263,14 @@ "commandHint_logoutall": "تسجيل الخروج من جميع الأجهزة النشطة", "displayNavigationRail": "عرض شريط التنقل على الهاتف المحمول", "customReaction": "رد فعل مخصص", - "accountInformation": "معلومات الحساب", - "addGroupDescription": "إضافة وصف للمحادثة", - "addNewFriend": "إضافة صديق جديد", - "alreadyHaveAnAccount": "هل لديك حساب بالفعل؟", - "createNewGroup": "إنشاء محادثة جديدة", - "editChatPermissions": "تعديل أذونات المحادثة", "writeAMessageLangCodes": "اكتب بـ {l1} أو {l2}...", "requests": "الطلبات", - "allCorrect": "هذه هي الطريقة التي سأقولها بها! رائع!", - "newWayAllGood": "لم أكن لأقولها هكذا لكن تبدو جيدة!", - "othersAreBetter": "همم، قد تكون هناك طريقة أفضل لقول ذلك.", "holdForInfo": "انقر مع الاستمرار للحصول على معلومات الكلمة.", "greenFeedback": "هذا ما كنت سأضعه!", "yellowFeedback": "همم، يمكنك تجربة ذلك ورؤية إذا كان يعمل! لاستخدام هذه الكلمة، فقط انقر عليها مرة أخرى.", "redFeedback": "لا أعتقد أن هذا صحيح...", "itInstructionsTitle": "يمكنني مساعدتك في الترجمة!", "itInstructionsBody": "يمكنك النقر مع الاستمرار على الخيارات للحصول على معلومات الكلمة.", - "oneday": "آخر 24 ساعة", - "oneweek": "آخر 7 أيام", - "onemonth": "الشهر الماضي", "gaTooltip": "استخدام المستوى 2 مع المساعدة في القواعد", "taTooltip": "استخدام المستوى 2 مع المساعدة في الترجمة", "unTooltip": "آخر", @@ -3292,58 +3280,27 @@ "interactiveTranslatorAllowed": "اختيار الطالب", "interactiveTranslatorRequired": "مطلوب", "notYetSet": "لم يتم التعيين بعد", - "myLearning": "تحليلاتي", "waTooltip": "استخدام المستوى 2 بدون مساعدة", - "changeDateRange": "تغيير نطاق التاريخ", - "classDescription": "الوصف", - "addStudents": "دعوة المستخدمين عبر الرابط أو الرمز", - "copyClassLink": "نسخ رابط الدعوة", - "copyClassCode": "نسخ رمز الدعوة", - "inviteStudentByUserName": "دعوة المستخدمين عبر اسم المستخدم", "languageSettings": "إعدادات اللغة", "interactiveTranslator": "مساعدة في الترجمة", - "shareVideo": "مشاركة الفيديو", - "shareVideoDesc": "قم بتفعيل هذا الخيار للسماح للطلاب بمشاركة الفيديوهات في الدردشات.", - "shareFiles": "مشاركة الملفات", - "selectLanguageLevel": "اختر مستوى اللغة", "noIdenticalLanguages": "يرجى اختيار لغتين أساسيتين مختلفتين", - "iWantALanguagePartnerFrom": "من:", - "worldWide": "عالميًا", - "noResults": "لا توجد نتائج! حاول توسيع نطاق البحث.", "searchBy": "البحث حسب البلد واللغات", - "iWantAConversationPartner": "أريد شريك محادثة الذي", - "iWantALanguagePartnerWhoSpeaks": "يتحدث:", - "iWantALanguagePartnerWhoIsLearning": "يتعلم:", "joinWithClassCode": "انضم إلى الدورة", - "joinWithClassCodeHint": "أدخل رمز الدعوة", - "languageLevelPreA1": "مبتدئ حقيقي (ما قبل A1)", - "languageLevelA1": "مبتدئ (A1)", - "languageLevelA2": "مبتدئ أساسي (A2)", - "languageLevelB1": "متوسط (B1)", - "languageLevelB2": "متوسط مرتفع (B2)", - "languageLevelC1": "متقدم (C1)", - "languageLevelC2": "إتقان (C2)", + "languageLevelPreA1": "مبتدئ منخفض (ما قبل A1)", + "languageLevelA1": "مبتدئ متوسط (A1)", + "languageLevelA2": "مبتدئ عالي (A2)", + "languageLevelB1": "متوسط متوسط (B1)", + "languageLevelB2": "متقدم منخفض (B2)", + "languageLevelC1": "متقدم متوسط (C1)", + "languageLevelC2": "متفوق (C2)", "changeTheNameOfTheClass": "غير الاسم", "changeTheNameOfTheChat": "غير اسم الدردشة", - "askPangeaBot": "اطلب من بوت بانجيا تعريفًا سياقيًا.", "sorryNoResults": "عذرًا، لا توجد نتائج.", "ignoreInThisText": "تجاهل", - "helpMeTranslate": "نعم!", - "needsItShortMessage": "خارج الهدف", "needsItMessage": "انتظر، هذا ليس {targetLanguage}! هل تحتاج إلى مساعدة في الترجمة؟", - "needsIgcMessage": "هذه الرسالة تحتوي على خطأ نحوي.", - "tokenTranslationTitle": "كلمة في لغتك الأساسية.", - "spanTranslationDesc": "اطلع على الترجمات المحتملة أدناه.", - "spanTranslationTitle": "بعض الكلمات في لغتك الأساسية.", - "l1SpanAndGrammarTitle": "خارج اللغة المستهدفة", - "l1SpanAndGrammarDesc": "قد تكون هذه في لغتك الأساسية أو قد تكون خطأ نحوي.", - "otherTitle": "لديك خطأ.", - "otherDesc": "اطلع على التصحيحات المحتملة أدناه.", "countryInformation": "بلدي", - "myLanguages": "لغاتي الأساسية والمستهدفة", "targetLanguage": "اللغة المستهدفة", "sourceLanguage": "اللغة الأساسية", - "languagesISpeak": "اللغات التي أتكلمها", "updateLanguage": "لغاتي", "whatLanguageYouWantToLearn": "ما اللغة التي تريد تعلمها؟", "whatIsYourBaseLanguage": "ما هي لغتك الأساسية؟", @@ -3358,13 +3315,8 @@ "errorDisableLanguageAssistanceUserDesc": "انقر هنا لتحديث إعدادات مساعدة الترجمة ومساعدة القواعد", "errorDisableITClassDesc": "تم إيقاف مساعدة الترجمة للفصل الذي يوجد فيه هذا الدردشة.", "errorDisableIGCClassDesc": "تم إيقاف مساعدة القواعد للفصل الذي يوجد فيه هذا الدردشة.", - "itIsDisabled": "تم تعطيل الترجمة التفاعلية", - "igcIsDisabled": "تم تعطيل فحص القواعد التفاعلي", - "goToLearningSettings": "اذهب إلى إعدادات التعلم", "error405Title": "لم يتم تعيين اللغات", "error405Desc": "يرجى تعيين لغاتك في القائمة الرئيسية > إعدادات التعلم.", - "loginOrSignup": "تسجيل الدخول باستخدام", - "iAgreeToThe": "أوافق على ", "termsAndConditions": "الشروط والأحكام", "andCertifyIAmAtLeast13YearsOfAge": " وأشهد أن عمري لا يقل عن 16 عامًا.", "error502504Title": "واو، هناك الكثير من الطلاب عبر الإنترنت!", @@ -3372,40 +3324,21 @@ "error404Title": "خطأ في الترجمة!", "error404Desc": "بوت بانجيا غير متأكد من كيفية ترجمة ذلك...", "errorPleaseRefresh": "نحن نبحث في الأمر! يرجى إعادة التحميل والمحاولة مرة أخرى.", - "toggleIT": "الترجمة التفاعلية", - "toggleIGC": "فحص القواعد التفاعلي", - "toggleToolSettingsDescription": "هنا يمكنك تبديل إعدادات أدوات اللغة الفردية الخاصة بك.", "connectedToStaging": "متصل ببيئة الاختبار", "learningSettings": "إعدادات التعلم", - "sendVoiceNotes": "إرسال ملاحظات صوتية", - "sendVoiceNotesDesc": "قم بتفعيل هذا للسماح للطلاب بإرسال ملاحظات صوتية في الدردشات.", - "chatTopic": "موضوع الدردشة", - "chatTopicDesc": "حدد موضوع الدردشة", - "inviteStudentByUserNameDesc": "إذا كان لدى الطالب حساب بالفعل، يمكنك البحث عنه.", "participants": "المشاركون", - "almostPerfect": "يبدو صحيحًا! إليك ما كنت سأقوله.", - "prettyGood": "جيد جدًا! إليك ما كنت سأقوله.", - "letMeThink": "همم، لنر كيف فعلت!", "clickMessageTitle": "هل تحتاج إلى مساعدة؟", "clickMessageBody": "انقر على رسالة للحصول على أدوات اللغة مثل الترجمة، التشغيل مرة أخرى والمزيد!", - "understandingMessagesTitle": "التعاريف والترجمات!", - "understandingMessagesBody": "انقر على الكلمات المظللة للتعاريف. ترجم باستخدام خيارات الرسالة (أعلى اليمين).", "allDone": "تم كل شيء!", "vocab": "المفردات", "low": "لدينا أدلة على أن المستخدم لا يفهم هذه الكلمات.", "medium": "تم استخدام هذه الكلمات. من غير الواضح ما إذا كان المستخدم يفهمها تمامًا أم لا.", "high": "لدينا أدلة على أن المستخدم يفهم هذه الكلمات.", - "unknownProficiency": "لم يتم استخدام هذه الكلمات في دردشة بانجيا.", - "changeView": "تغيير العرض.", - "clearAll": "مسح جميع الكلمات؟", - "generateVocabulary": "إنشاء مفردات من العنوان والوصف", - "generatePrompts": "إنشاء مطالبات", "subscribe": "اشترك", "getAccess": "اشترك الآن!", "subscriptionDesc": "الرسائل مجانية! اشترك لفتح الترجمة التفاعلية، فحص القواعد وتحليلات التعلم.", "subscriptionManagement": "إدارة الاشتراك", "currentSubscription": "الاشتراك الحالي", - "changeSubscription": "تغيير اشتراكك", "cancelSubscription": "إلغاء اشتراكك", "selectYourPlan": "اختر خطتك", "subsciptionPlatformTooltip": "يرجى تسجيل الدخول إلى جهازك الأصلي لإدارة خطة اشتراكك", @@ -3414,9 +3347,6 @@ "paymentHistory": "سجل المدفوعات", "emptyChatDownloadWarning": "لا يمكن تنزيل دردشة فارغة", "update": "تحديث", - "updateDesc": "يمكنك الآن تحديث هذا التطبيق من {localVersion} إلى {storeVersion}", - "maybeLater": "ربما لاحقًا", - "mainMenu": "القائمة الرئيسية", "toggleImmersionMode": "وضع الانغماس", "toggleImmersionModeDesc": "عند التفعيل، يتم عرض جميع الرسائل بلغتك المستهدفة. هذا الإعداد مفيد جدًا في تبادلات اللغة.", "itToggleDescription": "ستحدد أداة تعلم اللغة هذه الكلمات في لغتك الأساسية وتساعدك على ترجمتها إلى لغتك المستهدفة. على الرغم من ندرتها، يمكن أن ترتكب الذكاء الاصطناعي أخطاء في الترجمة.", @@ -3431,212 +3361,13 @@ "definitionsToolDescription": "عند التفعيل، يمكن النقر على الكلمات المسطرة باللون الأزرق للحصول على تعريفاتها. انقر على الرسائل للوصول إلى التعريفات.", "translationsToolDescrption": "عند التفعيل، انقر على رسالة وأيقونة الترجمة لرؤية رسالة بلغتك الأساسية.", "welcomeBack": "مرحبًا بعودتك! إذا كنت جزءًا من تجربة 2023-2024، يرجى الاتصال بنا للحصول على اشتراك التجربة الخاص بك. إذا كنت معلمًا قام (أو مؤسستك قامت) بشراء تراخيص لفصلك، اتصل بنا للحصول على اشتراك المعلم.", - "kickAllStudents": "طرد جميع الطلاب", - "kickAllStudentsConfirmation": "هل أنت متأكد من رغبتك في طرد جميع الطلاب؟", - "inviteAllStudents": "دعوة جميع الطلاب", - "inviteAllStudentsConfirmation": "هل أنت متأكد من رغبتك في دعوة جميع الطلاب؟", - "inviteUsersFromPangea": "إضافة مدراء", - "redeemPromoCode": "استرداد رمز الترويج", - "enterPromoCode": "أدخل رمز الترويج", "downloadTxtFile": "تحميل ملف نصي", "downloadCSVFile": "تحميل ملف CSV", "promotionalSubscriptionDesc": "لديك حاليًا اشتراك ترويجي مدى الحياة. راسل support@pangea.chat للمساعدة في تغيير اشتراكك.", "originalSubscriptionPlatform": "تم شراء الاشتراك عبر {purchasePlatform}", "oneWeekTrial": "تجربة لمدة أسبوع واحد", "downloadXLSXFile": "تحميل ملف إكسل", - "abDisplayName": "الأبخازية", - "aaDisplayName": "الأفارية", - "afDisplayName": "الأفريكانية", - "akDisplayName": "الأكان", - "sqDisplayName": "الألبانية", - "amDisplayName": "الأمهرية", - "arDisplayName": "العربية", - "anDisplayName": "الأراجونية", - "hyDisplayName": "الأرمنية", - "asDisplayName": "الأسامية", - "avDisplayName": "الأفارية", - "aeDisplayName": "الأفيستية", - "ayDisplayName": "الأيمارا", - "azDisplayName": "الأذربيجانية", - "bmDisplayName": "البامبارا", - "baDisplayName": "الباشكيرية", - "euDisplayName": "الباسكية", - "beDisplayName": "البيلاروسية", - "bnDisplayName": "بنغالي", - "bhDisplayName": "بهاري", - "biDisplayName": "بيزلاما", - "bsDisplayName": "البوسنية", - "brDisplayName": "البرتون", - "bgDisplayName": "البلغارية", - "myDisplayName": "البورمية", - "caDisplayName": "الكتالونية، الفالنسية", - "chDisplayName": "تشاموروي", - "ceDisplayName": "الشوشانية", - "nyDisplayName": "تشيتشوا، تشيوا، نيانجا", - "zhDisplayName": "الصينية", - "cvDisplayName": "الشوفاشية", - "kwDisplayName": "الكورنيشية", - "coDisplayName": "الكورسيكية", - "crDisplayName": "الكري", - "hrDisplayName": "الكرواتية", - "csDisplayName": "التشيكية", - "daDisplayName": "الدنماركية", - "dvDisplayName": "ديفيهي؛ ديفيهي؛ المالديفية;", - "nlDisplayName": "الهولندية", - "enDisplayName": "الإنجليزية", - "eoDisplayName": "الإسبرانتو", - "etDisplayName": "الإستونية", - "eeDisplayName": "إيوي", - "foDisplayName": "الفارويسية", - "fjDisplayName": "الفجيانية", - "fiDisplayName": "الفنلندية", - "frDisplayName": "الفرنسية", - "ffDisplayName": "فولا؛ فوله؛ بولار؛ بولار", - "glDisplayName": "الغاليكية", - "kaDisplayName": "الجورجية", - "deDisplayName": "الألمانية", - "elDisplayName": "اليونانية الحديثة", - "gnDisplayName": "الغواراني", - "guDisplayName": "الغوجاراتية", - "htDisplayName": "الهائية، الكريولية الهايتية", - "haDisplayName": "الهوسا", - "heDisplayName": "العبرية (الحديثة)", - "hzDisplayName": "هيريرو", - "hiDisplayName": "الهندية", - "hoDisplayName": "هيري موتو", - "huDisplayName": "المجرية", - "iaDisplayName": "Interlingua", - "idDisplayName": "الإندونيسية", - "ieDisplayName": "Interlingue", - "gaDisplayName": "الأيرلندية", - "igDisplayName": "إيغبو", - "ikDisplayName": "إنوبياك", - "ioDisplayName": "إيدو", - "isDisplayName": "الأيسلندية", - "itDisplayName": "الإيطالية", - "iuDisplayName": "إنuktitut", - "jaDisplayName": "اليابانية", - "jvDisplayName": "الجاوية", - "klDisplayName": "كالاليسوت، جرينلاندية", - "knDisplayName": "كانادا", - "krDisplayName": "كانوري", - "ksDisplayName": "الكشميرية", - "kkDisplayName": "الكازاخستانية", - "kmDisplayName": "الخمير", - "kiDisplayName": "كيكيو، جيكيو", - "rwDisplayName": "كينيارواندا", - "kyDisplayName": "القيرغيزية، القيرغيزية", - "kvDisplayName": "كومي", - "kgDisplayName": "الكونغو", - "koDisplayName": "الكورية", - "kuDisplayName": "الكردية", - "kjDisplayName": "كوانياما، كوانياما", - "laDisplayName": "لاتينية", - "lbDisplayName": "اللكسمبورغية، ليتسبرورغش", - "lgDisplayName": "اللغندا", - "liDisplayName": "الليمبورغية، ليمبورغان، ليمبورجر", - "lnDisplayName": "اللينغالا", - "loDisplayName": "لاو", - "ltDisplayName": "الليتوانية", - "luDisplayName": "لوبا-كاتانغا", - "lvDisplayName": "اللاتفية", - "gvDisplayName": "المانكس", - "mkDisplayName": "المقدونية", - "mgDisplayName": "الجزرية", - "msDisplayName": "مالاي", - "mlDisplayName": "مالايالام", - "mtDisplayName": "مالطية", - "miDisplayName": "موري", - "mrDisplayName": "ماراثي (ماراثي)", - "mhDisplayName": "مارشالية", - "mnDisplayName": "منغولي", - "naDisplayName": "ناورو", - "nvDisplayName": "نافاجو، نافاهو", - "nbDisplayName": "النرويجية بوكمال", - "ndDisplayName": "نبديل الشمالي", - "neDisplayName": "النيبالية", - "ngDisplayName": "ندونغا", - "nnDisplayName": "النرويجية نينورسك", - "noDisplayName": "النرويجية", - "iiDisplayName": "نوسو", - "nrDisplayName": "نبديل الجنوبي", - "ocDisplayName": "أوكيتان", - "ojDisplayName": "أوجيبوي، أوجيبا", - "cuDisplayName": "اللغة السلافية القديمة، السلافية الكنسية، السلافية القديمة، البلغارية القديمة، السلافية القديمة", - "omDisplayName": "الأورومو", - "orDisplayName": "الأوريا", - "osDisplayName": "الأوسيتية، الأوسيتيكية", - "paDisplayName": "البنجابية، البنجابية", - "piDisplayName": "بالى", - "faDisplayName": "الفارسية", - "plDisplayName": "البولندية", - "psDisplayName": "البشتو، البشتوية", - "ptDisplayName": "البرتغالية", - "quDisplayName": "الكيشوا", - "rmDisplayName": "الرومانش", - "rnDisplayName": "الكرندي", - "roDisplayName": "الرومانية، المولدوفية، المولدوفية", - "ruDisplayName": "الروسية", - "saDisplayName": "السنسكريتية (سانسكريتا)", - "scDisplayName": "السردينية", - "sdDisplayName": "السندية", - "seDisplayName": "السامي الشمالي", - "smDisplayName": "الساموية", - "sgDisplayName": "سانغو", - "srDisplayName": "صربي", - "gdDisplayName": "الغيلية الاسكتلندية، الغيلية", - "snDisplayName": "شونا", - "siDisplayName": "السنهالية، السنهالية", - "skDisplayName": "السلوفاكية", - "slDisplayName": "السلوفينية", - "soDisplayName": "الصومالية", - "stDisplayName": "السوتو الجنوبية", - "esDisplayName": "الإسبانية", - "suDisplayName": "السوندانية", - "swDisplayName": "السواحيلية", - "ssDisplayName": "السواتي", - "svDisplayName": "السويدية", - "taDisplayName": "التاميلية", - "teDisplayName": "التيلوجوية", - "tgDisplayName": "الطاجيكية", - "thDisplayName": "التايلاندية", - "tiDisplayName": "التغرينية", - "boDisplayName": "التبتية القياسية، التبتية، الوسطى", - "tkDisplayName": "التركمانية", - "tlDisplayName": "التاغالوغية", - "tnDisplayName": "التسوانية", - "toDisplayName": "تونغا (جزر تونغا)", - "trDisplayName": "التركية", - "tsDisplayName": "التسونغا", - "ttDisplayName": "التتارية", - "twDisplayName": "التوي", - "tyDisplayName": "التاهيتيّة", - "ugDisplayName": "الويغورية، الأويغورية", - "ukDisplayName": "الأوكرانية", - "urDisplayName": "الأردية", - "uzDisplayName": "الأوزبكية", - "veDisplayName": "الفيندي", - "viDisplayName": "الفيتنامية", - "voDisplayName": "الفولابوك", - "waDisplayName": "الوالونية", - "cyDisplayName": "الويلزية", - "woDisplayName": "الولوف", - "fyDisplayName": "الفريزية الغربية", - "xhDisplayName": "خوسا", - "yiDisplayName": "يديش", - "yoDisplayName": "يوروبا", - "zaDisplayName": "تشوانغ، تشوانغ", "unkDisplayName": "غير معروف", - "zuDisplayName": "زولو", - "hawDisplayName": "هاواياني", - "hmnDisplayName": "همونغ", - "multiDisplayName": "متعدد", - "cebDisplayName": "سيبيانو", - "dzDisplayName": "زونغخا", - "iwDisplayName": "عبري", - "jwDisplayName": "جاوي", - "moDisplayName": "مولدافي", - "shDisplayName": "صربو-كرواتي", "wwCountryDisplayName": "عالمياً", "afCountryDisplayName": "أفغانستان", "axCountryDisplayName": "جزر آلاند", @@ -3884,41 +3615,25 @@ "yeCountryDisplayName": "اليمن", "zmCountryDisplayName": "زامبيا", "zwCountryDisplayName": "زيمبابوي", - "pay": "دفع", - "allPrivateChats": "الدردشات المباشرة", - "unknownPrivateChat": "دردشة خاصة غير معروفة", + "pay": "إنهاء الشراء", "invitedToSpace": "{user} دعاك للانضمام إلى دورة: {space}! هل ترغب في القبول؟", - "declinedInvitation": "تم رفض الدعوة", - "acceptedInvitation": "تم قبول الدعوة", "youreInvited": "📩 أنت مدعو!", "invitedToChat": "{user} دعاك للانضمام إلى دردشة: {name}! هل ترغب في القبول؟", "monthlySubscription": "شهريًا", "yearlySubscription": "سنويًا", "defaultSubscription": "اشتراك دردشة بانجيا", "freeTrial": "نسخة تجريبية مجانية", - "grammarAnalytics": "تحليلات الأخطاء", "total": "المجموع: ", "noDataFound": "لم يتم العثور على بيانات", - "promoSubscriptionExpirationDesc": "اشتراكك الحالي ترويجي وينتهي في {expiration}. تواصل مع support@pangea.chat للمساعدة في تغيير اشتراكك.", - "emptyChatNameWarning": "يرجى إدخال اسم لهذه الدردشة", "blurMeansTranslateTitle": "لماذا تم تشويش الرسالة؟", "blurMeansTranslateBody": "بينما وضع الانغماس قيد التشغيل، سيتم تمويه الرسائل المرسلة بلغتك الأساسية أثناء ترجمتها بواسطة Pangea Bot إلى لغتك المستهدفة. يمكن تبديل وضع الانغماس في إعدادات الفردية والدورات.", - "someErrorTitle": "هم، هناك شيء غير صحيح", - "someErrorBody": "قد يكون خطأ أو شيء في لغتك الأساسية.", "bestCorrectionFeedback": "هذا صحيح!", "distractorFeedback": "ليس تمامًا صحيحًا.", "bestAnswerFeedback": "هذا صحيح!", "definitionDefaultPrompt": "ماذا يعني هذا الكلمة؟", "practiceDefaultPrompt": "ما هو أفضل إجابة؟", "correctionDefaultPrompt": "ما هو البديل الأفضل؟", - "itStartDefaultPrompt": "هل تريد المساعدة في الترجمة؟", - "lockedChatWarning": "🔒 تم قفل هذه الدردشة", - "lockChat": "قفل الدردشة", - "suggestToChat": "اقترح هذه الدردشة", - "suggestToChatDesc": "ستظهر الدردشات المقترحة في قوائم الدردشة", "acceptSelection": "قبول التصحيح", - "acceptSelectionAnyway": "استخدام هذا على أي حال", - "makingActivity": "إنشاء نشاط", "why": "لماذا؟", "definition": "تعريف", "exampleSentence": "جملة مثال", @@ -3926,128 +3641,55 @@ "reportMessageTitle": "قام {reportingUserId} بالإبلاغ عن رسالة من {reportedUserId} في الدردشة {roomName}", "reportMessageBody": "الرسالة: {reportedMessage}\nالسبب: {reason}", "noTeachersFound": "لم يتم العثور على معلمين للإبلاغ إليهم", - "viewArchive": "عرض الأرشيف", "trialExpiration": "تنتهي فترة التجربة المجانية الخاصة بك في {expiration}", "freeTrialDesc": "يستفيد المستخدمون الجدد من تجربة مجانية لمدة أسبوع على Pangea Chat", "activateTrial": "تجربة مجانية لمدة 7 أيام", "successfullySubscribed": "لقد اشتركت بنجاح!", "clickToManageSubscription": "انقر هنا لإدارة اشتراكك.", - "errorGettingAudio": "خطأ في الحصول على الصوت. يرجى التحديث والمحاولة مرة أخرى.", "signUp": "اشترك", "pleaseChooseAtLeastChars": "يرجى اختيار ما لا يقل عن {min} أحرف.", "noEmailWarning": "يرجى إدخال عنوان بريد إلكتروني صالح. وإلا، فلن تتمكن من إعادة تعيين كلمة المرور الخاصة بك. إذا لم ترغب في ذلك، اضغط مرة أخرى على الزر للمتابعة.", "pleaseEnterValidEmail": "يرجى إدخال عنوان بريد إلكتروني صالح.", "pleaseChooseAUsername": "يرجى اختيار اسم مستخدم", - "chooseAUsername": "اختر اسم مستخدم", "define": "تعريف", "listen": "استمع", - "addConversationBot": "تمكين روبوت المحادثة", - "addConversationBotDesc": "أضف روبوتًا إلى هذه الدردشة", - "convoBotSettingsDescription": "تحرير موضوع المحادثة والصعوبة", - "enterAConversationTopic": "أدخل موضوع المحادثة", - "conversationTopic": "موضوع المحادثة", - "enableModeration": "تمكين الإشراف", - "enableModerationDesc": "تمكين الإشراف التلقائي لمراجعة الرسائل قبل إرسالها", - "conversationLanguageLevel": "ما هو مستوى لغة هذه المحادثة؟", - "showDefinition": "عرض التعريف", - "subscriptionPopupTitle": "قد تحتوي هذه الجملة على خطأ نحوي...", - "subscriptionPopupDesc": "اشترك اليوم لفتح الترجمة وتصحيح القواعد!", - "seeOptions": "عرض الخيارات", - "continuedWithoutSubscription": "متابعة بدون الاشتراك", "trialPeriodExpired": "انتهت فترة التجربة الخاصة بك", - "selectToDefine": "انقر على أي كلمة لرؤية تعريفها!", "translations": "الترجمات", "messageAudio": "صوت الرسالة", "definitions": "التعريفات", "subscribedToUnlockTools": "اشترك لفتح الترجمة التفاعلية وفحص القواعد، تشغيل الصوت، أنشطة الممارسة الشخصية، وتحليلات التعلم!", "translationTooltip": "ترجمة", - "audioTooltip": "تشغيل الصوت", "speechToTextTooltip": "نسخ النص", - "certifyAge": "أشهد أن عمري يزيد عن {age} سنة", "kickBotWarning": "إزالة بوت بانجيا من الدردشة سيؤدي إلى حذف روبوت المحادثة من هذه الدردشة.", - "joinToView": "انضم إلى هذه الغرفة لعرض التفاصيل", "refresh": "تحديث", - "autoPlayTitle": "تشغيل تلقائي للرسائل", - "autoPlayDesc": "عند التفعيل، سيتم تشغيل صوت النص إلى كلام للرسائل تلقائيًا عند اختيارها.", "messageAnalytics": "تحليلات الرسائل", "words": "كلمات", "score": "النتيجة", "accuracy": "الدقة", "points": "نقاط", "noPaymentInfo": "لا حاجة لمعلومات الدفع!", - "conversationBotModeSelectDescription": "نشاط الدردشة", - "conversationBotModeSelectOption_discussion": "نقاش", - "conversationBotModeSelectOption_custom": "مخصص", - "conversationBotModeSelectOption_conversation": "محادثة", - "conversationBotModeSelectOption_textAdventure": "مغامرة نصية", - "conversationBotModeSelectOption_storyGame": "لعبة القصة", - "conversationBotDiscussionZone_title": "إعدادات النقاش", - "conversationBotDiscussionZone_discussionTopicLabel": "موضوع النقاش", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "حدد موضوع النقاش", - "conversationBotDiscussionZone_discussionKeywordsLabel": "كلمات مفتاحية للنقاش", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "حدد كلمات مفتاحية للنقاش", - "conversationBotDiscussionZone_discussionKeywordsHintText": "قائمة كلمات مفتاحية مفصولة بفواصل لتوجيه النقاش", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "إرسال تذكير النقاش وفق جدول زمني", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "الساعات بين تذكيرات النقاش", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "الرد على رد الفعل ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "رد الفعل لإرسال تذكير النقاش", - "conversationBotCustomZone_title": "إعدادات مخصصة", - "conversationBotCustomZone_customSystemPromptLabel": "موجه النظام", - "conversationBotCustomZone_customSystemPromptPlaceholder": "حدد موجه نظام مخصص", - "conversationBotCustomZone_customSystemPromptEmptyError": "موجه نظام مخصص مفقود", - "botConfig": "إعدادات البوت والنشاط", - "botConfigNoPermissionTitle": "لا إذن", - "botConfigNoPermissionMessage": "اتصل بمسؤول الغرفة لتغيير إعدادات البوت", - "addConversationBotDialogTitleInvite": "تأكيد دعوة بوت المحادثة", - "addConversationBotButtonInvite": "دعوة", - "addConversationBotDialogInviteConfirmation": "دعوة", - "addConversationBotButtonTitleRemove": "تأكيد إزالة بوت المحادثة", - "addConversationBotButtonRemove": "إزالة", - "addConversationBotDialogRemoveConfirmation": "إزالة", - "conversationBotConfigConfirmChange": "تأكيد", - "conversationBotStatus": "دعوة البوت", - "conversationBotTextAdventureZone_title": "مغامرة نصية", - "conversationBotTextAdventureZone_instructionLabel": "تعليمات مدير اللعبة", - "conversationBotTextAdventureZone_instructionPlaceholder": "حدد تعليمات مدير اللعبة", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "مفقود تعليمات مدير اللعبة", - "studentAnalyticsNotAvailable": "بيانات الطالب غير متاحة حالياً", - "roomDataMissing": "قد تكون بعض البيانات مفقودة من الغرف التي لست عضوا فيها.", "updatePhoneOS": "قد تحتاج إلى تحديث إصدار نظام تشغيل جهازك.", "wordsPerMinute": "كلمات في الدقيقة", "autoIGCToolName": "تشغيل مساعدة الكتابة Pangea تلقائيًا", "autoIGCToolDescription": "تشغيل مساعدة القواعد والترجمة في دردشة Pangea تلقائيًا قبل إرسال رسالتي.", - "runGrammarCorrection": "فحص الرسالة", - "grammarCorrectionFailed": "مشكلات يجب معالجتها", - "grammarCorrectionComplete": "يبدو جيدًا!", "tooltipInstructionsTitle": "لست متأكدًا مما يفعله ذلك؟", "tooltipInstructionsMobileBody": "اضغط مع الاستمرار على العناصر لعرض تلميحات الأدوات.", "tooltipInstructionsBrowserBody": "مرر فوق العناصر لعرض تلميحات الأدوات.", "chatCapacity": "سعة الدردشة", "roomFull": "هذه الغرفة ممتلئة بالفعل.", - "topicNotSet": "لم يتم تعيين الموضوع.", - "chatCapacityNotSet": "هذه الدردشة ليس لها حد سعة.", "chatCapacityHasBeenChanged": "تم تغيير سعة الدردشة", "chatCapacitySetTooLow": "يجب أن تكون سعة الدردشة على الأقل {count}.", "chatCapacityExplanation": "تحدد سعة الدردشة عدد الأعضاء المسموح بهم في الدردشة.", - "chatExceedsCapacity": "تتجاوز هذه الدردشة سعتها.", "tooManyRequest": "طلبات كثيرة جدًا، يرجى المحاولة مرة أخرى لاحقًا.", "enterNumber": "يرجى إدخال قيمة رقم صحيح.", "buildTranslation": "قم ببناء ترجمتك من الخيارات أعلاه", - "nonexistentSelection": "الاختيار لم يعد موجودًا.", - "changeAnalyticsLanguage": "تغيير لغة التحليلات", "practice": "ممارسة", "noLanguagesSet": "لم يتم تعيين لغات", - "noActivitiesFound": "هذا يكفي الآن! عد لاحقًا للمزيد.", - "hintTitle": "تلميح:", "speechToTextBody": "بالنسبة للرسائل الصوتية، يمكنك رؤية نص بالإضافة إلى درجة كلمات في الدقيقة للمتحدث.", "versionNotFound": "لم يتم العثور على الإصدار", "fetchingVersion": "جارٍ جلب الإصدار...", "versionFetchError": "خطأ في جلب الإصدار", "versionText": "الإصدار: {version}+{buildNumber}", - "languageButtonLabel": "اللغة: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "تشغيل الترجمة تلقائيًا", - "interactiveTranslatorAutoPlayDesc": "يبدأ المترجم التفاعلي بدون طلب منك.", - "changeAnalyticsView": "تغيير عرض التحليلات", "l1TranslationBody": "الرسائل بلغتك الأساسية لن تُترجم.", "deleteSubscriptionWarningTitle": "لديك اشتراك نشط", "deleteSubscriptionWarningBody": "حذف حسابك لن يلغي اشتراكك تلقائيًا.", @@ -4055,9 +3697,7 @@ "error520Title": "يرجى المحاولة مرة أخرى.", "error520Desc": "عذرًا، لم نتمكن من فهم رسالتك...", "wordsUsed": "الكلمات المستخدمة", - "errorTypes": "أنواع الأخطاء", "level": "المستوى", - "canceledSend": "تم إلغاء الإرسال", "morphsUsed": "الأشكال المستخدمة", "translationChoicesBody": "انقر مع الاستمرار على خيار للحصول على تلميح.", "grammar": "القواعد", @@ -4067,7 +3707,6 @@ "reportContentIssueTitle": "الإبلاغ عن مشكلة في المحتوى", "feedback": "ملاحظات اختيارية", "reportContentIssueDescription": "أوه لا! يمكن للذكاء الاصطناعي تسهيل تجارب التعلم الشخصية ولكن... أيضًا يهلوس. يرجى تقديم أي ملاحظات لديك وسنحاول مرة أخرى.", - "changeContent": "أوه لا! يمكن للذكاء الاصطناعي تسهيل تجارب التعلم الشخصية ولكن... أيضًا يهلوس. ماذا يجب أن يكون؟", "clickTheWordAgainToDeselect": "انقر على الكلمة المحددة لإلغاء تحديدها.", "l2SupportNa": "غير متوفر", "l2SupportAlpha": "ألفا", @@ -4301,7 +3940,6 @@ "grammarCopySPC": "الخصوصية", "grammarCopyPARTTYPE": "نوع الجزء", "grammarCopyINTREL": "استفهامي-نسبي", - "grammarCopyNUMFORMpsor": "رقم المالك", "grammarCopyUNKNOWN": "غير معروف", "grammarCopyNUMBERPSOR": "رقم المالك", "grammarCopyPOSS": "ملكية", @@ -4347,27 +3985,14 @@ "grammarCopyVOICEdir": "مباشر", "grammarCopyVOICEinv": "عكسي", "grammarCopyVOICErcp": "متبادل", - "enterPrompt": "يرجى إدخال موجه النظام", - "selectBotLanguage": "اختر لغة البوت", - "chooseVoice": "اختر صوتًا", - "enterLanguageLevel": "يرجى إدخال مستوى اللغة", - "enterDiscussionTopic": "يرجى إدخال موضوع النقاش", - "selectBotChatMode": "اختر وضع الدردشة", - "messageNotInTargetLang": "الرسالة غير باللغة المستهدفة", "other": "آخر", "levelShort": "المستوى {level}", - "botModeValidation": "يرجى اختيار وضع الدردشة", "clickBestOption": "اختر أفضل الخيارات لترجمة رسالتك!", "completeActivitiesToUnlock": "أكمل نشاطًا واحدًا على الأقل لفتح الترجمة!", - "botSettingsSubtitle": "دعوة البوت لإدارة نشاط الدردشة", - "invitePeople": "دعوة المستخدمين", "noCapacityLimit": "بدون حد سعة", "downloadGroupText": "تحميل نص المجموعة", "notificationsOn": "الإشعارات مفعلة", "notificationsOff": "إيقاف الإشعارات", - "chatCanBeFoundViaSearch": "يمكن العثور على الدردشة عبر البحث", - "requireCodeToJoin": "يتطلب رمز للانضمام", - "canFindInSearch": "يمكن العثور عليه في البحث", "addChat": "إضافة دردشة", "createChatAndInviteUsers": "إنشاء دردشة ودعوة المستخدمين", "updatedNewSpaceDescription": "تسمح الدورات بتوحيد محادثاتك وبناء مجتمعات خاصة أو عامة.", @@ -4404,39 +4029,19 @@ "constructUseCollected": "تم الجمع في الدردشة", "constructUseNanDesc": "غير قابل للتطبيق", "xpIntoLevel": "{currentXP} / {maxXP} نقطة خبرة", - "signInWithUsername": "تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور", - "registrationEmailMessage": "يرجى التحقق من بريدك الإلكتروني عبر الرابط المرسل هناك. في بعض الحالات، قد يستغرق وصول البريد الإلكتروني حتى 5 دقائق. يرجى أيضًا التحقق من مجلد البريد العشوائي الخاص بك.", "enableTTSToolName": "تم تفعيل تحويل النص إلى كلام", "enableTTSToolDescription": "السماح للتطبيق بتوليد مخرجات تحويل النص إلى كلام لأجزاء من النص بلغتك المستهدفة.", - "couldNotFindTTS": "لم نتمكن من العثور على محرك تحويل النص إلى كلام للغة المستهدفة الحالية الخاصة بك.", - "ttsInstructionsHyperlink": "انقر هنا لعرض التعليمات لتنزيل صوت جديد على جهازك.", - "createAnAccount": "إنشاء حساب", - "signIn": "تسجيل الدخول", - "signUpWithEmail": "التسجيل باستخدام البريد الإلكتروني", - "signUpWithGoogle": "التسجيل باستخدام جوجل", - "signUpWithApple": "التسجيل باستخدام أبل", "yourUsername": "اسم المستخدم الخاص بك", "yourEmail": "البريد الإلكتروني الخاص بك", - "pleaseEnterAnEmail": "يرجى إدخال عنوان بريد إلكتروني", - "signInWithGoogle": "تسجيل الدخول باستخدام جوجل", - "signInWithApple": "تسجيل الدخول باستخدام أبل", - "chooseYourAvatar": "اختر صورتك الرمزية", "iWantToLearn": "أريد أن أتعلم", - "letsStart": "لنبدأ", - "pleaseAgreeToTOS": "يرجى الموافقة على الشروط والأحكام", "pleaseEnterEmail": "يرجى إدخال عنوان بريد إلكتروني صالح.", - "pleaseSelectALanguage": "يرجى اختيار لغة", "myBaseLanguage": "لغتي الأساسية", - "clickWordsInstructions": "🧻 انقر على أي كلمة للتفاصيل. 🤐", - "chooseBestDefinition": "ما معنى هذه الكلمة؟", "meaningSectionHeader": "المعنى:", "formSectionHeader": "الأشكال المستخدمة في الدردشات:", - "noEmojiSelectedTooltip": "لم يتم اختيار رمز تعبيري", "writingExercisesTooltip": "الكتابة", "listeningExercisesTooltip": "الاستماع", "readingExercisesTooltip": "القراءة", "meaningNotFound": "لم يتم العثور على المعنى.", - "formsNotFound": "لم يتم العثور على الأشكال.", "chooseBaseForm": "اختر النموذج الأساسي", "notTheCodeError": "عذرًا، هذا ليس الرمز!", "totalXP": "إجمالي نقاط الخبرة", @@ -4476,9 +4081,6 @@ "pickAnEmoji": "ما هو رمز التعبير المفضل لديك لـ '{lemma}'؟", "chooseLemmaMeaningInstructionsBody": "طابق المعاني مع الكلمات في الرسالة!", "doubleClickToEdit": "انقر نقرًا مزدوجًا للتحرير.", - "removeFeature": "إزالة {feature}", - "chooseCorrectLabel": "اختر التسمية الصحيحة.", - "levelPopupTitle": "تهانينا على الوصول إلى\nالمستوى {level}", "activityPlannerTitle": "مخطط النشاط", "topicLabel": "الموضوع", "topicPlaceholder": "اختر موضوعًا...", @@ -4486,7 +4088,6 @@ "modePlaceholder": "اختر وضعًا...", "learningObjectiveLabel": "هدف التعلم", "learningObjectivePlaceholder": "اختر هدف التعلم...", - "mediaLabel": "وسائط يجب على المتعلمين مشاركتها", "languageOfInstructionsLabel": "لغة تعليمات النشاط", "targetLanguageLabel": "اللغة المستهدفة", "cefrLevelLabel": "مستوى CEFR", @@ -4501,20 +4102,15 @@ "instructions": "تعليمات", "numberOfLearners": "عدد المتعلمين", "mustBeInteger": "يجب أن يكون عددًا صحيحًا مثل 1، 2، 3، ...", - "noLemmasFound": "لا توجد مفردات بأكثر من {xp} نقطة خبرة. استمر في الممارسة!", "constructUsePvmDesc": "تم الإنتاج في رسالة صوتية", - "lockedMorphFeature": "في انتظار أن يتم فتحه", "leaveSpaceDescription": "عند مغادرة الدورة، ستترك جميع الدردشات داخلها. سيلاحظ المستخدمون الآخرون أنك غادرت الدورة.", - "whatIsLemma": "ما هو اللمّة؟", "constructUseCorMmDesc": "تصحيح معنى الرسالة", "constructUseIncMmDesc": "معنى رسالة غير صحيح", "constructUseIgnMmDesc": "معنى رسالة تم تجاهلها", "clickForMeaningActivity": "انقر هنا لتحدي المعنى", "meaning": "المعنى", "chatWith": "مجموعة مع {displayname}", - "slightlyOffensive": "مسيء قليلاً", "clickOnEmailLink": "يرجى النقر على الرابط في البريد الإلكتروني ثم المتابعة.\n\nتحقق من مجلد البريد العشوائي إذا لم تصل الرسالة.", - "whoIsAllowedToJoinThisChat": "من المسموح له بالانضمام إلى هذه الدردشة", "dontForgetPassword": "لا تنس كلمة المرور الخاصة بك!", "enableAutocorrectToolName": "تمكين التصحيح التلقائي للجهاز", "enableAutocorrectDescription": "إذا كان جهازك يدعم اللغة التي تتعلمها، يمكنك تفعيل التصحيح التلقائي للجهاز لإصلاح الأخطاء الشائعة أثناء الكتابة.", @@ -4542,48 +4138,26 @@ "autocorrectNotAvailable": "للأسف، منصتك غير مدعومة حاليًا لهذه الميزة. ترقب المزيد من التطوير!", "pleaseUpdateApp": "يرجى تحديث التطبيق للمتابعة.", "chooseEmojiInstructionsBody": "طابق الرموز التعبيرية مع الكلمات التي تمثلها بشكل أفضل. لا تقلق! لا توجد نقاط سلبية للاختلاف. 😅", - "pickAnEmojiFor": "اختر رمز تعبيري لـ {lemma}", "analyticsVocabListBody": "هذه كل مفرداتك! مع كسبك لنقاط الخبرة لكل كلمة، ستتطور من بذرة إلى زهرة كاملة. انقر على أي كلمة لرؤية مزيد من التفاصيل.", "morphAnalyticsListBody": "هذه جميع مفاهيم القواعد في اللغة التي تتعلمها! ستفتحها عندما تصادفها أثناء الدردشة. انقر للحصول على التفاصيل.", "knockSpaceSuccess": "لقد طلبت الانضمام إلى هذه الدورة! سيرد مسؤول على طلبك عندما يتلقاه 😊", - "joinByCode": "انضم بواسطة الرمز", "chooseWordAudioInstructionsBody": "استمع إلى الرسالة الكاملة. ثم قم بمطابقة الأصوات مع الكلمات.", "chooseMorphsInstructionsBody": "انقر على قطع الألغاز لأسئلة القواعد!", - "inviteAndLaunch": "دعوة وإطلاق", - "createOwnChat": "أنشئ دردشتك الخاصة", "pleaseEnterInt": "يرجى إدخال رقم", "home": "الصفحة الرئيسية", "join": "انضم", "readingAssistanceOverviewBody": "انقر على الأزرار أدناه للألعاب الصغيرة لمطابقة الرموز التعبيرية، الأصوات، معاني الكلمات، ومفاهيم القواعد. أو انقر على أي كلمة للحصول على التفاصيل.", - "learnByTexting": "تعلم عن طريق الرسائل النصية", - "levelSummaryTrigger": "عرض الملخص", "levelSummaryPopupTitle": "ملخص المستوى {level}", - "referFriends": "احصل على أصدقاء", - "referFriendDialogTitle": "ادعُ صديقًا لمحادثتك", - "referFriendDialogDesc": "هل لديك صديق متحمس لتعلم لغة جديدة معك؟ ثم انسخ وأرسل رابط الدعوة هذا للانضمام وبدء الدردشة معك اليوم.", - "youUnlocked": "لقد فتحت", "resetInstructionTooltipsTitle": "إعادة تعيين تلميحات التعليمات", "resetInstructionTooltipsDesc": "انقر لعرض تلميحات التعليمات مثل للمستخدم الجديد تمامًا.", "selectForGrammar": "اختر أيقونة القواعد للنشاطات والتفاصيل.", - "newChatActivityTitle": "هل تريد إضافة نشاط ممتع؟", - "newChatActivityDesc": "اجعل كل دردشة جماعية مغامرة مع مخطط النشاط! حدد مواضيع وأهداف جذابة للمجموعة، وأحِي المحادثات بصور مذهلة. أطلق العنان لمناقشات خيالية وابقِ المرح يتدفق بسهولة!", - "exploreMore": "استكشف المزيد", "randomize": "عشوائي", "clear": "مسح", "makeYourOwnActivity": "أنشئ نشاطك الخاص", "featuredActivities": "المميز", - "goToChat": "اذهب إلى الدردشة", "save": "حفظ", - "selectActivity": "اختر النشاط", - "wordFocusListeningMultipleChoice": "أي صوت يتطابق مع الكلمة؟", "startChat": "ابدأ دردشة", "translationProblem": "مشكلة في الترجمة", - "perfectTranslation": "ترجمة مثالية!", - "greatJobTranslation": "عمل رائع في هذه الترجمة!", - "goodJobTranslation": "عمل جيد في هذه الترجمة.", - "makingProgress": "أنت تحرز تقدمًا!", - "keepPracticing": "واصل الممارسة!", - "niceJob": "عمل رائع!", "askToJoin": "اطلب الانضمام", "emptyChatWarningTitle": "الدردشة فارغة", "emptyChatWarningDesc": "لم تدعُ أحدًا إلى دردشتك. انتقل إلى إعدادات الدردشة لدعوة جهات الاتصال الخاصة بك أو البوت. يمكنك أيضًا القيام بذلك لاحقًا.", @@ -4602,8 +4176,6 @@ "languageLevelC2Desc": "أستطيع فهم تقريبًا كل شيء يُسمع أو يُقرأ والتعبير عن نفسي بطلاقة ودقة.", "newVocab": "مفردات جديدة", "newGrammar": "مفاهيم قواعد جديدة", - "congratulationsOnReaching": "تهانينا على الوصول إلى المستوى {level}!", - "seeDetails": "عرض التفاصيل", "choosePracticeMode": "انقر على أحد الأزرار أعلاه لبدء نشاط التدريب", "ban": "حظر", "unban": "إلغاء الحظر", @@ -4617,8 +4189,6 @@ "timesUsedWithAssistance": "مرات الاستخدام بمساعدة", "shareInviteCode": "مشاركة رمز الدعوة: {code}", "leaderboard": "لوحة المتصدرين", - "welcomeUser": "مرحبًا {user}", - "joinSpaceOnboardingDesc": "هل لديك رمز دعوة أو رابط لدورة عامة؟", "skipForNow": "تخطي الآن", "permissions": "الأذونات", "spaceChildPermission": "من يمكنه إضافة محادثات جديدة إلى هذه الدورة", @@ -4626,12 +4196,8 @@ "defaultOption": "افتراضي", "deleteChatDesc": "هل أنت متأكد أنك تريد حذف هذه الدردشة؟ سيتم حذفها لجميع المشاركين ولن تتوفر جميع الرسائل داخل الدردشة للممارسة أو تحليلات التعلم.", "deleteSpaceDesc": "سيتم حذف الدورة وأي دردشات مختارة لجميع المشاركين ولن تتوفر جميع الرسائل داخل الدردشة للممارسة أو تحليلات التعلم. لا يمكن التراجع عن هذا الإجراء.", - "chatWithActivities": "الدردشة مع الأنشطة", "launch": "إطلاق", - "launchActivityToChats": "إطلاق النشاط على الدردشات", "searchChats": "البحث في الدردشات", - "selectChats": "اختر الدردشات", - "selectChatToStart": "اكتمل! اختر دردشة للبدء", "maxFifty": "حد أقصى 50", "configureSpace": "تكوين الدورة", "pinMessages": "تثبيت الرسائل", @@ -4645,9 +4211,7 @@ "announcements": "الإعلانات", "activities": "الأنشطة", "access": "الوصول", - "botSettings": "إعدادات الروبوت", "activitySuggestionTimeoutMessage": "نحن نعمل جاهدين لتوليد المزيد من الأنشطة لك، يرجى العودة بعد دقيقة", - "accessSettingsWarning": "عذرًا! يبدو أنك لا تملك إذنًا لضبط قواعد الوصول لهذه الغرفة. يجب عليك التحقق من هذه القواعد للتأكد من أنها تلبي احتياجاتك والتحدث إلى مسؤول الغرفة إذا كنت بحاجة إلى تغييرها", "howSpaceCanBeFound": "كيفية العثور على هذه الدورة", "private": "خاص", "cannotBeFoundInSearch": "لا يمكن العثور عليها في البحث", @@ -4660,16 +4224,6 @@ "canBeFoundViaKnock": "• طلب الانضمام وموافقة المسؤول", "youHaveLeveledUp": "لقد ارتقيت للمستوى الأعلى!", "sendActivities": "إرسال الأنشطة", - "getStarted": "ابدأ", - "getStartedBotChatDesc": "الدردشة مع الذكاء الاصطناعي مكان رائع للبدء، وتوفر أدوات القراءة والكتابة والاستماع والتحدث من بانجيا سهولة في الاستخدام!", - "getStartedCommunitiesDesc": "التعلم مع المجتمع هو المكان الذي يتألق فيه دردشة بانجيا!\nيمكنك الانضمام إلى صفك، أو العثور على دورة، أو حتى إنشاء الخاصة بك!", - "getStartedFriendsDesc": "هل لديك صديق يرغب في التعلم معك؟", - "getStartedBotChatComplete": "عمل رائع! أنت تتحدث مع الروبوت!", - "getStartedCommunitiesComplete": "رائع، لقد انضممت إلى دورة!", - "getStartedComplete": "لقد أكملت هذا القسم!\nاستمر في استكشاف ميزاتنا المذهلة من خلال الدردشة مع الأصدقاء!", - "getStartedFriendsComplete": "يا هلا! لديك أصدقاء! 😉", - "getStartedBotChatButton": "ابدأ الدردشة!", - "getStartedFriendsButton": "الدردشة مع صديق", "groupChat": "محادثة جماعية", "directMessage": "رسالة مباشرة", "newDirectMessage": "رسالة مباشرة جديدة", @@ -4685,7 +4239,6 @@ "mySavedActivities": "أنشطتي المحفوظة", "noSavedActivities": "لا توجد أنشطة محفوظة", "saveActivity": "حفظ هذا النشاط", - "yourSavedActivities": "الأنشطة المحفوظة", "failedToPlayVideo": "فشل في تشغيل الفيديو", "done": "تم", "inThisSpace": "في هذه الدورة", @@ -4724,37 +4277,27 @@ "maximumActivityParticipants": "يمكن أن يضم كل نشاط حد أقصى من {count} مشارك/مشاركين.", "pending": "قيد الانتظار", "inactive": "غير نشط", - "unjoinedActivityMessage": "هل تريد المشاركة؟ اختر دورًا مفتوحًا!\nأو تواصل واستمتع بالمشاهدة!", - "fullActivityMessage": "لا تتردد في مشاهدة العرض! بينما لا توجد أدوار مفتوحة للمشاركة، يمكنك عرض الدردشة!", "confirmRole": "تأكيد الدور", "openRoleLabel": "مفتوح", "joinedTheActivity": "👋 {username} انضم كـ {role}", "finishedTheActivity": "🎯 {username} أنهى هذا النشاط", - "endActivityTitle": "لقد أنهيت", - "endActivityDesc": "هل أكملت الأهداف؟\nهذه تأكيد على أنك تبتعد عن المراسلة. لكن لا تقلق، المتعة مستمرة في الدردشة! تواصل واستمتع بالمشاهدة حتى يضغط الجميع على 'تم'.", "archiveToAnalytics": "أضف إلى أنشطتي المكتملة", "activitySummaryError": "ملخصات النشاط غير متوفرة", "requestSummaries": "طلب الملخصات", - "loadingActivitySummary": "جارٍ تحميل ملخص النشاط...", "generatingNewActivities": "أنت المستخدم الأول لهذا الزوج من اللغات! يرجى الانتظار دقيقة، نحن نعد أنشطة خصيصًا لك.", - "requestAccessTitle": "هل تريد طلب الوصول إلى عرض تحليلات المشاركين؟", + "requestAccessTitle": "طلب الوصول إلى التحليلات؟", "requestAccessDesc": "هل تود طلب الوصول لعرض تحليلات المشاركين؟\n\nإذا وافق المشاركون، سيتمكن مسؤولو هذه الدورة من عرض:\n • إجمالي المفردات\n • إجمالي مفاهيم القواعد\n • إجمالي جلسات النشاط المكتملة\n • المفاهيم النحوية المستخدمة، بشكل صحيح وخاطئ\n\nلن يتمكنوا من عرض:\n • الرسائل في الدردشات خارج الدورة\n • قائمة المفردات", "requestAccess": "طلب الوصول ({count})", "analyticsInactiveTitle": "لم يمكن إرسال الطلبات للمستخدمين غير النشطين", "analyticsInactiveDesc": "المستخدمون غير النشطين الذين لم يسجلوا الدخول منذ تقديم هذه الميزة لن يروا طلبك.\n\nسيظهر زر الطلب بمجرد عودتهم. يمكنك إعادة إرسال الطلب لاحقًا بالنقر على زر الطلب تحت اسمهم عندما يكون متاحًا.", "accessRequestedTitle": "طلب الوصول إلى التحليلات", - "accessRequestedDesc": "يطلب مسؤولو “{space}” عرض تحليلات تعلمك.\n\nإذا وافقت، سيتمكن مسؤولو هذه الدورة من عرض:\n • إجمالي المفردات\n • إجمالي مفاهيم القواعد\n • إجمالي جلسات النشاط المكتملة\n • المفاهيم النحوية المحددة المستخدمة بشكل صحيح وخاطئ\n\nلن يتمكنوا من عرض:\n • الرسائل في الدردشات خارج الدورة\n • قائمة المفردات", - "allowAccess": "السماح بالوصول", - "denyAccess": "رفض الوصول", + "accessRequestedDesc": "المديرون المطلوبون: {admin} \n\nالمديرون من “{space}” يطلبون عرض تحليلات التعلم الخاصة بك.\n\nإذا كنت توافق، سيتمكنون من عرض:\n • إجمالي المفردات\n • إجمالي مفاهيم القواعد\n • إجمالي جلسات النشاط المكتملة\n • مفاهيم القواعد المحددة المستخدمة، بشكل صحيح وغير صحيح\n\nلن يتمكنوا من عرض:\n • الرسائل في الدردشات خارج الدورة\n • قائمة المفردات", "adminRequestedAccess": "طلب المسؤولون عرض تحليلاتك.", "lastUpdated": "تم التحديث\n{time}", "activityFinishedMessage": "انتهى الجميع!", "endForAll": "إنهاء للجميع", "newCourse": "دورة جديدة", - "newCourseSubtitle": "أي خطة دورة تود استخدامها؟", - "failedToLoadCourses": "فشل في تحميل الدورات", "numModules": "{num} وحدات", - "numActivityPlans": "{num} خطط نشاط", "coursePlan": "خطة الدورة", "editCourseLater": "يمكنك تعديل عنوان النموذج، الأوصاف، وصورة الدورة لاحقًا.", "newCourseAccess": "افتراضيًا، الدورات خاصة وتتطلب موافقة المسؤول للانضمام. يمكنك تعديل هذه الإعدادات في أي وقت.", @@ -4768,17 +4311,11 @@ "accessDesc": "يمكنك جعل دورتك مفتوحة للعالم! أو، جعل دورتك خاصة وآمنة.", "createGroupChatDesc": "بينما تبدأ وتنتهي جلسات النشاط، ستظل الدردشات الجماعية مفتوحة للتواصل الروتيني.", "deleteDesc": "يمكن للمسؤولين فقط حذف الدورة. هذا إجراء تدميري يزيل جميع المستخدمين ويحذف جميع الدردشات المختارة داخل الدورة. تابع بحذر.", - "failedToLoadCourseInfo": "فشل في تحميل معلومات الدورة", "noCourseFound": "أوه، هذه الدورة بحاجة إلى خطة!\n\nخطط الدورة هي سلسلة من المواضيع وأنشطة المحادثة.", "additionalParticipants": "+ {num} آخرون", - "activityNotFoundForCourse": "لم يتم العثور على هذا النشاط داخل الدورة", - "courseChats": "دردشات الدورة", - "myActivitySessions": "جلسات نشاطي", "directMessages": "الرسائل المباشرة", "whatNow": "ماذا الآن؟", "chooseNextActivity": "اختر نشاطك التالي!", - "seeInstructions": "عرض التعليمات", - "hideInstructions": "إخفاء التعليمات", "letsGo": "لننطلق", "chooseRole": "اختر دورًا!", "chooseRoleToParticipate": "اختر دورًا للمشاركة!", @@ -4788,23 +4325,15 @@ "inviteFriends": "دعوة الأصدقاء", "waitNotDone": "انتظر، لم أنتهِ بعد!", "waitingForOthersToFinish": "انتظار باقي المشاركين لإنهاء المهمة...", - "saveToCompletedActivities": "حفظ للأنشطة المكتملة", "generatingSummary": "تحليل الدردشة وتوليد النتائج", - "instructionsLanguage": "لغة التعليمات", "findCourse": "ابحث عن دورة", - "activityCompletedDesc": "تمت إضافة نشاطك المكتمل إلى التحليلات حيث يمكنك مراجعة وممارسة اللغة التي استخدمتها.", "pingParticipantsNotification": "{user} يبحث عن مستخدمين للانضمام إلى جلسة النشاط في {room}", "course": "دورة", "courses": "دورات", "courseName": "اسم الدورة", "createNewCourse": "دورة جديدة", - "publicCourses": "الدورات العامة", "goToCourse": "اذهب إلى الدورة: {course}", "activityComplete": "تم إكمال هذا النشاط. يجب أن تتوفر ملخص النشاط أدناه.", - "haventChattedMuch": "يبدو أنك لم تتحدث كثيرًا، حاول استخدام المزيد من كلمات المفردات! إذا شعرت أنك أكملت هدفك، يمكنك إنهاء النشاط أدناه.", - "haveChatted": "يبدو أنك تتحدث منذ فترة! إذا شعرت أنك أكملت هدفك، قم بإنهاء النشاط وسنقوم بإنشاء ملخص لك في الدردشة!", - "userDoneAndWaiting": "{num1}/{num2} من المشاركين أنهوا. انتظر حتى ينتهي الجميع، وسنقوم بإنشاء ملخص لك في الدردشة! \n\nإذا كنت ترغب في إعادة الانضمام إلى المحادثة، انقر على زر المتابعة في الدردشة.", - "othersDoneAndWaiting": "{num1}/{num2} انتهوا. هل أكملت هدفك؟", "startNewSession": "ابدأ جلسة جديدة", "joinOpenSession": "انضم إلى جلسة مفتوحة", "less": "أقل", @@ -4814,7 +4343,6 @@ "openToJoin": "مفتوح للانضمام", "results": "النتائج", "activityDone": "اكتمل النشاط!", - "moreLabel": "المزيد", "promoCodeInfo": "يمكن إدخال رموز الترويج في الصفحة التالية", "editsComingSoon": "سيتم قريبًا إضافة إمكانية تحرير المدن والأنشطة.", "editing": "تحرير", @@ -4830,13 +4358,10 @@ "courseSavedSuccessfully": "تم حفظ الدورة بنجاح", "addCoursePlan": "إضافة خطة دورة", "activityStatsButtonInstruction": "انقر هنا لعرض إحصائيات نشاطك ولإغلاق النشاط عند الانتهاء", - "readingAnalyticsDesc": "انقر على الممارسة على كل رسالة لتمارين القراءة.", - "speakingAnalyticsDesc": "سجل رسائل صوتية لممارسة التحدث.", - "audioAnalyticsDesc": "انقر على الممارسة على كل رسالة لتمارين الاستماع.", "loginToAccount": "تسجيل الدخول إلى حسابي", "appDescription": "تعلم لغة\nأثناء مراسلة أصدقائك.", "languages": "اللغات", - "chooseLanguage": "اختر لغة.", + "chooseLanguage": "اختر لغة الهدف.", "planTrip": "خطط لرحلتك", "howAreYouTraveling": "كيف تسافر؟", "unlockPrivateTrip": "افتح رحلة خاصة", @@ -4849,32 +4374,26 @@ "courseCode": "ما هو كلمة المرور السرية؟", "courseCodeHint": "رمز الرحلة أو الرابط", "unlockMyTrip": "فتح رحلتي", - "anyLevel": "أي مستوى", "signupOption": "كيف تريد التسجيل؟", "withApple": "باستخدام أبل", "withGoogle": "باستخدام جوجل", "withEmail": "باستخدام البريد الإلكتروني", "createAccount": "إنشاء حساب", - "noCoursesFound": "لم يتم العثور على دورات", "loginWithEmail": "تسجيل الدخول بالبريد الإلكتروني", "usernameOrEmail": "اسم المستخدم أو البريد الإلكتروني", "email": "البريد الإلكتروني", "forgotPassword": "هل نسيت كلمة المرور؟", - "writingAnalyticsDesc": "أرسل رسائل لممارسة الكتابة.", "endActivity": "إنهاء النشاط", "allLanguages": "جميع اللغات", - "allCefrLevels": "جميع مستويات CEFR", "chatListTooltip": "ستجد هنا رسائلك المباشرة! انقر على صورة أي مستخدم وابدأ محادثة لإرسال رسالة خاصة.", "directMessageBotTitle": "الرسالة المباشرة لروبوت بانجيا", "feedbackTitle": "ملاحظات النشاط", - "feedbackDesc": "كيف يمكن تحسين النشاط؟ إذا كان بإمكانك تقديم بعض التفاصيل، سنقوم بإجراء التغيير!", "feedbackHint": "ملاحظاتك", "feedbackButton": "إرسال الملاحظات", "directMessageBotDesc": "التحدث مع البشر أكثر متعة ولكن... الذكاء الاصطناعي دائمًا جاهز!", "inviteYourFriends": "ادعُ أصدقائك", "playWithAI": "اللعب مع الذكاء الاصطناعي الآن", "courseStartDesc": "روبوت بانجيا جاهز للعمل في أي وقت!\n\n...لكن التعلم أفضل مع الأصدقاء!", - "addChatToSpace": "إضافة دردشة", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -5222,30 +4741,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5261,18 +4756,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5297,18 +4780,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5345,38 +4816,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5385,62 +4828,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5477,10 +4876,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5489,14 +4884,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5505,46 +4892,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5553,10 +4904,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5613,18 +4960,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5633,14 +4968,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5669,18 +4996,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5689,42 +5004,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5733,14 +5016,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5761,26 +5036,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5801,10 +5056,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5837,25 +5088,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5912,34 +5144,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5968,778 +5172,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7732,14 +6168,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7751,14 +6179,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7790,10 +6210,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7802,18 +6218,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7822,14 +6226,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7854,38 +6250,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7931,10 +6299,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7959,10 +6323,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7987,10 +6347,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7999,66 +6355,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8079,42 +6379,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8139,154 +6415,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8303,18 +6431,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8335,14 +6451,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8359,10 +6467,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8375,14 +6479,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8391,14 +6487,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8426,26 +6514,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8474,18 +6542,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8522,10 +6582,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9458,10 +7514,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9642,34 +7694,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9682,10 +7706,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9694,14 +7714,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9718,22 +7730,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9881,14 +7877,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9897,34 +7885,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9933,54 +7893,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9989,10 +7913,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10009,10 +7929,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10184,26 +8100,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10232,10 +8128,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10292,30 +8184,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10344,18 +8220,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10472,14 +8340,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10492,10 +8352,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10504,14 +8360,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10528,14 +8376,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10544,22 +8384,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10572,18 +8396,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10600,22 +8412,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10624,30 +8424,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10720,18 +8496,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10788,18 +8552,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10828,30 +8580,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10904,18 +8640,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10964,46 +8692,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11068,10 +8756,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11243,14 +8927,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11278,14 +8954,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11298,10 +8966,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11337,19 +9001,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11374,14 +9033,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11390,14 +9041,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11450,10 +9093,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11466,18 +9105,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11490,14 +9117,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11538,26 +9157,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11585,10 +9192,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11599,36 +9202,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11665,10 +9238,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11733,18 +9302,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11809,10 +9366,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11833,10 +9386,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11853,10 +9402,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11865,10 +9410,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11881,10 +9422,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11909,16 +9446,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "ادعُ أصدقاءك إلى النشاط", - "inviteFriendsToActivityCourse": "ادعُ أصدقاءك إلى النشاط والدورة", "feedbackRespDesc": "تحقق مرة أخرى غدًا للحصول على تحديثات النشاط.", "activityDropdownDesc": "عندما تنتهي من هذا النشاط، انقر أدناه", - "activityAnalyticsListBody": "هذه هي أنشطتك المكتملة! بعد الانتهاء من الأنشطة، يمكنك عرضها هنا.", "languageMismatchTitle": "عدم تطابق اللغة", "languageMismatchDesc": "اللغة المستهدفة الخاصة بك لا تتطابق مع لغة هذا النشاط. هل تريد تحديث لغتك المستهدفة؟", "reportWordIssueTooltip": "الإبلاغ عن مشكلة في معلومات الكلمة", "tokenInfoFeedbackDialogTitle": "ملاحظات حول معلومات الكلمة", - "tokenInfoFeedbackDialogDesc": "الذكاء الاصطناعي يخطئ. يرجى وصف أي مشاكل وجدتها في المعلومات أعلاه.", "noPublicCoursesFound": "لم يتم العثور على دورات عامة. هل ترغب في إنشاء واحدة؟", "noCourseTemplatesFound": "لم نتمكن من العثور على دورات للغة المستهدفة الخاصة بك. يمكنك الدردشة مع بوت بانجيا في الوقت الحالي، والتحقق مرة أخرى لاحقًا لمزيد من الدورات.", "botActivityJoinFailMessage": "بوت بانجيا يستغرق وقتًا للرد. يرجى المحاولة مرة أخرى لاحقًا، أو دعوة صديق.", @@ -11926,14 +9459,6 @@ "leaveDesc": "غادر هذا المكان وجميع الدردشات بداخله", "selectAll": "اختر الكل", "deselectAll": "إلغاء تحديد الكل", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11942,10 +9467,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11962,10 +9483,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11999,7 +9516,6 @@ "newMessageInPangeaChat": "📩 رسالة جديدة في دردشة بانجيا", "shareCourse": "مشاركة الدورة", "addCourse": "إضافة دورة", - "joinCourseWithCode": "الانضمام إلى الدورة باستخدام الرمز", "joinPublicCourse": "الانضمام إلى دورة عامة", "vocabLevelsDesc": "هذا هو المكان الذي ستذهب إليه كلمات المفردات بمجرد ترقيتها!", "highlightVocabTooltip": "قم بتمييز كلمات المفردات المستهدفة أدناه عن طريق إرسالها أو التدريب عليها في الدردشة", @@ -12023,10 +9539,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12035,7 +9547,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "لا توجد رسائل مباشرة أو محادثات. تأكد من أن بحثك مكتوب بشكل صحيح.", + "activityAnalyticsTooltipBody": "هذه هي أنشطتك المحفوظة للمراجعة والممارسة.", + "numSavedActivities": "عدد الأنشطة المحفوظة", + "saveActivityTitle": "احفظ النشاط", + "saveActivityDesc": "عمل جيد! احفظ هذا النشاط للمراجعة والممارسة لاحقًا", + "levelInfoTooltip": "هنا يمكنك رؤية جميع النقاط التي حصلت عليها وكيف!", + "alreadyInCourseWithID": "أنت بالفعل في دورة مع هذه الخطة. هل تريد إنشاء دورة بنفس الخطة، أم الذهاب إلى الدورة الحالية؟", + "goToExistingCourse": "اذهب إلى الدورة الحالية", + "emojiView": "عرض الرموز التعبيرية", + "feedbackDialogDesc": "أرتكب أخطاء أيضًا! هل هناك أي شيء يمكنني فعله لتحسين نفسي؟", + "contactHasBeenInvitedToTheCourse": "تمت دعوة جهة الاتصال إلى الدورة", + "activityStatsButtonTooltip": "معلومات النشاط", + "allow": "السماح", + "deny": "رفض", + "enabledRenewal": "تفعيل تجديد الاشتراك", + "subscriptionEndsOn": "ينتهي الاشتراك في", + "subscriptionRenewsOn": "يتجدد الاشتراك في", + "waitForSubscriptionChanges": "قد تستغرق التغييرات في اشتراكك بعض الوقت لتظهر في التطبيق.", + "subscribeReadingAssistance": "اشترك لفتح أدوات الرسائل", + "aceDisplayName": "أكينيس", + "achDisplayName": "أكولي", + "afDisplayName": "الأفريكانية", + "akDisplayName": "أكان", + "alzDisplayName": "ألور", + "amDisplayName": "الأمهرية", + "arDisplayName": "العربية", + "asDisplayName": "الأسامية", + "awaDisplayName": "أوادهي", + "ayDisplayName": "أيمارا", + "azDisplayName": "الأذربيجانية", + "baDisplayName": "باشكير", + "banDisplayName": "بالينيزي", + "bbcDisplayName": "باتاك توبا", + "beDisplayName": "البيلاروسية", + "bemDisplayName": "بمبا", + "bewDisplayName": "بيتاوي", + "bgDisplayName": "البلغارية", + "bhoDisplayName": "بوجبوري", + "bikDisplayName": "بيكول", + "bmDisplayName": "بامبارا", + "bnDisplayName": "البنغالية", + "bnBDDisplayName": "البنغالية (بنغلاديش)", + "bnINDisplayName": "البنغالية (الهند)", + "brDisplayName": "البريتونية", + "bsDisplayName": "البوسنية", + "btsDisplayName": "باتاك سيمالونغون", + "btxDisplayName": "باتاك كارو", + "buaDisplayName": "البوريات", + "caDisplayName": "الكاتالانية", + "cebDisplayName": "السيبوانو", + "cggDisplayName": "تشغا", + "chmDisplayName": "ماري", + "ckbDisplayName": "الكردية المركزية", + "cnhDisplayName": "هاكا تشين", + "coDisplayName": "كورسيكان", + "crhDisplayName": "التركية القرمية", + "crsDisplayName": "الفرنسية الكريولية السيسيلوانية", + "csDisplayName": "التشيكية", + "cvDisplayName": "تشوفاش", + "cyDisplayName": "الويلزية", + "daDisplayName": "الدنماركية", + "deDisplayName": "الألمانية", + "dinDisplayName": "الدينكا", + "doiDisplayName": "الدوجري", + "dovDisplayName": "الدومبي", + "dzDisplayName": "الزونغخا", + "eeDisplayName": "الإيوي", + "enDisplayName": "الإنجليزية", + "enAUDisplayName": "الإنجليزية (أستراليا)", + "enGBDisplayName": "الإنجليزية (المملكة المتحدة)", + "enINDisplayName": "الإنجليزية (الهند)", + "enUSDisplayName": "الإنجليزية (الولايات المتحدة)", + "eoDisplayName": "الإسبرانتو", + "esDisplayName": "الإسبانية", + "esESDisplayName": "الإسبانية (إسبانيا)", + "esMXDisplayName": "الإسبانية (المكسيك)", + "euDisplayName": "الباسك", + "faDisplayName": "الفارسية", + "ffDisplayName": "الفولا", + "fiDisplayName": "الفنلندية", + "filDisplayName": "الفلبينية", + "fjDisplayName": "الفيدجية", + "foDisplayName": "الفاروية", + "frDisplayName": "الفرنسية", + "frCADisplayName": "الفرنسية (كندا)", + "frFRDisplayName": "الفرنسية (فرنسا)", + "fyDisplayName": "الفريزية الغربية", + "gaDisplayName": "الأيرلندية", + "gaaDisplayName": "غا", + "gdDisplayName": "الغيلية الاسكتلندية", + "glDisplayName": "الجاليكية", + "gnDisplayName": "الغواراني", + "gomDisplayName": "الكونكانية الجوانية", + "guDisplayName": "الغوجاراتية", + "haDisplayName": "الهوسا", + "hawDisplayName": "الهاوايية", + "heDisplayName": "العبرية", + "hiDisplayName": "الهندية", + "hilDisplayName": "الهيلغايون", + "hmnDisplayName": "الهيمونغ", + "hneDisplayName": "تشاتيسغارهي", + "hrDisplayName": "الكرواتية", + "hrxDisplayName": "هونسرينك", + "htDisplayName": "الهايتية", + "huDisplayName": "المجرية", + "hyDisplayName": "الأرمنية", + "idDisplayName": "الإندونيسية", + "igDisplayName": "الإيغبو", + "iloDisplayName": "الإيلوكو", + "isDisplayName": "الأيسلندية", + "itDisplayName": "الإيطالية", + "jaDisplayName": "اليابانية", + "jvDisplayName": "الجاوية", + "kaDisplayName": "الجورجية", + "kkDisplayName": "الكازاخستانية", + "kmDisplayName": "الخميرية", + "knDisplayName": "الكانادا", + "koDisplayName": "الكورية", + "kokDisplayName": "الكونكانية", + "kriDisplayName": "الكريو", + "ksDisplayName": "كشميري", + "ktuDisplayName": "كيتوبا (جمهورية الكونغو الديمقراطية)", + "kuDisplayName": "كردي", + "kyDisplayName": "قرغيز", + "laDisplayName": "لاتيني", + "lbDisplayName": "لوكسمبورغية", + "lgDisplayName": "غاندا", + "liDisplayName": "ليمبورغية", + "lijDisplayName": "ليغورية", + "lmoDisplayName": "لومباردي", + "lnDisplayName": "لينغالا", + "loDisplayName": "لاو", + "ltDisplayName": "الليتوانية", + "ltgDisplayName": "اللاتغالية", + "luoDisplayName": "اللو (كينيا وتنزانيا)", + "lusDisplayName": "ميزو", + "lvDisplayName": "اللاتفية", + "maiDisplayName": "مايثيلي", + "makDisplayName": "ماكاسار", + "mgDisplayName": "مالاجاسي", + "miDisplayName": "ماوري", + "minDisplayName": "مينانكاباو", + "mkDisplayName": "المقدونية", + "mlDisplayName": "مالايالام", + "mnDisplayName": "المغولية", + "mniDisplayName": "مانيبوري", + "mrDisplayName": "الماراثية", + "msDisplayName": "مالاي", + "msArabDisplayName": "مالاي (عربي)", + "msMYDisplayName": "مالاي (ماليزيا)", + "mtDisplayName": "مالطي", + "mwrDisplayName": "مارواري", + "myDisplayName": "بورمي", + "nanDisplayName": "مين نان", + "nbDisplayName": "النرويجية (بوكمال)", + "neDisplayName": "نيبالي", + "newDisplayName": "نيواري", + "nlDisplayName": "هولندي", + "nlBEDisplayName": "فلمنكي", + "noDisplayName": "النرويجية", + "nrDisplayName": "جنوب نديبيلي", + "nsoDisplayName": "سوتو الشمالية", + "nusDisplayName": "نوير", + "nyDisplayName": "نيانجا", + "ocDisplayName": "أوكيتانية", + "omDisplayName": "أورومو", + "orDisplayName": "أوديا", + "paDisplayName": "البنجابية", + "paArabDisplayName": "البنجابية (شاهموخي)", + "paINDisplayName": "البنجابية (غورموخي)", + "pagDisplayName": "بانغاسينان", + "pamDisplayName": "بامبانغا", + "papDisplayName": "بابيامينتو", + "plDisplayName": "البولندية", + "psDisplayName": "الباشتو", + "ptDisplayName": "البرتغالية", + "ptBRDisplayName": "البرتغالية (البرازيل)", + "ptPTDisplayName": "البرتغالية (البرتغال)", + "quDisplayName": "الكيتشوا", + "rajDisplayName": "راجستاني", + "rnDisplayName": "روندي", + "roDisplayName": "روماني", + "roMDDisplayName": "مولدافي", + "romDisplayName": "روماني", + "ruDisplayName": "روسي", + "rwDisplayName": "كينيارواندا", + "saDisplayName": "سانسكريت", + "satDisplayName": "سانتالي", + "scnDisplayName": "صقلي", + "sdDisplayName": "سندي", + "sgDisplayName": "سانغو", + "shnDisplayName": "شان", + "siDisplayName": "سنهالية", + "skDisplayName": "سلوفاكية", + "slDisplayName": "سلوفينية", + "smDisplayName": "ساموان", + "snDisplayName": "شونا", + "soDisplayName": "صومالي", + "sqDisplayName": "ألبانية", + "srDisplayName": "صربية", + "srMEDisplayName": "مونتينيغري", + "ssDisplayName": "سواتي", + "stDisplayName": "سوتو الجنوبية", + "suDisplayName": "سوندانية", + "svDisplayName": "سويدية", + "swDisplayName": "سواحيلية", + "szlDisplayName": "سيلزيان", + "taDisplayName": "تاميل", + "teDisplayName": "تيلوجو", + "tetDisplayName": "تيتوم", + "tgDisplayName": "طاجيكي", + "thDisplayName": "تايلاندي", + "tiDisplayName": "تيغرينية", + "tkDisplayName": "تركي", + "tlDisplayName": "تاغالوغ", + "tnDisplayName": "تسوانا", + "trDisplayName": "تركي", + "tsDisplayName": "تسونغا", + "ttDisplayName": "تتار", + "ugDisplayName": "أويغور", + "ukDisplayName": "الأوكرانية", + "urDisplayName": "الأردية", + "urINDisplayName": "الأردية (الهند)", + "urPKDisplayName": "الأردية (باكستان)", + "uzDisplayName": "الأوزبكية", + "viDisplayName": "الفيتنامية", + "wuuDisplayName": "وو", + "xhDisplayName": "خوسا", + "yiDisplayName": "يديش", + "yoDisplayName": "يوروبا", + "yuaDisplayName": "يوكاتيكو", + "yueDisplayName": "كانتونية", + "yueCNDisplayName": "كانتونية (الصين)", + "yueHKDisplayName": "كانتونية (هونغ كونغ)", + "zhDisplayName": "صينية", + "zhCNDisplayName": "صينية (مبسطة)", + "zhTWDisplayName": "صينية (تقليدية)", + "zuDisplayName": "زولو", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12102,6 +10800,7 @@ "notStartedActivitiesTitle": "جلسات مفتوحة ({num})", "inProgressActivitiesTitle": "تحدث الآن ({num})", "completedActivitiesTitle": "تم ({num})", + "pickDifferentActivity": "اختر نشاطًا مختلفًا", "inOngoingActivity": "لديك نشاط جارٍ!", "@notStartedActivitiesTitle": { "type": "String", @@ -12127,10 +10826,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "لغة الهدف الخاصة بك لا تتطابق مع هذه الرسالة. هل تريد تحديث لغة الهدف الخاصة بك؟", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "هؤلاء هم جميع المشاركين في هذه الدورة. انقر على صورة أي مستخدم و\"ابدأ محادثة\" لإرسال رسالة مباشرة.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "ستتم إزالة هذه الكلمة من تحليلاتك بشكل دائم", + "woman": "امرأة", + "man": "رجل", + "otherGender": "آخر", + "unselectedGender": "اختر خيار الجنس", + "gender": "الجنس", + "chatParticipantTooltip": "هؤلاء هم جميع الأشخاص في هذه الدردشة. انقر على صورة أي مستخدم و\"ابدأ محادثة\" لإرسال رسالة مباشرة.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "أدوات التعلم معطلة للرسائل التي ليست باللغة المستهدفة.", + "vocabEmoji": "رمز التعبير عن المفردات", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "طلب إعادة التوليد", + "optionalRegenerateReason": "(اختياري) السبب", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "لقد قمت بتعيين الرموز التعبيرية لـ {lemma}! سنستخدم هذا الرمز التعبيري لتمثيل الكلمة في أنشطة الممارسة في المستقبل.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "انتظار اكتمال تسجيل الدخول", + "ssoDialogDesc": "لقد فتحنا علامة تبويب جديدة حتى تتمكن من تسجيل الدخول بأمان.", + "ssoDialogHelpText": "🤔 إذا لم ترَ علامة التبويب الجديدة، يرجى التحقق من مانع النوافذ المنبثقة.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "تعطيل أدوات اللغة", + "disableLanguageToolsDesc": "هل ترغب في تعطيل المساعدة اللغوية التلقائية؟", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "تم رفض الإذن. قم بتمكين أذونات التسجيل لتسجيل الرسائل الصوتية.", + "genericWebRecordingError": "حدث خطأ ما. نوصي باستخدام متصفح Chrome عند تسجيل الرسائل.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "لأفضل تجربة عند استخدام هذا التطبيق، يرجى توسيع حجم الشاشة لديك.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "الأنشطة لفتح الموضوع التالي", "activitiesToUnlockTopicDesc": "حدد عدد الأنشطة لفتح موضوع الدورة التالي", "@activitiesToUnlockTopicTitle": { @@ -12140,5 +10957,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "ممارسة تعريف المفردات الصحيحة", + "constructUseIncLMDesc": "ممارسة تعريف المفردات غير الصحيحة", + "constructUseCorLADesc": "ممارسة الصوت للمفردات الصحيحة", + "constructUseIncLADesc": "ممارسة الصوت للمفردات غير الصحيحة", + "constructUseBonus": "مكافأة أثناء ممارسة المفردات", + "practiceVocab": "ممارسة المفردات", + "selectMeaning": "اختر المعنى", + "selectAudio": "اختر الصوت المطابق", + "congratulations": "مبروك!", + "anotherRound": "جولة أخرى", + "noActivityRequest": "لا يوجد طلب نشاط حالي.", + "quit": "خروج", + "congratulationsYouveCompletedPractice": "تهانينا! لقد أكملت جلسة التدريب.", + "mustHave10Words": "يجب أن يكون لديك على الأقل 10 كلمات مفردات لممارستها. حاول التحدث إلى صديق أو بوت بانجيا لاكتشاف المزيد!", + "botSettings": "إعدادات البوت", + "activitySettingsOverrideWarning": "اللغة ومستوى اللغة محددان بواسطة خطة النشاط", + "voice": "صوت", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 65cec11a8..8f328151c 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -778,28 +778,16 @@ "commandHint_logoutall": "Выйсці з усіх актыўных прылад", "displayNavigationRail": "Паказаць навігацыйную паласу на мабільным", "customReaction": "Карыстальніцкая рэакцыя", - "accountInformation": "Інфармацыя пра акаўнт", - "addGroupDescription": "Дадаць апісанне чату", - "addNewFriend": "Дадаць новага сябра", - "alreadyHaveAnAccount": "Ці ёсць у вас ужо ўліковы запіс?", - "createNewGroup": "Стварыць новы чат", - "editChatPermissions": "Рэдагаваць дазволы чата", "ignore": "Блакаваць", "ignoredUsers": "Блакаваные карыстальнікі", "writeAMessageLangCodes": "Пішыце на {l1} або {l2}...", "requests": "Запыты", - "allCorrect": "Гэта менавіта так я б сказаў! Добра!", - "newWayAllGood": "Гэта не так, як я б сказаў, але выглядае добра!", - "othersAreBetter": "Хм, магчыма, ёсць лепшы спосаб сказаць гэта.", "holdForInfo": "Націсніце і ўтрымлівайце для інфармацыі пра слова.", "greenFeedback": "Гэта тое, што я б паставіў!", "yellowFeedback": "Хм, вы можаце паспрабаваць гэта і паглядзець, ці працуе! Каб выкарыстоўваць гэтае слова, проста зноў націсніце яго.", "redFeedback": "Я не думаю, што гэта правільна...", "itInstructionsTitle": "Я магу дапамагчы вам з перакладам!", "itInstructionsBody": "Вы можаце націснуць і ўтрымліваць выбары для інфармацыі пра слова.", - "oneday": "Апошнія 24 гадзіны", - "oneweek": "Апошнія 7 дзён", - "onemonth": "Мінулы месяц", "gaTooltip": "Выкарыстанне L2 з дапамогай граматычнай падтрымкі", "taTooltip": "Выкарыстанне L2 з дапамогай перакладчыцкай падтрымкі", "unTooltip": "Іншае", @@ -809,58 +797,27 @@ "interactiveTranslatorAllowed": "Выбар студэнта", "interactiveTranslatorRequired": "Абавязкова", "notYetSet": "Яшчэ не ўсталявана", - "myLearning": "Мая аналітыка", "waTooltip": "Выкарыстанне L2 без дапамогі", - "changeDateRange": "Змяніць дыяпазон дат", - "classDescription": "Апісанне", - "addStudents": "Запрасіць карыстальнікаў па спасылцы або кодзе", - "copyClassLink": "Капіяваць спасылку для запрашэння", - "copyClassCode": "Капіяваць код запрашэння", - "inviteStudentByUserName": "Запрасіць карыстальнікаў па імя карыстальніка", "languageSettings": "Налады мовы", "interactiveTranslator": "Дапамога з перакладам", - "shareVideo": "Дзяліцца відэа", - "shareVideoDesc": "Уключыце гэта, каб дазволіць вучням дзяліцца відэа ў чатах.", - "shareFiles": "Дзяліцца файламі", - "selectLanguageLevel": "Выбраць узровень мовы", "noIdenticalLanguages": "Калі ласка, выберыце розныя базавыя і мэтавыя мовы", - "iWantALanguagePartnerFrom": "З", - "worldWide": "Усясвет", - "noResults": "Вынікаў няма! Паспрабуйце пашырыць пошук.", "searchBy": "Пошук па краіне і мовах", - "iWantAConversationPartner": "Я хачу партнёра для размовы, які", - "iWantALanguagePartnerWhoSpeaks": "Гаворыць:", - "iWantALanguagePartnerWhoIsLearning": "Вучыцца:", "joinWithClassCode": "Далучыцца да курса", - "joinWithClassCodeHint": "Увядзіце код запрашэння", - "languageLevelPreA1": "Пачатковец (Pre A1)", - "languageLevelA1": "Пачатковец (A1)", - "languageLevelA2": "Элементарны (A2)", - "languageLevelB1": "Сярэдні (B1)", - "languageLevelB2": "Павышаны сярэдні (B2)", - "languageLevelC1": "Прасунуты (C1)", - "languageLevelC2": "Майстэрства (C2)", + "languageLevelPreA1": "Навічок Нізкі (Папярэдні A1)", + "languageLevelA1": "Навічок Сярэдні (A1)", + "languageLevelA2": "Пачатковы высокі (A2)", + "languageLevelB1": "Сярэдні сярэдні (B1)", + "languageLevelB2": "Высокі нізкі (B2)", + "languageLevelC1": "Высокі сярэдні (C1)", + "languageLevelC2": "Супер (C2)", "changeTheNameOfTheClass": "Змяніць імя", "changeTheNameOfTheChat": "Змяніць імя чата", - "askPangeaBot": "Пытайце ў Pangea Bot для кантэкстуальнага вызначэння.", "sorryNoResults": "Прабачце, вынікаў няма.", "ignoreInThisText": "Ігнараваць", - "helpMeTranslate": "Так!", - "needsItShortMessage": "Выхад з мэты", "needsItMessage": "Пачакайце, гэта не {targetLanguage}! Ці патрэбна вам дапамога з перакладам?", - "needsIgcMessage": "Гэтае паведамленне мае граматычную памылку.", - "tokenTranslationTitle": "Слова знаходзіцца ў вашай базавай мове.", - "spanTranslationDesc": "Глядзіце магчымыя пераклады ніжэй.", - "spanTranslationTitle": "Некаторыя словы ў вашай базавай мове.", - "l1SpanAndGrammarTitle": "За межамі мэты", - "l1SpanAndGrammarDesc": "Гэта можа быць у вашай базавай мове або гэта можа быць граматычная памылка.", - "otherTitle": "У вас ёсць памылка.", - "otherDesc": "Глядзіце магчымыя выпраўленні ніжэй.", "countryInformation": "Мая краіна", - "myLanguages": "Мовы маёй базы і мэты", "targetLanguage": "Мэтавая мова", "sourceLanguage": "Асноўная мова", - "languagesISpeak": "Мовы, якімі я валодаю", "updateLanguage": "Мовы, якія я ведаю", "whatLanguageYouWantToLearn": "Якую мову вы хочаце вывучыць?", "whatIsYourBaseLanguage": "Якая ваша асноўная мова?", @@ -875,13 +832,8 @@ "errorDisableLanguageAssistanceUserDesc": "Націсніце тут, каб абнавіць налады дапамогі з перакладам і граматыкай", "errorDisableITClassDesc": "Дапамога з перакладам выключана для курса, у якім знаходзіцца гэты чат.", "errorDisableIGCClassDesc": "Дапамога з граматыкай выключана для курса, у якім знаходзіцца гэты чат.", - "itIsDisabled": "Інтэрактыўны пераклад выключаны", - "igcIsDisabled": "Інтэрактыўная праверка граматыкі выключана", - "goToLearningSettings": "Перайсці да налад навучання", "error405Title": "Мовы не ўсталяваны", "error405Desc": "Калі ласка, усталюйце свае мовы ў галоўным меню > Налады навучання.", - "loginOrSignup": "Увайсці з", - "iAgreeToThe": "Я згаджаюся з ", "termsAndConditions": "Умовамі і палажэннямі", "andCertifyIAmAtLeast13YearsOfAge": " і пацвярджаю, што мне не менш за 16 гадоў.", "error502504Title": "Вау, шмат студэнтаў у сетцы!", @@ -889,40 +841,21 @@ "error404Title": "Памылка перакладу!", "error404Desc": "Бот Pangea не ўпэўнены, як гэта перакласці...", "errorPleaseRefresh": "Мы разглядаем гэта! Калі ласка, перазагрузіце і паспрабуйце зноў.", - "toggleIT": "Інтэрактыўны пераклад", - "toggleIGC": "Інтэрактыўная праверка граматыкі", - "toggleToolSettingsDescription": "Тут вы можаце ўключаць або выключаць налады індывідуальных моўных інструментаў.", "connectedToStaging": "Падключана да Staging", "learningSettings": "Налады навучання", - "sendVoiceNotes": "Адправіць галасавыя нататкі", - "sendVoiceNotesDesc": "Уключыце гэта, каб дазволіць студэнтам адпраўляць галасавыя нататкі ў чатах.", - "chatTopic": "Тэма чата", - "chatTopicDesc": "Усталюйце тэму чата", - "inviteStudentByUserNameDesc": "Калі ваш студэнт ужо мае ўліковы запіс, вы можаце знайсці яго.", "participants": "Удзельнікі", - "almostPerfect": "Гэта здаецца правільным! Вось што я б сказаў.", - "prettyGood": "Досыць добра! Вось што я б сказаў.", - "letMeThink": "Хм, паглядзім, як у вас атрымалася!", "clickMessageTitle": "Патрэбна дапамога?", "clickMessageBody": "Націсніце на паведамленне для моўных інструментаў, такіх як пераклад, прайграванне і іншыя!", - "understandingMessagesTitle": "Вызначэнні і пераклады!", - "understandingMessagesBody": "Націсніце на падкрэсленыя словы для атрымання вызначэнняў. Перакладзіце з дапамогай опцый паведамлення (у верхнім правым куце).", "allDone": "Усё гатова!", "vocab": "Лексіка", "low": "У нас ёсць доказы, што карыстальнік не разумее гэтыя словы.", "medium": "Гэтыя словы былі выкарыстаны. Невядома, ці цалкам разумее карыстальнік гэтыя словы.", "high": "У нас ёсць доказы, што карыстальнік разумее гэтыя словы.", - "unknownProficiency": "Гэтыя словы не выкарыстоўваліся ў Pangea Chat.", - "changeView": "Змяніць выгляд.", - "clearAll": "Ачысціць усе словы?", - "generateVocabulary": "Стварыць слоўнік з назвы і апісання", - "generatePrompts": "Стварыць падказкі", "subscribe": "Падпісацца", "getAccess": "Падпішыцеся зараз!", "subscriptionDesc": "Меседжынг бясплатны! Падпішыцеся, каб разблакаваць інтэрактыўны пераклад, праверку граматыкі і аналітыку навучання.", "subscriptionManagement": "Кіраванне падпіскамі", "currentSubscription": "Бягучая падпіска", - "changeSubscription": "Змяніць вашу падпіску", "cancelSubscription": "Адмяніць вашу падпіску", "selectYourPlan": "Выберыце свой план", "subsciptionPlatformTooltip": "Калі ласка, увайдзіце ў свой арыгінальны прыладу, каб кіраваць вашым планам падпіскі", @@ -931,9 +864,6 @@ "paymentHistory": "Гісторыя плацяжоў", "emptyChatDownloadWarning": "Немагчыма спампаваць пусты чат", "update": "Абнавіць", - "updateDesc": "Цяпер вы можаце абнавіць гэтую праграму з {localVersion} да {storeVersion}", - "maybeLater": "Магчыма пазней", - "mainMenu": "Галоўнае меню", "toggleImmersionMode": "Рэжым уцягвання", "toggleImmersionModeDesc": "Калі ўключана, усе паведамленні адлюстроўваюцца на вашай мэтавай мове. Гэты рэжым найбольш карысны ў мовных абменах.", "itToggleDescription": "Гэты інструмент вывучэння мовы вызначыць словы ў вашай базавай мове і дапаможа вам перакласці іх на вашу мэтавую мову. Хоць і рэдка, AI можа дапусціць памылкі ў перакладзе.", @@ -948,212 +878,13 @@ "definitionsToolDescription": "Калі ўключана, падкрэсленыя сінім словы можна націснуць для атрымання вызначэнняў. Націсніце на паведамленні, каб атрымаць доступ да вызначэнняў.", "translationsToolDescrption": "Калі ўключана, націсніце на паведамленне і іконку перакладу, каб убачыць паведамленне на вашай асноўнай мове.", "welcomeBack": "Вітаем зноў! Калі вы ўдзельнічалі ў пілотным праекце 2023-2024 гадоў, звяжыцеся з намі для атрымання спецыяльнай пілотнай падпіскі. Калі вы настаўнік, які набыў (або яго ўстанова набыла) ліцэнзіі для вашага класа, звяжыцеся з намі для атрымання настаўніцкай падпіскі.", - "kickAllStudents": "Выкінуць усіх студэнтаў", - "kickAllStudentsConfirmation": "Вы ўпэўнены, што хочаце выкінуць усіх студэнтаў?", - "inviteAllStudents": "Запрасіць усіх студэнтаў", - "inviteAllStudentsConfirmation": "Вы ўпэўнены, што хочаце запрасіць усіх студэнтаў?", - "inviteUsersFromPangea": "Дадаць адміністратараў", - "redeemPromoCode": "Атрымліваць прома-код", - "enterPromoCode": "Увесці прома-код", "downloadTxtFile": "Загрузіць тэкставы файл", "downloadCSVFile": "Загрузіць CSV-файл", "promotionalSubscriptionDesc": "У вас цяпер бестэрміновая прамоцыйная падпіска. Пішыце support@pangea.chat для дапамогі ў змене вашай падпіскі.", "originalSubscriptionPlatform": "Падпіска, набытая праз {purchasePlatform}", "oneWeekTrial": "Прабная пробная версія на адзін тыдзень", "downloadXLSXFile": "Загрузіць файл Excel", - "abDisplayName": "Абхазская", - "aaDisplayName": "Афарская", - "afDisplayName": "Афрыканская", - "akDisplayName": "Аканская", - "sqDisplayName": "Албанская", - "amDisplayName": "Амхарская", - "arDisplayName": "Арабская", - "anDisplayName": "Арагонская", - "hyDisplayName": "Армянская", - "asDisplayName": "Ассамская", - "avDisplayName": "Аварская", - "aeDisplayName": "Авестская", - "ayDisplayName": "Аймара", - "azDisplayName": "Азербайджанская", - "bmDisplayName": "Бамбара", - "baDisplayName": "Башкірская", - "euDisplayName": "Баскская", - "beDisplayName": "Беларуская", - "bnDisplayName": "Бенгальская", - "bhDisplayName": "Біхары", - "biDisplayName": "Біслама", - "bsDisplayName": "Боснійская", - "brDisplayName": "Бретонская", - "bgDisplayName": "Балгарская", - "myDisplayName": "М’янмская", - "caDisplayName": "Каталонская, Валенсійская", - "chDisplayName": "Чаморро", - "ceDisplayName": "Чеченская", - "nyDisplayName": "Чычэва, Чэва, Ньянджа", - "zhDisplayName": "Кітайская", - "cvDisplayName": "Чувашская", - "kwDisplayName": "Корнская", - "coDisplayName": "Корсиканская", - "crDisplayName": "Кры", - "hrDisplayName": "Харвацкая", - "csDisplayName": "Чэшская", - "daDisplayName": "Данская", - "dvDisplayName": "Дываі; Дывеі; Мальдівская;", - "nlDisplayName": "Dutch", - "enDisplayName": "Англійская", - "eoDisplayName": "Эсперанта", - "etDisplayName": "Эстонская", - "eeDisplayName": "Эве", - "foDisplayName": "Фарэрская", - "fjDisplayName": "Фіджыйская", - "fiDisplayName": "Фінская", - "frDisplayName": "Французская", - "ffDisplayName": "Фула; Фула; Пулар; Пулар", - "glDisplayName": "Галісійская", - "kaDisplayName": "Грузінская", - "deDisplayName": "Нямецкая", - "elDisplayName": "Модэрная грэчаская", - "gnDisplayName": "Гуарані", - "guDisplayName": "Гуджараці", - "htDisplayName": "Гаітанская, Гаітанскі крэоль", - "haDisplayName": "Хаўса", - "heDisplayName": "Іўрыт (модэрны)", - "hzDisplayName": "Герэро", - "hiDisplayName": "Хіндзі", - "hoDisplayName": "Хіры Мотү", - "huDisplayName": "Венгерская", - "iaDisplayName": "Інтерлінгва", - "idDisplayName": "Індонезійская", - "ieDisplayName": "Інтерлінгві", - "gaDisplayName": "Ірландская", - "igDisplayName": "Ігбо", - "ikDisplayName": "Інупіяк", - "ioDisplayName": "Ідо", - "isDisplayName": "Ісландская", - "itDisplayName": "Італьянская", - "iuDisplayName": "Інуктітут", - "jaDisplayName": "Японская", - "jvDisplayName": "Яванская", - "klDisplayName": "Калааллісут, Грэнлэндская", - "knDisplayName": "Каннада", - "krDisplayName": "Кануры", - "ksDisplayName": "Кашмірская", - "kkDisplayName": "Казахская", - "kmDisplayName": "Кхмерская", - "kiDisplayName": "Кікуйю, Гікуйю", - "rwDisplayName": "Кіньяруанда", - "kyDisplayName": "Кіргізская, Кыргызстан", - "kvDisplayName": "Камійская", - "kgDisplayName": "Конга", - "koDisplayName": "Карэйская", - "kuDisplayName": "Курдская", - "kjDisplayName": "Кваньяма, Куаньяма", - "laDisplayName": "Латынская", - "lbDisplayName": "Люксембургская, Летзебургская", - "lgDisplayName": "Луганда", - "liDisplayName": "Лімбургская, Лімбургская, Лімбургэр", - "lnDisplayName": "Лінгала", - "loDisplayName": "Лаоская", - "ltDisplayName": "Літоўская", - "luDisplayName": "Луба-Катанга", - "lvDisplayName": "Латышская", - "gvDisplayName": "Манская", - "mkDisplayName": "Македонская", - "mgDisplayName": "Малагасійская", - "msDisplayName": "Малайская", - "mlDisplayName": "Малаялам", - "mtDisplayName": "Мальтыйская", - "miDisplayName": "Маоры", - "mrDisplayName": "Марати (Марахі)", - "mhDisplayName": "Маршалавскія", - "mnDisplayName": "Манголская", - "naDisplayName": "Науру", - "nvDisplayName": "Навахо, Наво", - "nbDisplayName": "Нарвежская Бокмаль", - "ndDisplayName": "Паўночны Ндебеле", - "neDisplayName": "Непальская", - "ngDisplayName": "Ндонга", - "nnDisplayName": "Нарвежская Нінорск", - "noDisplayName": "Нарвежская", - "iiDisplayName": "Носу", - "nrDisplayName": "Паўднёвы Ндебеле", - "ocDisplayName": "Акцытан", - "ojDisplayName": "Оджибве, Оджыба", - "cuDisplayName": "Старажытнацаркоўнаславянская, Царква славянская, Царкоўнаславянская, Старажытнабалгарская, Старажытнаславянская", - "omDisplayName": "Oрома", - "orDisplayName": "Орія", - "osDisplayName": "Асецінская, Асецінская мова", - "paDisplayName": "Пенджабі, Пенджабская", - "piDisplayName": "Палі", - "faDisplayName": "Персідская", - "plDisplayName": "Польская", - "psDisplayName": "Пушту, Пушту", - "ptDisplayName": "Партугальская", - "quDisplayName": "Кечуа", - "rmDisplayName": "Рамансх", - "rnDisplayName": "Кірундзі", - "roDisplayName": "Румынская, Малдаванская, Малдаванская", - "ruDisplayName": "Руская", - "saDisplayName": "Санскрыт (Санскрыта)", - "scDisplayName": "Сардзінская", - "sdDisplayName": "Сіндхі", - "seDisplayName": "Паўночнасаамская", - "smDisplayName": "Самоанская", - "sgDisplayName": "Сангві", - "srDisplayName": "сербская", - "gdDisplayName": "шотландская гэльская, гэльская", - "snDisplayName": "Шона", - "siDisplayName": "Сінгальская, сінгальская", - "skDisplayName": "словацкая", - "slDisplayName": "словацкая", - "soDisplayName": "сомалійская", - "stDisplayName": "Паўднёвая сота", - "esDisplayName": "іспанская", - "suDisplayName": "суданская", - "swDisplayName": "суахілі", - "ssDisplayName": "сваты", - "svDisplayName": "шведская", - "taDisplayName": "тамільская", - "teDisplayName": "тэлугу", - "tgDisplayName": "таджыкская", - "thDisplayName": "тайская", - "tiDisplayName": "тыгрынская", - "boDisplayName": "Тибецкая стандартная, тибецкая, цэнтральная", - "tkDisplayName": "Туркменскі", - "tlDisplayName": "Тагальская", - "tnDisplayName": "Тсвана", - "toDisplayName": "Тонганская (Тонганскія астравы)", - "trDisplayName": "Турэцкая", - "tsDisplayName": "Тсонга", - "ttDisplayName": "Татарская", - "twDisplayName": "Тві", - "tyDisplayName": "Тахітанская", - "ugDisplayName": "Уйгурская, Уйгур", - "ukDisplayName": "Украінская", - "urDisplayName": "Урду", - "uzDisplayName": "Узбекская", - "veDisplayName": "Венда", - "viDisplayName": "В'етнамская", - "voDisplayName": "Волапюк", - "waDisplayName": "Валлонская", - "cyDisplayName": "Валлійская", - "woDisplayName": "Волоф", - "fyDisplayName": "Заходняя фрызская", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Іўрыт", - "yoDisplayName": "Ягбабу", - "zaDisplayName": "Чжуан, Чуанг", "unkDisplayName": "Невядома", - "zuDisplayName": "Зулу", - "hawDisplayName": "Гавайскі", - "hmnDisplayName": "Хмонг", - "multiDisplayName": "Многа", - "cebDisplayName": "Себуана", - "dzDisplayName": "Дзонгка", - "iwDisplayName": "Іўрыт", - "jwDisplayName": "Яванскі", - "moDisplayName": "Малдзіўскі", - "shDisplayName": "Сербска-хорвацкі", "wwCountryDisplayName": "Сусвет", "afCountryDisplayName": "Афганістан", "axCountryDisplayName": "Аленскія астравы", @@ -1401,41 +1132,25 @@ "yeCountryDisplayName": "Ямен", "zmCountryDisplayName": "Замбія", "zwCountryDisplayName": "Зімбабвэ", - "pay": "Аплаціць", - "allPrivateChats": "Прыватныя чаты", - "unknownPrivateChat": "Невядомы прыватны чат", + "pay": "Checkout", "invitedToSpace": "{user} запрасіў вас далучыцца да курса: {space}! Ці жадаеце прыняць запрашэнне?", - "declinedInvitation": "Адхілены запрашэнне", - "acceptedInvitation": "Прызнана запрашэнне", "youreInvited": "📩 Вы запрошаны!", "invitedToChat": "{user} запрасіў вас далучыцца да чата: {name}! Ці жадаеце прыняць запрашэнне?", "monthlySubscription": "Штомесячная", "yearlySubscription": "Штогадовая", "defaultSubscription": "Падпіска Pangea Chat", "freeTrial": "Бясплатны пробны перыяд", - "grammarAnalytics": "Аналіз памылак", "total": "Усяго: ", "noDataFound": "Дадзеныя не знойдзены", - "promoSubscriptionExpirationDesc": "Ваша бягучая падпіска з'яўляецца прамоцыйнай і скончыцца {expiration}. Пішыце на support@pangea.chat для дапамогі ў змене падпіскі.", - "emptyChatNameWarning": "Калі ласка, увядзіце назву для гэтага чата", "blurMeansTranslateTitle": "Чаму паведамленне размыта?", "blurMeansTranslateBody": "Пакуль у рэжыме ўцягвання, паведамленні, якія адпраўляюцца на вашай асноўнай мове, будуць размытыя, пакуль Pangea Bot перакладае іх на вашу мову мэты. Рэжым уцягвання можна ўключаць і выключаць у наладах асобных і курсаў.", - "someErrorTitle": "Хм, нешта не так", - "someErrorBody": "Гэта можа быць памылка або нешта ў вашай асноўнай мове.", "bestCorrectionFeedback": "Гэта правільна!", "distractorFeedback": "Гэта не зусім правільна.", "bestAnswerFeedback": "Гэта правільна!", "definitionDefaultPrompt": "Што азначае гэта слова?", "practiceDefaultPrompt": "Які лепшы адказ?", "correctionDefaultPrompt": "Якое лепшае замяшчэнне?", - "itStartDefaultPrompt": "Ці хочаце дапамогу з перакладам?", - "lockedChatWarning": "🔒 Гэты чат заблакаваны", - "lockChat": "Заблакаваць чат", - "suggestToChat": "Прапанаваць гэты чат", - "suggestToChatDesc": "Прапанаваныя чаты з'явяцца ў спісах чатаў", "acceptSelection": "Прымаць карэкцыю", - "acceptSelectionAnyway": "Выкарыстоўваць гэта ўсё роўна", - "makingActivity": "Стварэнне дзейнасці", "why": "Чаму?", "definition": "Вызначэнне", "exampleSentence": "Прыклад сказу", @@ -1443,128 +1158,55 @@ "reportMessageTitle": "{reportingUserId} паведаміў пра паведамленне ад {reportedUserId} у чаце {roomName}", "reportMessageBody": "Паведамленне: {reportedMessage}\nПрычына: {reason}", "noTeachersFound": "Не знойдзена настаўнікаў для паведамлення", - "viewArchive": "Праглядзець архіў", "trialExpiration": "Ваш бясплатны пробны перыяд скончыцца {expiration}", "freeTrialDesc": "Новыя карыстальнікі атрымліваюць тыднёвы бясплатны пробны перыяд Pangea Chat", "activateTrial": "Бясплатны 7-дзённы пробны перыяд", "successfullySubscribed": "Вы паспяхова падпісацесь!", "clickToManageSubscription": "Націсніце тут, каб кіраваць вашай падпіскай.", - "errorGettingAudio": "Памылка пры атрыманні аўдыё. Калі ласка, абнавіце старонку і паспрабуйце зноў.", "signUp": "Рэгістрацыя", "pleaseChooseAtLeastChars": "Калі ласка, выберыце не менш за {min} сімвалаў.", "noEmailWarning": "Калі ласка, увядзіце сапраўдны адрас электроннай пошты. Інакш вы не зможаце скідзіць пароль. Калі не хочаце гэтага, націсніце яшчэ раз на кнопку, каб працягнуць.", "pleaseEnterValidEmail": "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.", "pleaseChooseAUsername": "Калі ласка, выберыце імя карыстальніка", - "chooseAUsername": "Выберыце імя карыстальніка", "define": "Вызначыць", "listen": "Слухаць", - "addConversationBot": "Уключыць бота для размоў", - "addConversationBotDesc": "Дадаць бота ў гэты чат", - "convoBotSettingsDescription": "Рэдагаваць тэму размовы і ўзровень складанасці", - "enterAConversationTopic": "Увядзіце тэму размовы", - "conversationTopic": "Тэма размовы", - "enableModeration": "Уключыць мадэрацыю", - "enableModerationDesc": "Уключыць аўтаматычную мадэрацыю для прагляду паведамленняў перад іх адпраўкай", - "conversationLanguageLevel": "Які ўзровень мовы ў гэтай размове?", - "showDefinition": "Паказаць азначэнне", - "subscriptionPopupTitle": "Гэтае сказ можа ўтрымліваць граматычную памылку...", - "subscriptionPopupDesc": "Падпішыцеся сёння, каб разблакаваць пераклад і карэкцыю граматыкі!", - "seeOptions": "Глядзець опцыі", - "continuedWithoutSubscription": "Працягваць без падпіскі", "trialPeriodExpired": "Ваш пробны перыяд скончыўся", - "selectToDefine": "Націсніце на любое слова, каб убачыць яго азначэнне!", "translations": "пераклады", "messageAudio": "аўдыё паведамлення", "definitions": "азначэнні", "subscribedToUnlockTools": "Падпішыцеся, каб разблакаваць інтэрактыўны пераклад і праверку граматыкі, прайграванне аўдыё, персаналізаваныя практыкаванні і аналітыку навучання!", "translationTooltip": "Перакласці", - "audioTooltip": "Гуляць аўдыё", "speechToTextTooltip": "Транскрыпцыя", - "certifyAge": "Я пацвярджаю, што мне больш за {age} гадоў", "kickBotWarning": "Выдаленне бота Pangea з гэтага чата выдаліць бота размовы з гэтага чата.", - "joinToView": "Далучайцеся да гэтай пакоі, каб праглядаць дэталі", "refresh": "Абнавіць", - "autoPlayTitle": "Аўтаматычны прайграванне паведамленняў", - "autoPlayDesc": "Калі ўключана, аўдыё тэксту ў паведамленнях будзе аўтаматычна прайгравацца пры выбары.", "messageAnalytics": "Аналітыка паведамленняў", "words": "Словы", "score": "Ацэнка", "accuracy": "Дакладнасць", "points": "Балы", "noPaymentInfo": "Інфармацыя аб плацяжах не патрабуецца!", - "conversationBotModeSelectDescription": "Дзеянне чата", - "conversationBotModeSelectOption_discussion": "Дыскусія", - "conversationBotModeSelectOption_custom": "Настраіваемы", - "conversationBotModeSelectOption_conversation": "Размова", - "conversationBotModeSelectOption_textAdventure": "Тэкставае прыгода", - "conversationBotModeSelectOption_storyGame": "Гульня гісторыі", - "conversationBotDiscussionZone_title": "Налады дыскусіі", - "conversationBotDiscussionZone_discussionTopicLabel": "Тэма абмеркавання", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Усталюйце тэму абмеркавання", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Ключавыя словы для абмеркавання", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Усталюйце ключавыя словы для абмеркавання", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Спіс ключавых слоў, раздзяляных коскамі, для кіравання абмеркаваннем", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Адпраўляць падказку для абмеркавання па раскладзе", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Гадзіны паміж падказкамі для абмеркавання", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Рэагаваць на рэакцыю ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Рэакцыя для адпраўкі падказкі для абмеркавання", - "conversationBotCustomZone_title": "Налады карыстальніка", - "conversationBotCustomZone_customSystemPromptLabel": "Карыстальніцкае паведамленне сістэмы", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Усталюйце карыстальніцкае паведамленне сістэмы", - "conversationBotCustomZone_customSystemPromptEmptyError": "Адсутнічае карыстальніцкае паведамленне сістэмы", - "botConfig": "Налады бота і дзейнасці", - "botConfigNoPermissionTitle": "Няма дазволу", - "botConfigNoPermissionMessage": "Звяжыцеся з адміністратарам пакоя для змены канфігурацыі бота", - "addConversationBotDialogTitleInvite": "Пацвердзіце запрашэнне бота для абмеркавання", - "addConversationBotButtonInvite": "Запрасіць", - "addConversationBotDialogInviteConfirmation": "Запрасіць", - "addConversationBotButtonTitleRemove": "Пацвердзіце выдаленне бота для абмеркавання", - "addConversationBotButtonRemove": "Выдаліць", - "addConversationBotDialogRemoveConfirmation": "Выдаліць", - "conversationBotConfigConfirmChange": "Пацвердзіць", - "conversationBotStatus": "Запрасіць бота", - "conversationBotTextAdventureZone_title": "Тэкставае прыгода", - "conversationBotTextAdventureZone_instructionLabel": "Інструкцыі для майстра гульні", - "conversationBotTextAdventureZone_instructionPlaceholder": "Усталюйце інструкцыі для майстра гульні", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Адсутнічаюць інструкцыі для майстра гульні", - "studentAnalyticsNotAvailable": "Даныя студэнта ў цяперашні час недаступныя", - "roomDataMissing": "Магчыма, некаторыя даныя адсутнічаюць у пакоях, у якіх вы не з'яўляецеся ўдзельнікам.", "updatePhoneOS": "Магчыма, вам трэба абнавіць версію аперацыйнай сістэмы вашага прылады.", "wordsPerMinute": "Словы за хвіліну", "autoIGCToolName": "Аўтаматычна запускаць дапамогу для пісьма Pangea", "autoIGCToolDescription": "Аўтаматычна запускаць дапамогу для граматыкі і перакладу ў чат-прыкладанні Pangea перад адпраўкай майго паведамлення.", - "runGrammarCorrection": "Праверыць паведамленне", - "grammarCorrectionFailed": "Праблемы для вырашэння", - "grammarCorrectionComplete": "Выглядае добра!", "tooltipInstructionsTitle": "Не ўпэўнены, што гэта робіць?", "tooltipInstructionsMobileBody": "Затрымайце і трымайце элементы, каб праглядзець падказкі.", "tooltipInstructionsBrowserBody": "Навядзіце курсор на элементы, каб праглядзець падказкі.", "chatCapacity": "Магчымасць чата", "roomFull": "Гэтая пакой ужо запоўнена.", - "topicNotSet": "Тэма не ўстаноўлена.", - "chatCapacityNotSet": "У гэтым чаце няма абмежаванняў па ёмістасці.", "chatCapacityHasBeenChanged": "Ёмістасць чата была зменена", "chatCapacitySetTooLow": "Ёмістасць чата павінна быць не менш за {count}.", "chatCapacityExplanation": "Ёмістасць чата абмяжоўвае колькасць удзельнікаў у чаце.", - "chatExceedsCapacity": "Гэты чат перавышае сваю ёмістасць.", "tooManyRequest": "Занадта шмат запытаў, паспрабуйце пазней.", "enterNumber": "Калі ласка, увядзіце цэлае лік.", "buildTranslation": "Стварыце свой пераклад з выбараў вышэй", - "nonexistentSelection": "Выбар больш не існуе.", - "changeAnalyticsLanguage": "Змяніць мову аналітыкі", "practice": "Практыка", "noLanguagesSet": "Мовы не ўстаноўлены", - "noActivitiesFound": "Досыць на сёння! Паўторна вярніцеся пазней для большай колькасці.", - "hintTitle": "Парада:", "speechToTextBody": "Для галасавых паведамленняў вы можаце бачыць транскрыпт, а таксама балы слоў у хвіліну ад прамоўца.", "versionNotFound": "Версія не знойдзена", "fetchingVersion": "Збіраецца версія...", "versionFetchError": "Памылка пры атрымліванні версіі", "versionText": "Версія: {version}+{buildNumber}", - "languageButtonLabel": "Мова: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Аўтаматычны прайгравальнік перакладу", - "interactiveTranslatorAutoPlayDesc": "Запускае інтэрактыўны перакладчык без запыту.", - "changeAnalyticsView": "Змяніць выгляд аналітыкі", "l1TranslationBody": "Паведамленні на вашай асноўнай мове не будуць перакладацца.", "deleteSubscriptionWarningTitle": "У вас ёсць актыўная падпіска", "deleteSubscriptionWarningBody": "Выдаленне вашага акаўнта не аўтаматычна адмяняе вашу падпіску.", @@ -1572,9 +1214,7 @@ "error520Title": "Паспрабуйце яшчэ раз.", "error520Desc": "Прабачце, мы не змаглі зразумець ваша паведамленне...", "wordsUsed": "Колькасць слоў", - "errorTypes": "Тыпы памылак", "level": "Узровень", - "canceledSend": "Адменена адпраўленне", "morphsUsed": "Выкарыстаныя морфы", "translationChoicesBody": "Націсніце і ўтрымлівайце опцыю для падказкі.", "grammar": "Граматыка", @@ -1584,7 +1224,6 @@ "reportContentIssueTitle": "Паведаміць пра праблему з кантэнтам", "feedback": "Дадатковы водгук", "reportContentIssueDescription": "Ой! ШІ можа садзейнічаць персаналізаванаму навучанню, але... таксама можа галюцынаваць. Калі ласка, прадастаўце любы водгук, і мы паспрабуем зноў.", - "changeContent": "Ой! ШІ можа садзейнічаць персаналізаванаму навучанню, але... таксама можа галюцынаваць. Што яно павінна быць?", "clickTheWordAgainToDeselect": "Націсніце на выбранае слова, каб зняць выбар.", "l2SupportNa": "Няма даступна", "l2SupportAlpha": "Альфа", @@ -1818,7 +1457,6 @@ "grammarCopySPC": "Канкрэтнасць", "grammarCopyPARTTYPE": "Тып партытыўнага", "grammarCopyINTREL": "Пытальны-дакладны", - "grammarCopyNUMFORMpsor": "Часоў уласніка", "grammarCopyUNKNOWN": "Невядома", "grammarCopyNUMBERPSOR": "Нумар уладальніка", "grammarCopyPOSS": "Прынадлежнасць", @@ -1864,28 +1502,14 @@ "grammarCopyVOICEdir": "Прамы", "grammarCopyVOICEinv": "Зваротны", "grammarCopyVOICErcp": "Узаемны", - "enterPrompt": "Калі ласка, увядзіце сістэмнае паведамленне", - "selectBotLanguage": "Выберыце мову бота", - "chooseVoice": "Выберыце голас", - "enterLanguageLevel": "Калі ласка, увядзіце ўзровень мовы", - "enterDiscussionTopic": "Калі ласка, увядзіце тэму абмеркавання", - "selectBotChatMode": "Выберыце рэжым чата", - "messageNotInTargetLang": "Паведамленне не на мове мэты", "other": "Іншае", "levelShort": "УЗРОВЕНЬ {level}", - "botModeValidation": "Калі ласка, выберыце рэжым чата", "clickBestOption": "Выберыце найлепшыя варыянты для перакладу вашага паведамлення!", "completeActivitiesToUnlock": "Завяршыце хаця б адну дзейнасць, каб разблакаваць пераклад!", - "botSettingsSubtitle": "Запрасіце бота для мадэрацыі дзейнасці ў чаце", - "invitePeople": "Запрасіць карыстальнікаў", "noCapacityLimit": "Абмежаванняў па ёмістасці няма", "downloadGroupText": "Загрузіць тэкст групы", "notificationsOn": "Паведамленні ўключаны", "notificationsOff": "Паведамленні выключаны", - "chatCanBeFoundViaSearch": "Чат можна знайсці праз пошук", - "requireCodeToJoin": "Патрабуецца код для далучэння", - "canFindInSearch": "Можа быць знойдзены ў пошуку", - "addChatToSpace": "Дадаць чат", "createChatAndInviteUsers": "Стварыць чат і запрасіць карыстальнікаў", "updatedNewSpaceDescription": "Курсы дазваляюць кансалідаваць вашы чаты і будаваць прыватныя або публічныя супольнасці.", "joinWithCode": "Далучыцца з кодам", @@ -1921,39 +1545,19 @@ "constructUseCollected": "Збіраецца ў чаце", "constructUseNanDesc": "Ня прымяняецца", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Увайсці з імем карыстальніка і паролем", - "registrationEmailMessage": "Калі ласка, пацвердзіце сваю электронную пошту з дапамогай спасылкі, якая будзе адпраўлена туды. У некаторых выпадках электронная пошта можа прыйсці да 5 хвілін. Таксама праверце папку са спамам.", "enableTTSToolName": "Уключана тэксту ў гаварэнне", "enableTTSToolDescription": "Дазвольце прыкладанню генерыраваць вывад тэксту ў гаварэнне для частак тэксту на вашай мове.", - "couldNotFindTTS": "Мы не змаглі знайсці рухавік тэксту ў гаварэнне для вашай мовы.", - "ttsInstructionsHyperlink": "Націсніце тут, каб праглядзець інструкцыі па загрузцы новага голасу на вашым прыладзе.", - "createAnAccount": "Стварыць уліковы запіс", - "signIn": "Увайсці", - "signUpWithEmail": "Зарэгістравацца з дапамогай электроннай пошты", - "signUpWithGoogle": "Зарэгістравацца з Google", - "signUpWithApple": "Зарэгістравацца з Apple", "yourUsername": "Ваш імя карыстальніка", "yourEmail": "Ваша электронная пошта", - "pleaseEnterAnEmail": "Калі ласка, увядзіце адрас электроннай пошты", - "signInWithGoogle": "Увайсці з Google", - "signInWithApple": "Увайсці з Apple", - "chooseYourAvatar": "Выберыце ваш аватар", "iWantToLearn": "Я хачу навучыцца", - "letsStart": "Пачнем", - "pleaseAgreeToTOS": "Калі ласка, пагадзіцеся з Умовамі і Палажэннямі", "pleaseEnterEmail": "Калі ласка, увядзіце сапраўдны адрас электроннай пошты.", - "pleaseSelectALanguage": "Калі ласка, выберыце мову", "myBaseLanguage": "Мая асноўная мова", - "clickWordsInstructions": "🧻 Націсніце любую слова для падрабязнасцяў. 🤐", - "chooseBestDefinition": "Што азначае гэта слова?", "meaningSectionHeader": "Значэнне:", "formSectionHeader": "Формы, якія выкарыстоўваюцца ў чатах:", - "noEmojiSelectedTooltip": "Эмодзі не выбрана", "writingExercisesTooltip": "Пісьмо", "listeningExercisesTooltip": "Слуханне", "readingExercisesTooltip": "Чытанне", "meaningNotFound": "Значэнне не знойдзена.", - "formsNotFound": "Формы не знойдзены.", "chooseBaseForm": "Выберыце асноўную форму", "notTheCodeError": "Прабачце, гэта не код!", "totalXP": "Агульны XP", @@ -1993,9 +1597,6 @@ "pickAnEmoji": "Якое тваё любімае эмодзі для '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Згаджайце значэнні з словамі ў паведамленні!", "doubleClickToEdit": "Два разы клікніце, каб рэдагаваць.", - "removeFeature": "Выдаліць {feature}", - "chooseCorrectLabel": "Выберыце правільную метку.", - "levelPopupTitle": "Віншуем з дасягненнем\nУзроўню {level}", "activityPlannerTitle": "Планавальнік дзейнасці", "topicLabel": "Тэма", "topicPlaceholder": "Выберыце тэму...", @@ -2003,7 +1604,6 @@ "modePlaceholder": "Выберыце тып...", "learningObjectiveLabel": "Мэта навучання", "learningObjectivePlaceholder": "Выберыце мэту навучання...", - "mediaLabel": "Медыя, якую павінны дзяліцца навучэнцы", "languageOfInstructionsLabel": "Мова інструкцый да дзейнасці", "targetLanguageLabel": "Мэтавая мова", "cefrLevelLabel": "Узровень CEFR", @@ -2018,20 +1618,15 @@ "instructions": "Інструкцыі", "numberOfLearners": "Колькасць навучэнцаў", "mustBeInteger": "Павінна быць цэлым лікам, напрыклад, 1, 2, 3, ...", - "noLemmasFound": "Знайдзена слоўніка з больш чым {xp} XP. Працягвайце практыкавацца!", "constructUsePvmDesc": "Выраблена ў галасавым паведамленні", - "lockedMorphFeature": "Чакае разблакоўкі", "leaveSpaceDescription": "Пакінуўшы курс, вы пакінеце ўсе чаты ў ім. Іншыя карыстальнікі ўбачаць, што вы пакінулі курс.", - "whatIsLemma": "Што такое лемма?", "constructUseCorMmDesc": "Правільнае значэнне паведамлення", "constructUseIncMmDesc": "Няправільнае значэнне паведамлення", "constructUseIgnMmDesc": "Ігнараванае значэнне паведамлення", "clickForMeaningActivity": "Націсніце тут для выкліку значэння", "meaning": "Значэнне", "chatWith": "Група з {displayname}", - "slightlyOffensive": "Трохі абразлівы", "clickOnEmailLink": "Калі ласка, націсніце на спасылку ў электроннай пошце і працягвайце.\n\nПраверце папку спам, калі электронная пошта не прыйшла.", - "whoIsAllowedToJoinThisChat": "Хто можа далучыцца да гэтага чата", "dontForgetPassword": "Не забудзьце свой пароль!", "enableAutocorrectToolName": "Уключыць аўтаматычную карэкцыю на прыладзе", "enableAutocorrectDescription": "Калі ваша прылада падтрымлівае мову, якую вы вывучаеце, вы можаце ўключыць аўтаматычную карэкцыю, каб выпраўляць распаўсюджаныя памылкі падчас друку.", @@ -2059,48 +1654,26 @@ "autocorrectNotAvailable": "На жаль, ваша платформа ў цяперашні час не падтрымліваецца для гэтай функцыі. Сачыце за навінамі!", "pleaseUpdateApp": "Калі ласка, абновіце прыкладанне, каб працягнуць.", "chooseEmojiInstructionsBody": "Злучыце эмодзі з словамі, якія яны лепш за ўсё прадстаўляюць. Не хвалюйцеся! Ніякіх штрафных балаў за нязгоду. 😅", - "pickAnEmojiFor": "Выберыце смайлік для {lemma}", "analyticsVocabListBody": "Гэта ўся ваша лексіка! Калі вы зарабляеце XP за кожнае слова, яны пераўтвараюцца з насення ў поўнае цвіценне. Націсніце на любое слова, каб убачыць больш дэталей.", "morphAnalyticsListBody": "Гэта ўсе граматычныя канцэпцыі ў мове, якую вы вывучаеце! Вы разблакуеце іх па меры сустрэчы ў чатах. Націсніце для дэталей.", "knockSpaceSuccess": "Вы запыталі далучыцца да гэтага курса! Адміністратар адказвае на ваш запыт, калі атрымае яго 😀", - "joinByCode": "Далучыцца па кодзе", "chooseWordAudioInstructionsBody": "Паслухайце поўнае паведамленне. Потым супастаўце аўдыё з словамі.", "chooseMorphsInstructionsBody": "Націсніце на часткі пазаў для граматычных пытанняў!", - "inviteAndLaunch": "Запусціць і запрасіць", - "createOwnChat": "Стварыць уласны чат", "pleaseEnterInt": "Калі ласка, увядзіце лік", "home": "Галоўная", "join": "Далучыцца", "readingAssistanceOverviewBody": "Націсніце на кнопкі ніжэй для міні-гульняў па супастаўленні смайлікаў, аўдыё, значэнняў слоў і граматычных канцэпцый. Або націсніце на любое слова для дэталей.", - "learnByTexting": "Вучыцеся праз тэкставанне", - "levelSummaryTrigger": "Праглядзець рэзюме", "levelSummaryPopupTitle": "Рэзюме ўзроўню {level}", - "referFriends": "Рэкамендаваць сяброў", - "referFriendDialogTitle": "Запрасіце сябра ў ваш размову", - "referFriendDialogDesc": "Ці ёсць у вас сябра, які з захапленнем вывучае новую мову разам з вамі? Тады скапіруйце і адправіце гэтую спасылку-дакладнік, каб далучыцца і пачаць чат з вамі сёння.", - "youUnlocked": "Вы разблакавалі", "resetInstructionTooltipsTitle": "Скінуць падказкі інструкцый", "resetInstructionTooltipsDesc": "Націсніце, каб паказаць падказкі інструкцый, як для новага карыстальніка.", "selectForGrammar": "Выберыце іконку граматыкі для дзейнасцей і дэталяў.", - "newChatActivityTitle": "Дадаць цікаву дзейнасць?", - "newChatActivityDesc": "Зрабіце кожны групавы чат прыгодай з Планавальнікам дзейнасцей! Усталюйце захапляльныя тэмы і мэты для групы, і ажывіце размовы з дапамогай цудоўных малюнкаў. Заахвочвайце ўяўныя дыскусіі і падтрымлівайце вясёлы настрой без намаганняў!", - "exploreMore": "Даследуйце больш", "randomize": "Выпадковасць", "clear": "Ачысціць", "makeYourOwnActivity": "Стварыце сваю ўласную дзейнасць", "featuredActivities": "Рэкамендаваныя", - "goToChat": "Перайсці ў чат", "save": "Захаваць", - "selectActivity": "Выбраць дзейнасць", - "wordFocusListeningMultipleChoice": "Які аўдыё адпавядае слову?", "startChat": "Пачаць чат", "translationProblem": "Праблема з перакладам", - "perfectTranslation": "Ідэальны пераклад!", - "greatJobTranslation": "Выдатная праца з гэтым перакладам!", - "goodJobTranslation": "Добрая праца над гэтым перакладам.", - "makingProgress": "Вы робіце прагрэс!", - "keepPracticing": "Працягвайце практыкавацца!", - "niceJob": "Малюнак выдатны!", "askToJoin": "Пытацца далучыцца", "emptyChatWarningTitle": "Чат пусты", "emptyChatWarningDesc": "Вы не запрасілі нікога ў свой чат. Перайдзіце ў налады чата, каб запрасіць кантакты або бота. Таксама можна зрабіць гэта пазней.", @@ -2119,8 +1692,6 @@ "languageLevelC2Desc": "Я магу зразумець практычна ўсё, што чуў або чытаў, і выказвацца свабодна і дакладна.", "newVocab": "Новыя словы", "newGrammar": "Новыя граматычныя канцэпцыі", - "congratulationsOnReaching": "Віншуйце! Вы дасягнулі ўзроўню {level}!", - "seeDetails": "Глядзець дэталі", "choosePracticeMode": "Націсніце на адну з кнопак вышэй, каб пачаць практыкаванне", "ban": "Забароніць", "unban": "Адблакаваць", @@ -2134,8 +1705,6 @@ "timesUsedWithAssistance": "Колькасць выкарыстанняў з дапамогай", "shareInviteCode": "Падзяліцеся кодам запрашэння: {code}", "leaderboard": "Лідарская дошка", - "welcomeUser": "Вітаем, {user}", - "joinSpaceOnboardingDesc": "Ці ёсць у вас код або спасылка на публічны курс?", "skipForNow": "Прапусціць пакуль", "permissions": "Дазволы", "spaceChildPermission": "Хто можа дадаваць новыя чаты ў гэты курс", @@ -2143,12 +1712,8 @@ "defaultOption": "Па змаўчанні", "deleteChatDesc": "Вы ўпэўнены, што хочаце выдаліць гэты чат? Ён будзе выдалены для ўсіх удзельнікаў, і ўсе паведамленні ў чаце больш не будуць даступныя для практыкі або аналітыкі навучання.", "deleteSpaceDesc": "Курс і любыя выбраныя чаты будуць выдалены для ўсіх удзельнікаў, і ўсе паведамленні ў чаце больш не будуць даступныя для практыкі або аналітыкі навучання. Гэту дзею нельга адмяніць.", - "chatWithActivities": "Чат з дзейнасцю", "launch": "Запусціць", - "launchActivityToChats": "Запусціць дзейнасць у чаты", "searchChats": "Пошук чатаў", - "selectChats": "Выбраць чаты", - "selectChatToStart": "Гатова! Выберыце чат, каб пачаць", "maxFifty": "Максімум 50", "configureSpace": "Налада курса", "pinMessages": "Закрэпіць паведамленні", @@ -2162,9 +1727,7 @@ "announcements": "Абвесткі", "activities": "Мерапрыемствы", "access": "Доступ", - "botSettings": "Налады бота", "activitySuggestionTimeoutMessage": "Мы напружана працуем над стварэннем большых мерапрыемстваў для вас, калі ласка, праверце зноў праз хвіліну", - "accessSettingsWarning": "Ой! Выглядае, што ў вас няма дазволу на ўсталяванне правілаў доступу да гэтай пакоя. Вам варта праверыць іх, каб пераканацца, што яны адпавядаюць вашым патрэбам, і звярнуцца да адміністратара пакоя, калі трэба змяніць іх", "howSpaceCanBeFound": "Як можна знайсці гэты курс", "private": "Прыватны", "cannotBeFoundInSearch": "Немагчыма знайсці ў пошуку", @@ -2177,16 +1740,6 @@ "canBeFoundViaKnock": "• запыт на далучэнне і зацвярджэнне адміністратара", "youHaveLeveledUp": "Вы павысілі ўзровень!", "sendActivities": "Адправіць мерапрыемствы", - "getStarted": "Пачаць", - "getStartedBotChatDesc": "Гутарка з AI — выдатнае месца для пачатку, а інструменты чытання, пісьма, слухання і гаворкі ў Pangea робяць гэта лёгкім!", - "getStartedCommunitiesDesc": "Навучанне з супольнасцю — гэта тое, дзе вылучаецца Pangea Chat!\nВы можаце далучыцца да свайго класа, знайсці курс або нават стварыць свой уласны!", - "getStartedFriendsDesc": "Ці ёсць у вас сябра, які хоча вучыцца разам з вамі?", - "getStartedBotChatComplete": "Малюнак! Вы перагаворваецеся з ботам!", - "getStartedCommunitiesComplete": "Выдатна, вы далучыліся да курса!", - "getStartedComplete": "Вы скончылі гэты раздзел!\nПрацягвайце даследаваць нашы цудоўныя функцыі, перагаворваючыся з сябрамі!", - "getStartedFriendsComplete": "Ура! У вас ёсць сябры! 😉", - "getStartedBotChatButton": "Пачаць перагавор!", - "getStartedFriendsButton": "Пагаварыць з сябрам", "groupChat": "Групавы чат", "directMessage": "Прамое паведамленне", "newDirectMessage": "Новае прамое паведамленне", @@ -2202,7 +1755,6 @@ "mySavedActivities": "Мае захаваныя мерапрыемствы", "noSavedActivities": "Захаваныя мерапрыемствы адсутнічаюць", "saveActivity": "Захаваць гэтае мерапрыемства", - "yourSavedActivities": "Захаваныя мерапрыемствы", "failedToPlayVideo": "Не ўдалося прайграць відэа", "done": "Гатова", "inThisSpace": "У гэтым курсе", @@ -2241,37 +1793,27 @@ "maximumActivityParticipants": "Кожная дзейнасць можа мець максімум {count} удзельнік(і).", "pending": "Чакае", "inactive": "Неактыўны", - "unjoinedActivityMessage": "Хочаце ўдзельнічаць? Выберыце адкрытую ролю!\nЦі проста паглядзіце і назірайце за шоу!", - "fullActivityMessage": "Не саромейцеся глядзець шоу! Пакуль няма адкрытых роляў для ўдзелу, вы можаце праглядаць чат!", "confirmRole": "Пацвердзіць ролю", "openRoleLabel": "АДКРЫТА", "joinedTheActivity": "👋 {username} далучыўся як {role}", "finishedTheActivity": "🎯 {username} завяршыў гэтую дзейнасць", - "endActivityTitle": "Я скончыў", - "endActivityDesc": "Ці вы выканаўшы мэты?\nГэта ваша пацверджанне, што вы адступаеце ад тэкставання. Але не хвалюйцеся, забава працягваецца ў чаце! Адчувайце свабоду паглядзець і атрымліваць асалоду ад шоу, пакуль усе не націснуць 'Гатова'.", "archiveToAnalytics": "Дадаць у маі завершаныя дзейнасці", "activitySummaryError": "Зводкі дзейнасці недаступныя", "requestSummaries": "Запытаць зводкі", - "loadingActivitySummary": "Загрузка зводкі дзейнасці...", "generatingNewActivities": "Вы першы карыстальнік гэтай пары моў! Калі ласка, пачакайце хвіліну, мы рыхтуем дзейнасці спецыяльна для вас.", - "requestAccessTitle": "Папрасіць доступ да прагляду аналітыкі?", + "requestAccessTitle": "Запытаць доступ да аналітыкі?", "requestAccessDesc": "Ці хацелі б вы папрасіць доступ да прагляду аналітыкі ўдзельнікаў?\n\nКалі ўдзельнікі пагодзяцца, адміністратара гэтага курса змогуць праглядаць іх:\n • агульны слоўнік\n • агульныя граматычныя канцэпцыі\n • агульную колькасць завершаных сесій дзейнасці\n • канкрэтныя граматычныя канцэпцыі, выкарыстаныя правільна і няправільна\n\nЯны не змогуць праглядаць іх:\n • паведамленні ў чатах за межамі курса\n • спіс слоўніка", "requestAccess": "Папрасіць доступ ({count})", "analyticsInactiveTitle": "Запыты да неактыўных карыстальнікаў не маглі быць адпраўлены", "analyticsInactiveDesc": "Неактыўныя карыстальнікі, якія не ўвайшлі з моманту ўвядзення гэтай функцыі, не ўбачаць ваш запыт.\n\nКнопка Запытаць з'явіцца, калі яны вернуцца. Вы можаце паўторна адпраўляць запыты пазней, націснуўшы кнопку Запытаць пад іх імем, калі яна будзе даступная.", "accessRequestedTitle": "Запыт доступу да аналітыкі", - "accessRequestedDesc": "Адміністратары «{space}» запытваюць прагляд вашай аналітыкі навучання.\n\nКалі вы згаджаецеся, адміністратары гэтага курса змогуць праглядаць ваш:\n • агульны слоўнік\n • агульныя граматычныя канцэпцыі\n • агульную колькасць завершаных сесій дзейнасці\n • канкрэтныя граматычныя канцэпцыі, якія выкарыстоўваюцца, правільна і няправільна\n\nЯны не змогуць праглядаць вашыя:\n • паведамленні ў чатах за межамі курса\n • спіс слоўніка", - "allowAccess": "Дазволіць доступ", - "denyAccess": "Забароніць доступ", + "accessRequestedDesc": "Запыт на доступ ад адміністратара(аў): {admin} \n\nАдміністратары з “{space}” запытваюць доступ да вашай аналітыкі навучання.\n\nКалі вы згодны, яны змогуць убачыць вашу:\n • агульную лексіку\n • агульныя граматычныя канцэпцыі\n • агульную колькасць завершаных заняткаў\n • канкрэтныя граматычныя канцэпцыі, якія выкарыстоўваліся, правільна і няправільна\n\nЯны не змогуць убачыць вашу:\n • паведамленні ў чатах за межамі курса\n • спіс лексікі", "adminRequestedAccess": "Адміністратары папрасілі прагляд вашай аналітыкі.", "lastUpdated": "Абноўлена\n{time}", "activityFinishedMessage": "Усё гатова!", "endForAll": "Завяршыць для ўсіх", "newCourse": "Новы курс", - "newCourseSubtitle": "Які план курса вы хацелі б выкарыстоўваць?", - "failedToLoadCourses": "Не ўдалося загрузіць курсы", "numModules": "{num} модулі", - "numActivityPlans": "{num} планаў дзейнасці", "coursePlan": "План курса", "editCourseLater": "Вы можаце рэдагаваць назву шаблона, апісанні і выяву курса пазней.", "newCourseAccess": "Па змаўчанні курсы прыватныя і патрабуюць адабрэння адміністратара для далучэння. Вы можаце змяняць гэтыя налады ў любы час.", @@ -2285,17 +1827,11 @@ "accessDesc": "Вы можаце зрабіць свой курс адкрытым для свету! Або зрабіць яго прыватным і бяспечным.", "createGroupChatDesc": "У той час як пачынаюцца і заканчваюцца сесіі дзейнасці, групавыя чаты застануцца адкрытымі для звычайнай камунікацыі.", "deleteDesc": "Толькі адміністратары могуць выдаліць курс. Гэта деструктыўная дзея, якая выдаляе ўсіх карыстальнікаў і ўсе выбраныя чаты ў межах курса. Выконвайце асцярожна.", - "failedToLoadCourseInfo": "Не ўдалося загрузіць інфармацыю пра курс", "noCourseFound": "О, гэты курс патрабуе плану!\n\nПланы курса — гэта паслядоўнасць тэм і мерапрыемстваў для размовы.", "additionalParticipants": "+ {num} іншых", - "activityNotFoundForCourse": "Гэтая дзейнасць не была знойдзена ў курсе", - "courseChats": "Чаты курса", - "myActivitySessions": "Мае сесіі дзейнасці", "directMessages": "Прамыя паведамленні", "whatNow": "Што цяпер?", "chooseNextActivity": "Выберыце сваю наступную дзейнасць!", - "seeInstructions": "Глядзець інструкцыі", - "hideInstructions": "Схаваць інструкцыі", "letsGo": "Пачнем", "chooseRole": "Выберыце ролю!", "chooseRoleToParticipate": "Выберыце ролю для ўдзелу!", @@ -2305,23 +1841,15 @@ "inviteFriends": "Запрасіць сяброў", "waitNotDone": "Чакай, я яшчэ не скончыў!", "waitingForOthersToFinish": "Чакаю, пакуль астатнія скончаць...", - "saveToCompletedActivities": "Захаваць у завершаныя мерапрыемствы", "generatingSummary": "Аналізуючы чат і генеруючы вынікі", - "instructionsLanguage": "Мова інструкцый", "findCourse": "Знайсці курс", - "activityCompletedDesc": "Ваша завершанае мерапрыемства было дададзена ў аналітыку, дзе вы можаце праглядаць і практыкаваць выкарыстаную мову.", "pingParticipantsNotification": "{user} шукае карыстальнікаў для далучэння да сесіі мерапрыемства ў {room}", "course": "Курс", "courses": "Курсы", "courseName": "Назва курса", "createNewCourse": "Новы курс", - "publicCourses": "Публічныя курсы", "goToCourse": "Перайсці да курса: {course}", "activityComplete": "Гэтае мерапрыемства завершана. Вынікі мерапрыемства павінны быць даступныя ніжэй.", - "haventChattedMuch": "Здаецца, вы не шмат размаўлялі, паспрабуйце выкарыстоўваць больш слоў! Калі вы лічыце, што вы дасягнулі сваёй мэты, вы можаце скончыць мерапрыемства ніжэй.", - "haveChatted": "Здаецца, вы ўжо некаторы час перапісываецеся! Калі вы адчуваеце, што вы дасягнулі сваёй мэты, скончыце, каб завяршыць дзейнасць, і мы створым для вас рэзюме ў чаце!", - "userDoneAndWaiting": "{num1}/{num2} удзельнікаў скончылі. Чакайце, пакуль усе закончаць, і мы створым для вас рэзюме ў чаце! \n\nКалі вы хочаце паўторна далучыцца да размовы, націсніце кнопку працягнуць у чаце.", - "othersDoneAndWaiting": "{num1}/{num2} завершылі. Ці вы дасягнулі сваёй мэты?", "startNewSession": "Пачаць новую сесію", "joinOpenSession": "Далучыцца да адкрытай сесіі", "less": "менш", @@ -2331,7 +1859,6 @@ "openToJoin": "Адкрыта для далучэння", "results": "Вынікі", "activityDone": "Дзейнасць завершана!", - "moreLabel": "больш", "promoCodeInfo": "Прома-коды можна ўвесці на наступнай старонцы", "editsComingSoon": "Магчымасць рэдагаваць гарады і дзейнасці хутка з'явіцца.", "editing": "Рэдагаванне", @@ -2347,13 +1874,10 @@ "courseSavedSuccessfully": "Курс паспяхова захаваны", "addCoursePlan": "Дадаць план курса", "activityStatsButtonInstruction": "Націсніце тут, каб праглядаць статыстыку вашай дзейнасці і закрыць дзейнасць пасля завяршэння", - "readingAnalyticsDesc": "Націсніце практыкаванне на кожным паведамленні для практыкаванняў чытання.", - "speakingAnalyticsDesc": "Запісвайце галасавыя паведамленні для практыкаванняў маўлення.", - "audioAnalyticsDesc": "Націсніце практыкаванне на кожным паведамленні для практыкаванняў слухання.", "loginToAccount": "Увайсці ў мой рахунак", "appDescription": "Вучыце мову\nпраз адпраўку тэкставых паведамленняў сябрам.", "languages": "Мовы", - "chooseLanguage": "Выберыце мову.", + "chooseLanguage": "Выберыце мову мэты.", "planTrip": "Плануйце сваю паездку", "howAreYouTraveling": "Як вы падарожнічаеце?", "unlockPrivateTrip": "Разблакаваць прыватную паездку", @@ -2366,25 +1890,20 @@ "courseCode": "Якая сакрэтная пароль?", "courseCodeHint": "Код або спасылка на паездку", "unlockMyTrip": "Разблакаваць маю паездку", - "anyLevel": "Любой узровень", "signupOption": "Як вы хочаце зарэгістравацца?", "withApple": "З Apple", "withGoogle": "З Google", "withEmail": "З электроннай поштай", "createAccount": "Стварыць уліковы запіс", - "noCoursesFound": "Курсы не знойдзены", "loginWithEmail": "Увайсці з электроннай поштай", "usernameOrEmail": "Імя карыстальніка або электронная пошта", "email": "Электронная пошта", "forgotPassword": "Забылі пароль?", - "writingAnalyticsDesc": "Адпраўляйце паведамленні для практыкі пісьма.", "endActivity": "Завяршыць дзейнасць", "allLanguages": "Усе мовы", - "allCefrLevels": "Усе ўзроўні CEFR", "chatListTooltip": "Тут вы знойдзеце свае прамыя паведамленні! Націсніце на аватар любога карыстальніка і абярыце «пачаць размову», каб адправіць ДМ.", "directMessageBotTitle": "Прамае паведамленне Pangea Bot", "feedbackTitle": "Зваротная сувязь аб дзейнасці", - "feedbackDesc": "Як палепшыць гэтую дзейнасць? Калі вы можаце дадаць дэталі, мы ўнясем змены!", "feedbackHint": "Ваша меркаванне", "feedbackButton": "Адправіць зваротную сувязь", "directMessageBotDesc": "Гаварыць з людзьмі больш цікава, але... ШІ заўсёды гатовы!", @@ -2392,7 +1911,7 @@ "playWithAI": "Пакуль гуляйце з ШІ", "courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!", "@@locale": "be", - "@@last_modified": "2026-01-06 13:01:53.730932", + "@@last_modified": "2026-01-07 14:26:19.740329", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6096,30 +5615,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6143,18 +5638,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6179,18 +5662,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6227,38 +5698,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6267,62 +5710,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6359,10 +5758,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6371,14 +5766,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6387,46 +5774,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6435,10 +5786,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6495,18 +5842,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6515,14 +5850,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6551,18 +5878,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6571,42 +5886,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6615,14 +5898,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6643,26 +5918,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6683,10 +5938,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6719,25 +5970,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6794,34 +6026,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6850,778 +6054,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8614,14 +7050,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8633,14 +7061,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8672,10 +7092,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8684,18 +7100,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8704,14 +7108,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8736,38 +7132,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8813,10 +7181,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8841,10 +7205,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8869,10 +7229,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8881,66 +7237,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8961,42 +7261,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9021,154 +7297,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9185,18 +7313,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9217,14 +7333,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9241,10 +7349,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9257,14 +7361,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9273,14 +7369,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9308,26 +7396,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9356,18 +7424,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9404,10 +7464,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10340,10 +8396,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10524,34 +8576,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10564,10 +8588,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10576,14 +8596,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10600,22 +8612,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10763,14 +8759,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10779,34 +8767,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10815,54 +8775,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10871,10 +8795,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10891,10 +8811,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11066,26 +8982,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11114,10 +9010,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11174,30 +9066,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11226,18 +9102,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11354,14 +9222,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11374,10 +9234,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11386,14 +9242,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11410,14 +9258,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11426,22 +9266,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11454,18 +9278,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11482,22 +9294,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11506,30 +9306,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11602,18 +9378,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11670,18 +9434,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11710,30 +9462,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11786,18 +9522,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11846,46 +9574,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11950,10 +9638,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12125,14 +9809,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12160,14 +9836,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12180,10 +9848,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12219,19 +9883,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12256,14 +9915,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12272,14 +9923,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12332,10 +9975,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12348,18 +9987,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12372,14 +9999,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12420,26 +10039,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12467,10 +10074,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12481,36 +10084,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12547,10 +10120,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12615,18 +10184,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12691,10 +10248,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12715,10 +10268,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12735,10 +10284,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12747,10 +10292,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12763,10 +10304,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12791,16 +10328,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Запрасіць сяброў на мерапрыемства", - "inviteFriendsToActivityCourse": "Запрасіць сяброў на мерапрыемства і курс", "feedbackRespDesc": "Паглядзіце заўтра абнаўленні мерапрыемстваў.", "activityDropdownDesc": "Калі вы скончыце з гэтым мерапрыемствам, націсніце ніжэй", - "activityAnalyticsListBody": "Гэта вашы завершаныя мерапрыемствы! Пасля завяршэння мерапрыемстваў вы можаце праглядаць іх тут.", "languageMismatchTitle": "Несумяшчальнасць моў", "languageMismatchDesc": "Мэтавая мова не адпавядае мове гэтага мерапрыемства. Хацелі б абнавіць мэту мовы?", "reportWordIssueTooltip": "Паведаміць пра праблему з інфармацыяй пра слова", "tokenInfoFeedbackDialogTitle": "Зваротная сувязь пра інфармацыю пра слова", - "tokenInfoFeedbackDialogDesc": "AI робіць памылкі. Калі ласка, апішыце любыя праблемы, якія вы знайшлі з вышэйзгаданай інфармацыяй.", "noPublicCoursesFound": "Публічных курсаў не знойдзена. Ці хацелі б стварыць адзін?", "noCourseTemplatesFound": "Мы не змаглі знайсці курсы для вашай мэты мовы. Пакуль вы можаце пагутарыць з Pangea Bot і вярнуцца пазней для больш курсаў.", "botActivityJoinFailMessage": "Pangea Bot займае час на адказ. Калі ласка, паспрабуйце яшчэ раз пазней або запрасіце сябра.", @@ -12808,14 +10341,6 @@ "leaveDesc": "Пакінуць гэтае месца і ўсе чаты ў ім", "selectAll": "Выбраць усё", "deselectAll": "Адмяніць выбар усяго", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12824,10 +10349,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12844,10 +10365,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12881,7 +10398,6 @@ "newMessageInPangeaChat": "💬 Новае паведамленне ў чатзе Pangea", "shareCourse": "Падзяліцца курсам", "addCourse": "Дадаць курс", - "joinCourseWithCode": "Далучыцца да курса з кодам", "joinPublicCourse": "Далучыцца да публічнага курса", "vocabLevelsDesc": "Тут будуць размяшчацца словы слоўніка, калі вы іх узнясеце ўзровень!", "highlightVocabTooltip": "Выдзяліце мэтавыя словы ніжэй, адпраўляючы іх або практыкуючы з імі ў чаце", @@ -12905,10 +10421,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12917,7 +10429,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Не знойдзена асабістых паведамленняў або чатаў. Пераканайцеся, што ваш пошук напісаны правільна.", + "activityAnalyticsTooltipBody": "Гэта вашы захаваныя актыўнасці для агляду і практыкі.", + "numSavedActivities": "Колькасць захаваных актыўнасцяў", + "saveActivityTitle": "Захаваць актыўнасць", + "saveActivityDesc": "Малайчына! Захавайце гэтую актыўнасць для далейшага агляду і практыкі", + "levelInfoTooltip": "Тут вы можаце ўбачыць усе балы, якія вы зарабілі, і як!", + "alreadyInCourseWithID": "Вы ўжо ў курсе з гэтым планам. Ці хочаце вы стварыць курс з тым жа планам або перайсці да існуючага курса?", + "goToExistingCourse": "Перайсці да існуючага курса", + "emojiView": "Від эмодзі", + "feedbackDialogDesc": "Я таксама памыляюся! Што-небудзь, што дапаможа мне палепшыцца?", + "contactHasBeenInvitedToTheCourse": "Кантакт быў запрошаны на курс", + "activityStatsButtonTooltip": "Інфармацыя аб актыўнасці", + "allow": "Дазволіць", + "deny": "Адмовіць", + "enabledRenewal": "Уключыць аднаўленне падпіскі", + "subscriptionEndsOn": "Падпіска заканчваецца", + "subscriptionRenewsOn": "Падпіска аднаўляецца", + "waitForSubscriptionChanges": "Змены ў вашай падпісцы могуць заняць некаторы час, каб адлюстравацца ў прыкладанні.", + "subscribeReadingAssistance": "Падпісацца, каб разблакаваць інструменты паведамленняў", + "aceDisplayName": "Achinese", + "achDisplayName": "Аколі", + "afDisplayName": "Афрыканс", + "akDisplayName": "Акан", + "alzDisplayName": "Алур", + "amDisplayName": "Амхарская", + "arDisplayName": "Арабская", + "asDisplayName": "Ассамская", + "awaDisplayName": "Авадхі", + "ayDisplayName": "Аймара", + "azDisplayName": "Азербайджанская", + "baDisplayName": "Башкірская", + "banDisplayName": "Балийская", + "bbcDisplayName": "Батака Тоба", + "beDisplayName": "Беларуская", + "bemDisplayName": "Бемба", + "bewDisplayName": "Бетаўі", + "bgDisplayName": "Болгарская", + "bhoDisplayName": "Бходжпуры", + "bikDisplayName": "Бікал", + "bmDisplayName": "Бамбара", + "bnDisplayName": "Бенгальская", + "bnBDDisplayName": "Бенгальская (Бангладэш)", + "bnINDisplayName": "Бенгальская (Індыя)", + "brDisplayName": "Брэтонская", + "bsDisplayName": "Боснійская", + "btsDisplayName": "Батака Сімалунгун", + "btxDisplayName": "Батака Каро", + "buaDisplayName": "Бурятская", + "caDisplayName": "Каталонская", + "cebDisplayName": "Себуанская", + "cggDisplayName": "Чыга", + "chmDisplayName": "Мары", + "ckbDisplayName": "Цэнтральны курдскі", + "cnhDisplayName": "Хакха Чын", + "coDisplayName": "Корсіканы", + "crhDisplayName": "Крымскі турэцкі", + "crsDisplayName": "Сесelwa креольскі французскі", + "csDisplayName": "Чэшскі", + "cvDisplayName": "Чуваш", + "cyDisplayName": "Уэльс", + "daDisplayName": "Данская", + "deDisplayName": "Нямецкая", + "dinDisplayName": "Дзінка", + "doiDisplayName": "Догры", + "dovDisplayName": "Домбе", + "dzDisplayName": "Дзонгка", + "eeDisplayName": "Эве", + "enDisplayName": "Англійская", + "enAUDisplayName": "Англійская (Аўстралія)", + "enGBDisplayName": "Англійская (Вялікабрытанія)", + "enINDisplayName": "Англійская (Індыя)", + "enUSDisplayName": "Англійская (ЗША)", + "eoDisplayName": "Эсперанта", + "esDisplayName": "Іспанская", + "esESDisplayName": "Іспанская (Іспанія)", + "esMXDisplayName": "Іспанская (Мексіка)", + "euDisplayName": "Баскская", + "faDisplayName": "Персідская", + "ffDisplayName": "Фула", + "fiDisplayName": "Фінская", + "filDisplayName": "Філіпінскі", + "fjDisplayName": "Фіджыйскі", + "foDisplayName": "Фарэрскі", + "frDisplayName": "Французскі", + "frCADisplayName": "Французскі (Канада)", + "frFRDisplayName": "Французскі (Францыя)", + "fyDisplayName": "Заходні фрызскі", + "gaDisplayName": "Ірландскі", + "gaaDisplayName": "Га", + "gdDisplayName": "Шатландскі гэльскі", + "glDisplayName": "Галісійская", + "gnDisplayName": "Гуарані", + "gomDisplayName": "Гоанскі канкні", + "guDisplayName": "Гуджараці", + "haDisplayName": "Хаўса", + "hawDisplayName": "Гавайская", + "heDisplayName": "Іўрыт", + "hiDisplayName": "Гіндзі", + "hilDisplayName": "Хілігайнон", + "hmnDisplayName": "Хмонг", + "hneDisplayName": "Чхатісгархі", + "hrDisplayName": "Харвацкі", + "hrxDisplayName": "Хунсрык", + "htDisplayName": "Гаіцяна Крэольская", + "huDisplayName": "Венгерская", + "hyDisplayName": "Армянская", + "idDisplayName": "Інданезійская", + "igDisplayName": "Ігбо", + "iloDisplayName": "Ілоканская", + "isDisplayName": "Ісландская", + "itDisplayName": "Італьянская", + "jaDisplayName": "Японская", + "jvDisplayName": "Яванская", + "kaDisplayName": "Грузінская", + "kkDisplayName": "Казахская", + "kmDisplayName": "Кхмерская", + "knDisplayName": "Каннада", + "koDisplayName": "Карэйская", + "kokDisplayName": "Конкані", + "kriDisplayName": "Крыё", + "ksDisplayName": "кашмірскі", + "ktuDisplayName": "кітуба (Дэмакратычная Рэспубліка Конга)", + "kuDisplayName": "курдскі", + "kyDisplayName": "кіргіскі", + "laDisplayName": "лацінскі", + "lbDisplayName": "люксембургскі", + "lgDisplayName": "ганда", + "liDisplayName": "лімбургскі", + "lijDisplayName": "лігурыйскі", + "lmoDisplayName": "ломбардскі", + "lnDisplayName": "Лінгала", + "loDisplayName": "Лаос", + "ltDisplayName": "Літоўская", + "ltgDisplayName": "Латгальская", + "luoDisplayName": "Луо (Кенія і Танзанія)", + "lusDisplayName": "Мізо", + "lvDisplayName": "Латышская", + "maiDisplayName": "Майтхілі", + "makDisplayName": "Макасар", + "mgDisplayName": "Малагасійская", + "miDisplayName": "Маоры", + "minDisplayName": "Мінаккабау", + "mkDisplayName": "Македонская", + "mlDisplayName": "Малаялам", + "mnDisplayName": "Мангол", + "mniDisplayName": "Маніпуры", + "mrDisplayName": "Мараці", + "msDisplayName": "Малай", + "msArabDisplayName": "Малай (арабскі)", + "msMYDisplayName": "Малай (Малайзія)", + "mtDisplayName": "Мальтыйская", + "mwrDisplayName": "Марварі", + "myDisplayName": "Бірманская", + "nanDisplayName": "Мінь Нан", + "nbDisplayName": "Нарвежская (Бокмол)", + "neDisplayName": "Непальская", + "newDisplayName": "Невары", + "nlDisplayName": "Галандская", + "nlBEDisplayName": "Фламандская", + "noDisplayName": "Нарвежская", + "nrDisplayName": "Паўднёвы Ндебеле", + "nsoDisplayName": "Паўночны Сота", + "nusDisplayName": "Нuer", + "nyDisplayName": "Ньянджа", + "ocDisplayName": "Оксітан", + "omDisplayName": "Орома", + "orDisplayName": "Одыя", + "paDisplayName": "Панджабі", + "paArabDisplayName": "Панджабі (Шахмукхі)", + "paINDisplayName": "Панджабі (Гурмукхі)", + "pagDisplayName": "Пангасінан", + "pamDisplayName": "Пампанга", + "papDisplayName": "Папіаменто", + "plDisplayName": "Польская", + "psDisplayName": "Пашту", + "ptDisplayName": "Партугальская", + "ptBRDisplayName": "Партугальская (Бразілія)", + "ptPTDisplayName": "Партугальская (Партугалія)", + "quDisplayName": "Кечуа", + "rajDisplayName": "Раджастхані", + "rnDisplayName": "Рунді", + "roDisplayName": "Румынская", + "roMDDisplayName": "Малдоўская", + "romDisplayName": "Рамскі", + "ruDisplayName": "Руская", + "rwDisplayName": "Кіньяруанда", + "saDisplayName": "Санскрыт", + "satDisplayName": "Санталі", + "scnDisplayName": "Сіцылійская", + "sdDisplayName": "Сіндзі", + "sgDisplayName": "Санго", + "shnDisplayName": "Шан", + "siDisplayName": "Сінгальская", + "skDisplayName": "Славакская", + "slDisplayName": "Славенская", + "smDisplayName": "Самoan", + "snDisplayName": "Шона", + "soDisplayName": "Сомалійская", + "sqDisplayName": "Албанская", + "srDisplayName": "Сербская", + "srMEDisplayName": "Чарнагорскі", + "ssDisplayName": "Сваці", + "stDisplayName": "Паўднёвы Сота", + "suDisplayName": "Сунданскі", + "svDisplayName": "Шведскі", + "swDisplayName": "Свахілі", + "szlDisplayName": "Сілезскі", + "taDisplayName": "Тамільскі", + "teDisplayName": "Тэлугу", + "tetDisplayName": "Тэтум", + "tgDisplayName": "Таджыкі", + "thDisplayName": "Тайскі", + "tiDisplayName": "Тыгрынья", + "tkDisplayName": "Туркменскі", + "tlDisplayName": "Тагалог", + "tnDisplayName": "Цвана", + "trDisplayName": "Турэцкі", + "tsDisplayName": "Цонга", + "ttDisplayName": "Татар", + "ugDisplayName": "Уйгур", + "ukDisplayName": "Украінская", + "urDisplayName": "Урду", + "urINDisplayName": "Урду (Індыя)", + "urPKDisplayName": "Урду (Пакістан)", + "uzDisplayName": "Узбекская", + "viDisplayName": "В'етнамская", + "wuuDisplayName": "У", + "xhDisplayName": "Ксоса", + "yiDisplayName": "Ідыш", + "yoDisplayName": "Ёруба", + "yuaDisplayName": "Юкатэка", + "yueDisplayName": "Кантонскі", + "yueCNDisplayName": "Кантонскі (Кітай)", + "yueHKDisplayName": "Кантонскі (Ганконг)", + "zhDisplayName": "Кітайская", + "zhCNDisplayName": "Кітайская (Спрошчаная)", + "zhTWDisplayName": "Кітайская (Традыцыйная)", + "zuDisplayName": "Зулу", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12984,6 +11682,7 @@ "notStartedActivitiesTitle": "Адкрытыя сесіі ({num})", "inProgressActivitiesTitle": "Ідзе зараз ({num})", "completedActivitiesTitle": "Завершана ({num})", + "pickDifferentActivity": "Выберыце іншую дзейнасць", "inOngoingActivity": "У вас ёсць бягучая актыўнасць!", "@notStartedActivitiesTitle": { "type": "String", @@ -13009,10 +11708,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ваша мэтавая мова не супадае з гэтым паведамленнем. Абнавіць вашу мэтавую мову?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Гэта ўсе ўдзельнікі гэтага курса. Націсніце на аватар любога карыстальніка і выберыце «пачаць размову», каб адправіць асабістае паведамленне.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Гэтае слова будзе назаўсёды выдалена з вашай аналітыкі", + "woman": "Жанчына", + "man": "Мужчына", + "otherGender": "Іншае", + "unselectedGender": "Выберыце опцыю полу", + "gender": "Пол", + "chatParticipantTooltip": "Гэта ўсе ўдзельнікі гэтага чата. Націсніце на аватар любога карыстальніка і выберыце «пачаць размову», каб адправіць асабістае паведамленне.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Інструменты навучання адключаны для паведамленняў, якія не знаходзяцца на вашай мове мэты.", + "vocabEmoji": "Эмодзі слоўніка", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Запытаць рэгенерацыю", + "optionalRegenerateReason": "(Неабавязкова) Прычына", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Вы ўсталявалі эмодзі для {lemma}! Мы будзем выкарыстоўваць гэтае эмодзі для прадстаўлення слова ў практычных дзейнасцях у будучыні.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Чакаем, пакуль ўваход будзе завершаны", + "ssoDialogDesc": "Мы адкрылі новую ўкладку, каб вы маглі бяспечна ўвайсці.", + "ssoDialogHelpText": "🤔 Калі вы не ўбачылі новую ўкладку, калі ласка, праверце свой блакіроўшчык усплывальных акнаў.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Адключыць моўныя інструменты", + "disableLanguageToolsDesc": "Ці жадаеце вы адключыць аўтаматычную моўную дапамогу?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Дазвол адхілены. Уключыце дазволы на запіс, каб запісваць аўдыё паведамленні.", + "genericWebRecordingError": "Што-то пайшло не так. Мы рэкамендуем выкарыстоўваць браўзер Chrome для запісу паведамленняў.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Для найлепшага досведу выкарыстання гэтага прыкладання, калі ласка, пашырыце памер экрана.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Дзеянні для адкрыцця наступнай тэмы", "activitiesToUnlockTopicDesc": "Усталюйце колькасць дзеянняў для адкрыцця наступнай тэмы курса", "@activitiesToUnlockTopicTitle": { @@ -13022,5 +11839,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Правільная практыка вызначэння слоўнікавага запасу", + "constructUseIncLMDesc": "Неправільная практыка вызначэння слоўнікавага запасу", + "constructUseCorLADesc": "Правільная практыка аўдыё слоўнікавага запасу", + "constructUseIncLADesc": "Неправільная практыка аўдыё слоўнікавага запасу", + "constructUseBonus": "Бонус падчас практыкі слоўнікавага запасу", + "practiceVocab": "Практыкаваць слоўнік", + "selectMeaning": "Выберыце значэнне", + "selectAudio": "Выберыце адпаведнае аўдыё", + "congratulations": "Сардэчна віншуем!", + "anotherRound": "Яшчэ адзін раунд", + "noActivityRequest": "Няма бягучага запыту на актыўнасць.", + "quit": "Выйсці", + "congratulationsYouveCompletedPractice": "Сардэчна віншуем! Вы завяршылі сесію практыкі.", + "mustHave10Words": "Вы павінны мець не менш за 10 слоў для практыкавання. Паспрабуйце пагаварыць з сябрам або Pangea Bot, каб даведацца больш!", + "botSettings": "Налады бота", + "activitySettingsOverrideWarning": "Мова і ўзровень мовы вызначаюцца планам актыўнасці", + "voice": "Голас", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index 44eaa88f0..0c4ceee1b 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:28.649450", + "@@last_modified": "2026-01-07 14:28:06.931186", "about": "সম্পর্কে", "@about": { "type": "String", @@ -3370,28 +3370,16 @@ "commandHint_logoutall": "সকল সক্রিয় ডিভাইস থেকে লগআউট করুন", "displayNavigationRail": "মোবাইলে নেভিগেশন রেল দেখান", "customReaction": "কাস্টম প্রতিক্রিয়া", - "accountInformation": "অ্যাকাউন্ট তথ্য", - "addGroupDescription": "একটি চ্যাট বিবরণ যোগ করুন", - "addNewFriend": "নতুন বন্ধু যোগ করুন", - "alreadyHaveAnAccount": "অ্যাকাউন্ট ইতিমধ্যে আছে?", - "createNewGroup": "একটি নতুন চ্যাট তৈরি করুন", - "editChatPermissions": "চ্যাট অনুমতিগুলি সম্পাদনা করুন", "ignore": "ব্লক করুন", "ignoredUsers": "ব্লক করা ব্যবহারকারীরা", "writeAMessageLangCodes": "এখানে {l1} বা {l2} লিখুন...", "requests": "অনুরোধসমূহ", - "allCorrect": "এটাই আমি বলতাম! সুন্দর!", - "newWayAllGood": "এটাই আমি বলতাম না কিন্তু দেখতেও ভালো লাগছে!", - "othersAreBetter": "হুম, হয়তো আরও ভালো বলার উপায় আছে।", "holdForInfo": "শব্দের তথ্যের জন্য ক্লিক ও ধরে রাখুন।", "greenFeedback": "এটাই আমি রাখতাম!", "yellowFeedback": "হুম, আপনি এটা চেষ্টা করতে পারেন এবং দেখুন কাজ করে কিনা! এই শব্দটি ব্যবহার করতে, আবার ক্লিক করুন।", "redFeedback": "আমি মনে করি এটা সঠিক নয়...", "itInstructionsTitle": "আমি আপনাকে অনুবাদ করতে সাহায্য করতে পারি!", "itInstructionsBody": "শব্দের তথ্যের জন্য বিকল্পগুলিতে ক্লিক ও ধরে রাখুন।", - "oneday": "গত ২৪ ঘণ্টা", - "oneweek": "গত ৭ দিন", - "onemonth": "গত মাস", "gaTooltip": "ব্যাকরণ সহায়তার জন্য L2 ব্যবহার করুন", "taTooltip": "অনুবাদ সহায়তার জন্য L2 ব্যবহার করুন", "unTooltip": "অন্য", @@ -3401,58 +3389,27 @@ "interactiveTranslatorAllowed": "ছাত্রের পছন্দ", "interactiveTranslatorRequired": "প্রয়োজনীয়", "notYetSet": "এখনো সেট হয়নি", - "myLearning": "আমার বিশ্লেষণ", "waTooltip": "সহায়তা ছাড়াই L2 ব্যবহার", - "changeDateRange": "তারিখের পরিসর পরিবর্তন করুন", - "classDescription": "বর্ণনা", - "addStudents": "লিঙ্ক বা কোড দ্বারা ব্যবহারকারীদের আমন্ত্রণ জানান", - "copyClassLink": "আমন্ত্রণ লিঙ্ক কপি করুন", - "copyClassCode": "আমন্ত্রণ কোড কপি করুন", - "inviteStudentByUserName": "ব্যবহারকারীর নাম দ্বারা ব্যবহারকারীদের আমন্ত্রণ জানান", "languageSettings": "ভাষার সেটিংস", "interactiveTranslator": "অনুবাদ সহায়তা", - "shareVideo": "ভিডিও শেয়ার করুন", - "shareVideoDesc": "চ্যাটে ভিডিও শেয়ার করতে এইটিকে চালু করুন।", - "shareFiles": "ফাইল শেয়ার করুন", - "selectLanguageLevel": "ভাষার স্তর নির্বাচন করুন", "noIdenticalLanguages": "অনুগ্রহ করে ভিন্ন ভিত্তি এবং লক্ষ্য ভাষা নির্বাচন করুন", - "iWantALanguagePartnerFrom": "থেকে:", - "worldWide": "বিশ্বব্যাপী", - "noResults": "কোন ফলাফল নেই! আপনার অনুসন্ধানটি বিস্তৃত করার চেষ্টা করুন।", "searchBy": "দেশ এবং ভাষা দ্বারা অনুসন্ধান করুন", - "iWantAConversationPartner": "আমি একটি কথোপকথনের অংশীদার চাই যারা", - "iWantALanguagePartnerWhoSpeaks": "বলে:", - "iWantALanguagePartnerWhoIsLearning": "শিখছে:", "joinWithClassCode": "কোর্সে যোগ দিন", - "joinWithClassCodeHint": "আমন্ত্রণ কোড লিখুন", - "languageLevelPreA1": "সত্যিই শুরু (প্রি A1)", - "languageLevelA1": "শুরু (A1)", - "languageLevelA2": "প্রাথমিক (A2)", - "languageLevelB1": "মধ্যবর্তী (B1)", - "languageLevelB2": "উচ্চ মধ্যবর্তী (B2)", - "languageLevelC1": "উন্নত (C1)", - "languageLevelC2": "মাস্টারি (C2)", + "languageLevelPreA1": "নবীন নিম্ন (প্রি A1)", + "languageLevelA1": "নবীন মধ্য (এ1)", + "languageLevelA2": "নবীন উচ্চ (A2)", + "languageLevelB1": "মধ্যবর্তী মধ্য (B1)", + "languageLevelB2": "উন্নত নিম্ন (B2)", + "languageLevelC1": "উন্নত মধ্য (C1)", + "languageLevelC2": "শ্রেষ্ঠ (C2)", "changeTheNameOfTheClass": "নাম পরিবর্তন করুন", "changeTheNameOfTheChat": "চ্যাটের নাম পরিবর্তন করুন", - "askPangeaBot": "প্রশ্ন করুন পাঞ্জিয়া বটকে একটি প্রাসঙ্গিক সংজ্ঞার জন্য।", "sorryNoResults": "দুঃখিত, কোনও ফলাফল পাওয়া যায়নি।", "ignoreInThisText": "অগ্রাহ্য করুন", - "helpMeTranslate": "হ্যাঁ!", - "needsItShortMessage": "লক্ষ্য থেকে বাইরে", "needsItMessage": "অপেক্ষা করুন, এটি {targetLanguage} নয়! আপনি কি অনুবাদে সাহায্য চান?", - "needsIgcMessage": "এই বার্তাটিতে একটি ব্যাকরণ ত্রুটি রয়েছে।", - "tokenTranslationTitle": "একটি শব্দ আপনার মূল ভাষায় রয়েছে।", - "spanTranslationDesc": "নিচে সম্ভাব্য অনুবাদ দেখুন।", - "spanTranslationTitle": "কিছু শব্দ আপনার মূল ভাষায় রয়েছে।", - "l1SpanAndGrammarTitle": "লক্ষ্য ভাষার বাইরে", - "l1SpanAndGrammarDesc": "এটি আপনার মূল ভাষায় থাকতে পারে বা এটি একটি ব্যাকরণ ত্রুটি হতে পারে।", - "otherTitle": "আপনার একটি ত্রুটি রয়েছে।", - "otherDesc": "নিচে সম্ভাব্য সংশোধন দেখুন।", "countryInformation": "আমার দেশ", - "myLanguages": "আমার মূল এবং লক্ষ্য ভাষা", "targetLanguage": "লক্ষ্য ভাষা", "sourceLanguage": "মূল ভাষা", - "languagesISpeak": "আমি যে ভাষায় কথা বলি", "updateLanguage": "আমার ভাষা", "whatLanguageYouWantToLearn": "আপনি কোন ভাষা শিখতে চান?", "whatIsYourBaseLanguage": "তোমার মূল ভাষা কী?", @@ -3467,13 +3424,8 @@ "errorDisableLanguageAssistanceUserDesc": "অনুবাদ সহায়তা এবং ব্যাকরণ সহায়তা সেটিংস আপডেট করতে এখানে ক্লিক করুন", "errorDisableITClassDesc": "এই কোর্সের জন্য অনুবাদ সহায়তা বন্ধ করা হয়েছে।", "errorDisableIGCClassDesc": "এই কোর্সের জন্য ব্যাকরণ সহায়তা বন্ধ করা হয়েছে।", - "itIsDisabled": "ইন্টারেক্টিভ অনুবাদ অক্ষম", - "igcIsDisabled": "ইন্টারেক্টিভ ব্যাকরণ পরীক্ষা অক্ষম", - "goToLearningSettings": "শিক্ষার সেটিংসে যান", "error405Title": "ভাষা সেট করা হয়নি", "error405Desc": "অনুগ্রহ করে মূল মেনু > শিক্ষার সেটিংসে আপনার ভাষা সেট করুন।", - "loginOrSignup": "সাইন ইন করুন", - "iAgreeToThe": "আমি সম্মত", "termsAndConditions": "শর্তাবলী ও শর্তসমূহ", "andCertifyIAmAtLeast13YearsOfAge": "এবং আমি নিশ্চিত করি যে আমি কমপক্ষে ১৬ বছর বয়সী।", "error502504Title": "উফ, অনলাইনে অনেক ছাত্র রয়েছে!", @@ -3481,40 +3433,21 @@ "error404Title": "অনুবাদ ত্রুটি!", "error404Desc": "পাঙ্গিয়া বট নিশ্চিত নয় কিভাবে এটি অনুবাদ করবে...", "errorPleaseRefresh": "আমরা এটি দেখছি! দয়া করে রিফ্রেশ করুন এবং আবার চেষ্টা করুন।", - "toggleIT": "ইন্টারেক্টিভ অনুবাদ", - "toggleIGC": "ইন্টারেক্টিভ ব্যাকরণ পরীক্ষা", - "toggleToolSettingsDescription": "এখানে আপনি আপনার ব্যক্তিগত ভাষার সরঞ্জাম সেটিংস পরিবর্তন করতে পারেন।", "connectedToStaging": "স্টেজিং-এ সংযুক্ত", "learningSettings": "শিক্ষার সেটিংস", - "sendVoiceNotes": "ভয়েস নোট পাঠান", - "sendVoiceNotesDesc": "শিক্ষার্থীদের চ্যাটে ভয়েস নোট পাঠানোর জন্য এটি চালু করুন।", - "chatTopic": "চ্যাট বিষয়", - "chatTopicDesc": "একটি চ্যাট বিষয় সেট করুন", - "inviteStudentByUserNameDesc": "যদি আপনার ছাত্রের ইতিমধ্যে একটি অ্যাকাউন্ট থাকে, আপনি তাদের খুঁজে পেতে পারেন।", "participants": "অংশগ্রহণকারীরা", - "almostPerfect": "এটি সঠিক মনে হচ্ছে! আমি যা বলতাম তা এখানে।", - "prettyGood": "খুব ভালো! আমি যা বলতাম তা এখানে।", - "letMeThink": "হুম, দেখুন আপনি কিভাবে করেছেন!", "clickMessageTitle": "সাহায্য দরকার?", "clickMessageBody": "ভাষা সরঞ্জামগুলির জন্য একটি বার্তা ক্লিক করুন যেমন অনুবাদ, পুনরায় চালানো এবং আরও অনেক কিছু!", - "understandingMessagesTitle": "সংজ্ঞা এবং অনুবাদ!", - "understandingMessagesBody": "সংজ্ঞার জন্য আন্ডারলাইন করা শব্দগুলিতে ক্লিক করুন। বার্তার বিকল্পগুলির সাথে অনুবাদ করুন (উপরে ডানদিকে)।", "allDone": "সব শেষ!", "vocab": "শব্দভাণ্ডার", "low": "আমাদের প্রমাণ আছে যে ব্যবহারকারী এই শব্দগুলো বোঝে না।", "medium": "এই শব্দগুলো ব্যবহার করা হয়েছে। এটি স্পষ্ট নয় যে শব্দগুলো পুরোপুরি বোঝা হয়েছে বা না।", "high": "আমাদের প্রমাণ আছে যে ব্যবহারকারী এই শব্দগুলো বোঝে।", - "unknownProficiency": "এই শব্দগুলো পাঞ্জিয়া চ্যাটে ব্যবহার হয়নি।", - "changeView": "দৃশ্য পরিবর্তন করুন।", - "clearAll": "সব শব্দ মুছে ফেলুন?", - "generateVocabulary": "শিরোনাম এবং বিবরণ থেকে শব্দভাণ্ডার তৈরি করুন", - "generatePrompts": "প্রম্পট তৈরি করুন", "subscribe": "সাবস্ক্রাইব করুন", "getAccess": "এখনই সাবস্ক্রাইব করুন!", "subscriptionDesc": "বার্তা পাঠানো বিনামূল্যে! ইন্টারেক্টিভ অনুবাদ, ব্যাকরণ পরীক্ষা এবং শেখার বিশ্লেষণ আনলক করতে সাবস্ক্রাইব করুন।", "subscriptionManagement": "সাবস্ক্রিপশন পরিচালনা", "currentSubscription": "বর্তমান সাবস্ক্রিপশন", - "changeSubscription": "আপনার সাবস্ক্রিপশন পরিবর্তন করুন", "cancelSubscription": "আপনার সাবস্ক্রিপশন বাতিল করুন", "selectYourPlan": "আপনার পরিকল্পনা নির্বাচন করুন", "subsciptionPlatformTooltip": "আপনার মূল ডিভাইসে লগইন করে আপনার সাবস্ক্রিপশন পরিকল্পনা পরিচালনা করুন", @@ -3523,9 +3456,6 @@ "paymentHistory": "পেমেন্ট ইতিহাস", "emptyChatDownloadWarning": "খালি চ্যাট ডাউনলোড করা যাবে না", "update": "আপডেট", - "updateDesc": "এখন আপনি এই অ্যাপটি {localVersion} থেকে {storeVersion} এ আপডেট করতে পারেন", - "maybeLater": "শিগগিরই", - "mainMenu": "মূল মেনু", "toggleImmersionMode": "ইমার্শন মোড", "toggleImmersionModeDesc": "সক্ষম করলে, সব বার্তা আপনার লক্ষ্য ভাষায় প্রদর্শিত হবে। এই সেটিংটি ভাষা বিনিময়ে সবচেয়ে বেশি উপকারী।", "itToggleDescription": "এই ভাষা শেখার টুলটি আপনার মূল ভাষার শব্দগুলি চিহ্নিত করবে এবং আপনাকে সেগুলি আপনার লক্ষ্য ভাষায় অনুবাদ করতে সাহায্য করবে। যদিও বিরল, AI কিছু অনুবাদ ত্রুটি করতে পারে।", @@ -3540,212 +3470,13 @@ "definitionsToolDescription": "সক্রিয় হলে, নীল রঙে আন্ডারলাইন করা শব্দগুলিতে ক্লিক করে সংজ্ঞা দেখা যায়। বার্তাগুলিতে ক্লিক করে সংজ্ঞা অ্যাক্সেস করুন।", "translationsToolDescrption": "সক্রিয় হলে, একটি বার্তায় ক্লিক করুন এবং অনুবাদ আইকনে ক্লিক করে আপনার মূল ভাষায় বার্তা দেখুন।", "welcomeBack": "ফিরে আসায় স্বাগতম! আপনি যদি ২০২৩-২০২৪ পাইলটের অংশ হয়ে থাকেন, তবে আমাদের সাথে যোগাযোগ করুন আপনার বিশেষ পাইলট সাবস্ক্রিপশনের জন্য। আপনি যদি একজন শিক্ষক হন যিনি (অথবা আপনার প্রতিষ্ঠান) আপনার ক্লাসের জন্য লাইসেন্স কিনেছেন, তবে আমাদের সাথে যোগাযোগ করুন আপনার শিক্ষক সাবস্ক্রিপশনের জন্য।", - "kickAllStudents": "সব ছাত্রকে বহিষ্কার করুন", - "kickAllStudentsConfirmation": "আপনি কি নিশ্চিত যে আপনি সব ছাত্রকে বহিষ্কার করতে চান?", - "inviteAllStudents": "সব ছাত্রকে আমন্ত্রণ জানান", - "inviteAllStudentsConfirmation": "আপনি কি নিশ্চিত যে আপনি সব ছাত্রকে আমন্ত্রণ জানাতে চান?", - "inviteUsersFromPangea": "অ্যাডমিন যোগ করুন", - "redeemPromoCode": "প্রচার কোড রিডিম করুন", - "enterPromoCode": "প্রচার কোড লিখুন", "downloadTxtFile": "টেক্সট ফাইল ডাউনলোড করুন", "downloadCSVFile": "CSV ফাইল ডাউনলোড করুন", "promotionalSubscriptionDesc": "আপনার বর্তমানে একটি আজীবন প্রচারমূলক সাবস্ক্রিপশন রয়েছে। আপনার সাবস্ক্রিপশন পরিবর্তনের জন্য support@pangea.chat এ বার্তা পাঠান।", "originalSubscriptionPlatform": "{purchasePlatform} এর মাধ্যমে কেনা সাবস্ক্রিপশন", "oneWeekTrial": "এক সপ্তাহের ট্রায়াল", "downloadXLSXFile": "এক্সেল ফাইল ডাউনলোড করুন", - "abDisplayName": "আবখাজ", - "aaDisplayName": "আফার", - "afDisplayName": "আফ্রিকান্স", - "akDisplayName": "আকান", - "sqDisplayName": "আলবেনিয়ান", - "amDisplayName": "আমহারিক", - "arDisplayName": "আরবী", - "anDisplayName": "আরাগোনিজ", - "hyDisplayName": "আর্মেনিয়ান", - "asDisplayName": "আসামিজ", - "avDisplayName": "অভারিক", - "aeDisplayName": "অভেস্তান", - "ayDisplayName": "আইমারা", - "azDisplayName": "আজারবাইজানি", - "bmDisplayName": "বামবারা", - "baDisplayName": "বাশকির", - "euDisplayName": "বাস্ক", - "beDisplayName": "বেলারুশিয়ান", - "bnDisplayName": "বাংলা", - "bhDisplayName": "বিহারি", - "biDisplayName": "বিস্লামা", - "bsDisplayName": "বসনিয়ান", - "brDisplayName": "ব্রেটন", - "bgDisplayName": "বুলগেরিয়ান", - "myDisplayName": "বার্মিজ", - "caDisplayName": "ক্যাটালান, ভ্যালেন্সিয়ান", - "chDisplayName": "চামোরো", - "ceDisplayName": "চেচেন", - "nyDisplayName": "চিচেওয়া, চেওয়া, নিয়াঞ্জা", - "zhDisplayName": "চীনা", - "cvDisplayName": "চুভাশ", - "kwDisplayName": "কর্নিশ", - "coDisplayName": "কর্সিকান", - "crDisplayName": "ক্রী", - "hrDisplayName": "ক্রোয়েশিয়ান", - "csDisplayName": "চেক", - "daDisplayName": "ডেনিশ", - "dvDisplayName": "ডিভেহি; ধিভেহি; মালদ্বীপীয়;", - "nlDisplayName": "ডাচ", - "enDisplayName": "ইংরেজি", - "eoDisplayName": "এস্পেরান্তো", - "etDisplayName": "এস্তোনিয়ান", - "eeDisplayName": "ইভে", - "foDisplayName": "ফ্যারোইজ", - "fjDisplayName": "ফিজিয়ান", - "fiDisplayName": "ফিনিশ", - "frDisplayName": "ফরাসি", - "ffDisplayName": "ফুলা; ফুলাহ; পুলার; পুলার", - "glDisplayName": "গালিসিয়ান", - "kaDisplayName": "জর্জিয়ান", - "deDisplayName": "জার্মান", - "elDisplayName": "গ্রীক, আধুনিক", - "gnDisplayName": "গুয়ারানী", - "guDisplayName": "গুজরাটি", - "htDisplayName": "হাইতিয়ান, হাইতিয়ান ক্রিওলে", - "haDisplayName": "হাউসা", - "heDisplayName": "হিব্রু (আধুনিক)", - "hzDisplayName": "হেরেরো", - "hiDisplayName": "হিন্দি", - "hoDisplayName": "হিরি মোতো", - "huDisplayName": "হাঙ্গেরিয়ান", - "iaDisplayName": "ইন্টারলিঙ্গুয়া", - "idDisplayName": "ইন্দোনেশিয়ান", - "ieDisplayName": "ইন্টারলিংগুয়ে", - "gaDisplayName": "আইরিশ", - "igDisplayName": "ইগবো", - "ikDisplayName": "ইনুপিয়াক", - "ioDisplayName": "ইডো", - "isDisplayName": "আইসল্যান্ডিক", - "itDisplayName": "ইতালিয়ান", - "iuDisplayName": "ইনুকটিটুট", - "jaDisplayName": "জাপানি", - "jvDisplayName": "জাভানি", - "klDisplayName": "কালালিসুট, গ্রিনল্যান্ডিক", - "knDisplayName": "কন্নড়", - "krDisplayName": "কানুরি", - "ksDisplayName": "কাশ্মীরি", - "kkDisplayName": "কাজাখ", - "kmDisplayName": "খমের", - "kiDisplayName": "কিকিউইউ, গিকিউইউ", - "rwDisplayName": "কিনিয়ারওয়ান্ডা", - "kyDisplayName": "কির্গিজ, কির্গিজ", - "kvDisplayName": "কোমি", - "kgDisplayName": "কঙ্গো", - "koDisplayName": "কোরিয়ান", - "kuDisplayName": "কুর্দিশ", - "kjDisplayName": "কোয়ান্যামা, কুয়ান্যামা", - "laDisplayName": "ল্যাটিন", - "lbDisplayName": "লাক্সেমবুর্গীয়, লেটজেবুর্গ", - "lgDisplayName": "লুগান্ডা", - "liDisplayName": "লিমবুর্গিশ, লিমবুর্গান, লিমবুর্গার", - "lnDisplayName": "লিঙ্গালা", - "loDisplayName": "লাও", - "ltDisplayName": "লিথুয়ানিয়ান", - "luDisplayName": "লুবা-কাটাঙ্গা", - "lvDisplayName": "লাটভিয়ান", - "gvDisplayName": "ম্যানক্স", - "mkDisplayName": "ম্যাসেডোনিয়ান", - "mgDisplayName": "মালাগাসি", - "msDisplayName": "মালয়", - "mlDisplayName": "মালয়ালাম", - "mtDisplayName": "মাল্টিজ", - "miDisplayName": "মাওরি", - "mrDisplayName": "মারাঠি (মারাঠী)", - "mhDisplayName": "মার্শালিজি", - "mnDisplayName": "মঙ্গোলিয়ান", - "naDisplayName": "নাউরু", - "nvDisplayName": "নাভাজো, নাভাহো", - "nbDisplayName": "নরওয়েজিয়ান বোকমাল", - "ndDisplayName": "উত্তর নেডেবেলে", - "neDisplayName": "নেপালি", - "ngDisplayName": "এনডোঙ্গা", - "nnDisplayName": "নরওয়েজিয়ান নিনোরস্ক", - "noDisplayName": "নরওয়েজিয়ান", - "iiDisplayName": "নুয়োসু", - "nrDisplayName": "দক্ষিণ নেডেবেলে", - "ocDisplayName": "অক্সিটান", - "ojDisplayName": "অজিবে, অজিবা", - "cuDisplayName": "প্রাচীন চার্চ স্লাভোনিক, চার্চ স্লাভিক, চার্চ স্লাভোনিক, প্রাচীন বুলগেরিয়ান, প্রাচীন স্লাভোনিক", - "omDisplayName": "ওরোমো", - "orDisplayName": "উড়িয়া", - "osDisplayName": "অসেটিয়ান, অসেটিক", - "paDisplayName": "পাঞ্জাবি, পাঞ্জাবি", - "piDisplayName": "পালি", - "faDisplayName": "পার্সিয়ান", - "plDisplayName": "পোলিশ", - "psDisplayName": "পশতু, পুশতু", - "ptDisplayName": "পর্তুগিজ", - "quDisplayName": "কেচুয়া", - "rmDisplayName": "রোমানশ", - "rnDisplayName": "কিরুন্ডি", - "roDisplayName": "রোমানিয়ান, Moldavian, Moldovan", - "ruDisplayName": "রুশ", - "saDisplayName": "সংস্কৃত (সাংস্কৃত)", - "scDisplayName": "সার্ডিনিয়ান", - "sdDisplayName": "সিন্ধি", - "seDisplayName": "উত্তর সামি", - "smDisplayName": "সামোয়ান", - "sgDisplayName": "সাঙ্গো", - "srDisplayName": "সার্বিয়ান", - "gdDisplayName": "স্কটিশ গ্যলিক, গ্যলিক", - "snDisplayName": "শোনা", - "siDisplayName": "සිංහල, සිංහල", - "skDisplayName": "ස්ලෝවක්", - "slDisplayName": "ස්ලෝවී", - "soDisplayName": "සෝමාලි", - "stDisplayName": "දකුණු සොතෝ", - "esDisplayName": "ස්පාඤ්ඤ", - "suDisplayName": "සුන්දනිස්", - "swDisplayName": "ස්වහීලි", - "ssDisplayName": "ස්වාටි", - "svDisplayName": "ස්වීඩන්", - "taDisplayName": "තමිල්", - "teDisplayName": "තෙලඟු", - "tgDisplayName": "තජික", - "thDisplayName": "තායි", - "tiDisplayName": "ටිග්‍රිනය", - "boDisplayName": "තिबෙතීය සාමාන්‍ය, තිබෙත, මධ්‍යම", - "tkDisplayName": "ටර්ක්මන්", - "tlDisplayName": "ටගාලෝග්", - "tnDisplayName": "ට්වනා", - "toDisplayName": "ටොංගා (ටොංගා දූපත්)", - "trDisplayName": "তুর্কি", - "tsDisplayName": "টসোঙ্গা", - "ttDisplayName": "তাতার", - "twDisplayName": "টুই", - "tyDisplayName": "তাহিতিয়ান", - "ugDisplayName": "উইঘুর, উইঘুর", - "ukDisplayName": "ইউক্রেনীয়", - "urDisplayName": "উর্দু", - "uzDisplayName": "উজবেক", - "veDisplayName": "ভেন্ডা", - "viDisplayName": "ভিয়েতনামী", - "voDisplayName": "ভোলাপুক", - "waDisplayName": "ওয়ালোন", - "cyDisplayName": "ওয়েলশ", - "woDisplayName": "ওলোফ", - "fyDisplayName": "পশ্চিম ফ্রিসিয়ান", - "xhDisplayName": "খোশা", - "yiDisplayName": "ইয়িদিশ", - "yoDisplayName": "ইয়োরুবা", - "zaDisplayName": "জুয়াং, চুয়াং", "unkDisplayName": "অজানা", - "zuDisplayName": "জুলু", - "hawDisplayName": "হাওয়াইয়ান", - "hmnDisplayName": "হমং", - "multiDisplayName": "মাল্টি", - "cebDisplayName": "সেবুয়ানো", - "dzDisplayName": "জংগখা", - "iwDisplayName": "হিব্রু", - "jwDisplayName": "জাভানিজ", - "moDisplayName": "মোলদাভিয়ান", - "shDisplayName": "সার্বো-কোশেরিয়ান", "wwCountryDisplayName": "বিশ্বব্যাপী", "afCountryDisplayName": "আফগানিস্তান", "axCountryDisplayName": "আল্যান্ড দ্বীপপুঞ্জ", @@ -3993,41 +3724,25 @@ "yeCountryDisplayName": "ইয়েমেন", "zmCountryDisplayName": "জাম্বিয়া", "zwCountryDisplayName": "জিম্বাবোয়ে", - "pay": "পরিশোধ করুন", - "allPrivateChats": "প্রতক্ষ্য চ্যাট", - "unknownPrivateChat": "অজানা ব্যক্তিগত চ্যাট", + "pay": "Checkout", "invitedToSpace": "{user} আপনাকে একটি কোর্সে যোগ দেওয়ার জন্য আমন্ত্রণ জানিয়েছেন: {space}! আপনি কি গ্রহণ করতে চান?", - "declinedInvitation": "আমন্ত্রণ প্রত্যাখ্যান করা হয়েছে", - "acceptedInvitation": "আমন্ত্রণ গ্রহণ করা হয়েছে", "youreInvited": "📩 আপনি আমন্ত্রিত!", "invitedToChat": "{user} আপনাকে একটি চ্যাটে যোগ দেওয়ার জন্য আমন্ত্রণ জানিয়েছেন: {name}! আপনি কি গ্রহণ করতে চান?", "monthlySubscription": "মাসিক", "yearlySubscription": "বার্ষিক", "defaultSubscription": "পাঞ্জিয়া চ্যাট সাবস্ক্রিপশন", "freeTrial": "ফ্রি ট্রায়াল", - "grammarAnalytics": "ত্রুটি বিশ্লেষণ", "total": "মোট: ", "noDataFound": "কোন ডেটা পাওয়া যায়নি", - "promoSubscriptionExpirationDesc": "আপনার বর্তমান সাবস্ক্রিপশন প্রচারমূলক এবং {expiration} তারিখে শেষ হবে। সাবস্ক্রিপশন পরিবর্তনের জন্য support@pangea.chat এ বার্তা পাঠান।", - "emptyChatNameWarning": "এই চ্যাটের জন্য একটি নাম লিখুন", "blurMeansTranslateTitle": "বার্তা ধূসর কেন?", "blurMeansTranslateBody": "ইমার্শন মোড চালু থাকলে, আপনার মূল ভাষায় পাঠানো বার্তাগুলি ধূসর হয়ে যাবে যখন পাঞ্জিয়া বট সেগুলিকে আপনার লক্ষ্য ভাষায় অনুবাদ করবে। ইমার্শন মোড ব্যক্তিগত এবং কোর্স সেটিংসে টগল করা যায়।", - "someErrorTitle": "হুম, কিছু ভুল হচ্ছে", - "someErrorBody": "এটি একটি ত্রুটি বা আপনার মূল ভাষায় কিছু হতে পারে।", "bestCorrectionFeedback": "এটাই সঠিক!", "distractorFeedback": "এটি পুরোপুরি সঠিক নয়।", "bestAnswerFeedback": "এটি সঠিক!", "definitionDefaultPrompt": "এই শব্দের অর্থ কী?", "practiceDefaultPrompt": "সেরা উত্তর কী?", "correctionDefaultPrompt": "সেরা প্রতিস্থাপন কী?", - "itStartDefaultPrompt": "আপনি অনুবাদে সাহায্য চান?", - "lockedChatWarning": "🔒 এই চ্যাটটি লক করা হয়েছে", - "lockChat": "চ্যাট লক করুন", - "suggestToChat": "এই চ্যাটের জন্য প্রস্তাব দিন", - "suggestToChatDesc": "প্রস্তাবিত চ্যাটগুলি চ্যাট তালিকায় দেখানো হবে", "acceptSelection": "সংশোধন গ্রহণ করুন", - "acceptSelectionAnyway": "এটি যাই হোক না কেন ব্যবহার করুন", - "makingActivity": "ক্রিয়াকলাপ তৈরি হচ্ছে", "why": "কেন?", "definition": "সংজ্ঞা", "exampleSentence": "উদাহরণ বাক্য", @@ -4035,128 +3750,55 @@ "reportMessageTitle": "{reportingUserId} একটি বার্তা রিপোর্ট করেছে {reportedUserId} থেকে {roomName} চ্যাটে", "reportMessageBody": "বার্তা: {reportedMessage}\nকারণ: {reason}", "noTeachersFound": "রিপোর্ট করার জন্য কোনও শিক্ষক পাওয়া যায়নি", - "viewArchive": "আর্কাইভ দেখুন", "trialExpiration": "আপনার ফ্রি ট্রায়াল {expiration} তারিখে শেষ হবে", "freeTrialDesc": "নতুন ব্যবহারকারীরা পাঞ্জিয়া চ্যাটের এক সপ্তাহের ফ্রি ট্রায়াল পান", "activateTrial": "ফ্রি ৭-দিনের ট্রায়াল", "successfullySubscribed": "আপনি সফলভাবে সাবস্ক্রাইব করেছেন!", "clickToManageSubscription": "আপনার সাবস্ক্রিপশন পরিচালনা করতে এখানে ক্লিক করুন।", - "errorGettingAudio": "অডিও পেতে সমস্যা হয়েছে। দয়া করে রিফ্রেশ করুন এবং আবার চেষ্টা করুন।", "signUp": "নিবন্ধন করুন", "pleaseChooseAtLeastChars": "অনুগ্রহ করে কমপক্ষে {min} অক্ষর নির্বাচন করুন।", "noEmailWarning": "অনুগ্রহ করে একটি বৈধ ইমেল ঠিকানা লিখুন। অন্যথায় আপনি আপনার পাসওয়ার্ড রিসেট করতে পারবেন না। যদি না চান, আবার বোতামে ট্যাপ করুন চালিয়ে যেতে।", "pleaseEnterValidEmail": "অনুগ্রহ করে একটি বৈধ ইমেল ঠিকানা লিখুন।", "pleaseChooseAUsername": "অনুগ্রহ করে একটি ব্যবহারকারীর নাম নির্বাচন করুন", - "chooseAUsername": "একটি ব্যবহারকারীর নাম নির্বাচন করুন", "define": "সংজ্ঞায়িত করুন", "listen": "শুনুন", - "addConversationBot": "সংলাপ বট যোগ করুন", - "addConversationBotDesc": "এই চ্যাটে একটি বট যোগ করুন", - "convoBotSettingsDescription": "সংলাপ বিষয়বস্তু এবং কঠিনতা সম্পাদনা করুন", - "enterAConversationTopic": "একটি সংলাপ বিষয় লিখুন", - "conversationTopic": "সংলাপ বিষয়", - "enableModeration": "মডারেশন সক্ষম করুন", - "enableModerationDesc": "বার্তা পাঠানোর আগে স্বয়ংক্রিয়ভাবে পর্যালোচনার জন্য মডারেশন সক্ষম করুন", - "conversationLanguageLevel": "এই কথোপকথনের ভাষার স্তর কী?", - "showDefinition": "সংজ্ঞা দেখান", - "subscriptionPopupTitle": "এই বাক্যটি ব্যাকরণগত ভুল থাকতে পারে...", - "subscriptionPopupDesc": "আজই সাবস্ক্রাইব করুন অনুবাদ এবং ব্যাকরণ সংশোধন আনলক করতে!", - "seeOptions": "বিকল্প দেখুন", - "continuedWithoutSubscription": "সাবস্ক্রিপশন ছাড়াই চালিয়ে যান", "trialPeriodExpired": "আপনার ট্রায়াল সময় শেষ হয়েছে", - "selectToDefine": "কোনও শব্দে ক্লিক করে তার সংজ্ঞা দেখুন!", "translations": "অনুবাদ", "messageAudio": "বার্তার অডিও", "definitions": "সংজ্ঞা", "subscribedToUnlockTools": "ইন্টারেক্টিভ অনুবাদ এবং ব্যাকরণ পরীক্ষা, অডিও প্লেব্যাক, ব্যক্তিগত অনুশীলন কার্যক্রম, এবং শেখার বিশ্লেষণ আনলক করতে সাবস্ক্রাইব করুন!", "translationTooltip": "অনুবাদ করুন", - "audioTooltip": "অডিও চালান", "speechToTextTooltip": "ট্রান্সক্রিপ্ট", - "certifyAge": "আমি নিশ্চিত করি যে আমি {age} বছরের বেশি বয়সী", "kickBotWarning": "Pangea Bot কে সরিয়ে দিলে এই চ্যাট থেকে কথোপকথন বট সরিয়ে দেওয়া হবে।", - "joinToView": "বিস্তারিত দেখার জন্য এই রুমে যোগ দিন", "refresh": "রিফ্রেশ", - "autoPlayTitle": "অটো প্লে মেসেজ", - "autoPlayDesc": "সক্ষম হলে, বার্তার টেক্সট-টু-স্পিচ অডিও স্বয়ংক্রিয়ভাবে চালু হবে যখন নির্বাচন করা হবে।", "messageAnalytics": "বার্তা বিশ্লেষণ", "words": "শব্দ", "score": "স্কোর", "accuracy": "সঠিকতা", "points": "পয়েন্ট", "noPaymentInfo": "কোনও পেমেন্ট তথ্য প্রয়োজন নয়!", - "conversationBotModeSelectDescription": "চ্যাট কার্যকলাপ", - "conversationBotModeSelectOption_discussion": "আলোচনা", - "conversationBotModeSelectOption_custom": "কাস্টম", - "conversationBotModeSelectOption_conversation": "সংলাপ", - "conversationBotModeSelectOption_textAdventure": "টেক্সট অ্যাডভেঞ্চার", - "conversationBotModeSelectOption_storyGame": "গল্পের খেলা", - "conversationBotDiscussionZone_title": "আলোচনা সেটিংস", - "conversationBotDiscussionZone_discussionTopicLabel": "আলোচনার বিষয়", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "আলোচনার বিষয় নির্ধারণ করুন", - "conversationBotDiscussionZone_discussionKeywordsLabel": "আলোচনার কীওয়ার্ড", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "আলোচনার কীওয়ার্ড নির্ধারণ করুন", - "conversationBotDiscussionZone_discussionKeywordsHintText": "কীওয়ার্ডের কমা দিয়ে আলাদা তালিকা আলোচনা নির্দেশিকা হিসেবে", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "এক সময়সূচীতে আলোচনা প্রেরণ করুন", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "আলোচনার মধ্যে ঘণ্টার ব্যবধান", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "প্রতিক্রিয়ায় উত্তর দিন ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "আলোচনা প্রেরণের জন্য প্রতিক্রিয়া", - "conversationBotCustomZone_title": "কাস্টম সেটিংস", - "conversationBotCustomZone_customSystemPromptLabel": "সিস্টেম প্রম্পট", - "conversationBotCustomZone_customSystemPromptPlaceholder": "কাস্টম সিস্টেম প্রম্পট সেট করুন", - "conversationBotCustomZone_customSystemPromptEmptyError": "কাস্টম সিস্টেম প্রম্পট অনুপস্থিত", - "botConfig": "বট এবং কার্যকলাপ সেটিংস", - "botConfigNoPermissionTitle": "অনুমতি নেই", - "botConfigNoPermissionMessage": "বট কনফিগারেশন পরিবর্তনের জন্য রুম অ্যাডমিনের সাথে যোগাযোগ করুন", - "addConversationBotDialogTitleInvite": "আলোচনা বট আমন্ত্রণের জন্য নিশ্চিত করুন", - "addConversationBotButtonInvite": "আমন্ত্রণ জানাও", - "addConversationBotDialogInviteConfirmation": "আমন্ত্রণ জানাও", - "addConversationBotButtonTitleRemove": "বট সরানোর জন্য নিশ্চিত করুন", - "addConversationBotButtonRemove": "সরান", - "addConversationBotDialogRemoveConfirmation": "সরান", - "conversationBotConfigConfirmChange": "নিশ্চিত করুন", - "conversationBotStatus": "বট আমন্ত্রণ করুন", - "conversationBotTextAdventureZone_title": "টেক্সট অ্যাডভেঞ্চার", - "conversationBotTextAdventureZone_instructionLabel": "গেম মাস্টার নির্দেশাবলী", - "conversationBotTextAdventureZone_instructionPlaceholder": "গেম মাস্টার নির্দেশাবলী সেট করুন", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "গেম মাস্টার নির্দেশাবলী অনুপস্থিত", - "studentAnalyticsNotAvailable": "ছাত্রের ডেটা বর্তমানে উপলব্ধ নয়", - "roomDataMissing": "আপনি সদস্য না হওয়া রুমগুলিতে কিছু ডেটা অনুপস্থিত থাকতে পারে।", "updatePhoneOS": "আপনার ডিভাইসের অপারেটিং সিস্টেমের সংস্করণ আপডেটের প্রয়োজন হতে পারে।", "wordsPerMinute": "প্রতি মিনিটে শব্দ", "autoIGCToolName": "পাঙ্গিয়া লেখনী সহায়তা স্বয়ংক্রিয়ভাবে চালান", "autoIGCToolDescription": "আমার বার্তা পাঠানোর আগে স্বয়ংক্রিয়ভাবে পাঙ্গিয়া চ্যাট ব্যাকরণ এবং অনুবাদ লেখনী সহায়তা চালান।", - "runGrammarCorrection": "বার্তা পরীক্ষা করুন", - "grammarCorrectionFailed": "সমস্যাগুলি সমাধান করুন", - "grammarCorrectionComplete": "ভালো দেখাচ্ছে!", "tooltipInstructionsTitle": "এটি কি করে তা নিশ্চিত নন?", "tooltipInstructionsMobileBody": "আইটেমে চাপুন এবং ধরে রাখুন টুলটিপ দেখার জন্য।", "tooltipInstructionsBrowserBody": "আইটেমের উপর হোভার করে টুলটিপ দেখুন।", "chatCapacity": "চ্যাট ক্ষমতা", "roomFull": "এই রুমটি ইতিমধ্যে পূর্ণ।", - "topicNotSet": "বিষয় নির্ধারিত হয়নি।", - "chatCapacityNotSet": "এই চ্যাটের কোনও ক্ষমতা সীমা নেই।", "chatCapacityHasBeenChanged": "চ্যাট ক্ষমতা পরিবর্তিত হয়েছে", "chatCapacitySetTooLow": "চ্যাট ক্ষমতা কমপক্ষে {count} হতে হবে।", "chatCapacityExplanation": "চ্যাট ক্ষমতা চ্যাটে অনুমোদিত সদস্যের সংখ্যাকে সীমাবদ্ধ করে।", - "chatExceedsCapacity": "এই চ্যাট তার ক্ষমতা ছাড়িয়ে গেছে।", "tooManyRequest": "অনেক বেশি অনুরোধ, দয়া করে পরে আবার চেষ্টা করুন।", "enterNumber": "একটি পূর্ণসংখ্যা মান লিখুন।", "buildTranslation": "উপরের বিকল্পগুলি থেকে আপনার অনুবাদ তৈরি করুন", - "nonexistentSelection": "নির্বাচন আর বিদ্যমান নয়।", - "changeAnalyticsLanguage": "অ্যানালিটিক্স ভাষা পরিবর্তন করুন", "practice": "অভ্যাস", "noLanguagesSet": "কোন ভাষা সেট করা হয়নি", - "noActivitiesFound": "এখন জন্য এটাই যথেষ্ট! আরও জন্য পরে ফিরে আসুন।", - "hintTitle": "ইঙ্গিত:", "speechToTextBody": "ভয়েস বার্তার জন্য, আপনি ট্রান্সক্রিপ্ট দেখতে পারেন পাশাপাশি বক্তার শব্দ প্রতি মিনিটের স্কোর।", "versionNotFound": "সংস্করণ পাওয়া যায়নি", "fetchingVersion": "সংস্করণ আনা হচ্ছে...", "versionFetchError": "সংস্করণ আনার ত্রুটি", "versionText": "সংস্করণ: {version}+{buildNumber}", - "languageButtonLabel": "ভাষা: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "অটোমেটিক ট্রান্সলেশন চালানো", - "interactiveTranslatorAutoPlayDesc": "অন্তঃক্রিয়াশীল অনুবাদক চালু করে without asking.", - "changeAnalyticsView": "বিশ্লেষণ দৃশ্য পরিবর্তন করুন", "l1TranslationBody": "আপনার মূল ভাষার বার্তা অনুবাদ করা হবে না।", "deleteSubscriptionWarningTitle": "আপনার একটি সক্রিয় সাবস্ক্রিপশন রয়েছে", "deleteSubscriptionWarningBody": "আপনার অ্যাকাউন্ট মুছে ফেলা স্বয়ংক্রিয়ভাবে আপনার সাবস্ক্রিপশন বাতিল করবে না।", @@ -4164,9 +3806,7 @@ "error520Title": "অনুগ্রহ করে আবার চেষ্টা করুন।", "error520Desc": "দুঃখিত, আমরা আপনার বার্তা বুঝতে পারিনি...", "wordsUsed": "ব্যবহৃত শব্দ", - "errorTypes": "ত্রুটির ধরণ", "level": "স্তর", - "canceledSend": "বাতিল পাঠানো", "morphsUsed": "ব্যবহৃত রূপান্তর", "translationChoicesBody": "একটি বিকল্পের জন্য ক্লিক করে ধরে রাখুন।", "grammar": "ব্যাকরণ", @@ -4176,7 +3816,6 @@ "reportContentIssueTitle": "বিষয়বস্তুর সমস্যা রিপোর্ট করুন", "feedback": "অপশনাল প্রতিক্রিয়া", "reportContentIssueDescription": "উহো! এআই ব্যক্তিগত শেখার অভিজ্ঞতা সহজতর করতে পারে কিন্তু... এছাড়াও বিভ্রান্তি সৃষ্টি করে। দয়া করে আপনার কোনও মতামত থাকলে দিন এবং আমরা আবার চেষ্টা করব।", - "changeContent": "উহো! এআই ব্যক্তিগত শেখার অভিজ্ঞতা সহজতর করতে পারে কিন্তু... এছাড়াও বিভ্রান্তি সৃষ্টি করে। এটি কী হওয়া উচিত?", "clickTheWordAgainToDeselect": "নির্বাচিত শব্দে ক্লিক করে সেটি বাতিল করুন।", "l2SupportNa": "উপলব্ধ নয়", "l2SupportAlpha": "অ্যালফা", @@ -4410,7 +4049,6 @@ "grammarCopySPC": "বিশেষতা", "grammarCopyPARTTYPE": "অংশপ্রকার", "grammarCopyINTREL": "প্রশ্নবোধক-সম্পর্কিত", - "grammarCopyNUMFORMpsor": "স্বত্তাধিকারীর সংখ্যা", "grammarCopyUNKNOWN": "অজানা", "grammarCopyNUMBERPSOR": "স্বত্তাধিকারীর সংখ্যা", "grammarCopyPOSS": "স্বত্তাধিকারী", @@ -4456,28 +4094,14 @@ "grammarCopyVOICEdir": "সরাসরি", "grammarCopyVOICEinv": "বিপরীত", "grammarCopyVOICErcp": "পারস্পরিক", - "enterPrompt": "একটি সিস্টেম প্রম্পট লিখুন", - "selectBotLanguage": "বটের ভাষা নির্বাচন করুন", - "chooseVoice": "একটি কণ্ঠ নির্বাচন করুন", - "enterLanguageLevel": "একটি ভাষার স্তর লিখুন", - "enterDiscussionTopic": "আলোচনার বিষয় লিখুন", - "selectBotChatMode": "চ্যাট মোড নির্বাচন করুন", - "messageNotInTargetLang": "বার্তা লক্ষ্য ভাষায় নয়", "other": "অন্য", "levelShort": "স্তর {level}", - "botModeValidation": "দয়া করে একটি চ্যাট মোড নির্বাচন করুন", "clickBestOption": "আপনার বার্তা অনুবাদ করতে সেরা বিকল্পগুলি নির্বাচন করুন!", "completeActivitiesToUnlock": "অনুবাদ আনলক করতে কমপক্ষে একটি কার্যকলাপ সম্পন্ন করুন!", - "botSettingsSubtitle": "চ্যাট কার্যকলাপ পরিচালনা করতে বটকে আমন্ত্রণ জানান", - "invitePeople": "ব্যবহারকারীদের আমন্ত্রণ জানান", "noCapacityLimit": "কোন ক্ষমতা সীমা নেই", "downloadGroupText": "গ্রুপ টেক্সট ডাউনলোড করুন", "notificationsOn": "বিজ্ঞপ্তি চালু", "notificationsOff": "বিজ্ঞপ্তি বন্ধ", - "chatCanBeFoundViaSearch": "চ্যাট অনুসন্ধানের মাধ্যমে খুঁজে পাওয়া যাবে", - "requireCodeToJoin": "জোড়ার জন্য কোড প্রয়োজন", - "canFindInSearch": "সন্ধানে খুঁজে পেতে পারেন", - "addChatToSpace": "চ্যাট যোগ করুন", "createChatAndInviteUsers": "চ্যাট তৈরি করুন এবং ব্যবহারকারীদের আমন্ত্রণ জানান", "updatedNewSpaceDescription": "কোর্সগুলি আপনাকে আপনার চ্যাটগুলো সংহত করতে এবং ব্যক্তিগত বা সাধারণ সম্প্রদায় গড়ে তুলতে সহায়তা করে।", "joinWithCode": "কোড দিয়ে যোগ দিন", @@ -4513,39 +4137,19 @@ "constructUseCollected": "চ্যাটে সংগৃহীত", "constructUseNanDesc": "প্রযোজ্য নয়", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "ব্যবহারকারীর নাম ও পাসওয়ার্ড দিয়ে সাইন ইন করুন", - "registrationEmailMessage": "অনুগ্রহ করে সেখানে পাঠানো লিঙ্কের মাধ্যমে আপনার ইমেল যাচাই করুন। কিছু ক্ষেত্রে, ইমেল পৌঁছাতে ৫ মিনিট পর্যন্ত সময় লাগতে পারে। দয়া করে আপনার স্প্যাম ফোল্ডারও পরীক্ষা করুন।", "enableTTSToolName": "টেক্সট-টু-স্পিচ সক্ষম করা হয়েছে", "enableTTSToolDescription": "অ্যাপটিকে আপনার লক্ষ্য ভাষায় টেক্সট-টু-স্পিচ আউটপুট তৈরি করতে অনুমতি দিন।", - "couldNotFindTTS": "আমরা আপনার বর্তমান লক্ষ্য ভাষার জন্য কোনও টেক্সট-টু-স্পিচ ইঞ্জিন খুঁজে পাইনি।", - "ttsInstructionsHyperlink": "নতুন ভয়েস ডাউনলোডের জন্য নির্দেশনা দেখতে এখানে ক্লিক করুন।", - "createAnAccount": "একটি অ্যাকাউন্ট তৈরি করুন", - "signIn": "সাইন ইন করুন", - "signUpWithEmail": "ইমেল দিয়ে সাইন আপ করুন", - "signUpWithGoogle": "গুগল দিয়ে সাইন আপ করুন", - "signUpWithApple": "অ্যাপল দিয়ে সাইন আপ করুন", "yourUsername": "আপনার ব্যবহারকারীর নাম", "yourEmail": "আপনার ইমেল", - "pleaseEnterAnEmail": "একটি ইমেল ঠিকানা লিখুন", - "signInWithGoogle": "গুগল দিয়ে সাইন ইন করুন", - "signInWithApple": "অ্যাপল দিয়ে সাইন ইন করুন", - "chooseYourAvatar": "আপনার অবতার নির্বাচন করুন", "iWantToLearn": "আমি শিখতে চাই", - "letsStart": "চলুন শুরু করি", - "pleaseAgreeToTOS": "অনুগ্রহ করে শর্তাবলী ও শর্তে সম্মত হন", "pleaseEnterEmail": "একটি বৈধ ইমেল ঠিকানা লিখুন।", - "pleaseSelectALanguage": "একটি ভাষা নির্বাচন করুন", "myBaseLanguage": "আমার মূল ভাষা", - "clickWordsInstructions": "🧻 কোন শব্দে ক্লিক করুন বিস্তারিত জানার জন্য।🤐", - "chooseBestDefinition": "এই শব্দের অর্থ কী?", "meaningSectionHeader": "অর্থ:", "formSectionHeader": "চ্যাটে ব্যবহৃত রূপ:", - "noEmojiSelectedTooltip": "কোন ইমোজি নির্বাচন করা হয়নি", "writingExercisesTooltip": "লিখন অনুশীলন", "listeningExercisesTooltip": "শ্রবণ অনুশীলন", "readingExercisesTooltip": "পড়া অনুশীলন", "meaningNotFound": "অর্থ পাওয়া যায়নি।", - "formsNotFound": "রূপ পাওয়া যায়নি।", "chooseBaseForm": "মূল রূপ নির্বাচন করুন", "notTheCodeError": "দুঃখিত, এটি কোড নয়!", "totalXP": "মোট XP", @@ -4585,9 +4189,6 @@ "pickAnEmoji": "'{lemma}' এর জন্য আপনার প্রিয় ইমোজি কী?", "chooseLemmaMeaningInstructionsBody": "বার্তার শব্দের সাথে অর্থ মিলান!", "doubleClickToEdit": "সম্পাদনা করতে ডাবল ক্লিক করুন।", - "removeFeature": "{feature} সরান", - "chooseCorrectLabel": "সঠিক লেবেলটি নির্বাচন করুন।", - "levelPopupTitle": "অভিনন্দন, আপনি স্তর {level} এ পৌঁছেছেন", "activityPlannerTitle": "ক্রিয়াকলাপ পরিকল্পক", "topicLabel": "বিষয়", "topicPlaceholder": "একটি বিষয় নির্বাচন করুন...", @@ -4595,7 +4196,6 @@ "modePlaceholder": "একটি মোড নির্বাচন করুন...", "learningObjectiveLabel": "শিক্ষার লক্ষ্য", "learningObjectivePlaceholder": "একটি শিক্ষার লক্ষ্য নির্বাচন করুন...", - "mediaLabel": "মিডিয়া শিক্ষার্থীরা শেয়ার করবে", "languageOfInstructionsLabel": "কার্যক্রম নির্দেশনার ভাষা", "targetLanguageLabel": "লক্ষ্য ভাষা", "cefrLevelLabel": "CEFR স্তর", @@ -4610,20 +4210,15 @@ "instructions": "নির্দেশনা", "numberOfLearners": "শিক্ষার্থীর সংখ্যা", "mustBeInteger": "একটি পূর্ণসংখ্যা হতে হবে যেমন ১, ২, ৩, ...", - "noLemmasFound": "{xp} এর বেশি এক্সপি সহ কোনও শব্দভাণ্ডার পাওয়া যায়নি। অনুশীলন চালিয়ে যান!", "constructUsePvmDesc": "ভয়েস মেসেজে তৈরি", - "lockedMorphFeature": "আনলক করার অপেক্ষায়", "leaveSpaceDescription": "কোর্স থেকে ছেড়ে গেলে, আপনি এর মধ্যে সমস্ত চ্যাট ছেড়ে যাবেন। অন্যান্য ব্যবহারকারীরা দেখবে যে আপনি কোর্স ছেড়ে গেছেন।", - "whatIsLemma": "লেমটি কী?", "constructUseCorMmDesc": "সঠিক বার্তা অর্থ", "constructUseIncMmDesc": "ভুল বার্তা অর্থ", "constructUseIgnMmDesc": "অগ্রাহ্য বার্তা অর্থ", "clickForMeaningActivity": "অর্থ চ্যালেঞ্জের জন্য এখানে ক্লিক করুন", "meaning": "অর্থ", "chatWith": "{displayname} এর সাথে গ্রুপ", - "slightlyOffensive": "আলগা আপত্তিজনক", "clickOnEmailLink": "অনুগ্রহ করে ইমেইলে লিঙ্কে ক্লিক করুন এবং তারপর এগিয়ে যান।\n\nইমেইল না এলে স্প্যাম ফোল্ডার চেক করুন।", - "whoIsAllowedToJoinThisChat": "এই চ্যাটে কে যোগ দিতে পারবে", "dontForgetPassword": "আপনার পাসওয়ার্ড ভুলবেন না!", "enableAutocorrectToolName": "ডিভাইস অটোকরেক্ট চালু করুন", "enableAutocorrectDescription": "যদি আপনার ডিভাইস শেখার ভাষাটিকে সমর্থন করে, আপনি ডিভাইস অটোকরেক্ট চালু করে সাধারণ ভুলগুলি ঠিক করতে পারেন।", @@ -4651,48 +4246,26 @@ "autocorrectNotAvailable": "দুঃখিত, এই বৈশিষ্ট্যের জন্য আপনার প্ল্যাটফর্ম বর্তমানে সমর্থিত নয়। আরও উন্নতির জন্য অপেক্ষা করুন!", "pleaseUpdateApp": "অ্যাপটি আপডেট করুন চালিয়ে যেতে।", "chooseEmojiInstructionsBody": "ইমোজি এবং তাদের প্রতিনিধিত্বকারী শব্দের সাথে মিলান। চিন্তা করবেন না! অসম্মতিতে কোনও পয়েন্ট কাটা হবে না। 😅", - "pickAnEmojiFor": "{lemma} এর জন্য একটি ইমোজি নির্বাচন করুন", "analyticsVocabListBody": "এটি আপনার সমস্ত শব্দভাণ্ডার! আপনি প্রতিটি শব্দের জন্য XP অর্জন করলে, তারা চারা থেকে ফুলে ফুলে উঠবে। আরও বিশদ দেখতে কোনও শব্দে ক্লিক করুন।", "morphAnalyticsListBody": "এগুলি আপনার শেখা ভাষার সমস্ত ব্যাকরণ ধারণা! আপনি এগুলিকে চ্যাটের সময় আবিষ্কার করবেন। বিস্তারিত জানার জন্য ক্লিক করুন।", "knockSpaceSuccess": "আপনি এই কোর্সে যোগদানের জন্য অনুরোধ করেছেন! একজন অ্যাডমিন আপনার অনুরোধ পেলে উত্তর দেবেন 😄", - "joinByCode": "কোড দ্বারা যোগ দিন", "chooseWordAudioInstructionsBody": "সম্পূর্ণ বার্তাটি শুনুন। তারপর শব্দের সাথে অডিও মিলান করুন।", "chooseMorphsInstructionsBody": "ব্যাকরণ প্রশ্নের জন্য পাজল টুকরোগুলিতে ক্লিক করুন!", - "inviteAndLaunch": "আহ্বান জানানো এবং শুরু করা", - "createOwnChat": "নিজের চ্যাট তৈরি করুন", "pleaseEnterInt": "একটি সংখ্যা লিখুন দয়া করে", "home": "হোম", "join": "যোগ দিন", "readingAssistanceOverviewBody": "নিম্নোক্ত বোতামগুলোতে ক্লিক করে ইমোজি, অডিও, শব্দের অর্থ, এবং ব্যাকরণ ধারণার সাথে মিল রেখে মিনিগেম খেলুন। অথবা কোনো শব্দে ক্লিক করে বিস্তারিত জানুন।", - "learnByTexting": "টেক্সট পাঠিয়ে শিখুন", - "levelSummaryTrigger": "সারাংশ দেখুন", "levelSummaryPopupTitle": "স্তর {level} এর সারাংশ", - "referFriends": "বন্ধুদের রেফার করুন", - "referFriendDialogTitle": "আপনার কথোপকথনে একজন বন্ধু আমন্ত্রণ জানান", - "referFriendDialogDesc": "আপনার কি এমন বন্ধু আছে যিনি আপনার সাথে নতুন ভাষা শেখার জন্য উত্সাহী? তাহলে এই আমন্ত্রণ লিঙ্কটি কপি করে পাঠান এবং আজই আপনার সাথে চ্যাট শুরু করুন।", - "youUnlocked": "আপনি আনলক করেছেন", "resetInstructionTooltipsTitle": "নির্দেশনা টিপস রিসেট করুন", "resetInstructionTooltipsDesc": "নতুন ব্যবহারকারীর জন্য নির্দেশনা টিপস দেখানোর জন্য ক্লিক করুন।", "selectForGrammar": "ক্রিয়াকলাপ এবং বিস্তারিত জন্য একটি ব্যাকরণ আইকনে ক্লিক করুন।", - "newChatActivityTitle": "একটি মজার কার্যকলাপ যোগ করুন?", - "newChatActivityDesc": "প্রতিটি গ্রুপ চ্যাটকে অ্যাকটিভিটি প্ল্যানার দিয়ে একটি অ্যাডভেঞ্চারে পরিণত করুন! গ্রুপের জন্য আকর্ষণীয় বিষয়বস্তু এবং লক্ষ্য নির্ধারণ করুন, এবং চমৎকার ছবি দিয়ে কথোপকথনকে জীবন্ত করুন। কল্পনাপ্রবণ আলোচনা উদ্দীপিত করুন এবং মজা সহজে চালিয়ে যান!", - "exploreMore": "আরও অন্বেষণ করুন", "randomize": "র্যান্ডমাইজ করুন", "clear": "পরিষ্কার করুন", "makeYourOwnActivity": "নিজের কার্যকলাপ তৈরি করুন", "featuredActivities": "বিশেষ বৈশিষ্ট্যযুক্ত", - "goToChat": "চ্যাটে যান", "save": "সংরক্ষণ করুন", - "selectActivity": "কার্যকলাপ নির্বাচন করুন", - "wordFocusListeningMultipleChoice": "কোন অডিওটি শব্দের সাথে মেলে?", "startChat": "চ্যাট শুরু করুন", "translationProblem": "অনুবাদ সমস্যা", - "perfectTranslation": "পারফেক্ট অনুবাদ!", - "greatJobTranslation": "এই অনুবাদে দুর্দান্ত কাজ!", - "goodJobTranslation": "এই অনুবাদে ভালো কাজ।", - "makingProgress": "আপনি অগ্রগতি করছেন!", - "keepPracticing": "অভ্যাস চালিয়ে যান!", - "niceJob": "শুভকামনা!", "askToJoin": "যোগ দেওয়ার জন্য জিজ্ঞাসা করুন", "emptyChatWarningTitle": "চ্যাট খালি", "emptyChatWarningDesc": "আপনি এখনও কারোকে আপনার চ্যাটে আমন্ত্রণ জানাননি। চ্যাট সেটিংসে গিয়ে আপনার যোগাযোগ বা বটকে আমন্ত্রণ জানান। আপনি পরে এটি করতে পারেন।", @@ -4711,8 +4284,6 @@ "languageLevelC2Desc": "আমি প্রায় সবকিছু শুনতে বা পড়তে পারি এবং স্বচ্ছন্দ ও নির্দিষ্টভাবে নিজেকে প্রকাশ করতে পারি।", "newVocab": "নতুন শব্দভাণ্ডার", "newGrammar": "নতুন ব্যাকরণ ধারণা", - "congratulationsOnReaching": "আপনি স্তর {level} এ পৌঁছেছেন!", - "seeDetails": "বিস্তারিত দেখুন", "choosePracticeMode": "উপরের বোতামগুলোর মধ্যে একটি ক্লিক করে অনুশীলন শুরু করুন", "ban": "নিষিদ্ধ করুন", "unban": "অবৈধতা বাতিল করুন", @@ -4726,8 +4297,6 @@ "timesUsedWithAssistance": "সহায়তার সাথে ব্যবহারের সময়", "shareInviteCode": "আমন্ত্রণ কোড শেয়ার করুন: {code}", "leaderboard": "নেতৃস্থান তালিকা", - "welcomeUser": "স্বাগতম {user}", - "joinSpaceOnboardingDesc": "আপনার কি কোনও আমন্ত্রণ কোড বা পাবলিক কোর্সের লিঙ্ক আছে?", "skipForNow": "এখন জন্য এড়িয়ে যান", "permissions": "অনুমতিসমূহ", "spaceChildPermission": "কোন ব্যক্তি এই কোর্সে নতুন চ্যাট যোগ করতে পারে", @@ -4735,12 +4304,8 @@ "defaultOption": "ডিফল্ট", "deleteChatDesc": "আপনি কি নিশ্চিত যে আপনি এই চ্যাটটি মুছে ফেলতে চান? এটি সকল অংশগ্রহণকারীর জন্য মুছে ফেলা হবে এবং চ্যাটের সমস্ত বার্তা আর অনুশীলন বা শেখার বিশ্লেষণের জন্য উপলব্ধ থাকবে না।", "deleteSpaceDesc": "কোর্স এবং যেকোনো নির্বাচিত চ্যাট সকল অংশগ্রহণকারীর জন্য মুছে ফেলা হবে এবং চ্যাটের সমস্ত বার্তা আর অনুশীলন বা শেখার বিশ্লেষণের জন্য উপলব্ধ থাকবে না। এই ক্রিয়া পূর্বাবস্থায় ফিরিয়ে আনা যাবে না।", - "chatWithActivities": "অ্যাকটিভিটিসহ চ্যাট করুন", "launch": "শুরু করুন", - "launchActivityToChats": "চ্যাটে অ্যাকটিভিটি শুরু করুন", "searchChats": "চ্যাট অনুসন্ধান করুন", - "selectChats": "চ্যাট নির্বাচন করুন", - "selectChatToStart": "সম্পন্ন! শুরু করার জন্য একটি চ্যাট নির্বাচন করুন", "maxFifty": "সর্বোচ্চ ৫০", "configureSpace": "কোর্স কনফিগার করুন", "pinMessages": "বার্তা পিন করুন", @@ -4753,9 +4318,7 @@ "announcements": "ঘোষণাগুলি", "activities": "ক্রিয়াকলাপ", "access": "প্রবেশ", - "botSettings": "বট সেটিংস", "activitySuggestionTimeoutMessage": "আমরা আপনার জন্য আরও কার্যকলাপ তৈরি করতে কঠোর পরিশ্রম করছি, অনুগ্রহ করে এক মিনিট পরে আবার চেক করুন", - "accessSettingsWarning": "উফ! মনে হচ্ছে আপনার এই রুমের অ্যাক্সেস নিয়ম সেট করার অনুমতি নেই। আপনাকে এগুলি পরীক্ষা করতে হবে যাতে নিশ্চিত হন যে এগুলি আপনার প্রয়োজন এবং যদি পরিবর্তন করতে চান তবে রুমের অ্যাডমিনের সাথে যোগাযোগ করুন", "howSpaceCanBeFound": "এই কোর্সটি কিভাবে খুঁজে পাওয়া যাবে", "private": "ব্যক্তিগত", "cannotBeFoundInSearch": "খুঁজে পাওয়া যাবে না", @@ -4768,16 +4331,6 @@ "canBeFoundViaKnock": "• যোগদানের অনুরোধ এবং অ্যাডমিনের অনুমোদন", "youHaveLeveledUp": "আপনি লেভেল আপ করেছেন!", "sendActivities": "কার্যকলাপ পাঠান", - "getStarted": "শুরু করুন", - "getStartedBotChatDesc": "AI এর সাথে চ্যাট করা শুরু করার জন্য একটি দুর্দান্ত স্থান এবং পাঞ্জিয়া পড়া, লেখা, শোনা এবং কথা বলার সরঞ্জামগুলি এটি সহজ করে তোলে!", - "getStartedCommunitiesDesc": "একটি সম্প্রদায়ের সাথে শেখা পাঞ্জিয়া চ্যাটের shines! আপনি আপনার ক্লাসে যোগ দিতে পারেন, একটি কোর্স খুঁজে পেতে পারেন, বা নিজের তৈরি করতে পারেন!", - "getStartedFriendsDesc": "আপনার কি এমন কোনও বন্ধু আছে যে আপনার সাথে শেখাতে চায়?", - "getStartedBotChatComplete": "ভাল কাজ! আপনি বটের সাথে চ্যাট করছেন!", - "getStartedCommunitiesComplete": "দারুণ, আপনি একটি কোর্সে যোগ দিয়েছেন!", - "getStartedComplete": "আপনি এই বিভাগটি সম্পন্ন করেছেন!\nআমাদের অসাধারণ বৈশিষ্ট্যগুলি অন্বেষণ চালিয়ে যান বন্ধুদের সাথে চ্যাট করে!", - "getStartedFriendsComplete": "উহু! আপনার বন্ধু আছে! 😉", - "getStartedBotChatButton": "চ্যাট শুরু করুন!", - "getStartedFriendsButton": "একজন বন্ধুর সাথে চ্যাট করুন", "groupChat": "গ্রুপ চ্যাট", "directMessage": "ডাইরেক্ট মেসেজ", "newDirectMessage": "নতুন ডাইরেক্ট মেসেজ", @@ -4793,7 +4346,6 @@ "mySavedActivities": "আমার সংরক্ষিত কার্যকলাপ", "noSavedActivities": "কোন সংরক্ষিত কার্যকলাপ নেই", "saveActivity": "এই কার্যকলাপ সংরক্ষণ করুন", - "yourSavedActivities": "সংরক্ষিত কার্যকলাপ", "failedToPlayVideo": "ভিডিও প্লে করতে ব্যর্থ হয়েছে", "done": "সম্পন্ন", "inThisSpace": "এই কোর্সে", @@ -4832,37 +4384,27 @@ "maximumActivityParticipants": "প্রতিটি ক্রিয়াকলাপে সর্বোচ্চ {count} অংশগ্রহণকারী থাকতে পারে।", "pending": "বিচারাধীন", "inactive": "অচল", - "unjoinedActivityMessage": "আপনি কি অংশগ্রহণ করতে চান? একটি খোলা ভূমিকা বেছে নিন!\nঅথবা আড্ডা দিন এবং শো দেখুন!", - "fullActivityMessage": "শো দেখার জন্য স্বাগত! যদিও কোনও খোলা ভূমিকা নেই, আপনি চ্যাট দেখতেও পারেন!", "confirmRole": "ভূমিকা নিশ্চিত করুন", "openRoleLabel": "খোলা", "joinedTheActivity": "👋 {username} {role} হিসেবে যোগ দিয়েছেন", "finishedTheActivity": "🎯 {username} এই কার্যক্রম শেষ করেছেন", - "endActivityTitle": "আমি শেষ করেছি", - "endActivityDesc": "আপনি কি লক্ষ্যগুলো সম্পন্ন করেছেন?\nএটি আপনার নিশ্চিতকরণ যে আপনি টেক্সটিং থেকে ফিরে আসছেন। তবে চিন্তা করবেন না, মজা চালিয়ে যাবে চ্যাটে! সবাই 'শেষ' ক্লিক করার আগে ঘুরে দেখুন এবং উপভোগ করুন।", "archiveToAnalytics": "আমার সম্পন্ন কার্যক্রমে যোগ করুন", "activitySummaryError": "কার্যক্রমের সারাংশ উপলব্ধ নয়", "requestSummaries": "সারাংশের জন্য অনুরোধ করুন", - "loadingActivitySummary": "কার্যক্রমের সারাংশ লোড হচ্ছে...", "generatingNewActivities": "আপনি এই ভাষা জোড়ার প্রথম ব্যবহারকারী! দয়া করে এক মিনিট দিন, আমরা আপনার জন্য কার্যক্রম প্রস্তুত করছি।", - "requestAccessTitle": "বিশ্লেষণ দেখার জন্য অনুরোধ করবেন?", + "requestAccessTitle": "বিশ্লেষণ অ্যাক্সেসের জন্য অনুরোধ করবেন?", "requestAccessDesc": "আপনি কি অংশগ্রহণকারীদের বিশ্লেষণ দেখার জন্য অ্যাক্সেসের জন্য অনুরোধ করতে চান?\n\nযদি অংশগ্রহণকারীরা সম্মত হন, এই কোর্সের অ্যাডমিনরা দেখতে পারবেন:\n • মোট শব্দভাণ্ডার\n • মোট ব্যাকরণ ধারণা\n • সম্পন্ন কার্যক্রমের মোট সেশন\n • ব্যবহৃত নির্দিষ্ট ব্যাকরণ ধারণাগুলি, সঠিক ও ভুল\n\nতারা দেখতে পারবেন না:\n • কোর্সের বাইরে চ্যাটে বার্তা\n • শব্দভাণ্ডার তালিকা", "requestAccess": "অনুরোধ করুন ({count})", "analyticsInactiveTitle": "নিষ্ক্রিয় ব্যবহারকারীদের জন্য অনুরোধ পাঠানো যায়নি", "analyticsInactiveDesc": "নিষ্ক্রিয় ব্যবহারকারীরা যারা এই বৈশিষ্ট্য চালু হওয়ার পর থেকে লগইন করেননি, তারা আপনার অনুরোধ দেখবে না।\n\nতাদের ফিরে আসার পরে 'অনুরোধ' বোতাম দেখা যাবে। আপনি পরে তাদের নামের নিচে থাকা 'অনুরোধ' বোতামে ক্লিক করে আবার পাঠাতে পারেন।", "accessRequestedTitle": "বিশ্লেষণ অ্যাক্সেস অনুরোধ", - "accessRequestedDesc": "\"{space}\" এর প্রশাসকরা আপনার শেখার বিশ্লেষণ দেখার জন্য অনুরোধ করছে।\n\nযদি আপনি সম্মত হন, এই কোর্সের অ্যাডমিনরা দেখতে পারবেন:\n • মোট শব্দভাণ্ডার\n • মোট ব্যাকরণ ধারণা\n • সম্পন্ন কার্যক্রমের মোট সেশন\n • ব্যবহৃত নির্দিষ্ট ব্যাকরণ ধারণাগুলি, সঠিক ও ভুল\n\nতারা দেখতে পারবেন না:\n • কোর্সের বাইরে চ্যাটে বার্তা\n • শব্দভাণ্ডার তালিকা", - "allowAccess": "অ্যাক্সেস অনুমোদন করুন", - "denyAccess": "অ্যাক্সেস অস্বীকার করুন", + "accessRequestedDesc": "অ্যাডমিন(গুলি) অনুরোধ করছে: {admin} \n\n“{space}” থেকে অ্যাডমিনরা আপনার শেখার বিশ্লেষণ দেখতে অনুরোধ করছে।\n\nযদি আপনি সম্মত হন, তারা আপনার:\n • মোট শব্দভাণ্ডার\n • মোট ব্যাকরণ ধারণা\n • মোট কার্যকলাপ সেশন সম্পন্ন\n • সঠিক এবং ভুলভাবে ব্যবহৃত নির্দিষ্ট ব্যাকরণ ধারণাগুলি দেখতে সক্ষম হবে\n\nতারা আপনার দেখতে সক্ষম হবে না:\n • কোর্সের বাইরে চ্যাটে বার্তা\n • শব্দভাণ্ডার তালিকা", "adminRequestedAccess": "অ্যাডমিনরা আপনার বিশ্লেষণ দেখতে অনুরোধ করেছে।", "lastUpdated": "আপডেট হয়েছে\n{time}", "activityFinishedMessage": "সব শেষ!", "endForAll": "সবার জন্য শেষ করুন", "newCourse": "নতুন কোর্স", - "newCourseSubtitle": "আপনি কোন কোর্স পরিকল্পনা ব্যবহার করতে চান?", - "failedToLoadCourses": "কোর্স লোড করতে ব্যর্থ হয়েছে", "numModules": "{num} মডিউল", - "numActivityPlans": "{num} কার্যক্রম পরিকল্পনা", "coursePlan": "কোর্স পরিকল্পনা", "editCourseLater": "আপনি পরে টেমপ্লেট শিরোনাম, বিবরণ, এবং কোর্স ছবি সম্পাদনা করতে পারেন।", "newCourseAccess": "ডিফল্টভাবে, কোর্সগুলি ব্যক্তিগত এবং যোগদানের জন্য অ্যাডমিন অনুমোদন প্রয়োজন। আপনি এই সেটিংস যেকোন সময় সম্পাদনা করতে পারেন।", @@ -4876,17 +4418,11 @@ "accessDesc": "আপনি আপনার কোর্সকে বিশ্বব্যাপী উন্মুক্ত করতে পারেন! অথবা, আপনার কোর্সকে ব্যক্তিগত এবং নিরাপদ করে তুলুন।", "createGroupChatDesc": "যেখানে কার্যকলাপ সেশন শুরু হয় এবং শেষ হয়, সেখানে গ্রুপ চ্যাটগুলি রুটিন যোগাযোগের জন্য খোলা থাকবে।", "deleteDesc": "শুধুমাত্র অ্যাডমিনরা কোর্স মুছে দিতে পারেন। এটি একটি ধ্বংসাত্মক ক্রিয়া যা সমস্ত ব্যবহারকারীকে সরিয়ে দেয় এবং কোর্সের মধ্যে নির্বাচিত সমস্ত চ্যাট মুছে দেয়। সাবধানতার সাথে এগিয়ে যান।", - "failedToLoadCourseInfo": "কোর্সের তথ্য লোড করতে ব্যর্থ হয়েছে", "noCourseFound": "ওহ, এই কোর্সের জন্য একটি পরিকল্পনা দরকার!\n\nকোর্স পরিকল্পনা হলো বিষয়বস্তুর ক্রম এবং কথোপকথনের কার্যকলাপের একটি সিরিজ।", "additionalParticipants": "+ {num} অন্যান্য", - "activityNotFoundForCourse": "এই কার্যকলাপটি কোর্সের মধ্যে পাওয়া যায়নি", - "courseChats": "কোর্স চ্যাট", - "myActivitySessions": "আমার কার্যকলাপ সেশন", "directMessages": "প্রত্যক্ষ বার্তা", "whatNow": "এখন কি?", "chooseNextActivity": "আপনার পরবর্তী কার্যকলাপ নির্বাচন করুন!", - "seeInstructions": "নির্দেশনা দেখুন", - "hideInstructions": "নির্দেশনা লুকান", "letsGo": "চলুন", "chooseRole": "একটি ভূমিকা নির্বাচন করুন!", "chooseRoleToParticipate": "অংশগ্রহণের জন্য একটি ভূমিকা নির্বাচন করুন!", @@ -4896,23 +4432,15 @@ "inviteFriends": "বন্ধুদের আমন্ত্রণ জানান", "waitNotDone": "অপেক্ষা করুন আমি শেষ করিনি!", "waitingForOthersToFinish": "অন্যদের শেষ করার জন্য অপেক্ষা করছি...", - "saveToCompletedActivities": "সম্পন্ন কার্যকলাপে সংরক্ষণ করুন", "generatingSummary": "চ্যাট বিশ্লেষণ এবং ফলাফল তৈরি করা হচ্ছে", - "instructionsLanguage": "নির্দেশনা ভাষা", "findCourse": "একটি কোর্স খুঁজুন", - "activityCompletedDesc": "আপনার সম্পন্ন কার্যকলাপটি বিশ্লেষণে যোগ করা হয়েছে যেখানে আপনি ব্যবহার করা ভাষা পর্যালোচনা এবং অনুশীলন করতে পারেন।", "pingParticipantsNotification": "{user} ব্যবহারকারীদের খুঁজছেন যাতে {room} এ কার্যকলাপ সেশনে যোগ দিতে পারে", "course": "কোর্স", "courses": "কোর্সসমূহ", "courseName": "কোর্সের নাম", "createNewCourse": "নতুন কোর্স", - "publicCourses": "পাবলিক কোর্সসমূহ", "goToCourse": "কোর্সে যান: {course}", "activityComplete": "এই কার্যকলাপটি সম্পন্ন হয়েছে। কার্যকলাপের সারাংশ নিচে পাওয়া যাবে।", - "haventChattedMuch": "এটা মনে হচ্ছে আপনি খুব বেশি চ্যাট করেননি, কিছু বেশি শব্দ ব্যবহার করার চেষ্টা করুন! যদি মনে করেন আপনি আপনার লক্ষ্য সম্পন্ন করেছেন, তাহলে নিচে কার্যকলাপ শেষ করতে পারেন।", - "haveChatted": "এটা মনে হচ্ছে আপনি কিছু সময় ধরে চ্যাট করছেন! যদি মনে করেন আপনি আপনার লক্ষ্য সম্পন্ন করেছেন, কার্যকলাপ শেষ করতে ক্লোজ করুন এবং আমরা চ্যাটে আপনার জন্য একটি সারাংশ তৈরি করব!", - "userDoneAndWaiting": "{num1}/{num2} অংশগ্রহণকারী শেষ করেছেন। সবাই শেষ হওয়ার জন্য অপেক্ষা করুন, এবং আমরা চ্যাটে আপনার জন্য একটি সারাংশ তৈরি করব! \n\nযদি আপনি আবার কথোপকথনে যোগ দিতে চান, চ্যাটে কন্টিনিউ বোতামে ক্লিক করুন।", - "othersDoneAndWaiting": "{num1}/{num2} শেষ হয়েছে। আপনি কি আপনার লক্ষ্য সম্পন্ন করেছেন?", "startNewSession": "নতুন সেশন শুরু করুন", "joinOpenSession": "খোলা সেশনে যোগ দিন", "less": "কম", @@ -4922,7 +4450,6 @@ "openToJoin": "যোগ দেওয়ার জন্য খোলা", "results": "ফলাফল", "activityDone": "ক্রিয়াকলাপ সম্পন্ন!", - "moreLabel": "আরও", "promoCodeInfo": "প্রচার কোডগুলি পরবর্তী পৃষ্ঠায় প্রবেশ করা যাবে", "editsComingSoon": "শহর ও কার্যক্রম সম্পাদনার সুবিধা শীঘ্রই আসছে।", "editing": "সম্পাদনা", @@ -4938,13 +4465,10 @@ "courseSavedSuccessfully": "কোর্স সফলভাবে সংরক্ষিত হয়েছে", "addCoursePlan": "একটি কোর্স পরিকল্পনা যোগ করুন", "activityStatsButtonInstruction": "আপনার কার্যকলাপ পরিসংখ্যান দেখার জন্য এখানে ক্লিক করুন এবং শেষ হলে কার্যকলাপ বন্ধ করুন", - "readingAnalyticsDesc": "পাঠের জন্য প্রতিটি বার্তায় অনুশীলনে ক্লিক করুন।", - "speakingAnalyticsDesc": "বক্তব্য অনুশীলনের জন্য ভয়েস বার্তা রেকর্ড করুন।", - "audioAnalyticsDesc": "শোনার কার্যকলাপের জন্য প্রতিটি বার্তায় অনুশীলনে ক্লিক করুন।", "loginToAccount": "আমার অ্যাকাউন্টে লগইন করুন", "appDescription": "একটি ভাষা শিখুন\nআপনার বন্ধুদের সাথে মেসেজিং করার সময়।", "languages": "ভাষাসমূহ", - "chooseLanguage": "একটি ভাষা নির্বাচন করুন।", + "chooseLanguage": "একটি লক্ষ্য ভাষা নির্বাচন করুন।", "planTrip": "আপনার যাত্রা পরিকল্পনা করুন", "howAreYouTraveling": "আপনি কিভাবে ভ্রমণ করছেন?", "unlockPrivateTrip": "একটি ব্যক্তিগত যাত্রা আনলক করুন", @@ -4957,25 +4481,20 @@ "courseCode": "তোমার গোপন পাসওয়ার্ড কী?", "courseCodeHint": "ট্রিপ কোড বা লিঙ্ক", "unlockMyTrip": "আমার ট্রিপ আনলক করুন", - "anyLevel": "যেকোনো স্তর", "signupOption": "আপনি কিভাবে সাইন আপ করতে চান?", "withApple": "অ্যাপল এর সাথে", "withGoogle": "গুগলের সাথে", "withEmail": "ইমেইলের সাথে", "createAccount": "অ্যাকাউন্ট তৈরি করুন", - "noCoursesFound": "কোর্স পাওয়া যায়নি", "loginWithEmail": "ইমেইলে লগইন করুন", "usernameOrEmail": "ব্যবহারকার নাম বা ইমেইল", "email": "ইমেইল", "forgotPassword": "পাসওয়ার্ড ভুলে গেছেন?", - "writingAnalyticsDesc": "লিখতে অনুশীলনের জন্য বার্তা পাঠান।", "endActivity": "ক্রিয়াকলাপ শেষ করুন", "allLanguages": "সব ভাষা", - "allCefrLevels": "সব CEFR স্তর", "chatListTooltip": "এখানে আপনি আপনার সরাসরি বার্তা খুঁজে পাবেন! যেকোনো ব্যবহারকারীর অবতার ক্লিক করুন এবং “আলাপ শুরু করুন” ক্লিক করে একটি ডিএম পাঠান।", "directMessageBotTitle": "ডিরেক্ট মেসেজ পাঞ্জিয়া বট", "feedbackTitle": "ক্রিয়াকলাপ প্রতিক্রিয়া", - "feedbackDesc": "কিভাবে ক্রিয়াকলাপটি উন্নত করা যায়? যদি আপনি কিছু বিশদ প্রদান করতে পারেন, আমরা পরিবর্তন করব!", "feedbackHint": "আপনার প্রতিক্রিয়া", "feedbackButton": "প্রতিক্রিয়া জমা দিন", "directMessageBotDesc": "মানুষের সাথে কথা বলা আরও মজার কিন্তু... AI সবসময় প্রস্তুত!", @@ -6109,30 +5628,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6148,18 +5643,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6184,18 +5667,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6232,38 +5703,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6272,62 +5715,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6364,10 +5763,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6376,14 +5771,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6392,46 +5779,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6440,10 +5791,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6500,18 +5847,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6520,14 +5855,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6556,18 +5883,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6576,42 +5891,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6620,14 +5903,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6648,26 +5923,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6688,10 +5943,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6724,25 +5975,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6799,34 +6031,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6855,778 +6059,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8619,14 +7055,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8638,14 +7066,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8677,10 +7097,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8689,18 +7105,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8709,14 +7113,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8741,38 +7137,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8818,10 +7186,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8846,10 +7210,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8874,10 +7234,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8886,66 +7242,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8966,42 +7266,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9026,154 +7302,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9190,18 +7318,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9222,14 +7338,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9246,10 +7354,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9262,14 +7366,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9278,14 +7374,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9313,26 +7401,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9361,18 +7429,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9409,10 +7469,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10345,10 +8401,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10529,34 +8581,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10569,10 +8593,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10581,14 +8601,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10605,22 +8617,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10768,14 +8764,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10784,34 +8772,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10820,54 +8780,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10876,10 +8800,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10896,10 +8816,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11071,26 +8987,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11119,10 +9015,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11179,30 +9071,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11231,18 +9107,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11359,14 +9227,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11379,10 +9239,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11391,14 +9247,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11415,14 +9263,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11431,22 +9271,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11459,18 +9283,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11487,22 +9299,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11511,30 +9311,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11607,18 +9383,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11675,18 +9439,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11715,30 +9467,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11791,18 +9527,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11851,46 +9579,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11955,10 +9643,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12130,14 +9814,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12165,14 +9841,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12185,10 +9853,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12224,19 +9888,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12261,14 +9920,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12277,14 +9928,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12337,10 +9980,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12353,18 +9992,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12377,14 +10004,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12425,26 +10044,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12472,10 +10079,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12486,36 +10089,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12552,10 +10125,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12620,18 +10189,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12696,10 +10253,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12720,10 +10273,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12740,10 +10289,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12752,10 +10297,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12768,10 +10309,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12796,16 +10333,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "বন্ধুদের কার্যকলাপে আমন্ত্রণ জানান", - "inviteFriendsToActivityCourse": "বন্ধুদের কার্যকলাপ এবং কোর্সে আমন্ত্রণ জানান", "feedbackRespDesc": "কার্যকলাপের আপডেটের জন্য আগামীকাল আবার চেক করুন।", "activityDropdownDesc": "আপনি যখন এই কার্যকলাপ শেষ করবেন, নিচের ক্লিক করুন", - "activityAnalyticsListBody": "এগুলো আপনার সম্পন্ন কার্যকলাপ! কার্যকলাপ শেষ করার পরে, আপনি এগুলো এখানে দেখতে পারেন।", "languageMismatchTitle": "ভাষার মিল নেই", "languageMismatchDesc": "আপনার লক্ষ্য ভাষা এই কার্যকলাপের ভাষার সাথে মিলছে না। আপনার লক্ষ্য ভাষা আপডেট করবেন?", "reportWordIssueTooltip": "শব্দের তথ্য সমস্যা রিপোর্ট করুন", "tokenInfoFeedbackDialogTitle": "শব্দ তথ্য প্রতিক্রিয়া", - "tokenInfoFeedbackDialogDesc": "এআই ভুল করে। উপরে দেওয়া তথ্যের সাথে আপনি যদি কোনও সমস্যা খুঁজে পান তবে দয়া করে বর্ণনা করুন।", "noPublicCoursesFound": "কোনও পাবলিক কোর্স পাওয়া যায়নি। আপনি কি একটি তৈরি করতে চান?", "noCourseTemplatesFound": "আমরা আপনার লক্ষ্য ভাষার জন্য কোনও কোর্স খুঁজে পাইনি। এই সময়ে আপনি পাঞ্জিয়া বটের সাথে চ্যাট করতে পারেন, এবং পরে আরও কোর্সের জন্য ফিরে আসতে পারেন।", "botActivityJoinFailMessage": "পাঞ্জিয়া বট উত্তর দিতে কিছুটা সময় নিচ্ছে। দয়া করে পরে আবার চেষ্টা করুন, বা একজন বন্ধুকে আমন্ত্রণ জানান।", @@ -12813,14 +10346,6 @@ "leaveDesc": "এই স্থান এবং এর মধ্যে সমস্ত চ্যাট ছেড়ে দিন", "selectAll": "সব নির্বাচন করুন", "deselectAll": "সব বাতিল করুন", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12829,10 +10354,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12849,10 +10370,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12886,7 +10403,6 @@ "newMessageInPangeaChat": "💬 পেঙ্গিয়া চ্যাটে নতুন বার্তা", "shareCourse": "কোর্স শেয়ার করুন", "addCourse": "একটি কোর্স যোগ করুন", - "joinCourseWithCode": "কোড দিয়ে কোর্সে যোগ দিন", "joinPublicCourse": "পাবলিক কোর্সে যোগ দিন", "vocabLevelsDesc": "এখানে আপনি শব্দের স্তর উন্নত করলে শব্দগুলি যাবে!", "highlightVocabTooltip": "নিচে লক্ষ্য vocab শব্দগুলো হাইলাইট করুন তাদের পাঠিয়ে বা চ্যাটে তাদের সাথে অনুশীলন করে", @@ -12910,10 +10426,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12922,7 +10434,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "কোনও ডিএম বা চ্যাট পাওয়া যায়নি। নিশ্চিত করুন যে আপনার অনুসন্ধান সঠিকভাবে বানান করা হয়েছে।", + "activityAnalyticsTooltipBody": "এগুলি আপনার পর্যালোচনা এবং অনুশীলনের জন্য সংরক্ষিত কার্যক্রম।", + "numSavedActivities": "সংরক্ষিত কার্যক্রমের সংখ্যা", + "saveActivityTitle": "কার্যক্রম সংরক্ষণ করুন", + "saveActivityDesc": "ভাল কাজ! পরবর্তী পর্যালোচনা এবং অনুশীলনের জন্য এই কার্যক্রমটি সংরক্ষণ করুন", + "levelInfoTooltip": "এখানে আপনি সমস্ত পয়েন্ট দেখতে পারেন যা আপনি অর্জন করেছেন এবং কীভাবে!", + "alreadyInCourseWithID": "আপনি ইতিমধ্যে এই পরিকল্পনার সাথে একটি কোর্সে আছেন। আপনি কি একই পরিকল্পনার সাথে একটি কোর্স তৈরি করতে চান, নাকি বিদ্যমান কোর্সে যেতে চান?", + "goToExistingCourse": "বিদ্যমান কোর্সে যান", + "emojiView": "ইমোজি ভিউ", + "feedbackDialogDesc": "আমি ও ভুল করি! আমাকে উন্নত করতে সাহায্য করার জন্য কিছু আছে?", + "contactHasBeenInvitedToTheCourse": "যোগাযোগকে কোর্সে আমন্ত্রণ জানানো হয়েছে", + "activityStatsButtonTooltip": "কার্যকলাপের তথ্য", + "allow": "অনুমতি দিন", + "deny": "অস্বীকার করুন", + "enabledRenewal": "সাবস্ক্রিপশন নবীকরণ সক্ষম করুন", + "subscriptionEndsOn": "সাবস্ক্রিপশন শেষ হবে", + "subscriptionRenewsOn": "সাবস্ক্রিপশন নবীকরণ হবে", + "waitForSubscriptionChanges": "আপনার সাবস্ক্রিপশনের পরিবর্তনগুলি অ্যাপে প্রতিফলিত হতে কিছু সময় লাগতে পারে।", + "subscribeReadingAssistance": "বার্তা সরঞ্জাম আনলক করতে সাবস্ক্রাইব করুন", + "aceDisplayName": "আচিনিজ", + "achDisplayName": "আকোলি", + "afDisplayName": "আফ্রিকান্স", + "akDisplayName": "আকান", + "alzDisplayName": "আলুর", + "amDisplayName": "আমহারিক", + "arDisplayName": "আরবি", + "asDisplayName": "অসমীয়া", + "awaDisplayName": "আওধী", + "ayDisplayName": "আয়মারা", + "azDisplayName": "আজারবাইজানি", + "baDisplayName": "বাস্কির", + "banDisplayName": "বালিনিজ", + "bbcDisplayName": "বাতাক টোবা", + "beDisplayName": "বেলারুশিয়ান", + "bemDisplayName": "বেম্বা", + "bewDisplayName": "বেতাওয়ি", + "bgDisplayName": "বুলগেরিয়ান", + "bhoDisplayName": "ভোজপুরি", + "bikDisplayName": "বিকোল", + "bmDisplayName": "বাম্বারা", + "bnDisplayName": "বাংলা", + "bnBDDisplayName": "বাংলা (বাংলাদেশ)", + "bnINDisplayName": "বাংলা (ভারত)", + "brDisplayName": "ব্রেটন", + "bsDisplayName": "বসনিয়ান", + "btsDisplayName": "বাতাক সিমালুংগুন", + "btxDisplayName": "বাতাক কারো", + "buaDisplayName": "বুরিয়াত", + "caDisplayName": "কাতালান", + "cebDisplayName": "সেবুয়ানো", + "cggDisplayName": "চিগা", + "chmDisplayName": "মারি", + "ckbDisplayName": "মধ্য কুর্দি", + "cnhDisplayName": "হাখা চিন", + "coDisplayName": "কর্সিকান", + "crhDisplayName": "ক্রিমিয়ান তুর্কি", + "crsDisplayName": "সেসেলওয়া ক্রিওল ফরাসি", + "csDisplayName": "চেক", + "cvDisplayName": "চুভাশ", + "cyDisplayName": "ওয়েলশ", + "daDisplayName": "ড্যানিশ", + "deDisplayName": "জার্মান", + "dinDisplayName": "ডিঙ্কা", + "doiDisplayName": "ডোগরি", + "dovDisplayName": "ডোম্বে", + "dzDisplayName": "জংখা", + "eeDisplayName": "এভে", + "enDisplayName": "ইংরেজি", + "enAUDisplayName": "ইংরেজি (অস্ট্রেলিয়া)", + "enGBDisplayName": "ইংরেজি (যুক্তরাজ্য)", + "enINDisplayName": "ইংরেজি (ভারত)", + "enUSDisplayName": "ইংরেজি (মার্কিন যুক্তরাষ্ট্র)", + "eoDisplayName": "এস্পেরান্তো", + "esDisplayName": "স্প্যানিশ", + "esESDisplayName": "স্প্যানিশ (স্পেন)", + "esMXDisplayName": "স্প্যানিশ (মেক্সিকো)", + "euDisplayName": "বাস্ক", + "faDisplayName": "ফারসি", + "ffDisplayName": "ফুলাহ", + "fiDisplayName": "ফিনিশ", + "filDisplayName": "ফিলিপিনো", + "fjDisplayName": "ফিজিয়ান", + "foDisplayName": "ফারোয়েজ", + "frDisplayName": "ফরাসি", + "frCADisplayName": "ফরাসি (কানাডা)", + "frFRDisplayName": "ফরাসি (ফ্রান্স)", + "fyDisplayName": "পশ্চিম ফ্রিজিয়ান", + "gaDisplayName": "আইরিশ", + "gaaDisplayName": "গা", + "gdDisplayName": "স্কটিশ গ্যালিক", + "glDisplayName": "গ্যালিসিয়ান", + "gnDisplayName": "গুয়ারানি", + "gomDisplayName": "গোয়ান কঙ্কণী", + "guDisplayName": "গুজরাটি", + "haDisplayName": "হাউসা", + "hawDisplayName": "হাওয়াইয়ান", + "heDisplayName": "হিব্রু", + "hiDisplayName": "হিন্দি", + "hilDisplayName": "হিলিগাইনন", + "hmnDisplayName": "হমং", + "hneDisplayName": "ছত্তিশগড়ী", + "hrDisplayName": "ক্রোয়েশিয়ান", + "hrxDisplayName": "হান্সরিক", + "htDisplayName": "হাইতিয়ান ক্রিওল", + "huDisplayName": "হাঙ্গেরিয়ান", + "hyDisplayName": "আর্মেনিয়ান", + "idDisplayName": "ইন্দোনেশিয়ান", + "igDisplayName": "ইগবো", + "iloDisplayName": "ইলোকো", + "isDisplayName": "আইসল্যান্ডিক", + "itDisplayName": "ইতালীয়", + "jaDisplayName": "জাপানি", + "jvDisplayName": "জাভানিজ", + "kaDisplayName": "জর্জিয়ান", + "kkDisplayName": "কাজাখ", + "kmDisplayName": "খমের", + "knDisplayName": "কন্নড়", + "koDisplayName": "কোরিয়ান", + "kokDisplayName": "কঙ্কানি", + "kriDisplayName": "ক্রিও", + "ksDisplayName": "কাশ্মীরি", + "ktuDisplayName": "কিতুবা (ডেমোক্র্যাটিক রিপাবলিক অফ কঙ্গো)", + "kuDisplayName": "কুর্দিশ", + "kyDisplayName": "কিরগিজ", + "laDisplayName": "লাতিন", + "lbDisplayName": "লুক্সেমবার্গিশ", + "lgDisplayName": "গান্ডা", + "liDisplayName": "লিম্বার্গিশ", + "lijDisplayName": "লিগুরিয়ান", + "lmoDisplayName": "লম্বার্ড", + "lnDisplayName": "লিঙ্গালা", + "loDisplayName": "লাও", + "ltDisplayName": "লিথুয়ানিয়ান", + "ltgDisplayName": "লাতগালিয়ান", + "luoDisplayName": "লুও (কেনিয়া এবং তানজানিয়া)", + "lusDisplayName": "মিজো", + "lvDisplayName": "লাতভিয়ান", + "maiDisplayName": "মৈথিলী", + "makDisplayName": "মাকাসার", + "mgDisplayName": "মালাগাসি", + "miDisplayName": "মাওরি", + "minDisplayName": "মিনাংকাবাউ", + "mkDisplayName": "ম্যাসেডোনিয়ান", + "mlDisplayName": "মালায়ালম", + "mnDisplayName": "মঙ্গোলিয়ান", + "mniDisplayName": "মণিপুরি", + "mrDisplayName": "মারাঠি", + "msDisplayName": "মালয়", + "msArabDisplayName": "মালয় (আরবি)", + "msMYDisplayName": "মালয় (মালয়েশিয়া)", + "mtDisplayName": "মাল্টিজ", + "mwrDisplayName": "মারওয়ারি", + "myDisplayName": "বার্মিজ", + "nanDisplayName": "মিন নান", + "nbDisplayName": "নরওয়েজিয়ান (বোকমাল)", + "neDisplayName": "নেপালি", + "newDisplayName": "নিউয়ারি", + "nlDisplayName": "ডাচ", + "nlBEDisplayName": "ফ্লেমিশ", + "noDisplayName": "নরওয়েজিয়ান", + "nrDisplayName": "দক্ষিণ এনডেবেলে", + "nsoDisplayName": "উত্তর সোথো", + "nusDisplayName": "নুয়ার", + "nyDisplayName": "ন্যানজা", + "ocDisplayName": "অক্সিটান", + "omDisplayName": "ওরোমো", + "orDisplayName": "ওড়িয়া", + "paDisplayName": "পাঞ্জাবি", + "paArabDisplayName": "পাঞ্জাবি (শাহমুখী)", + "paINDisplayName": "পাঞ্জাবি (গুরমুখী)", + "pagDisplayName": "পাঙ্গাসিনান", + "pamDisplayName": "পাম্পাঙ্গা", + "papDisplayName": "পাপিয়ামেন্টো", + "plDisplayName": "পোলিশ", + "psDisplayName": "পাশতু", + "ptDisplayName": "পোর্তুগিজ", + "ptBRDisplayName": "পোর্তুগিজ (ব্রাজিল)", + "ptPTDisplayName": "পোর্তুগিজ (পোর্তুগাল)", + "quDisplayName": "কেচুয়া", + "rajDisplayName": "রাজস্থানি", + "rnDisplayName": "রুন্ডি", + "roDisplayName": "রোমানিয়ান", + "roMDDisplayName": "মলডোভান", + "romDisplayName": "রোমানি", + "ruDisplayName": "রুশ", + "rwDisplayName": "কিনিয়ারওয়ান্ডা", + "saDisplayName": "সংস্কৃত", + "satDisplayName": "সান্তালি", + "scnDisplayName": "সিসিলিয়ান", + "sdDisplayName": "সিন্ধি", + "sgDisplayName": "সাঙ্গো", + "shnDisplayName": "শান", + "siDisplayName": "সিনহালা", + "skDisplayName": "স্লোভাক", + "slDisplayName": "স্লোভেনিয়ান", + "smDisplayName": "সামোয়ান", + "snDisplayName": "শোনা", + "soDisplayName": "সোমালি", + "sqDisplayName": "আলবেনিয়ান", + "srDisplayName": "সার্বিয়ান", + "srMEDisplayName": "মন্টেনেগ্রিন", + "ssDisplayName": "স্বাতি", + "stDisplayName": "দক্ষিণ সোথো", + "suDisplayName": "সুন্দানিজ", + "svDisplayName": "সুইডিশ", + "swDisplayName": "সোয়াহিলি", + "szlDisplayName": "সিলেসিয়ান", + "taDisplayName": "তামিল", + "teDisplayName": "তেলুগু", + "tetDisplayName": "টেটাম", + "tgDisplayName": "তাজিক", + "thDisplayName": "থাই", + "tiDisplayName": "টিগ্রিনিয়া", + "tkDisplayName": "তুর্কমেন", + "tlDisplayName": "টাগালোগ", + "tnDisplayName": "টসওয়ানা", + "trDisplayName": "তুর্কী", + "tsDisplayName": "টসোঙ্গা", + "ttDisplayName": "তাতার", + "ugDisplayName": "উইঘুর", + "ukDisplayName": "ইউক্রেনীয়", + "urDisplayName": "উর্দু", + "urINDisplayName": "উর্দু (ভারত)", + "urPKDisplayName": "উর্দু (পাকিস্তান)", + "uzDisplayName": "উজবেক", + "viDisplayName": "ভিয়েতনামী", + "wuuDisplayName": "উ", + "xhDisplayName": "জোশা", + "yiDisplayName": "ইদিশ", + "yoDisplayName": "ইয়োরুবা", + "yuaDisplayName": "ইউকাটেকো", + "yueDisplayName": "ক্যানটোনিজ", + "yueCNDisplayName": "ক্যানটোনিজ (চীন)", + "yueHKDisplayName": "ক্যানটোনিজ (হংকং)", + "zhDisplayName": "চাইনিজ", + "zhCNDisplayName": "চাইনিজ (সরলীকৃত)", + "zhTWDisplayName": "চাইনিজ (প্রথাগত)", + "zuDisplayName": "জুলু", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12989,6 +11687,7 @@ "notStartedActivitiesTitle": "খোলা সেশন ({num})", "inProgressActivitiesTitle": "এখন হচ্ছে ({num})", "completedActivitiesTitle": "সম্পন্ন ({num})", + "pickDifferentActivity": "একটি ভিন্ন কার্যকলাপ বেছে নিন", "inOngoingActivity": "আপনার একটি চলমান কার্যক্রম আছে!", "@notStartedActivitiesTitle": { "type": "String", @@ -13014,10 +11713,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "আপনার লক্ষ্য ভাষা এই বার্তার সাথে মেলে না। আপনার লক্ষ্য ভাষা আপডেট করবেন?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "এটি এই কোর্সের সকল সদস্য। যে কোনো ব্যবহারকারীর অবতার ক্লিক করুন এবং \"আলাপ শুরু করুন\" এ ডিএম পাঠাতে।", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "এই শব্দটি আপনার বিশ্লেষণ থেকে স্থায়ীভাবে মুছে ফেলা হবে", + "woman": "মহিলা", + "man": "পুরুষ", + "otherGender": "অন্যান্য", + "unselectedGender": "একটি লিঙ্গ বিকল্প নির্বাচন করুন", + "gender": "লিঙ্গ", + "chatParticipantTooltip": "এটি এই চ্যাটে সকলেই। যে কোনও ব্যবহারকারীর অ্যাভাটারে ক্লিক করুন এবং \"কথোপকথন শুরু করুন\" ডিএম পাঠাতে।", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "আপনার লক্ষ্য ভাষায় নয় এমন বার্তাগুলির জন্য শেখার সরঞ্জামগুলি অক্ষম করা হয়েছে।", + "vocabEmoji": "শব্দ ইমোজি", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "পুনর্জন্মের জন্য অনুরোধ করুন", + "optionalRegenerateReason": "(ঐচ্ছিক) কারণ", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "আপনি {lemma} এর জন্য ইমোজি সেট করেছেন! আমরা ভবিষ্যতে অনুশীলন কার্যক্রমে এই ইমোজিটি শব্দটি উপস্থাপন করতে ব্যবহার করব।", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "সাইন ইন সম্পন্ন হওয়ার জন্য অপেক্ষা করছে", + "ssoDialogDesc": "আমরা একটি নতুন ট্যাব খুলেছি যাতে আপনি নিরাপদে সাইন ইন করতে পারেন।", + "ssoDialogHelpText": "🤔 যদি আপনি নতুন ট্যাবটি না দেখেন, দয়া করে আপনার পপআপ ব্লকারটি পরীক্ষা করুন।", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "ভাষার সরঞ্জাম নিষ্ক্রিয় করুন", + "disableLanguageToolsDesc": "আপনি কি স্বয়ংক্রিয় ভাষা সহায়তা নিষ্ক্রিয় করতে চান?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "অনুমতি অস্বীকৃত। অডিও বার্তা রেকর্ড করার জন্য রেকর্ডিং অনুমতি সক্রিয় করুন।", + "genericWebRecordingError": "কিছু ভুল হয়েছে। বার্তা রেকর্ড করার সময় ক্রোম ব্রাউজার ব্যবহার করার পরামর্শ দেওয়া হচ্ছে।", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "এই অ্যাপ্লিকেশনটি ব্যবহার করার জন্য সেরা অভিজ্ঞতার জন্য, দয়া করে আপনার স্ক্রীনের আকার বাড়ান।", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "পরবর্তী বিষয় উন্মুক্ত করার জন্য কার্যক্রম", "activitiesToUnlockTopicDesc": "পরবর্তী কোর্স বিষয় উন্মুক্ত করার জন্য কার্যক্রমের সংখ্যা নির্ধারণ করুন", "@activitiesToUnlockTopicTitle": { @@ -13027,5 +11844,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "সঠিক শব্দভাণ্ডার সংজ্ঞা অনুশীলন", + "constructUseIncLMDesc": "ভুল শব্দভাণ্ডার সংজ্ঞা অনুশীলন", + "constructUseCorLADesc": "সঠিক শব্দভাণ্ডার অডিও অনুশীলন", + "constructUseIncLADesc": "ভুল শব্দভাণ্ডার অডিও অনুশীলন", + "constructUseBonus": "শব্দভাণ্ডার অনুশীলনের সময় বোনাস", + "practiceVocab": "শব্দভাণ্ডার অনুশীলন", + "selectMeaning": "অর্থ নির্বাচন করুন", + "selectAudio": "মিলানো অডিও নির্বাচন করুন", + "congratulations": "অভিনন্দন!", + "anotherRound": "আরেকটি রাউন্ড", + "noActivityRequest": "বর্তমান কোন কার্যকলাপের অনুরোধ নেই।", + "quit": "বিরতি", + "congratulationsYouveCompletedPractice": "অভিনন্দন! আপনি অনুশীলন সেশন সম্পন্ন করেছেন।", + "mustHave10Words": "আপনার অনুশীলনের জন্য অন্তত 10টি শব্দ থাকতে হবে। আরও জানার জন্য একটি বন্ধুর সাথে কথা বলুন বা Pangea Bot এর সাথে কথা বলুন!", + "botSettings": "বট সেটিংস", + "activitySettingsOverrideWarning": "কার্যকলাপ পরিকল্পনার দ্বারা নির্ধারিত ভাষা এবং ভাষার স্তর", + "voice": "কণ্ঠ", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index 89c41757a..6bb73e24c 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -3245,28 +3245,16 @@ "commandHint_logoutall": "ལག་ཁྱེར་ལས་བརྗེ་བཅོས་བྱེད་མི་ཚུལ།", "displayNavigationRail": "ཁྱེར་ལོག་ལ་ལག་ཁྱེར་ལེན་འབད།", "customReaction": "རང་སྤྱོད་ལེན།", - "accountInformation": "ཁྱེར་གྱི་ཁུལ་ཁང་ཚན།", - "addGroupDescription": "ཚགས་ཚིག་བརྡ་བཅོས་བྱེད་པ།", - "addNewFriend": "གནང་བའི་གྲོགས་མོ་ཐོབ་པ།", - "alreadyHaveAnAccount": "ཁྱེད་ལ་གནང་བའི་ཁུངས་འདི་འདི་ཡོད་པས།", - "createNewGroup": "གནང་བའི་གནང་བ་གསར་པ།", - "editChatPermissions": "ཚགས་ཚིག་གི་དབྱེ་བའི་དོན་ལུགས་བསྒྱུར་བྱེད་པ།", "ignore": "ཆོག་འཐུས།", "ignoredUsers": "ཆོག་འཐུས་བྱེད་པའི་བཀལ་བའི་ལག་ལེན་པ།", "writeAMessageLangCodes": "ཁྱེད་ཀྱིས {l1} དང་ {l2} ལ་ལོག་ལོག་བཟོ་བ།...", "requests": "རྒྱུན་རྒྱུན།", - "allCorrect": "འདི་ལ་ངེས་བརྟན་བྱེད་ན་ཡོད། བཟང་པོ།", - "newWayAllGood": "འདི་ལ་ངེས་བརྟན་བྱེད་ན་མི་འདི་ལ་བཟོ་བའི་ལུང་པོ་ཡོད།", - "othersAreBetter": "ཧེ, ཁྱེད་ཀྱིས་འདི་ལ་བཟོ་བའི་ལུང་པོ་ཡོད་མི་རེད།", "holdForInfo": "ཚིག་ཚིག་ལ་ལོག་ལོག་བཟོ་བའི་སྟེང་ལ་ལོག་ལོག་བྱེད་པ།", "greenFeedback": "འདི་ལ་ངེས་བརྟན་བྱེད་ན་ཡོད།", "yellowFeedback": "ཧེ, ཁྱེད་ཀྱིས་འདི་ལ་ལོག་ལོག་བཟོ་བ་བྱེད་ན་ཚོད་ལ་བཟོ་བའི་ལུང་པོ་ཡོད། འདི་ཚིག་ལ་ལོག་ལོག་བཟོ་བའི་སྟེང་ལ་ལོག་ལོག་བྱེད་པ།", "redFeedback": "ངེད་ཀྱིས་འདི་ལ་བཟོ་བའི་ལུང་པོ་མེད།", "itInstructionsTitle": "ངེད་ལ་ཁྱེད་ལ་འབྲེལ་བ་བྱེད་ན་བརྡ་བཅོས་བྱེད་ནི་ངེད་ལ་འགྱོ་ཡོད།", "itInstructionsBody": "ཁྱེད་ཀྱིས་ཚིག་ཚིག་ལ་ལོག་ལོག་བཟོ་བའི་ལུང་པོ་ལ་ལོག་ལོག་བྱེད་ན་ལོག་ལོག་བཟོ་བའི་སྟེང་ལ་ལོག་ལོག་བྱེད་པ།", - "oneday": "ལོ་གསུམ་ལས་ནང་།", - "oneweek": "ལོ་གསུམ་ལས་ནང་།", - "onemonth": "ཁྱེད་རང་གི་ལོ་ནས་ནང", "gaTooltip": "L2 ལུས་སྤྱོད་ནས་སྒྲོམ་བཅོས་རྟགས་སྤྱོད", "taTooltip": "L2 ལུས་སྤྱོད་ནས་སྒྲོམ་བཅོས་རྟགས་སྤྱོད", "unTooltip": "གཞན་", @@ -3276,58 +3264,27 @@ "interactiveTranslatorAllowed": "སྟོང་སློབ་སྤྱོད", "interactiveTranslatorRequired": "དགོས་པའི་", "notYetSet": "མི་གཏོང་པར་ཅིག", - "myLearning": "ངའི་རྟོགས་སྤྱོད", "waTooltip": "L2 ལུས་སྤྱོད་མི་སྤྱོད་སྤྱོད", - "changeDateRange": "ཚེས་རབས་སྤྱོད་བརྗེ་བ", - "classDescription": "ཚིག་གཅིག", - "addStudents": "དབྱེ་རིམ་ལུས་སྤྱོད་ལུས་སྤྱོད་སྤྱོད", - "copyClassLink": "ལུས་སྤྱོད་འབྲེལ་མཐུད་ལོག", - "copyClassCode": "ལུས་སྤྱོད་ལོག་ལས་སྤྱོད", - "inviteStudentByUserName": "མིང་ཚིག་ལས་སྤྱོད་ལུས་སྤྱོད", "languageSettings": "ཡིག་ཚིག་སྒྲིག་སྟེང་", "interactiveTranslator": "རང་སྤྱོད་སྒྲོམ་བཅོས་", - "shareVideo": "བརྗེད་ཡོད་པའི་བརྗེད་ཡོད་པ", - "shareVideoDesc": "འདི་ལུགས་སྤྱོད་ནས་སློབ་སྦྱོང་ལུས་སྤྱོད་ལ་བརྗེད་ཡོད་པ་ལུགས་སྤྱོད་འབད་ན།", - "shareFiles": "ཡིག་སྣོད་ལྟར་བརྗེད་ཡོད་པ", - "selectLanguageLevel": "སྱོར་བའི་སྐོར་ཚད་ཚད་གཏོད་ན།", "noIdenticalLanguages": "བརྗེད་ཡོད་པའི་སྐད་ཡིག་དང་སྤྱོད་ལུགས་ལ་འབྱོར་བ་མི་འདུག", - "iWantALanguagePartnerFrom": "ང་ནས་ཡོད་པ:", - "worldWide": "འཇིག་རྟེན་གྱི་གནས་སྟངས", - "noResults": "ལུས་སྤྱོད་མི་འདུག! ཁྱེད་ཀྱི་བརྗེད་ཡོད་པ་ལ་བརྗེད་ཡོད་པ་ལ་འབད་བའི་ལུགས་སྤྱོད་ལ་འབད་ན།", "searchBy": "རྒྱལ་ཁབ་དང་སྐད་ཡིག་ལྟར་བཤད་ནས་བཤད་འདེད།", - "iWantAConversationPartner": "ང་ནས་སྐད་ཆ་ལ་འདོད་པའི་སྐད་ལེན་པ།", - "iWantALanguagePartnerWhoSpeaks": "ནང་ལས་སྐད་ལེན་པ།", - "iWantALanguagePartnerWhoIsLearning": "སྱོན་ཚན་ལས་སྐད་ལེན་པ།", "joinWithClassCode": "ཚོང་ཚད་ལ་སྡེབ་སྤྱོད་ན།", - "joinWithClassCodeHint": "འཕྲིན་ལེན་ལས་སྤྱོད་ན་ལོག་ལེན་འབད།", - "languageLevelPreA1": "བརྗེད་ཡོད་པ་སྤྱོད་མི་ཚོད་ (Pre A1)", - "languageLevelA1": "བརྗེད་ཡོད་པ (A1)", - "languageLevelA2": "གཞི་སྒོར (A2)", - "languageLevelB1": "ལས་སྤྱོད་ལོག་ལེན་ (B1)", - "languageLevelB2": "མཐར་ཕྱིན་ལས་སྤྱོད་ལོག་ལེན་ (B2)", - "languageLevelC1": "ལོངས་སྤྱོད་ལོག་ལེན་ (C1)", - "languageLevelC2": "མཐོ་སྐོར (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice High (A2)", + "languageLevelB1": "Intermediate Mid (B1)", + "languageLevelB2": "Advanced Low (B2)", + "languageLevelC1": "Advanced Mid (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "མིང་ལེན་བསྐྱར་བཟོ།", "changeTheNameOfTheChat": "ཆ་ཚང་མིང་བསྐྱར་བཟོ།", - "askPangeaBot": "Pangea Bot ལ་འདི་ལས་སྒྲིག་བཀོད་ལ་བཀོད་ནས་བརྗེ་བརྗོད་འདི་ལ་བཀོད།", "sorryNoResults": "དགོས་པ་མེད།", "ignoreInThisText": "རྒྱབ་ལེན།", - "helpMeTranslate": "ཨེ!།", - "needsItShortMessage": "ལུས་སྤྱོད་མི་འདུག", "needsItMessage": "དགོས་མི་འདུག, འདི་ལ་ལེབ་སྐད་མེད་ཡོད། ཁྱེད་ལ་འདི་ལ་ལེབ་སྐད་འབད་ན་གནད་དོན་འདི་ལ་ཧ་གོ་ཡོད་མེད་ན?", - "needsIgcMessage": "འདི་ལ་སྒྲིག་བཀོད་མེད་འདུག", - "tokenTranslationTitle": "ཁྱེད་ཀྱི་གནད་དོན་སྤྱི་ཚོད་ལས་སྤྱི་ཚོད་ལ་འབྱོར་བའི་ཡིག་ཚིག", - "spanTranslationDesc": "ནང་ལས་སྤྱི་ཚོད་ལ་འབྱོར་བའི་སྤྱི་ཚོད་ལ་བཀོད།", - "spanTranslationTitle": "ཁྱེད་ཀྱི་གནད་དོན་སྤྱི་ཚོད་ལ་འབྱོར་བའི་ཡིག་ཚིག", - "l1SpanAndGrammarTitle": "ལུས་སྤྱོད་མི་འདུག", - "l1SpanAndGrammarDesc": "འདི་ལ་ཁྱེད་ཀྱི་གནད་དོན་སྤྱི་ཚོད་ལ་འབྱོར་བའི་ཡིག་ཚིག་ཡོད་མི་རེད། འདི་ནི་སྤྱི་ཚོད་ལ་འབྱོར་བའི་ཡིག་ཚིག་ཡོད་མི་རེད།", - "otherTitle": "ཁྱེད་ལ་འདུག", - "otherDesc": "ནང་ལས་སྤྱི་ཚོད་ལ་འབྱོར་བའི་སྤྱི་ཚོད་ལ་བཀོད།", "countryInformation": "ངའི་རྒྱལ་ཁབ།", - "myLanguages": "ངའི་གནད་དོན་དང་ལུས་སྤྱོད་སྐད་ཚིག", "targetLanguage": "ལུས་སྤྱོད་སྐད", "sourceLanguage": "མིང་ཚིག", - "languagesISpeak": "ང་སྐད་ཆ་ལན་པའི་སྐད་ཚིག", "updateLanguage": "ངའི་སྐད་ཚིག", "whatLanguageYouWantToLearn": "ཁྱེད་ཀྱིས་སློབ་ཚན་སྐད་ཚིག་ག་རེ་སྟེང་།", "whatIsYourBaseLanguage": "ཁྱེད་ཀྱི་མིང་ཚིག་ག་རེ་ཡོད།", @@ -3342,13 +3299,8 @@ "errorDisableLanguageAssistanceUserDesc": "འདི་ལས་སྤྱོད་ནས་སྐད་ཚིག་རྒྱུན་ལས་འབད་ནི་ལ་བརྟེན་པ།", "errorDisableITClassDesc": "འདི་ལས་སྤྱོད་ནས་འདི་ལུས་ལ་བཟོ་བཅོས་ལས་འབད་མེད།", "errorDisableIGCClassDesc": "འདི་ལས་སྤྱོད་ནས་རྒྱུན་ལས་འབད་མེད།", - "itIsDisabled": "རིགས་སྤྱོད་སྤྱོད་མེད།", - "igcIsDisabled": "རྒྱུན་ལས་སྤྱོད་མེད།", - "goToLearningSettings": "ཚོགས་སྒྲིག་སྤྱོད་ལས་འགྱོ།", "error405Title": "སྱོན་ཚན་མེད།", "error405Desc": "Խնդրում ենք սահմանել ձեր լեզուները Մենյու գլխավոր > Ուսուցման կարգավորումներ բաժնում։", - "loginOrSignup": "Մուտք գործել կամ գրանցվել", - "iAgreeToThe": "Ես համաձայն եմ", "termsAndConditions": "Պայմաններն ու դրույթները", "andCertifyIAmAtLeast13YearsOfAge": "և վկայում եմ, որ ինձ առնվազն 16 տարեկան եմ։", "error502504Title": "Վայ, շատ ուսանողներ են առցանց!", @@ -3356,40 +3308,21 @@ "error404Title": "Թարգմանության սխալ!", "error404Desc": "Պանգեա Բոտը չգիտի, թե ինչպես թարգմանել դա...", "errorPleaseRefresh": "Մենք աշխատում ենք դրա վրա։ Խնդրում ենք թարմացնել և փորձել նորից։", - "toggleIT": "Ինտերակտիվ թարգմանություն", - "toggleIGC": "Ինտերակտիվ գրականության ստուգում", - "toggleToolSettingsDescription": "Այստեղ դուք կարող եք փոխել ձեր անհատական լեզվի գործիքների կարգավորումները։", "connectedToStaging": "Միացված է ստաժինգին", "learningSettings": "Ուսուցման կարգավորումներ", - "sendVoiceNotes": "Ուղարկել ձայնային նոտաներ", - "sendVoiceNotesDesc": "Միացրեք սա, որպեսզի ուսանողները կարողանան ուղարկել ձայնային նոտաներ զրույցներում։", - "chatTopic": "Զրույցի թեմա", - "chatTopicDesc": "Սահմանել զրույցի թեմա", - "inviteStudentByUserNameDesc": "Եթե ձեր ուսանողը արդեն ունի հաշիվ, կարող եք որոնել նրանց։", "participants": "भाग लिनेहरू", - "almostPerfect": "त्यो सही देखिन्छ! म के भन्थें भन्ने यहाँ छ।", - "prettyGood": "धेरै राम्रो! म के भन्थें भन्ने यहाँ छ।", - "letMeThink": "हम्म, तपाईंले कसरि गर्नुभयो हेर्छु!", "clickMessageTitle": "मदद चाहिन्छ?", "clickMessageBody": "भाषा उपकरणहरूको लागि सन्देश क्लिक गर्नुहोस् जस्तै अनुवाद, पुनः प्ले र थप!", - "understandingMessagesTitle": "परिभाषाहरू र अनुवादहरू!", - "understandingMessagesBody": "परिभाषाका लागि रेखांकित शब्दहरू क्लिक गर्नुहोस्। सन्देश विकल्पहरू (उपरी दायाँ) सँग अनुवाद गर्नुहोस्।", "allDone": "सबै सकियो!", "vocab": "शब्दावली", "low": "हामीसँग प्रमाण छ कि प्रयोगकर्ताले यी शब्दहरू बुझ्दैन।", "medium": "यी शब्दहरू प्रयोग भएका छन्। यी शब्दहरू पूर्ण रूपमा बुझिएका छन् कि छैनन् स्पष्ट छैन।", "high": "हामीसँग प्रमाण छ कि प्रयोगकर्ताले यी शब्दहरू बुझ्दछ।", - "unknownProficiency": "यी शब्दहरू पाङ्गेआ च्याटमा प्रयोग भएका छैनन्।", - "changeView": "दृश्य परिवर्तन गर्नुहोस्।", - "clearAll": "सबै शब्दहरू मेटाउनुहुन्छ?", - "generateVocabulary": "शीर्षक र विवरणबाट शब्दावली सिर्जना गर्नुहोस्", - "generatePrompts": "प्रेरणा सिर्जना गर्नुहोस्", "subscribe": "सदस्यता लिनुहोस्", "getAccess": "अहिले सदस्यता लिनुहोस्!", "subscriptionDesc": "ཚོད་ཚིག་ལ་ལོག་བརྗེ་བའི་སྤྱོད་ལམ་ཡོད། ཁྱེད་ཀྱིས་འབྲེལ་བའི་སྒྱུར་བཅོས་ལ་སྤྱོད་ལམ་ལེགས་སོ།", "subscriptionManagement": "ཐོན་རིམ་གཏོང་བ།", "currentSubscription": "ད་ལྟོ་ཐོན་རིམ།", - "changeSubscription": "ཐོན་རིམ་བསྐོས་བཅོས།", "cancelSubscription": "ཐོན་རིམ་རྒྱག་བཅོས།", "selectYourPlan": "ཁྱེད་ཀྱི་རིགས་སྒྲིག་ལེགས་སོ།", "subsciptionPlatformTooltip": "ཁྱེད་ཀྱིས་སྤྱོད་ལམ་ལ་བསྐུར་བའི་གནད་སྡེབ་ལ་སྤྱོད་ལམ་ལ་སྤྱོད་ལམ་ལེགས་སོ།", @@ -3398,9 +3331,6 @@ "paymentHistory": "དབྱེ་བའི་ཧེང་སྐོར།", "emptyChatDownloadWarning": "ལེན་འདི་ལ་ལེན་འབད་མི་ཚུལ།", "update": "རིམ་ལུགས།", - "updateDesc": "ཁྱེད་ཀྱིས་ད་ལྟོ་འདི་ལུས་སྤྱོད་ལ་སྤྱོད་ལམ་ལེགས་སོ། {localVersion} ནས {storeVersion} ལ་རིམ་ལུགས་བསྐོས་ནས།", - "maybeLater": "འདི་ལས་སྤྱོད་མི་ཚུལ།", - "mainMenu": "མིང་ཁུངས།", "toggleImmersionMode": "འཁོར་ལོག་སྤྱོད་ལམ།", "toggleImmersionModeDesc": "འདི་ལུས་སྤྱོད་ལམ་ལ་སྤྱོད་ལམ་ལ་སྤྱོད་ལོག་བརྗེ་བ་ཡོད། འདི་ནི་སྤྱོད་ལམ་ལ་སྤྱོད་ལམ་ལ་སྤྱོད་ལོག་བརྗེ་བ་ལས་སྤྱོད་ལོག་བརྗེ་བ་ཡོད།", "itToggleDescription": "འདི་ལུས་སྤྱོད་ལམ་ལ་སྤྱོད་ལམ་ལ་སྤྱོད་ལོག་བརྗེ་བ་ཡོད། འདི་ནི་སྤྱོད་ལམ་ལ་སྤྱོད་ལོག་བརྗེ་བ་ལས་སྤྱོད་ལོག་བརྗེ་བ་ལས་སྤྱོད་ལོག་བརྗེ་བ་ཡོད།", @@ -3408,199 +3338,7 @@ "originalMessage": "མིང་འབྲེལ་བའི་ཚིག་གཅིག", "oneWeekTrial": "གཅིག་ཕྱིར་སྤྱིར་བཏང་ཚོད་གཅིག", "downloadXLSXFile": "Excel ཡིག་སྐོར་རྐྱབས", - "abDisplayName": "ཨཀུ་ཁཱཟ", - "aaDisplayName": "ཨཕར", - "afDisplayName": "ཨཕྲིཀ་ཀནས", - "akDisplayName": "ཨ་ཁན", - "sqDisplayName": "ཨལ་བེནི་ཡན", - "amDisplayName": "ཨམ་ཧ་རིཀ", - "arDisplayName": "ཨེ་རབི", - "anDisplayName": "ཨར་གོ་ནིས", - "hyDisplayName": "ཨར་མེ་ནི་ཡན", - "asDisplayName": "ཨ་སཱ་མས", - "avDisplayName": "ཨ་བར་བིཀ", - "aeDisplayName": "ཨེ་བེས་ཊཱན", - "ayDisplayName": "ཨེ་ཡ་མ་ར", - "azDisplayName": "ཨེ་ཛར་བའི་བརྡའི་ཡུལ", - "bmDisplayName": "བཱམ་བར་ཡ", - "baDisplayName": "བཤཁིར", - "euDisplayName": "བསཀུག", - "beDisplayName": "བེ་ལརུ་སི་ཡན", - "bnDisplayName": "བཱང་ཡ་ལི", - "bhDisplayName": "བི་ཧ་རི", - "biDisplayName": "བིས་ལ་མ", - "bsDisplayName": "བཱོ་སི་ནི", - "brDisplayName": "བྷེ་ཊོན", - "bgDisplayName": "བུལ་གར་ཡིའི", - "myDisplayName": "བར་མིས", - "caDisplayName": "ཀ་ཏ་ལིན། བེ་ལན་ཅིན", - "chDisplayName": "ཆ་མོ་རོ་རོ", - "ceDisplayName": "ཆེ་ཆེན", - "nyDisplayName": "ཆི་ཆེ་ཝ་ཧེ། ཆེ་ཝ་ཧེ། ཉཱན་ཇེ", - "zhDisplayName": "རྒྱ་ཆེན", - "cvDisplayName": "ཆུ་ཝ་ཤ", - "kwDisplayName": "ཁོར་ནིཤ", - "coDisplayName": "ཀོར་ཟིཀ", - "crDisplayName": "ཀྲེ", - "hrDisplayName": "ཀྲོ་ཤི་ཡན", - "csDisplayName": "ཆེཀ", - "daDisplayName": "ཌེན་མཱན", - "dvDisplayName": "དི་ཝེ་ཧི། དི་ཝེ་ཧི། མལ་དི་བི་ཌིན།", - "nlDisplayName": "ནུད་ཧེ་ཡུལ།", - "enDisplayName": "ཨེང་ཁག།", - "eoDisplayName": "ཨས་པ་རེན་ཊོ།", - "etDisplayName": "ཨས་ཊེ་ནི་ཡ།", - "eeDisplayName": "ཨེ་ཝེ།", - "foDisplayName": "ཕ་རོ་སིས།", - "fjDisplayName": "ཕི་ཇི་ཡན།", - "fiDisplayName": "ཕི་ནི་སི།", - "frDisplayName": "རང་ཁུངས།", - "ffDisplayName": "ཕུ་ལའུ།; ཕུ་ལའུ།; པུ་ལར།; པུ་ལར།", - "glDisplayName": "གལི་སི་ཡན།", - "kaDisplayName": "ཇོར་ཇི་ཡ།", - "deDisplayName": "ཝར་མན།", - "elDisplayName": "རོ་མན།, མི་ལང་", - "gnDisplayName": "གུ་ཝ་ར་ནི།", - "guDisplayName": "གུ་ཇ་ར་ཏི།", - "htDisplayName": "ཧེ་ཡ་ནི།, ཧེ་ཡ་ནི་ཀྲོལ།", - "haDisplayName": "ཧཱཻ་ས།", - "heDisplayName": "ཧེ་བྷ་རུ། (ནང་ལས་མི་ལང་)", - "hzDisplayName": "ཧེ་རེ་རོ་རོ།", - "hiDisplayName": "हिन्दी", - "hoDisplayName": "हिरी मोतु", - "huDisplayName": "हंगेरियन", - "iaDisplayName": "इन्टरलींगुआ", - "idDisplayName": "इन्डोनेशियाई", - "ieDisplayName": "इन्टरलींगुई", - "gaDisplayName": "आयरिश", - "igDisplayName": "इग्बो", - "ikDisplayName": "इनुपियाक", - "ioDisplayName": "इडो", - "isDisplayName": "आइसल्यान्डिक", - "itDisplayName": "इतालवी", - "iuDisplayName": "इनुक्टिटुट", - "jaDisplayName": "जापानी", - "jvDisplayName": "जावानीस", - "klDisplayName": "कल्लालिसुत, ग्रीनलैंडिक", - "knDisplayName": "कन्नड", - "krDisplayName": "कानुरी", - "ksDisplayName": "काश्मीरी", - "kkDisplayName": "कझाख", - "kmDisplayName": "ខ្មែរ", - "kiDisplayName": "គិគូយ, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "កុងហ្គោ", - "koDisplayName": "កូរ៉េ", - "kuDisplayName": "កូរ៉េ", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "ឡាទីន", - "lbDisplayName": "លុចសំបួរ, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "ឡាវ", - "ltDisplayName": "ឡិទុយអាន", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "ឡាតាវ", - "gvDisplayName": "Manx", - "mkDisplayName": "ម៉ាសេដូនីយ៉ា", - "mgDisplayName": "မလေးရှား", - "msDisplayName": "မလေး", - "mlDisplayName": "မလေးလမ်", - "mtDisplayName": "မော်လ်တီး", - "miDisplayName": "မအိုရီ", - "mrDisplayName": "မာရသီ (မာရသီ)", - "mhDisplayName": "မာရှယ်လီ", - "mnDisplayName": "မွန်ဂိုလီးယား", - "naDisplayName": "နော်အူရူ", - "nvDisplayName": "နာဗာဂို, နာဗာဟို", - "nbDisplayName": "နော်ဝေဘိုကမော်လ်", - "ndDisplayName": "မြောက် Ndebele", - "neDisplayName": "နီပေါလီ", - "ngDisplayName": "Ndonga", - "nnDisplayName": "နော်ဝေ Nynorsk", - "noDisplayName": "နော်ဝေ", - "iiDisplayName": "Nuosu", - "nrDisplayName": "တောင် Ndebele", - "ocDisplayName": "အိုက်စတီကန်", - "ojDisplayName": "အိုဂျစ်ဗ်, အိုဂျီဘာ", - "cuDisplayName": "ཁེལ་ཁབ་སླ་བོའི་སླ་བོ་སླ་བོ་སླ་བོ་རྒྱལ་ཁབ།, ཁེལ་ཁབ་སླ་བོ།, ཁེལ་ཁབ་སླ་བོ།, ཁེལ་ཁབ་སླ་བོ།, ཁེལ་ཁབ་སླ་བོ།", - "omDisplayName": "ཨོ་རོ་མོ", - "orDisplayName": "ཨོ་རི་ཡ", - "osDisplayName": "ཨོས་སེ་ཊི་ཡན།, ཨོས་སེ་ཊིཀ", - "paDisplayName": "པན་ཇ་བི, པན་ཇ་བི", - "piDisplayName": "པཱ་ལི", - "faDisplayName": "ཕེར་སི་ཡན།", - "plDisplayName": "པོ་ལིཤ།", - "psDisplayName": "པཱཤ་ཐོ, པུ་ཤ་ཐོ།", - "ptDisplayName": "པོར་ཅུ་གིས།", - "quDisplayName": "ཀེཆུ་ཝ།", - "rmDisplayName": "རོ་མན་ཤིང།", - "rnDisplayName": "ཀི་རུན་དི།", - "roDisplayName": "རོ་མ་ནི་ཡན།, མོལ་ཌ་བི་ཡན།, མོལ་ཌོ་བོ་ཌན།", - "ruDisplayName": "ཨུ་རུ་སུ།", - "saDisplayName": "ཤཱནསྐྱུ་ཏ། (སཱནསྐྱུ་ཏཏ)", - "scDisplayName": "སར་ཌི་ནི་ཡན།", - "sdDisplayName": "སིན་ཧི།", - "seDisplayName": "ནོར་ནི་ཡ་ས་མི།", - "smDisplayName": "ས་མོ་ཝན།", - "sgDisplayName": "སངོ", - "srDisplayName": "སེར་བི་ཡན", - "gdDisplayName": "སཱཁ་སིཊིའི་གེལིཀ, གེལིཀ", - "snDisplayName": "ཤོན་ན", - "siDisplayName": "སིནྦྲཱལ་ལེས, སིནྦྲཱལ་ལེས", - "skDisplayName": "སི་ལོ་ཝཱཀ", - "slDisplayName": "སོ་ལོ་ཝེན", - "soDisplayName": "སོ་མ་ལི", - "stDisplayName": "ལོང་སོ་ཐོ", - "esDisplayName": "སྙིང་རྒྱལ", - "suDisplayName": "སུན་དན་སེན", - "swDisplayName": "སུ་ཝ་ཧི་ལི", - "ssDisplayName": "སྭ་ཊི", - "svDisplayName": "སུའུན་སྦེལིཤ", - "taDisplayName": "ཏ་མིལ", - "teDisplayName": "ཏེ་ལུགུ", - "tgDisplayName": "ཏ་ཇིཀ", - "thDisplayName": "ཐའི", - "tiDisplayName": "ཏིག་རི་ཉི", - "boDisplayName": "བོད་སྐད་སྟོང་, བོད་སྐད་, བོད་ལྗོངས་", - "tkDisplayName": "تۇرکمن", - "tlDisplayName": "تەلەگو", - "tnDisplayName": "تسوانا", - "toDisplayName": "تونگا (تونگا ئارىلى)", - "trDisplayName": "تۈركچە", - "tsDisplayName": "تسونگا", - "ttDisplayName": "تاتارچە", - "twDisplayName": "تۋى", - "tyDisplayName": "تاھىتىي", - "ugDisplayName": "ئۇيغۇرچە", - "ukDisplayName": "ئۇكرائىنچە", - "urDisplayName": "ئوردو", - "uzDisplayName": "ئوزبەکچە", - "veDisplayName": "ۋېندە", - "viDisplayName": "ۋىيېتنامچە", - "voDisplayName": "ۋولاپۈك", - "waDisplayName": "ۋاللۇنچە", - "cyDisplayName": "ۋېلشچە", - "woDisplayName": "ۋولوفچە", - "fyDisplayName": "غەربىي فريسىيەچە", - "xhDisplayName": "ཧཱན་ཧཱན་ཁུལ།", - "yiDisplayName": "ཡུ་ཌིཤ།", - "yoDisplayName": "ཡོརུ་བ།", - "zaDisplayName": "བྲག་ཆུང་ཁུལ།", "unkDisplayName": "མི་དགོས་པ།", - "zuDisplayName": "ཟུ་ལུ།", - "hawDisplayName": "ཧ་ཝ་ཡན།", - "hmnDisplayName": "ཧྥོང་མོང།", - "multiDisplayName": "རང་མིང་མངོན་པའི།", - "cebDisplayName": "ཙེབུ་ནོ།", - "dzDisplayName": "རྫོང་ཁ།", - "iwDisplayName": "ཧེ་བྷ་རུ།", - "jwDisplayName": "ཇ་བ་ནིས།", - "moDisplayName": "མོལ་ཌི་ཡན།", - "shDisplayName": "སེར་བྷ་ཀྲོ་ཡོ་ཤི་ཡ།", "wwCountryDisplayName": "འཛམ་གླིང་ཆེན་པོ།", "afCountryDisplayName": "ཨཕ་གན་སི་ཐཱན།", "axCountryDisplayName": "ཨ་ལན་མཚོ་མཚོ།", @@ -3848,110 +3586,48 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "زامبیا", "zwCountryDisplayName": "زیمبابوې", - "pay": "پیسہ ادا کریں", - "allPrivateChats": "مستقیم چیٹ", - "unknownPrivateChat": "نامعلوم نجی گفتگو", + "pay": "Checkout", "invitedToSpace": "{user} تہاڈے نوں اکورس: {space} وچ شامل ہون لئی بلایا اے! کی تسی قبول کرنا چاہو گے؟", - "declinedInvitation": "دعوت رد کیتی", - "acceptedInvitation": "دعوت قبول کیتی", "youreInvited": "📩 تہاڈے نوں بلایا گیا اے!", "invitedToChat": "{user} تہاڈے نوں اک گفتگو: {name} وچ شامل ہون لئی بلایا اے! کی تسی قبول کرنا چاہو گے؟", "monthlySubscription": "ماہانہ", "yearlySubscription": "سالانہ", "defaultSubscription": "پانجیا چیٹ سبسکرپشن", "freeTrial": "مفت آزمائش", - "grammarAnalytics": "غلطی تجزیہ", "total": "کل: ", "noDataFound": "کوئی ڈیٹا نہیں ملا", - "promoSubscriptionExpirationDesc": "تہاڈی موجودہ سبسکرپشن پروموشنل اے تے ایہہ {expiration} تے ختم ہون والی اے۔ مدد لئی support@pangea.chat نوں پیغام بھیجو۔", - "emptyChatNameWarning": "براہ مہربانی اس گفتگو لئی اک ناں درج کرو", "blurMeansTranslateTitle": "کیوں پیغام دھندلا دکھائی دیندا اے؟", "reportToTeacher": "ཁྱེད་ཀྱང་འདི་ལ་འགྱོ་སྤྱོད་འདི་ལ་གནང་བ་སྤྱོད་ཀྱི་རེད།", "reportMessageTitle": "{reportingUserId} འདི་ལ་འབྲེལ་བའི་ཚེས་གྲངས {reportedUserId} འདི་ལ་འབྲེལ་བའི་ཚེས་གྲངས {roomName} ལ་འབྲེལ་བའི་ཚེས་གྲངས", "reportMessageBody": "ཚེས་གྲངས: {reportedMessage}\nལེགས་སྤྱོད: {reason}", "noTeachersFound": "འདི་ལ་འགྱོ་སྤྱོད་འདི་ལ་འབྲེལ་བའི་སློབ་དཔོན་མེད།", - "viewArchive": "རྒྱབ་སྒོར་ལག་ཁྱེར།", "trialExpiration": "ཁྱེད་ཀྱང་གནང་བའི་སྤྱི་ཚེས {expiration} ལ་སྟེང་འགྱོའི་ཡོད།", "freeTrialDesc": "གསར་བའི་རོགས་མིང་ཚོས་སྤྱི་ཚེས་དུས་སུ་གནང་བའི་སྤྱི་ཚེས་གཅིག་ལ་སྤྱོད་ཚུལ།", "activateTrial": "རོགས་མིང་ཚོས་སྤྱི་ཚེས 7 ཉིན་ལ་སྤྱོད་ཚུལ།", "successfullySubscribed": "ཁྱེད་ཀྱང་འདི་ལ་སྤྱོད་ཚུལ་བསྐྱར་བརྗེ་བྱེད་ཡོད།", "clickToManageSubscription": "ཁྱེད་ཀྱང་འདི་ལ་སྤྱོད་ཚུལ་ལག་ཁྱེར་ལེགས་སྤྱོད་ནི།", - "errorGettingAudio": "རོལ་གནས་སྤྱོད་ནས་རོལ་གནས་འདི་ལ་བསྐྱར་བརྗེ་བྱེད་ནས་མེད། སྤྱོད་ལེན་འབད་ནས་ལོག་འཇུག་འབད་བྱེད་ན།", "signUp": "ཉོན་རོགས་འབད།", "pleaseChooseAtLeastChars": "ཁྱེད་ཀྱང་སྤྱོད་ནི་ཚོས་སྤྱོད་ན་མཐར་འཁྱོལ་ལོག་འཇུག་འབད་ན། {min} ཚེས་ལ་འདེམས་ནས་གནང་བ།", "noEmailWarning": "ཁྱེད་ཀྱང་གནང་བའི་རིགས་བརྡ་ལ་བསྐྱར་བརྗེ་བྱེད་ནས་མེད། འདི་ལ་བསྐྱར་བརྗེ་བྱེད་ན་སྤྱོད་ལེན་འབད་ན་མེད། ཁྱེད་ཀྱང་འདི་ལ་བསྐྱར་བརྗེ་བྱེད་ནས་ལོག་འཇུག་འབད་ན།", "pleaseEnterValidEmail": "ཁྱེད་ཀྱང་གནང་བའི་རིགས་བརྡ་ལ་བསྐྱར་བརྗེ་བྱེད་ནས་མེད།", "pleaseChooseAUsername": "ཁྱེད་ཀྱང་སྤྱོད་ནི་ཚོས་སྤྱོད་ན་མཐར་འཁྱོལ་ལོག་འཇུག་འབད་ན།", - "chooseAUsername": "ཁྱེད་ཀྱང་སྤྱོད་ནི་ཚོས་སྤྱོད་ན་མཐར་འཁྱོལ།", "define": "བརྡ་འཕྲིན།", "listen": "གནང་བ།", - "addConversationBot": "ཆོས་ཚན་སྐད་ཆ་ལ་ལོག་འཇུག་བྱེད་ན།", - "addConversationBotDesc": "འདི་ལ་སྒྲོམ་གཏོད་བཅོས་སྤྱོད་བྱེད་ལོག", - "convoBotSettingsDescription": "ཚོད་རིགས་དང་དབྱེ་བའི་སྒོར་ལོག", - "enterAConversationTopic": "ཚོད་རིགས་བཟོ་བཅོས་གནང་།", - "conversationTopic": "ཚོད་རིགས", - "enableModeration": "རང་བཞིན་གྱི་རྒྱུན་ལུགས་སྤྱོད་ལོག", - "enableModerationDesc": "གྲོགས་བཅོས་ལ་སྤྱོད་ལོག་ལས་སྤྱོད་ལ་སྤྱོད་ལོག་ལས་སྤྱོད་ལོག", - "conversationLanguageLevel": "འདི་ཚོད་རིགས་གི་སྐད་ཡིག་ལོག་གི་ཚོད་ལོག?", - "showDefinition": "ལོག་སྟོན", - "subscriptionPopupTitle": "འདི་ཚིག་ནས་སྒྲོམ་གཏོད་བྱེད་ན་སྤྱོད་ལོག་འདུག...", - "subscriptionPopupDesc": "དེ་ལས་སྒྲོམ་གཏོད་ལ་སྤྱོད་ལོག་ལས་སྤྱོད་ལོག་ལས་སྤྱོད་ལོག", - "seeOptions": "ཚོད་ལོག་ལོག", - "continuedWithoutSubscription": "སྲོལ་བརྗེ་མེད་སྤྱོད་ལོག", "trialPeriodExpired": "ཁྱེད་ཀྱི་ལོག་ལོག་ཚེས་བརྒྱབ་ཡོད།", - "selectToDefine": "ཚོད་རིགས་གནང་ན་སྤྱོད་ལོག་ལོག་ལས་སྤྱོད་ལོག", "translations": "འབྲེལ་བའི་སྒྲོམ", "messageAudio": "ཚོད་རིགས་སྒྲོམ", "definitions": "ལོག་སྟོན", "subscribedToUnlockTools": "ལོག་ལས་སྤྱོད་ལོག་ལས་སྤྱོད་ལོག་ལས་སྤྱོད་ལོག་ལས་སྤྱོད་ལོག", "translationTooltip": "འབྲེལ་བའི་སྒྲོམ", - "audioTooltip": "སྒྲོམ་སྒྲོམ", - "conversationBotDiscussionZone_discussionTopicLabel": "བཟོ་བརྗོད་གནས་ཚུལ", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "བཟོ་བརྗོད་གནས་ཚུལ་སྟོན", - "conversationBotDiscussionZone_discussionKeywordsLabel": "བཟོ་བརྗོད་གནས་ཚུལ་སྣོད", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "བཟོ་བརྗོད་གནས་ཚུལ་སྣོད་སྟོན", - "conversationBotDiscussionZone_discussionKeywordsHintText": "བཟོ་བརྗོད་ལ་སྣོད་ཚིག་ཚོད་ལོག་ལོག་ལུས་སྟོན་ལུས་སྟོན", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "ལུས་སྟོན་ལུས་སྟོན་ལུས་ལ་བཟོ་བརྗོད་སྤྱོད་ལེན", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "ལུས་སྟོན་ལུས་ལ་ཆུ་ཚོད་ཚོད་ལོག་ལོག་ལུས", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "ལུས་སྟོན་ལུས་ལ་ལོག་ལོག་ལུས་ལ་ལོག་ལོག་ལུས", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "ལུས་སྟོན་ལུས་ལ་ལོག་ལོག་ལུས་ལ་ལོག་ལོག་ལུས", - "conversationBotCustomZone_title": "བཟོ་བརྗོད་སྒོར་ཚད", - "conversationBotCustomZone_customSystemPromptLabel": "ལས་སྒོར་སྒོར་ཚད", - "conversationBotCustomZone_customSystemPromptPlaceholder": "ལས་སྒོར་སྒོར་ཚད་སྟོན", - "conversationBotCustomZone_customSystemPromptEmptyError": "ལས་སྒོར་སྒོར་ཚད་མེད", - "botConfig": "Bot དང་ལས་ཀ་སྒོར་ཚད", - "botConfigNoPermissionTitle": "གདམ་ཁག་མེད", - "botConfigNoPermissionMessage": "བརྟེན་འཇུག་ཁང་ལ་ལོག་ལོག་ལུས་ལ་ལོག་ལོག་ལུས", - "addConversationBotDialogTitleInvite": "ལུས་སྟོན་ལུས་ལ་ལོག་ལོག་ལུས་ལ་ལོག་ལོག་ལུས", - "addConversationBotButtonInvite": "ལུས་སྟོན", - "addConversationBotDialogInviteConfirmation": "ལུས་སྟོན", - "addConversationBotButtonTitleRemove": "ལུས་སྟོན་ལུས་ལ་ལོག་ལོག་ལུས་ལ་ལོག་ལོག་ལུས", - "addConversationBotButtonRemove": "བཀོད་རོགས་", - "addConversationBotDialogRemoveConfirmation": "བཀོད་རོགས་", - "conversationBotConfigConfirmChange": "རྟོགས་བཀོད་", - "conversationBotStatus": "བོད་སྐད་སྤྱོད་ལམ་ལ་བརྟེན་པའི་སྤྱོད་ལམ་ལ་བརྟེན་", - "conversationBotTextAdventureZone_title": "ཚིག་རྒྱུན་ལུས་སྒྲིག", - "conversationBotTextAdventureZone_instructionLabel": "མིག་ལེན་སྤྱོད་ལམ་སྒྲིག་སྟེང་", - "conversationBotTextAdventureZone_instructionPlaceholder": "མིག་ལེན་སྤྱོད་ལམ་སྒྲིག་སྟེང་", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "མིག་ལེན་སྤྱོད་ལམ་མེད་པ", - "studentAnalyticsNotAvailable": "སློབ་གྲྭ་གཞི་རྟེན་གྱི་དབྱེ་བ་ད་ལྟ་མེད་པ", - "roomDataMissing": "ཁོངས་སྐད་ལ་བཀོད་རོགས་པའི་གནས་སྟངས་ལ་གཞི་རྟེན་མེད་པའི་གནས་སྟངས་གཞི་ལས་མེད་པ", "updatePhoneOS": "ཁྱེད་ཀྱི་རྒྱུན་ལས་སྤྱོད་ལམ་ལ་བསྐུར་བྱེད་དགོས་མིན་པ", "wordsPerMinute": "ཚིག་ལ་སྤྱོད་ལམ་ལ་བརྟེན་", "autoIGCToolName": "ཕན་ཚུལ་ལས་འགན་སྤྱོད་ལས་སྤྱོད་ལམ་ལ་བརྟེན་", "autoIGCToolDescription": "ཁྱེད་ཀྱི་དུས་སྐབས་སྤྱོད་ལམ་ལ་བརྟེན་པའི་ཕན་ཚུལ་ལས་འགན་སྤྱོད་ལས་སྤྱོད་ལམ་ལ་བརྟེན་", - "runGrammarCorrection": "དུས་ཚོད་ལ་བསྐྱར་བསྐྱར་བྱེད་", - "grammarCorrectionFailed": "དབྱེར་བརྗེ་བྱེད་མི་ཚུལ་", - "grammarCorrectionComplete": "བཀོད་རོགས་ཡོད་པ་ལས་སྤྱོད་ལམ་ལ་བརྟེན་", "tooltipInstructionsTitle": "དེ་ལ་གང་འདྲ་ཡོད་པ?", "tooltipInstructionsMobileBody": "རྟེན་འབྲེལ་དང་བསྟན་པའི་རྟེན་འབྲེལ་ལ་ལོག་བརྟེན་", "tooltipInstructionsBrowserBody": "རྟེན་འབྲེལ་ལ་ལོག་བརྟེན་", "versionFetchError": "རྒྱག་རྩོམ་བརྗོད་འབད་ནས་འགྱོ་མི་ཚུལ།", "versionText": "རྒྱག་རྩོམ།: {version}+{buildNumber}", - "languageButtonLabel": "རྒྱབ་སྐད།: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "རྒྱབ་སྐད་འཕྲིན་ལས་འགྱོ་བའི་སྤྱོད་ལམ", - "interactiveTranslatorAutoPlayDesc": "མཐར་འཁོད་མེད་ལས་འགྱོ་བའི་རྒྱབ་སྐད་འཕྲིན་ལས་འགྱོ་བ", - "changeAnalyticsView": "རྒྱབ་སྐད་ལུས་སྤྱོད་ལམ་བསྐྱར་བཟོ།", "l1TranslationBody": "ཁྱེད་ཀྱི་གཞི་སྐད་ལུས་ནང་ཡོད་པའི་དཔེ་ཚུལ་ལྟར་མི་རྟག་པ་འབྱུང་བ་མེད་པ།", "deleteSubscriptionWarningTitle": "ཁྱེད་ཀྱི་དུས་ཚོད་འགྱོ་བའི་དོན་ལས་འགྱོ་མི་ཚུལ།", "deleteSubscriptionWarningBody": "ཁྱེད་ཀྱི་ཁུལ་ལས་བཏང་ནས་ཁྱེད་ཀྱི་དུས་ཚོད་འགྱོ་བ་འབད་མི་ཚུལ།", @@ -3959,9 +3635,7 @@ "error520Title": "རྒྱབ་སྐད་འགྱོ་མི་ཚུལ།", "error520Desc": "དགོས་མཁོ་གནང་བ་མེད་པ, ངེས་བཀལ་མི་ཚུལ།...", "wordsUsed": "ཚིགས་ལུས་སྤྱོད།", - "errorTypes": "ཀར་སྣོན་འབྱུང་བའི་རྟགས།", "level": "ལོངས།", - "canceledSend": "འགྱོ་མི་བསྐུར།", "morphsUsed": "མོརཕས་ལུས་སྤྱོད།", "translationChoicesBody": "གདམ་ཁག་ལ་ལོག་འཇུག་གི་སྟེང་ལ་ལོག་འཇུག་འདི་ལ་ལོག་འཇུག་འབད་དེ་ལུས་སྤྱོད།", "grammar": "རྣམ་སྣང་", @@ -3971,7 +3645,6 @@ "reportContentIssueTitle": "རང་བཞིན་འབྲེལ་བའི་བརྗོད་བརྗོད་འདེམས་བཞག", "feedback": "གནང་བའི་རོལ་བའི་བརྗོད་བརྗོད་འདེམས་བཞག", "reportContentIssueDescription": "ཨོཾ! AI ནི་རང་བཞིན་སློབ་ཚན་ལ་བསྐྱེད་སྤྱོད་ལ་བརྗེ་སྟེང་བྱེད་ཀྱི་ཡོད་མི་ཚུལ་ལ་འགྱོ་ཡོད་རེད། ཁྱེད་རང་གི་རོལ་བའི་བརྗོད་བརྗོད་འདེམས་བཞག་གི་ཡོད་མི་ཚུལ་ལ་བསྐྱེད་སྤྱོད་ལ་བརྗེ་སྟེང་བྱེད་ཀྱི་ཡོད།", - "changeContent": "ཨོཾ! AI ནི་རང་བཞིན་སློབ་ཚན་ལ་བསྐྱེད་སྤྱོད་ལ་བརྗེ་སྟེང་བྱེད་ཀྱི་ཡོད་མི་ཚུལ་ལ་འགྱོ་ཡོད་རེད། འདི་ག་རེད?", "clickTheWordAgainToDeselect": "གྲལ་ཚིག་སྟོང་བརྗེ་བཅོས་ནས་བརྗེ་བརྗོད་འདེམས་བཞག", "l2SupportNa": "མེད་པ", "l2SupportAlpha": "Alpha", @@ -4205,7 +3878,6 @@ "grammarCopySPC": "གདམ་སྟོན།", "grammarCopyPARTTYPE": "རང་བཞིན་གྱི་རིགས།", "grammarCopyINTREL": "དབྱེ་བའི་རིགས།", - "grammarCopyNUMFORMpsor": "རང་བཞིན་གྱི་རིགས།", "grammarCopyUNKNOWN": "མིང་མེད", "grammarCopyNUMBERPSOR": "ལག་ལེན་མཁན་གྱི་རྣམ་པར", "grammarCopyPOSS": "ལག་ལེན་མཁན", @@ -4251,28 +3923,14 @@ "grammarCopyVOICEdir": "དེབ་སྐད", "grammarCopyVOICEinv": "འབྲེལ་བ", "grammarCopyVOICErcp": "རྟག་པའི་འབྲེལ་བ", - "enterPrompt": "བརྗེ་བའི་སྒྲོམ་ལ་སྤྱོད་འཇུག་འབད", - "selectBotLanguage": "བོད་སྐད་ཚད་ལག་ལེན་འབད", - "chooseVoice": "རྒྱབ་སྒྲོམ་འདེམས", - "enterLanguageLevel": "སྐད་ཚད་ལག་ལེན་འབད", - "enterDiscussionTopic": "བརྗོད་སྒོར་ལ་སྤྱོད་འཇུག", - "selectBotChatMode": "བོད་སྐད་ཚད་ལག་ལེན་འབད", - "messageNotInTargetLang": "ཚད་ལག་ལེན་འབད་མི་ཚིག་ལས་མེད", "other": "གཞིའི་ཚིག", "levelShort": "LVL {level}", - "botModeValidation": "བོད་སྐད་ཚད་ལག་ལེན་འབད", "clickBestOption": "ཁྱེད་ཀྱི་ཚིག་ལེན་ལ་སྤྱོད་འཇུག་ལག་ལེན་ལོག་ལེན་འབད!", "completeActivitiesToUnlock": "རྟག་པའི་ལས་ཀ་ལྟར་སྤྱོད་འཇུག་ལ་འགྱོ་བའི་ལས་ཀ་ལྟར་འབད!", - "botSettingsSubtitle": "བོད་སྐད་ཚད་ལག་ལེན་ལོག་ལེན་འབད", - "invitePeople": "རོལ་མོ་ལ་འདེམས", "noCapacityLimit": "ལག་ལེན་མེད", "downloadGroupText": "དབྱེད་ཁང་གི་ཚིག་རྟགས་རོལ་འདེགས།", "notificationsOn": "ཚེད་རིམ་སྒྲིག་བཀལ།", "notificationsOff": "ཚེད་རིམ་མེད།", - "chatCanBeFoundViaSearch": "ཚེར་བརྗེ་བརྗོད་ནས་ཡོད།", - "requireCodeToJoin": "ལུས་སྤྱོད་ལ་རོལ་འདེགས་སྤྱོད་ལ།", - "canFindInSearch": "བཀོད་ནས་ཡོད།", - "addChatToSpace": "ཚེར་བརྗེ་ལ་ཁ་བྱང་འབད།", "createChatAndInviteUsers": "ཚེར་བརྗེ་འཛུལ་དང་བཀོལ་བའི་ལག་ཁྱེར་འབད།", "updatedNewSpaceDescription": "ཚོང་ཚོད་ཚོད་ལས་ཁྱེར་བརྗེ་ལ་བརྗེ་བརྗོད་དང་གནས་ཚུལ་གསར་བར་བཟོ་བཅོས།", "joinWithCode": "རོལ་འདེགས་ལ་ལོག་འབད།", @@ -4308,39 +3966,19 @@ "constructUseCollected": "ཚོད་ལྟར་འབྱོར་བྱེད་ནས་གློག་ཆེན་ལ་འདུག", "constructUseNanDesc": "མིན་འདུག", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "མིང་ཚིགས་དང་ནང་བཅུག", - "registrationEmailMessage": "ཁྱེད་ཀྱི་རིགས་སྤྱོད་ཡིག་གི་འབྲེལ་མཐུད་ལུས་སྤེལ་འབད་ནི་སྤྱོད་ཡོད། ཁོངས་སུ་ཡིག་གི་ལག་ལེན་ལས་སྤྱོད་ནས་ལོ་བརྒྱབ་ནི་ལོ་གསུམ་ལས་ལོ་བརྒྱབ་ནི་ཡོད། ཁྱེད་རང་གི་སྤེལ་འདོད་ལས་སྤྱོད་ནས་ལོ་བརྒྱབ་ནི་ལོ་གསུམ་ལས་ལོ་བརྒྱབ་ནི་ཡོད།", "enableTTSToolName": "ཡིག་ཚིགས་ལས་སྤྱོད་འབད་བཏུབ་པ།", "enableTTSToolDescription": "ཁྱེད་རང་གི་སྤྱོད་ཡིག་གི་ནང་བཅུག་ལས་སྤྱོད་ལུས་སྤེལ་འབད་ནི་ལུགས་སྤྱོད་ལ་གནང་བ།", - "couldNotFindTTS": "ངེད་ཚོས་ཁྱེད་ཀྱི་ལོ་སྤྱོད་ཡིག་ལས་སྤྱོད་ལུགས་ལ་བསྟན་པ་མེད།", - "ttsInstructionsHyperlink": "ཁྱེད་རང་གི་ཁྱབ་ལམ་ལ་གནང་བའི་སྒྲིག་སྟེང་ལ་འོང་ནས་གསལ་བཤད་འབད།", - "createAnAccount": "ཁྱེད་རང་གི་ཁུལ་ཁང་།", - "signIn": "ནང་བཅུག", - "signUpWithEmail": "ཡིག་གི་ལས་སྤྱོད་ནས་ནང་བཅུག", - "signUpWithGoogle": "གུགལ་གི་ལས་སྤྱོད་ནས་ནང་བཅུག", - "signUpWithApple": "ཨ་པེལ་ལས་སྤྱོད་ནས་ནང་བཅུག", "yourUsername": "ཁྱེད་རང་གི་མིང་", "yourEmail": "ཁྱེད་རང་གི་ཡིག་གི", - "pleaseEnterAnEmail": "ཁྱེད་རང་གི་ཡིག་གི་སྤྱོད་ལ་འགྱོ་བ་འབད།", - "signInWithGoogle": "གུགལ་ལ་ནང་བཅུག", - "signInWithApple": "ཨ་པེལ་ལ་ནང་བཅུག", - "chooseYourAvatar": "ཁྱེད་རང་གི་ལུས་སྤྱོད་ལག་ལེན་གདམས།", "iWantToLearn": "ང་ཚོས་སྟོན་བརྗེ་བཅོས་འདོད།", - "letsStart": "ངེད་ཚོ་ལ་སྡེབ་ཚན་གཏོད་ནས།", - "pleaseAgreeToTOS": "བརྟེན་སྒྲིག་དང་དབང་ཆེན་ལ་རྟོགས་སྒྲིག་འབད།", "pleaseEnterEmail": "བརྗེད་སྤྱོད་ཡིག་ཚིགས་ལ་བཙུགས་ན།", - "pleaseSelectALanguage": "ལུང་ལས་གདམ་ཁེར་འདི་ལ་གཟིགས་འབད།", "myBaseLanguage": "ངེད་ཀྱི་མཐར་སྒོར་སྐད་ཡིག", - "clickWordsInstructions": "🧻 སྤྱོད་རྩོམ་ལ་ལོག་འཇུག་ནས། 🧠", - "chooseBestDefinition": "འདི་ཚིག་གི་ནང་བསྟན་གནང་བ་ག་རེ་ཡོད།", "meaningSectionHeader": "འབྲེལ་བ།", "formSectionHeader": "བརྗོད་སྒྲིག་ལས་བྱེད་མཁན།", - "noEmojiSelectedTooltip": "གདན་ཚིག་མེད།", "writingExercisesTooltip": "རྩོམ་རྩོམ།", "listeningExercisesTooltip": "གནས་སྒོར་སྣང་བ།", "readingExercisesTooltip": "འཚོལ་བ།", "meaningNotFound": "འབྲེལ་བ་མེད།", - "formsNotFound": "བརྗོད་སྒྲིག་མེད།", "chooseBaseForm": "མཐར་སྒོར་སྐད་ཡིག་གཅིག་གདམ།", "notTheCodeError": "གནང་བ་འདི་ནི་སྤྱོད་མི་འདུག!", "totalXP": "གཙོ་བོ་ལོག", @@ -4380,9 +4018,6 @@ "pickAnEmoji": "‘{lemma}’ལ་གཉེན་སྤྱོད་ལག་ཁྱེར་ག་རེ་ཡོད།", "chooseLemmaMeaningInstructionsBody": "གསལ་བཀྱོད་ཚུ་ལག་ཁྱེར་གྱིས་ཚིག་ཚིག་ལ་རོལ་བ་བྱེད།", "doubleClickToEdit": "ཉེར་ཉེར་གཉིས་མཁོ་ལ་ལོག་གཏོད་ནས་ཁྱེད་རང་གིས་ཁ་སྐད་བསྒྱུར།", - "removeFeature": "{feature} གོ་བཙུགས།", - "chooseCorrectLabel": "བདེན་སྟེགས་བརྡ་ལེན་ནི་ག་རེ་ཡོད།", - "levelPopupTitle": "བརྡ་ལེན་འབད་ནས་སྤྱིར་བཏང་བྱེད།\nLevel {level}", "activityPlannerTitle": "ལས་ཀ་རོལ་བ་རོལ་བ།", "topicLabel": "ལག་ལེན།", "topicPlaceholder": "ལག་ལེན་གཟིགས་ནས་ལེགས་སོ།...", @@ -4390,7 +4025,6 @@ "modePlaceholder": "ལས་ཀ་གཅིག་གི་གནང་བ...", "learningObjectiveLabel": "སློངས་སྦྱོང་གནང་བའི་སྒོ་སྐབས", "learningObjectivePlaceholder": "སློངས་སྦྱོང་གནང་བའི་སྒོ་སྐབས་གཅིག་གི་གནང་བ...", - "mediaLabel": "བརྙན་རིམ་སྦྱོང་བའི་སྒོ་སྐབས", "languageOfInstructionsLabel": "ལས་ཀ་གི་སྒོ་སྐབས་སྐད་ཡིག", "targetLanguageLabel": "ལུས་སྐད", "cefrLevelLabel": "CEFR ལོག་ཚད", @@ -4405,7 +4039,6 @@ "instructions": "གནང་བ", "numberOfLearners": "སློངས་སྦྱོང་བའི་རྟགས", "mustBeInteger": "ལག་ལེན་གཅིག་གི་རྟགས་ལས་བྱུང་བ་ལ་ལོག་ཚད་གཅིག་གི་བརྗེ་བ", - "noLemmasFound": "{xp} ལས་སྦྱོང་བའི་སྒོ་སྐབས་མེད། ལོག་ལེགས་བྱེད་རོགས!", "exitWithoutSaving": "ཁྱེད་ཀྱང་མེད་རེད་པས་བསྐྱར་བརྗེ་མི་འབྱུང་།", "enableAutocorrectPopupTitle": "ཁྱེད་ཀྱང་སྒྲོམ་བཅོས་བཀོད་ལག་ཁྱེར་བཀོད་པའི་སྒྲོམ་བཅོས་སྤྱོད་ལམ་ལ་འགྱོ།", "enableAutocorrectPopupSteps": " • དེའི་སྒྲོམ\n • དེའི་རང་བཞིན\n • ཁྱེད་རང་གི་ཁྱེར་སྒྲོམ\n • ཁྱེད་རང་གི་ཁྱེར་སྒྲོམ་ཚུ\n • གསར་བའི་ཁྱེར་སྒྲོམ་ལ་འབོད།", @@ -4429,25 +4062,13 @@ "resetInstructionTooltipsTitle": "指示工具提示をリセット", "resetInstructionTooltipsDesc": "新しいユーザー向けの指示ツールチップを表示するにはクリックしてください。", "selectForGrammar": "活動と詳細のために文法アイコンを選択してください。", - "newChatActivityTitle": "楽しい活動を追加しますか?", - "newChatActivityDesc": "アクティビティプランナーでグループチャットを冒険にしましょう!魅力的なトピックと目的を設定し、素晴らしい画像で会話を生き生きとさせましょう。想像力豊かな議論を促し、楽しさを自然に流し続けましょう!", - "exploreMore": "もっと探る", "randomize": "ランダム化", "clear": "クリア", "makeYourOwnActivity": "自分の活動を作成", "featuredActivities": "注目の活動", - "goToChat": "チャットへ行く", "save": "保存", - "selectActivity": "活動を選択", - "wordFocusListeningMultipleChoice": "どの音声が単語に一致しますか?", "startChat": "チャットを開始", "translationProblem": "翻訳の問題", - "perfectTranslation": "完璧な翻訳!", - "greatJobTranslation": "この翻訳は素晴らしいです!", - "goodJobTranslation": "この翻訳は良い仕事です。", - "makingProgress": "進歩しています!", - "keepPracticing": "ལེན་སྤྱོད་བྱེད་དེ་རེད།", - "niceJob": "བཟང་པོ་བྱེད་ཡོད།", "askToJoin": "འབྲེལ་བ་དགོས།", "emptyChatWarningTitle": "ཚོད་མེད་སྐད་ཆ།", "emptyChatWarningDesc": "ཁྱེད་ཀྱིས་ཁྱེད་རང་ལ་སྐད་ཆ་ལ་འདེགས་མི་འབྱུང་། ཁྱེད་ཀྱིས་ཚོད་ལས་ཁྱེད་རང་ལ་འབྲེལ་བ་འབད་དེ་ལས་སྤྱོད་འབད་ནི་འགྱོ་ཡོད།", @@ -4466,8 +4087,6 @@ "languageLevelC2Desc": "ངེད་སྤྱོད་ལ་འབྲེལ་བ་ཡོད་པའི་སྐད་ཡིག་ལ་ལེན་སྤྱོད་བྱེད་ཡོད།", "newVocab": "གསལ་བཤད་གསར་པ།", "newGrammar": "གསལ་བཤད་གསར་པ།", - "congratulationsOnReaching": "ཁྱེད་རང་གིས་ཉེས་རབ་ལོ་གྲངས {level} ལ་བརྗེད་ཡོད།", - "seeDetails": "བརྗོད་བཅོས།", "choosePracticeMode": "ཆོས་ལུགས་འདི་ཉེར་བརྗེ་ལས་སྤྱོད་འགྱོ་བའི་སྤྱོད་ལམ་གཟིགས་སྟེ།", "ban": "འགྱོ་བརྗོད།", "unban": "མེད་འགྱོ་བརྗོད།", @@ -4481,8 +4100,6 @@ "timesUsedWithAssistance": "རང་ཉེར་བརྗོད་ཡོད་པའི་རྩིས།", "shareInviteCode": "རྩལ་བརྗོད་ལེན་འཁོར་ལོག {code} ལ་བརྗེད།", "leaderboard": "རྒྱབ་སྤྱོད་ཁང་།", - "welcomeUser": "{user} ལག་ལེན་སྤྱོད་འགྱོ།", - "joinSpaceOnboardingDesc": "ཁྱེད་ལ་སྤྱིར་བཏང་ཚོགས་ལ་ལོག་འབད་ཡོད་པ་རེད་པས། ཁྱེད་ལ་ལོག་འབད་ཚུལ་གཅིག་ཡོད་པ་རེད་པས།", "skipForNow": "ད་ལྟ་ལས་འགྱོ་བའི་ལུང་།", "permissions": "གདམ་ཁག།", "spaceChildPermission": "གང་འདི་ལ་གསར་ཚེས་གཏོད་བཅོས་འབད་ནི་གཅིག་གི་རེད་པ།", @@ -4490,12 +4107,8 @@ "defaultOption": "གདམ་ཁག", "deleteChatDesc": "ཁྱེད་རང་གིས་འདི་ལ་གནང་བའི་ཆོག་ལས་བཏོན་ནི་སྤྱོད་འཇུག་ཡོད་མི་ཡིན་པས། འདི་ནི་ཚོད་ལས་སྤྱོད་མི་ཚོད་ལས་བཏོན་ན་འགྱོ་མི་ཚུལ་ལ་འགྱོ་མི་འདུག།", "deleteSpaceDesc": "ཁོངས་སྐབས་དང་གནང་བའི་ཆོག་ལས་ཚོད་ལས་བཏོན་ན་འདི་ནི་ཚོད་ལས་སྤྱོད་མི་ཚོད་ལས་བཏོན་ན་འགྱོ་མི་ཚུལ་ལ་འགྱོ་མི་འདུག། འདི་ལ་འགྱོ་མི་ཚུལ་ལ་འགྱོ་མི་འདུག།", - "chatWithActivities": "ལས་ཀྱི་ཆོག་ལས་ལེན་སྤྱོད།", "launch": "འགྱོ་རོགས།", - "launchActivityToChats": "ལས་ཀྱི་ཆོག་ལས་ལ་འགྱོ་རོགས།", "searchChats": "ཆོག་ལས་བཟོ་བཅོས།", - "selectChats": "ཆོག་ལས་ཚོད་ལས་འདེགས།", - "selectChatToStart": "ལེན་སྤྱོད་འགྱོ་ནས། ཆོག་ལས་ཚོད་ལས་འདེགས།", "maxFifty": "མཐའ་མར 50", "configureSpace": "ཁོངས་སྐབས་ཚོད་ལས་བཟོ་བཅོས།", "pinMessages": "ཚིག་རྟགས་སྤྱོད་ལེན།", @@ -4509,9 +4122,7 @@ "announcements": "सूचना", "activities": "क्रियाकलापहरू", "access": "प्रवेश", - "botSettings": "बोट सेटिङहरू", "activitySuggestionTimeoutMessage": "हामी तपाईंको लागि थप गतिविधिहरू सिर्जना गर्न कडा मेहनत गर्दैछौं, कृपया एक मिनेटमा फेरि जाँच गर्नुहोस्", - "accessSettingsWarning": "अहो! तपाईंलाई यस कोठाको पहुँच नियमहरू सेट गर्न अनुमति छैन जस्तो देखिन्छ। तपाईंले यी जाँच गर्नुपर्छ कि तिनीहरू तपाईंको आवश्यकताहरू पूरा गर्छन् कि छैन र यदि परिवर्तन गर्न आवश्यक छ भने कोठाका प्रशासकसँग कुरा गर्नुहोस्", "howSpaceCanBeFound": "यस कोर्सलाई कसरी भेट्टाउने", "private": "निजी", "cannotBeFoundInSearch": "खोजीमा भेट्टाउन सकिँदैन", @@ -4524,16 +4135,6 @@ "canBeFoundViaKnock": "• अनुरोध गर्न र प्रशासकको स्वीकृति", "youHaveLeveledUp": "तपाईं स्तर उक्लिनुभयो!", "sendActivities": "क्रियाकलापहरू पठाउनुहोस्", - "getStarted": "सुरु गर्नुहोस्", - "getStartedBotChatDesc": "एआईसँग कुराकानी गर्न सुरु गर्न उत्कृष्ट स्थान हो र पाङ्गिया पढ्ने, लेख्ने, सुन्ने र बोल्ने उपकरणहरूले यसलाई सजिलो बनाउँछन्!", - "getStartedCommunitiesDesc": "སྙན་ཚོགས་སུ་སློབ་ཚན་གྱི་ལམ་ལས་སྤྱིར་བཏང་ནས་སྤྱིར་བཏང་བརྗེ་བའི་སྐབས་ཡོད།\nཁྱེད་རང་གི་སློབ་ཚན་ལ་སྡེབ་སྡེ་སྤྱོད་གནང་གི་ཡོད། ཁྱེད་རང་གི་སློབ་ཚན་ལ་སྡེབ་སྡེ་སྤྱོད་གནང་གི་ཡོད།", - "getStartedFriendsDesc": "ཁྱེད་རང་ལ་གྲོགས་ཀྱི་སློབ་ཚན་སྤྱོད་དགོས་པས།", - "getStartedBotChatComplete": "བཟོ་བཅོས་ཡོད། ཁྱེད་རང་བོད་སྐད་སྐད་ཆ་སྐད་ཆ་གི་ནང་བསྐུར་ཡོད།", - "getStartedCommunitiesComplete": "བཟོ་བཅོས་ཡོད། ཁྱེད་རང་སློབ་ཚན་ལ་སྡེབ་སྡེ་སྤྱོད་ཡོད།", - "getStartedComplete": "ཁྱེད་རང་འདི་ལོག་འཇུག་ཡོད།\nགཙོ་སྤྱོད་ལས་འབྱོར་བྱེད་དགོས་མི་ཚུལ་ལས་སྤྱོད་གནང་བའི་ལས་རོལ།", - "getStartedFriendsComplete": "དགོས་མི་ཚུལ་ལས་སྤྱོད་ཡོད། ཁྱེད་རང་གྲོགས་ཚོའི་སྐད་ཆ་ལ་སྐད་ཆ་གི་ནང་བསྐུར་ཡོད། 😉", - "getStartedBotChatButton": "ཆ་ཚང་ལ་སྐད་ཆ་གནང་བ།", - "getStartedFriendsButton": "གྲོགས་ལ་སྐད་ཆ་གནང་བ།", "groupChat": "དབྱེད་སྐད", "directMessage": "གནང་བའི་ཚེས་ཁུལ།", "newDirectMessage": "གནང་བའི་ཚེས་ཁུལ་གསར་པ།", @@ -4549,7 +4150,6 @@ "mySavedActivities": "ངའི་དོན་ཚན་སྲུང་བའི་ལས་ཀ", "noSavedActivities": "དོན་ཚན་སྲུང་བའི་ལས་ཀ་མེད", "saveActivity": "འདི་ལས་ཀ་སྲུང་བའི་རེད", - "yourSavedActivities": "ཁྱེད་ཀྱི་སྲུང་བའི་ལས་ཀ", "failedToPlayVideo": "བརྙན་རིམ་ལུས་འགྱོ་མི་བྱེད", "done": "མཉམ་པའི", "inThisSpace": "འདིའི་སློབ་ཚན", @@ -4588,37 +4188,27 @@ "maximumActivityParticipants": "ལས་ཀ་སྤྱོད་ལམ་ལས་སྤྱོད་མི་ཚོད {count} ལུ་ཡོད།", "pending": "དབྱར་བ", "inactive": "མིན་ལུས་", - "unjoinedActivityMessage": "ཁྱེད་ཀྱིས་རོགས་འདུས་འདི་ལ་སྡེབ་སྤྱོད་གཏོང་འདུག? སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདི་ལ་གནང་བ།\nཨེ་ལོག་གཅིག་ལ་སྤྱོད་འདུག་ན་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདི་ལ་ལོག་འགྱོ།", - "fullActivityMessage": "ཁྱེད་ཀྱིས་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག! འདི་ལ་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག་ན་ཁྱེད་ཀྱིས་གནང་བ་མེད་པའི་སྤྱོད་ལམ་ལ་ལོག་འགྱོ།", "confirmRole": "ལས་ཀ་རྟག་པ་འབད།", "openRoleLabel": "གཙོ་བོ", "joinedTheActivity": "👋 {username} ལས་སྤྱོད་འདི་ལ་ལོག་འགྱོ། {role}", "finishedTheActivity": "🎯 {username} འདི་ལ་སྤྱོད་འདུག", - "endActivityTitle": "ངའི་ལོག", - "endActivityDesc": "ཁྱེད་ཀྱིས་དབྱར་བ་ལེན་སྤྱོད་བྱེད་ཡོད་པས།\nའདི་ནི་ཁྱེད་ཀྱིས་ཚར་སྤྱོད་འདི་ལ་ལོག་འགྱོ་བར་བརྗེ་བ་ཡིན། དེ་ལས་བརྗེ་བ་འབད་ན་ཁྱེད་ཀྱིས་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག་ན་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག་ན་ལོག་འགྱོ།", "archiveToAnalytics": "ངའི་ལས་ཀ་ལ་འགྱོ་བའི་ལོག་ལ་འབད།", "activitySummaryError": "ལས་ཀ་རྒྱབ་སྤྱོད་འབད་མི་ཚུལ།", "requestSummaries": "ལོག་ལ་དབྱར་བ་འདི་ལ་བཀོད་རོགས།", - "loadingActivitySummary": "ལས་ཀ་རྒྱབ་སྤྱོད་འབད་ནས་བརྗེ་བ་ལོག་འགྱོ།", "generatingNewActivities": "ཁྱེད་ཀྱིས་འདི་ལ་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག! སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདི་ལ་ཁྱེད་ཀྱིས་ལོག་འགྱོ་བར་བརྗེ་བ་ཡིན།", - "requestAccessTitle": "ལོག་ལ་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག?", + "requestAccessTitle": "Bisa minta akses analitik?", "requestAccessDesc": "ཁྱེད་ཀྱིས་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག་ལ་ལོག་འགྱོ་བའི་ལས་ཀ་ལ་བཀོད་རོགས་འདི་ལ་དབྱར་བ་འདི་ལ་བཀོད་རོགས།\n\nལོག་ལ་སྤྱོད་ལམ་གཟིགས་སྤྱོད་འདུག་ན་ལོག་འགྱོ་བར་བརྗེ་བ་ཡིན། ཁྱེད་ཀྱིས་ལོག་འགྱོ་བར་བརྗེ་བ་འབད་ན་ལོག་འགྱོ་བར་བརྗེ་བ་ལ་ལོག་འགྱོ།", "requestAccess": "ལོག་འགྱོ་འདི་ལ ({count})", "analyticsInactiveTitle": "ལོག་འགྱོ་བའི་ལས་ཀ་མེད་པའི་ལོག་ལ་འབད་མི་ཚུལ།", "analyticsInactiveDesc": "ལོག་འགྱོ་བའི་ལས་ཀ་མེད་པའི་ལོག་ལ་ལོག་འགྱོ་བར་བརྗེ་བ་མེད་པས།\n\nལོག་འགྱོ་འབད་འདི་ལ་ལོག་འགྱོ་བར་བརྗེ་བ་ལ་ལོག་འགྱོ། ཁྱེད་ཀྱིས་ལོག་འགྱོ་བར་བརྗེ་བ་འབད་ན་ལོག་འགྱོ་བར་བརྗེ་བ་ལ་ལོག་འགྱོ།", "accessRequestedTitle": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", - "accessRequestedDesc": "“{space}” ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", - "allowAccess": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", - "denyAccess": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠠᠢᠯᠠᠭᠤ", + "accessRequestedDesc": "Meminta admin(s): {admin} \n\nAdmin dari “{space}” meminta untuk melihat analitik pembelajaran Anda.\n\nJika Anda setuju, mereka akan dapat melihat:\n • total kosakata\n • total konsep tata bahasa\n • total sesi aktivitas yang diselesaikan\n • konsep tata bahasa spesifik yang digunakan, dengan benar dan salah\n\nMereka tidak akan dapat melihat:\n • pesan di obrolan di luar kursus\n • daftar kosakata", "adminRequestedAccess": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", "lastUpdated": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ\n{time}", "activityFinishedMessage": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ!", "endForAll": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", "newCourse": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", - "newCourseSubtitle": "ᠰᠤᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ?", - "failedToLoadCourses": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", "numModules": "{num} ᠪᠣᠯᠣᠰ", - "numActivityPlans": "{num} ᠪᠣᠯᠣᠰ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", "coursePlan": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", "editCourseLater": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", "newCourseAccess": "ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ ᠪᠠᠢᠯᠠᠭᠤᠯᠤ", @@ -4632,17 +4222,11 @@ "accessDesc": "ཁྱེད་རང་གི་སློབ་ཚན་ལ་འགྱོ་བ་ལུས་པ་ལས་འབད་ནས་འབད་རོགས། ຫོད་ན་ཁྱེད་རང་གི་སློབ་ཚན་གང་འདི་ལས་འགན་ལས་འབད་ན་གནང་བ།", "createGroupChatDesc": "འདི་ནས་ལས་འགན་སྐར་མ་ལོག་བརྗེ་བ་ལས་འགན་ལས་འབད་ནས་ལོག་བརྗེ་བ་ལས་འགན་ལས་འབད།", "deleteDesc": "གནད་སྡེ་ལས་འགན་ལས་འབད་ན་དགོས། འདི་ནས་ལས་འགན་ལས་འབད་ན་སྤྱོད་ལེན་འབད་མི་ཚོའི་ལས་འགན་ལས་འབད་ན་ལས་འགན་ལས་འབད།", - "failedToLoadCourseInfo": "སྲུབ་འབྲེལ་ལས་འགན་ལས་མེད།", "noCourseFound": "ཨེ, འདི་ནས་སློབ་ཚན་ལ་ལོག་བརྗེ་བ་ལེགས་སོ།\n\nསློབ་ཚན་ལས་ལོག་བརྗེ་བ་ནི་སློབ་ཚན་ལས་སྤྱོད་ལེན་འབད་ནས་སྐབས་སྟོན་ལས་སྤྱོད་ལེན་འབད།", "additionalParticipants": "+ {num} ཚོད་ལོག་པ།", - "activityNotFoundForCourse": "འདི་ནས་ལས་འགན་ལས་མེད།", - "courseChats": "སློབ་ཚན་ལུས་པ།", - "myActivitySessions": "ངའི་ལས་འགན་སྐབས།", "directMessages": "གནང་བའི་ཚེས་ལོག་པ།", "whatNow": "ད་ལྟ་ག་རེ་ཡོད།", "chooseNextActivity": "ཁྱེད་རང་གི་ཤེས་ཡོད་ལུས་པ་ཚུ་གནང་བ།", - "seeInstructions": "འབྲེལ་བའི་སྟེང་ལ་སྟོན།", - "hideInstructions": "འབྲེལ་བའི་སྟེང་ལ་སྟོན་མི་འབད།", "letsGo": "ངེད་ཚོ་ངེད་ལ་འགྱོ།", "chooseRole": "ལས་འགན་གནང་བ།", "chooseRoleToParticipate": "ལས་འགན་ལ་སྤྱོད་ལེན་འབད་ན།", @@ -4652,23 +4236,15 @@ "inviteFriends": "གྲོགས་མཇལ་འབར་བ།", "waitNotDone": "ངག་དབང་ལ་མེད་པ་ལས་འགྱོ་མི་འདུག!", "waitingForOthersToFinish": "མི་ཚེས་བརྒྱབ་ནས་ལོག་བྱེད་འདུག...", - "saveToCompletedActivities": "ལས་བཟོ་བཅོས་ལས་སྤྱོད་འབད།", "generatingSummary": "ཚོད་ལམ་གྱིས་གནད་སྣང་བྱེད་ནས་ལོག་བྱེད།", - "instructionsLanguage": "འཕྲིན་ལས་སྐད་ཡིག", "findCourse": "ཚོང་ཁང་བཟོ་བཅོས།", - "activityCompletedDesc": "ཁྱེད་རང་གིས་བཟོ་བཅོས་ལོག་བྱེད་ནས་སྤྱོད་ལེན་བྱེད་ནས་སྤྱོད་ལེན་ལས་སྤྱོད་འབད་ཡོད།", "pingParticipantsNotification": "{user} ཚོང་ཁང་ལ་ལོག་བྱེད་ལས་སྤྱོད་ལེན་ལ་འདུག", "course": "ཚོང་ཁང།", "courses": "ཚོང་ཁང་ཚོད།", "courseName": "ཚོང་ཁང་མིང་", "createNewCourse": "གསར་བརྗེ་ཚོང་ཁང།", - "publicCourses": "མི་སྤྱོད་ཚོང་ཁང་ཚོད།", "goToCourse": "ཚོང་ཁང་ལ་འགྱོ: {course}", "activityComplete": "འདི་ལས་བཟོ་བཅོས་ཡོད། ལས་བཟོ་བཅོས་སྤྱོད་ལེན་འདི་ནང་ལ་འབད་ཡོད་མི་སྤྱོད་ལེན་འབད་ནས་འདི་ལས་སྤྱོད་འབད།", - "haventChattedMuch": "ཁྱེད་རང་གིས་ལོག་བྱེད་མི་འདུག, ཁོང་ཚོས་སྤྱོད་ལེན་ལ་ཁོང་ཚོས་སྤྱོད་ལེན་ལ་བསྐྱར་བརྗེ་བྱེད། དེ་ལས་ཁྱེད་རང་གིས་སྤྱོད་ལེན་འདི་ལས་སྤྱོད་འབད་ན་ལས་སྤྱོད་འབད་ནི་འདུག!", - "haveChatted": "ཁྱེད་ཀྱང་ལ་ལོ་རྒྱབ་ལོག་འདུག དེ་ལས་ཁྱེད་ཀྱང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག དེ་ལས་ཁྱེད་ཀྱང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག དེ་ལས་ཁྱེད་ཀྱང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག དེ་ལས་ཁྱེད་ཀྱང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག", - "userDoneAndWaiting": "{num1}/{num2} སྤྱོད་མཁན་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག ཚོད་ལས་ཚོད་ལས་སྤྱོད་བྱེད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག དེ་ལས་ཁྱེད་ཀྱང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག དེ་ལས་ཁྱེད་ཀྱང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག", - "othersDoneAndWaiting": "{num1}/{num2} སྤྱོད་མཁན་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག ཁྱེད་རང་ཚོད་ལས་སྤྱོད་བྱེད་ཡོད་མི་ཚེས་ལས་སྤྱོད་བྱེད་འདུག", "startNewSession": "གསར་འཛུལ་སྤྱོད་ལས་སྤྱོད་འགྱོ", "joinOpenSession": "གསར་འཛུལ་སྤྱོད་ལས་སྤྱོད་འགྱོ", "less": "དུས་མཐར", @@ -4678,7 +4254,6 @@ "openToJoin": "གནང་བའི་སྤྱོད་ལས", "results": "ལོག", "activityDone": "ལས་ཀ་བཟོས་ཡོད།", - "moreLabel": "འདི་ལས་འོང", "promoCodeInfo": "ཕྱིར་ཤེས་སྟེང་ལ་སྤྱོད་ལས་ལོག་འབད་ནས་གཏོད།", "editsComingSoon": "གནས་ཚུལ་དང་ལས་ཀ་ལྟ་བུ་ལ་གསར་བར་ལོག་འབད་འགྱོ་ཡོད།", "editing": "རྩོམ་སྒྲིག", @@ -4694,20 +4269,17 @@ "courseSavedSuccessfully": "ཚོགས་ཚོགས་བརྗོད་སྤྱོད་འབད་ཡོད།", "addCoursePlan": "ཚོགས་ཚོགས་རིམ་ལོག", "activityStatsButtonInstruction": "འདིར་ཤེས་བརྗོད་གནང་བ་དང་ཚོད་ལྟ་ལས་འགོ་བཙུགས་བྱེད་སློབ་ཚན་ལ་བརྗེ་བཅོས་འབད།", - "readingAnalyticsDesc": "ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་ལས་སྒྲིག་ལག་ལེན་གྱི་ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་སྤྱོད་སྒོམ།", - "speakingAnalyticsDesc": "སྐད་ཆ་སྒྲིག་ལག་ལེན་གྱི་སྒྲིག་ལག་ལ་ལས་སྒྲིག་ལག་ལེན་གྱི་སྤྱོད་སྒོམ།", - "audioAnalyticsDesc": "ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་ལས་སྒྲིག་ལག་ལེན་གྱི་ཚོད་ལྟ་ལས་འགོ་བཙུགས་ལ་སྤྱོད་སྒོམ།", "loginToAccount": "ངའི་ཁུལ་གཅིག་ལ་སྤྱོད་ལམ་སྤྱོད་འབད།", "appDescription": "ཚོགས་ཚོགས་སྐད་ཡིག་སློབ་ཚན་ལས་སྤྱོད་སྒོམ།\nཁྱེད་ཀྱི་གྲོགས་མཚན་ལ་རྟག་པ་སྤྱོད་སྒོམ་ལས་སྤྱོད་སྒོམ།", "languages": "ཚོད་ལྟ", - "chooseLanguage": "ཚོད་ལྟ་གཅིག་འཇུག་གི་སྐད་ཡིག་གཟིགས།", + "chooseLanguage": "Pilih bahasa target.", "planTrip": "འགྱོ་རོགས་ལྟར་བཟོ།", "howAreYouTraveling": "ཁྱེད་ཀྱི་འགྱོ་རོགས་ག་རེ་ཡོད།", "unlockPrivateTrip": "རང་གི་སྤྱོད་ལམ་ལ་ལོག་འབད།", "joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།", "startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།", "@@locale": "bo", - "@@last_modified": "2026-01-06 13:02:23.320520", + "@@last_modified": "2026-01-07 14:27:54.438001", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -5611,30 +5183,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5650,18 +5198,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5686,18 +5222,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5734,38 +5258,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5774,62 +5270,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5866,10 +5318,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5878,58 +5326,14 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": {} }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5938,10 +5342,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5998,18 +5398,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6018,14 +5406,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6054,18 +5434,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6074,42 +5442,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6118,14 +5454,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6146,26 +5474,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6186,10 +5494,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6222,25 +5526,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6269,778 +5554,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8033,14 +6550,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8052,14 +6561,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8091,10 +6592,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8103,18 +6600,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8152,10 +6637,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8180,10 +6661,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8208,10 +6685,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8220,66 +6693,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8300,130 +6717,6 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8440,18 +6733,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8479,26 +6760,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8527,18 +6788,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8575,10 +6828,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9511,10 +7760,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9695,34 +7940,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9735,10 +7952,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9747,14 +7960,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9771,22 +7976,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9934,14 +8123,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9950,34 +8131,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9986,54 +8139,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10042,10 +8159,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10062,10 +8175,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10237,26 +8346,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10285,10 +8374,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10345,14 +8430,6 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@exitWithoutSaving": { "type": "String", "placeholders": {} @@ -10453,18 +8530,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10481,22 +8546,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10505,30 +8558,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10601,18 +8630,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10669,18 +8686,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10709,30 +8714,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10785,18 +8774,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10845,46 +8826,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10949,10 +8890,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11124,14 +9061,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11159,14 +9088,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11179,10 +9100,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11218,19 +9135,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11255,14 +9167,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11271,14 +9175,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11331,10 +9227,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11347,18 +9239,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11371,14 +9251,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11419,26 +9291,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11463,10 +9323,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11477,36 +9333,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11543,10 +9369,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11611,18 +9433,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11740,58 +9550,34 @@ "inviteOtherUsers": "ཕྱིར་བརྗེ་བའི་བཀོད་སྤྱོད་ལ་འདར་བཅོས", "changeTheChatPermissions": "ཚད་ལྟ་བཅོས་བྱེད་ལས་སྤྱོད་ཚད་ལྟ་བཅོས", "blurMeansTranslateBody": "དེ་ལས་སྤྱོད་ཚུལ་ལོག་སྟེང་། ཁྱེད་ཀྱི་གནས་ཚུལ་སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་། སྤྱོད་ཚུལ་ལོག་སྟེང་།", - "someErrorTitle": "ཧེ, ཁོངས་སུ་མི་བསྟན་པ།", - "someErrorBody": "འདི་ནི་སྤྱོད་ཚུལ་ལོག་སྟེང་། ཡང་ན་ ཁྱེད་ཀྱི་གནས་ཚུལ་སྤྱོད་ཚུལ་ལོག་སྟེང་།", "bestCorrectionFeedback": "འདི་ནི་བཟོ་བཅོས་ཡོད།", "distractorFeedback": "འདི་མེད་ལས་བསྟན་པ།", "bestAnswerFeedback": "འདི་ནི་བཟོ་བཅོས་ཡོད།", "definitionDefaultPrompt": "འདི་ཚིག་གི་ནང་བསྟན་ག་རེ་རེད།", "practiceDefaultPrompt": "བཟོ་བཅོས་སྤྱོད་ཚུལ་ག་རེ་རེད།", "correctionDefaultPrompt": "བཟོ་བཅོས་ག་རེ་རེད།", - "itStartDefaultPrompt": "ཁྱེད་ཀྱིས་འགྱོ་བའི་ལག་ལེན་འདི་ག་རེ་རེད།", - "lockedChatWarning": "🔒 འདི་ཚེས་ལུགས་བསྐྱོད་ཡོད།", - "lockChat": "ཚེས་ལུགས་བསྐྱོད།", - "suggestToChat": "འདི་ཚེས་ལུགས་བསྐྱོད།", - "suggestToChatDesc": "བསྟན་པའི་ཚེས་ལུགས་ཚོད་ལ་ལོག་སྟེང་།", "acceptSelection": "བཟོ་བཅོས་སྤྱོད་ནས་དགོས།", - "acceptSelectionAnyway": "འདི་ལ་བཟོ་བཅོས་བྱེད་ནས།", - "makingActivity": "ལས་ཀ་བྱེད་ནས།", "why": "ག་རེ་རེད།", "definition": "ནང་བསྟན།", "exampleSentence": "འདི་ནང་བསྟན་སྐད་ཡིག", "speechToTextTooltip": "རླུང་སྣོད་ལོག་འཕྲིན།", - "certifyAge": "ང་ཚོས {age} ལོའི་འདི་འདི་འདི་ལས་ཡོད།", "kickBotWarning": "ཕང་གེ་བོད་ལོག་འཕྲིན་ལས་བཀལ་བའི་སྒོ་ལོག་བཏོན་ནས་འགྱོ་བ་འབད།", - "joinToView": "ཁྱེད་རང་གིས་བརྗེ་བཙུགས་སྟེ་བརྗེ་བཙུགས་ལག་ལེན་འབད།", "refresh": "རྩོམ་ལོག", - "autoPlayTitle": "རང་སྒྲིག་འཕྲིན་ཚུལ་གསར་བརྗེ་འབད།", - "autoPlayDesc": "འདི་སྟེང་ལས་བརྗེ་འབད་ནས་ཚིག་གཅིག་ལས་སྒྲིག་འཕྲིན་གྱི་རོལ་བར་འགྱོ་བ་འབད་ཡོད།", "messageAnalytics": "ཚིག་རྒྱབ་ལས་རྟོག་བསྟན།", "words": "ཚིག་ཚིག", "score": "མཐོ་ཚད།", "accuracy": "ངོ་བོའི་སྤྱོད་ལམ།", "points": "མཐོ་ཚད།", "noPaymentInfo": "དགོས་མེད་པའི་དབྱེ་སྤྱོད་ཚུལ།", - "conversationBotModeSelectDescription": "ཚོད་ལམ་སྒོར་ལེན།", - "conversationBotModeSelectOption_discussion": "ཚོད་ལམ།", - "conversationBotModeSelectOption_custom": "རང་བཞིན།", - "conversationBotModeSelectOption_conversation": "ཚོད་ལམ།", - "conversationBotModeSelectOption_textAdventure": "ཚིག་རྒྱབ་འགྱོ་བ།", - "conversationBotModeSelectOption_storyGame": "ལེན་སྒོར།", - "conversationBotDiscussionZone_title": "ཚོད་ལམ་སྒོར་ལེན།", "constructUsePvmDesc": "སྐད་རིགས་གི་གནས་སྟངས་ལ་ཕེབས་པ།", - "lockedMorphFeature": "ལོག་འབུལ་དུ་བརྗེ་བརྗོད་འགྱོ་བ།", "leaveSpaceDescription": "ཁྱེད་ཀྱིས་སློབ་ཚན་ལ་ཕེབས་ནས་ཁྱེད་ཀྱིས་ཁ་སྐོར་ཚོད་ལ་བརྗེ་བ་འབད་ཡོད། གཞི་རྟེན་ལས་བརྗེ་བ་ལས་སྤྱོད་མི་འདུག", - "whatIsLemma": "ལེ་མ་ག་རེ་རེད།", "constructUseCorMmDesc": "བརྗེ་བརྗོད་གི་སྒྲིག་བཅོས།", "constructUseIncMmDesc": "མི་བཟོ་བའི་སྒྲིག་བཅོས།", "constructUseIgnMmDesc": "མི་བཟོ་བའི་སྒྲིག་བཅོས།", "clickForMeaningActivity": "འདི་ནས་སྟོན་བརྗེ་བའི་ལས་རྟོགས་ལེན་ནས་ལེགས་སྤྱོད་འབད།", "meaning": "འབྲེལ་བ", "chatWith": "{displayname} ལ་གྲོས་ཚོགས།", - "slightlyOffensive": "ལག་ལེན་སོང་།", "clickOnEmailLink": "འདི་ནས་འབྲེལ་མཐུན་ལེབ་ལུ་ལོག་འབུལ་འབད་དེས་རྟོགས།\n\nགཙོ་བོ་ལས་བརྗེ་བ་མེད་མི་ཡོད་ན་ཁྱེད་ཀྱི་སྤོ་བརྗེ་ཁག་ལ་བཀོད་ནས་བཀོད།", - "whoIsAllowedToJoinThisChat": "གང་ནི་འདི་ལ་སྤྱོད་འཐབ་རུང་གི་རེད།", "dontForgetPassword": "ཁྱེད་ཀྱིས་སྤྱོད་ལམ་མེད་མི་མེད།", "enableAutocorrectToolName": "རང་སྤྱོད་སྤྱོད་ལས་སྤྱོད་འབད།", "enableAutocorrectDescription": "ཁྱེད་རང་གི་སྒྲིག་བཅོས་སྤྱོད་ལས་སྤྱོད་འབད་ན་ཁྱེད་ཀྱིས་སྤྱོད་ལམ་ལ་བརྗེ་བ་འབད་ནས་ཁྱེད་རང་གི་སྤྱོད་ལམ་ལ་བརྗེ་བ་འབད།", @@ -11799,8 +9585,6 @@ "ttsDisabledBody": "ཁྱེད་རང་གི་སློབ་ཚན་ལ་ཚིག་རིགས་ལ་སྐད་རིགས་ལ་བརྗེ་བརྗོད་འབད་ནས་བཀོད།", "noSpaceDescriptionYet": "ཁྱེད་ཀྱིས་ལས་འགན་ལ་བརྗེ་བ་མེད།", "tooLargeToSend": "འདི་ནས་བརྗེ་བ་ལ་འགྱོ་མི་ཚོད་ལ་མེད།", - "inviteFriendsToActivity": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", - "inviteFriendsToActivityCourse": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "tripPlanDesc": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "unlockPrivateTripTitle": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "browsePublicTrips": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", @@ -11808,19 +9592,16 @@ "courseCode": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ?", "courseCodeHint": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "unlockMyTrip": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", - "anyLevel": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "signupOption": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ?", "withApple": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "withGoogle": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "withEmail": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "createAccount": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", - "noCoursesFound": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "loginWithEmail": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "usernameOrEmail": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ", "email": "ᠡᠮᠦᠯ", "forgotPassword": "ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ ᠪᠣᠯᠤᠰᠤ?", "tokenInfoFeedbackDialogTitle": "ཡིག་ཚགས་རིགས་བརྡ་བརྗོད་བརྗོད་བརྗོད་བརྗོད་", - "tokenInfoFeedbackDialogDesc": "AI ཁོངས་སུ་སྐད་ཅིག་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་", "noPublicCoursesFound": "མི་འབྲེལ་བའི་སློབ་ཚན་མེད། ཁྱེད་ཀྱིས་གཞི་སྒྲིག་གི་སློབ་ཚན་གཅིག་བཟོ་གི་ཡོད་པས།", "noCourseTemplatesFound": "ངེད་ཚོས་ཁྱེད་ཀྱི་སྐད་ཡིག་ལ་ལོག་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་", "botActivityJoinFailMessage": "Pangea Bot ལ་ལོག་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་བརྗོད་", @@ -11939,14 +9720,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -11971,38 +9744,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -12019,34 +9764,14 @@ "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -12071,50 +9796,14 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -12143,18 +9832,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -12183,14 +9864,6 @@ "type": "String", "placeholders": {} }, - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@tripPlanDesc": { "type": "String", "placeholders": {} @@ -12219,10 +9892,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12243,10 +9912,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12267,10 +9932,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12348,25 +10009,15 @@ "definitionsToolDescription": "འདི་ལས་འགོད་ནས་སྤྱི་ཚེས་སྟོན་པའི་སྒྲོམ་སྒྲིག་ལུས་སྟེང་ལ་ལོག་འབད་ནི་ཡིན། ཚེས་གྲངས་ལ་ལོག་འབད་ནས་སྒྲོམ་སྒྲིག་ལ་འགྱོ་ནི་ཡིན།", "translationsToolDescrption": "འདི་ལས་འགོད་ནས་ཚེས་གྲངས་ལ་ལོག་འབད་ནས་སྒྲོམ་སྒྲིག་ལུས་སྟེང་ལ་ལོག་འབད་ནི་ཡིན།", "welcomeBack": "བཀྲ་ཤིས་བཀྲ་ཤིས། ཁྱེད་ཀྱིས 2023-2024 ལོའི སྤོབས་ལམ་ལས་སྤྱོད་བྱེད་ཡོད་མི་རེད་པའི་སྤྱི་ཚེས་ལས་འབྲེལ་བ་བྱེད་རོགས་གནང་གི་ཡོད་མི་སྤྱི་ཚེས་ལ་འབྲེལ་བ་བྱེད་རོགས་གནང་གི་ཡོད། ཁྱེད་ཀྱིས་རྒྱལ་ཁབ་སློབ་ཚོགས་ལ་ལོག་འབད་ཡོད་པའི་སྤྱི་ཚེས་ལ་འབྲེལ་བ་བྱེད་རོགས་གནང་གི་ཡོད།", - "kickAllStudents": "སློབ་ཚོགས་ཀྱི་མི་ཚེས་ལ་ལོག་འབད།", - "kickAllStudentsConfirmation": "ཁྱེད་ཀྱང་སློབ་ཚོགས་ཀྱི་མི་ཚེས་ལ་ལོག་འབད་དགོས་ཀྱི་ཡོད་པས།", - "inviteAllStudents": "སློབ་ཚོགས་ཀྱི་རྒྱབ་སྤྱོད།", - "inviteAllStudentsConfirmation": "ཁྱེད་ཀྱང་སློབ་ཚོགས་ཀྱི་རྒྱབ་སྤྱོད་ལ་ལོག་འབད་དགོས་ཀྱི་ཡོད་པས།", - "inviteUsersFromPangea": "རྒྱལ་ཁབ་ལ་ལོག་འབད་སྤྱོད་ལེན་", - "redeemPromoCode": "རྒྱལ་ཁབ་ལ་ལོག་འབད་ལས་སྤྱོད་ལེན་", - "enterPromoCode": "རྒྱལ་ཁབ་ལ་ལོག་འབད་ལས་སྤྱོད་ལེན་", "downloadTxtFile": "ཚེས་རིང་ཡིག་ཚགས་འགྱོ་བཅོས་", "downloadCSVFile": "CSV ཡིག་ཚགས་འགྱོ་བཅོས་", "promotionalSubscriptionDesc": "ཁྱེད་ཀྱིས་ད་ལྟ་ལ་ལོ་རྒྱལ་ཁབ་ལ་ལོག་འབད་ཡོད་པའི་སྤྱི་ཚེས་ལ་ལོག་འབད་ཡོད། ཁྱེད་ཀྱིས་འབྲེལ་བ་བྱེད་ལས་སྤྱོད་ལེན་ལ་བསྐུར་གནང་བའི་ལས་ཁེར་ལ་འདེམས་སོ།", "originalSubscriptionPlatform": "ལོག་འབད་ཚུལ་ཁང་ {purchasePlatform} ལས་འབྲེལ་བ་བྱེད་ཡོད།", - "writingAnalyticsDesc": "ສົ່ງຂໍ້ຄວາມເພື່ອຝຶກຝนການຂຽນ", "endActivity": "ສິ້ນສຸດກິດຈະກຳ", "allLanguages": "ທັງຫມົດພາສາ", - "allCefrLevels": "ທັງຫມົດລະດັບ CEFR", "chatListTooltip": "ນີ້ແມ່ນລາຍການຂອງຂໍ້ຄວາມຕົວສະເຫຼີມ! ໃຫ້ກົດທຸກຜູ້ໃຊ້ທີ່ມີຮູບພາບແລະ “ເລີ່ມການສົນທະນາ”ເພື່ອສົ່ງຂໍ້ຄວາມ DM.", "directMessageBotTitle": "ຂໍ້ຄວາມກັບບອດ Pangea", "feedbackTitle": "ຄວາມຄິດເຫັນກ່ອນການໃຊ້ງານ", - "feedbackDesc": "ຈະປັບປຸງກິດຈະກຳນີ້ແນວໃດ? ຖ້າທ່ານສາມາດໃຫ້ລາຍລະອຽດໄດ້, ເຮົາຈະປັບປຸງ!", "feedbackRespDesc": "ກັບຄືນມາກວ່າງໃນມື້ອື່ນເພື່ອອັບເດດກິດຈະກຳ.", "feedbackHint": "ຄວາມຄິດເຫັນຂອງທ່ານ", "feedbackButton": "ສົ່ງຄວາມຄິດເຫັນ", @@ -12375,7 +10026,6 @@ "playWithAI": "ເລີ່ມຫຼິ້ນກັບ AI ໃນຕອນນີ້", "courseStartDesc": "Pangea Bot ພ້ອມໃຫ້ໃຊ້ງານເວລາໃດກໍໄດ້!\n\n...ແຕ່ການຮຽນຮູ້ດີກວ່າກັບໝູ່!", "activityDropdownDesc": "ເມື່ອທ່ານເຮັດກິດຈະກຳນີ້ສຳເລັດແລ້ວ, ໃຫ້ກົດລຸ່ມຂ້າງລຸ່ມ", - "activityAnalyticsListBody": "ນີ້ແມ່ນກິດຈະກຳທີ່ທ່ານໄດ້ສຳເລັດ! ຫຼັງຈາກສຳເລັດກິດຈະກຳ, ທ່ານສາມາດເບິ່ງເຫັນມັນທີ່ນີ້.", "languageMismatchTitle": "ການບໍລິການພາສາບໍ່ຕົງກັນ", "languageMismatchDesc": "ພາສາໝາຍເປັນຫຍັງບໍ? ກະລຸນາອັບເດດພາສາໝາຍຂອງທ່ານບໍ?", "reportWordIssueTooltip": "ລາຍງານບັນຫາຂໍ້ມູນຄວາມຫມາຍຂອງຄວາມ", @@ -12534,34 +10184,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -12582,10 +10204,6 @@ } } }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12594,10 +10212,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12610,10 +10224,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12646,10 +10256,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12730,6 +10336,7 @@ }, "notStartedActivitiesTitle": "Sesyonan e hapura ({num})", "inProgressActivitiesTitle": "Po ndodhin tani ({num})", + "pickDifferentActivity": "Zgjidh një aktivitet tjetër", "completedActivitiesTitle": "Përfunduar ({num})", "inOngoingActivity": "Keni një aktivitet në vazhdim!", "@notStartedActivitiesTitle": { @@ -12756,10 +10363,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Bokmål mål språket ditt samsvarer ikke med denne meldingen. Oppdater målspråket ditt?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ita ne boma in this course. Click on any user’s avatar and “start conversation” to send a DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ita vocab word will be permanently removed from your analytics", + "woman": "Baba", + "man": "Baba", + "otherGender": "Bola", + "unselectedGender": "Select a gender option", + "gender": "Bola", + "chatParticipantTooltip": "Ita is everybody in this chat. Click on any user’s avatar and “start conversation” to send a DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Lernwerkzeuge sind für Nachrichten, die nicht in deiner Zielsprache sind, deaktiviert.", + "vocabEmoji": "Vokabel-Emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Begär regenerering", + "optionalRegenerateReason": "(Valfritt) Orsak", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "A’n setti emoji për {lemma}! Ne do ta përdorim këtë emoji për të përfaqësuar fjalën në aktivitetet praktike në vazhdim.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Nunggu kanggo mlebu rampung", + "ssoDialogDesc": "Kita wis mbukak tab anyar supaya sampeyan bisa mlebu kanthi aman.", + "ssoDialogHelpText": "🤔 Yen sampeyan ora ndeleng tab anyar, mangga priksa pemblokir popup sampeyan.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Disaɓa ɓe laawol ɗe", + "disableLanguageToolsDesc": "Aɗa yiɗi ɗaɓɓita caɗeele laawol ɓe naatnude?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permisiun ditë. Aktivizoni lejet e regjistrimit për të regjistruar mesazhe audio.", + "genericWebRecordingError": "Diçka shkoi keq. Ne rekomandojmë të përdorni shfletuesin Chrome kur regjistroni mesazhe.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Bokor na bɛyɛ a, bɔkɔ a ɛyɛ fɛ a, yɛsrɛ sɛ bɔ wo bɔkɔ no mu.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktiviteti për të Çliruar Temën Tjetër", "activitiesToUnlockTopicDesc": "Caktoni numrin e aktiviteteve për të çliruar temën tjetër të kursit", "@activitiesToUnlockTopicTitle": { @@ -12769,5 +10494,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Korekt vokab definicij praksi", + "constructUseIncLMDesc": "Nekorekt vokab definicij praksi", + "constructUseCorLADesc": "Korekt vokab audio praksi", + "constructUseIncLADesc": "Nekorekt vokab audio praksi", + "constructUseBonus": "Bonus tokom vokab prakse", + "practiceVocab": "Vežbaj vokabular", + "selectMeaning": "Izaberi značenje", + "selectAudio": "Izaberi odgovarajući audio", + "congratulations": "Čestitamo!", + "anotherRound": "Još jedan krug", + "noActivityRequest": "Ninguna solicitud de actividad actual.", + "quit": "Salir", + "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", + "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", + "botSettings": "Configuraciones del Bot", + "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index ee1313a9d..0291e8daf 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:55.665527", + "@@last_modified": "2026-01-07 14:26:27.395689", "about": "Quant a", "@about": { "type": "String", @@ -3350,26 +3350,14 @@ "commandHint_logoutall": "Tanca la sessió de tots els dispositius actius", "displayNavigationRail": "Mostra la barra de navegació a mòbil", "customReaction": "Reacció personalitzada", - "accountInformation": "Informació del compte", - "addGroupDescription": "Afegeix una descripció del xat", - "addNewFriend": "Afegeix un nou amic", - "alreadyHaveAnAccount": "Ja tens un compte?", - "createNewGroup": "Crea un nou xat", - "editChatPermissions": "Edita els permisos del xat", "writeAMessageLangCodes": "Escriu en {l1} o {l2}...", "requests": "Requests", - "allCorrect": "Això és com ho diria jo! Genial!", - "newWayAllGood": "No ho hauria dit així, però sembla bé!", - "othersAreBetter": "Hm, potser hi ha una manera millor de dir-ho.", "holdForInfo": "Fes clic i mantén premut per obtenir informació de la paraula.", "greenFeedback": "Això és el que jo posaria!", "yellowFeedback": "Hm, pots provar això i veure si funciona! Per utilitzar aquesta paraula, simplement fes clic de nou.", "redFeedback": "No crec que sigui correcte...", "itInstructionsTitle": "Puc ajudar-te a traduir!", "itInstructionsBody": "Pots fer clic i mantenir premudes les opcions per obtenir informació de la paraula.", - "oneday": "Darreres 24 hores", - "oneweek": "Darrers 7 dies", - "onemonth": "Mes passat", "gaTooltip": "L2 utilitza amb assistència gramatical", "taTooltip": "L2 utilitza amb assistència de traducció", "unTooltip": "Altres", @@ -3379,58 +3367,27 @@ "interactiveTranslatorAllowed": "Elecció de l'estudiant", "interactiveTranslatorRequired": "Requerit", "notYetSet": "Encara no s'ha configurat", - "myLearning": "Les meves anàlisis", "waTooltip": "Ús de L2 sense assistència", - "changeDateRange": "Canvia l'interval de dates", - "classDescription": "Descripció", - "addStudents": "Convida usuaris mitjançant enllaç o codi", - "copyClassLink": "Copia l'enllaç d'invitació", - "copyClassCode": "Copia el codi d'invitació", - "inviteStudentByUserName": "Convida usuaris per nom d'usuari", "languageSettings": "Configuració de l'idioma", "interactiveTranslator": "Assistència de traducció", - "shareVideo": "Comparteix vídeo", - "shareVideoDesc": "Activa aquesta opció per permetre als estudiants compartir vídeos en xats.", - "shareFiles": "Comparteix arxius", - "selectLanguageLevel": "Selecciona el nivell d'idioma", "noIdenticalLanguages": "Si us plau, tria idiomes base i de destinació diferents", - "iWantALanguagePartnerFrom": "És de:", - "worldWide": "A tot el món", - "noResults": "No hi ha resultats! Prova a ampliar la cerca.", "searchBy": "Cerca per país i idiomes", - "iWantAConversationPartner": "Vull un company de conversa que", - "iWantALanguagePartnerWhoSpeaks": "Parla:", - "iWantALanguagePartnerWhoIsLearning": "Està aprenent:", "joinWithClassCode": "Uneix-te al curs", - "joinWithClassCodeHint": "Introdueix el codi d'invitació", - "languageLevelPreA1": "Totalment principiants (Pre A1)", - "languageLevelA1": "Principiant (A1)", - "languageLevelA2": "Elemental (A2)", - "languageLevelB1": "Intermedi (B1)", - "languageLevelB2": "Intermedi superior (B2)", - "languageLevelC1": "Avançat (C1)", - "languageLevelC2": "Dominació (C2)", + "languageLevelPreA1": "Novell Baix (Pre A1)", + "languageLevelA1": "Novell Mitjà (A1)", + "languageLevelA2": "Novell Alt (A2)", + "languageLevelB1": "Intermedi Mitjà (B1)", + "languageLevelB2": "Avançat Baix (B2)", + "languageLevelC1": "Avançat Mitjà (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Canvia el nom", "changeTheNameOfTheChat": "Canvia el nom del xat", - "askPangeaBot": "Pregunta a Pangea Bot per una definició contextual.", "sorryNoResults": "Ho sentim, no hi ha resultats.", "ignoreInThisText": "Ignora", - "helpMeTranslate": "Sí!", - "needsItShortMessage": "Fora de l'objectiu", "needsItMessage": "Espera, això no és {targetLanguage}! Necessites ajuda per traduir?", - "needsIgcMessage": "Aquest missatge té un error gramatical.", - "tokenTranslationTitle": "Una paraula està en la teva llengua base.", - "spanTranslationDesc": "Vegeu les possibles traduccions a continuació.", - "spanTranslationTitle": "Algunes paraules estan en la teva llengua base.", - "l1SpanAndGrammarTitle": "Fora de la llengua objectiu", - "l1SpanAndGrammarDesc": "Això podria estar en la teva llengua base o podria ser un error gramatical.", - "otherTitle": "Tens un error.", - "otherDesc": "Vegeu les possibles correccions a continuació.", "countryInformation": "El meu país", - "myLanguages": "Les meves llengües base i objectiu", "targetLanguage": "Llengua objectiu", "sourceLanguage": "Llengua base", - "languagesISpeak": "Llengües que parlo", "updateLanguage": "Les meves llengües", "whatLanguageYouWantToLearn": "Quina llengua vols aprendre?", "whatIsYourBaseLanguage": "Quina és la teva llengua base?", @@ -3445,13 +3402,8 @@ "errorDisableLanguageAssistanceUserDesc": "Fes clic aquí per actualitzar la configuració d'assistència de traducció i de gramàtica", "errorDisableITClassDesc": "L'assistència de traducció està desactivada per al curs en què es troba aquest xat.", "errorDisableIGCClassDesc": "L'assistència de gramàtica està desactivada per al curs en què es troba aquest xat.", - "itIsDisabled": "La traducció interactiva està desactivada", - "igcIsDisabled": "La revisió gramatical interactiva està desactivada", - "goToLearningSettings": "Ves a la Configuració d'Aprenentatge", "error405Title": "Idiomes no configurats", "error405Desc": "Si us plau, configureu els vostres idiomes al Menú Principal > Configuració d'Aprenentatge.", - "loginOrSignup": "Inicia sessió amb", - "iAgreeToThe": "Accepto els ", "termsAndConditions": "Termes i Condicions", "andCertifyIAmAtLeast13YearsOfAge": " i certifico que tinc almenys 16 anys.", "error502504Title": "Uau, hi ha molts estudiants en línia!", @@ -3459,40 +3411,21 @@ "error404Title": "Error de traducció!", "error404Desc": "El Pangea Bot no està segur de com traduir això...", "errorPleaseRefresh": "Ho estem investigant! Si us plau, actualitza i torna a provar.", - "toggleIT": "Traducció interactiva", - "toggleIGC": "Revisió gramatical interactiva", - "toggleToolSettingsDescription": "Aquí pots activar o desactivar la configuració de l'eina de llengua individual.", "connectedToStaging": "Connectat a l'Entorn de Proves", "learningSettings": "Configuració d'aprenentatge", - "sendVoiceNotes": "Envia notes de veu", - "sendVoiceNotesDesc": "Activa això per permetre als estudiants enviar notes de veu als xats.", - "chatTopic": "Tema del xat", - "chatTopicDesc": "Estableix un tema per al xat", - "inviteStudentByUserNameDesc": "Si el teu estudiant ja té un compte, pots buscar-lo.", "participants": "Participants", - "almostPerfect": "Sembla correcte! Això és el que hauria dit.", - "prettyGood": "Molt bé! Això és el que hauria dit.", - "letMeThink": "Hmm, anem a veure com ho has fet!", "clickMessageTitle": "Necessites ajuda?", "clickMessageBody": "Fes clic en un missatge per a eines de llengua com traducció, reproducció i més!", - "understandingMessagesTitle": "Definicions i traduccions!", - "understandingMessagesBody": "Fes clic a les paraules subratllades per obtenir definicions. Traduïu amb les opcions de missatge (dret superior).", "allDone": "Tot fet!", "vocab": "Vocabulari", "low": "Tenim proves que l'usuari no entén aquestes paraules.", "medium": "Aquestes paraules s'han utilitzat. No està clar si l'usuari les entén completament o no.", "high": "Tenim proves que l'usuari entén aquestes paraules.", - "unknownProficiency": "Aquestes paraules no s'han utilitzat a Pangea Chat.", - "changeView": "Canvia de vista.", - "clearAll": "Esborrar totes les paraules?", - "generateVocabulary": "Genera vocabulari a partir del títol i la descripció", - "generatePrompts": "Genera indicacions", "subscribe": "Subscriu-te", "getAccess": "Subscriu-te ara!", "subscriptionDesc": "Els missatges són gratuïts! Subscriu-te per desbloquejar la traducció interactiva, la comprovació de gramàtica i l'anàlisi d'aprenentatge.", "subscriptionManagement": "Gestió de subscripcions", "currentSubscription": "Subscripció actual", - "changeSubscription": "Canvia la teva subscripció", "cancelSubscription": "Cancel·la la teva subscripció", "selectYourPlan": "Selecciona el teu pla", "subsciptionPlatformTooltip": "Inicia sessió al teu dispositiu original per gestionar el teu pla de subscripció", @@ -3501,9 +3434,6 @@ "paymentHistory": "Historial de pagaments", "emptyChatDownloadWarning": "No es pot descarregar un xat buit", "update": "Actualitzar", - "updateDesc": "Ara podeu actualitzar aquesta aplicació de {localVersion} a {storeVersion}", - "maybeLater": "Potser més tard", - "mainMenu": "Menú principal", "toggleImmersionMode": "Mode d'immersió", "toggleImmersionModeDesc": "Quan està activat, tots els missatges es mostren en la vostra llengua objectiu. Aquesta configuració és més útil en intercanvis de llengües.", "itToggleDescription": "Aquesta eina d'aprenentatge de llengües identificarà paraules en la vostra llengua base i us ajudarà a traduir-les a la vostra llengua objectiu. Tot i que és rar, la IA pot cometre errors de traducció.", @@ -3518,212 +3448,13 @@ "definitionsToolDescription": "Quan està activat, les paraules subratllades en blau es poden clicar per veure definicions. Fes clic als missatges per accedir a les definicions.", "translationsToolDescrption": "Quan estigui activat, feu clic en un missatge i a l'icona de traducció per veure un missatge en la vostra llengua base.", "welcomeBack": "Benvingut de nou! Si vau formar part del pilot 2023-2024, poseu-vos en contacte amb nosaltres per a la vostra subscripció especial de pilot. Si sou un professor que ha comprat (o la vostra institució ha comprat) llicències per a la vostra classe, poseu-vos en contacte amb nosaltres per a la vostra subscripció d'professor.", - "kickAllStudents": "Expulsar Tots els Estudiants", - "kickAllStudentsConfirmation": "Esteu segur que voleu expulsar tots els estudiants?", - "inviteAllStudents": "Invitar Tots els Estudiants", - "inviteAllStudentsConfirmation": "Esteu segur que voleu convidar tots els estudiants?", - "inviteUsersFromPangea": "Afegir administradors", - "redeemPromoCode": "Resoldre Codi Promocional", - "enterPromoCode": "Introdueix el Codi Promocional", "downloadTxtFile": "Descarregar Fitxer de Text", "downloadCSVFile": "Descarregar Fitxer CSV", "promotionalSubscriptionDesc": "Actualment teniu una subscripció promocional de per vida. Envia un missatge a support@pangea.chat per ajudar-vos a canviar la vostra subscripció.", "originalSubscriptionPlatform": "Subscripció comprada a través de {purchasePlatform}", "oneWeekTrial": "Prova d'una Setmana", "downloadXLSXFile": "Descarregar Fitxer Excel", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Africà", - "akDisplayName": "Akan", - "sqDisplayName": "Albanès", - "amDisplayName": "Amàric", - "arDisplayName": "Àrab", - "anDisplayName": "Aragonès", - "hyDisplayName": "Armènia", - "asDisplayName": "Assamès", - "avDisplayName": "Avaric", - "aeDisplayName": "Avèstic", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaidjanès", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basc", - "beDisplayName": "Belarús", - "bnDisplayName": "Bengalí", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnià", - "brDisplayName": "Bretó", - "bgDisplayName": "Búlgar", - "myDisplayName": "Birmà", - "caDisplayName": "Català, Valencià", - "chDisplayName": "Chamorro", - "ceDisplayName": "Chechen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Xinès", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornuallès", - "coDisplayName": "Cors", - "crDisplayName": "Cree", - "hrDisplayName": "Croat", - "csDisplayName": "Txec", - "daDisplayName": "Danès", - "dvDisplayName": "Divehi; Dhivehi; Maldivi;", - "nlDisplayName": "Holandès", - "enDisplayName": "Anglès", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonià", - "eeDisplayName": "Ewe", - "foDisplayName": "Feroès", - "fjDisplayName": "Fijià", - "fiDisplayName": "Finès", - "frDisplayName": "Francès", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Gallec", - "kaDisplayName": "Georgià", - "deDisplayName": "Alemany", - "elDisplayName": "Grec, Modern", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haití, Crioll Haití", - "haDisplayName": "Hausa", - "heDisplayName": "Hebreu (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hongarès", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonès", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandès", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandès", - "itDisplayName": "Italià", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonès", - "jvDisplayName": "Javanès", - "klDisplayName": "Kalaallisut, groenlandès", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirguís, Kirguís", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreà", - "kuDisplayName": "Kurda", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Llatí", - "lbDisplayName": "Luxemburgès, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgès, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosà", - "ltDisplayName": "Lituà", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letó", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedoni", - "mgDisplayName": "Malgaix", - "msDisplayName": "Malai", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Màlta", - "miDisplayName": "Maori", - "mrDisplayName": "Maratxí (Marāṭhī)", - "mhDisplayName": "Marxelles", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Noruec Bokmål", - "ndDisplayName": "Ndebele del Nord", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Noruec Nynorsk", - "noDisplayName": "Noruec", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele del Sud", - "ocDisplayName": "Occità", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Cèltic Eclesiàstic antic, Eslavè eclesiàstic, Eslavè antic, Búlgar antic, Eslavè antic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetic, Ossetian", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persa", - "plDisplayName": "Polonès", - "psDisplayName": "Pastū, Pashto", - "ptDisplayName": "Portuguès", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romanès, Moldau, Moldava", - "ruDisplayName": "Rus", - "saDisplayName": "Sànscrit (Saṃskṛta)", - "scDisplayName": "Sard", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami del Nord", - "smDisplayName": "Samoà", - "sgDisplayName": "Sango", - "srDisplayName": "Serbi", - "gdDisplayName": "Gaèlic escocès, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Singalès, Sinhalès", - "skDisplayName": "Eslovac", - "slDisplayName": "Eslovè", - "soDisplayName": "Somali", - "stDisplayName": "Sotho del Sud", - "esDisplayName": "Espanyol", - "suDisplayName": "Sundanès", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Suec", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadjik", - "thDisplayName": "Tailandès", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetà estàndard, Tibetà, Central", - "tkDisplayName": "Turcoman", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Illes Tonga)", - "trDisplayName": "Turc", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tàtar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahití", - "ugDisplayName": "Uigur, Uigur", - "ukDisplayName": "Ucraïnès", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamita", - "voDisplayName": "Volapük", - "waDisplayName": "Való", - "cyDisplayName": "Gal·lès", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisó occidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Desconegut", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaià", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multi", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebreu", - "jwDisplayName": "Javanès", - "moDisplayName": "Moldau", - "shDisplayName": "Serbo-croata", "wwCountryDisplayName": "Mundial", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Illes Aland", @@ -3971,41 +3702,25 @@ "yeCountryDisplayName": "Iemen", "zmCountryDisplayName": "Zàmbia", "zwCountryDisplayName": "Zimbàbue", - "pay": "Paga", - "allPrivateChats": "Xats privats", - "unknownPrivateChat": "Xat privat desconegut", + "pay": "Checkout", "invitedToSpace": "{user} t'ha convidat a unir-te a un curs: {space}! Desitges acceptar?", - "declinedInvitation": "Invitació rebutjada", - "acceptedInvitation": "Acceptada invitació", "youreInvited": "📩 Estàs convidat!", "invitedToChat": "{user} t'ha convidat a unir-te a un xat: {name}! Voleu acceptar?", "monthlySubscription": "Mensual", "yearlySubscription": "Anual", "defaultSubscription": "Subscripció a Pangea Chat", "freeTrial": "Prova gratuïta", - "grammarAnalytics": "Anàlisi d'errors", "total": "Total: ", "noDataFound": "No s'han trobat dades", - "promoSubscriptionExpirationDesc": "La teva subscripció actual és promocional i expira el {expiration}. Envia un missatge a support@pangea.chat per ajudar-te a canviar la teva subscripció.", - "emptyChatNameWarning": "Si us plau, introdueix un nom per a aquest xat", "blurMeansTranslateTitle": "Per què el missatge està borros?", "blurMeansTranslateBody": "Mentre el Mode Immersió està activat, els missatges enviats en la teva llengua base estaran borrosos mentre Pangea Bot els tradueix a la teva llengua objectiu. El Mode Immersió es pot activar o desactivar en la configuració individual i de curs.", - "someErrorTitle": "Hm, alguna cosa no funciona bé", - "someErrorBody": "Podria ser un error o alguna cosa en la teva llengua base.", "bestCorrectionFeedback": "És correcte!", "distractorFeedback": "No és del tot correcte.", "bestAnswerFeedback": "És correcte!", "definitionDefaultPrompt": "Què vol dir aquesta paraula?", "practiceDefaultPrompt": "Quina és la millor resposta?", "correctionDefaultPrompt": "Quina és la millor substitució?", - "itStartDefaultPrompt": "Vols ajuda per traduir?", - "lockedChatWarning": "🔒 Aquesta conversa ha estat bloquejada", - "lockChat": "Bloquejar conversa", - "suggestToChat": "Suggerir aquesta conversa", - "suggestToChatDesc": "Les converses suggerides apareixeran a les llistes de converses", "acceptSelection": "Acceptar correcció", - "acceptSelectionAnyway": "Utilitzar això de totes maneres", - "makingActivity": "Realitzant activitat", "why": "Per què?", "definition": "Definició", "exampleSentence": "Exemple de frase", @@ -4013,128 +3728,55 @@ "reportMessageTitle": "{reportingUserId} ha reportat un missatge de {reportedUserId} a la conversa {roomName}", "reportMessageBody": "Missatge: {reportedMessage}\nMotiu: {reason}", "noTeachersFound": "No s'han trobat mestres per informar-hi", - "viewArchive": "Veure arxiu", "trialExpiration": "La teva prova gratuïta expira el {expiration}", "freeTrialDesc": "Els nous usuaris reben una prova gratuïta d'una setmana de Pangea Chat", "activateTrial": "Prova gratuïta de 7 dies", "successfullySubscribed": "Has subscrit amb èxit!", "clickToManageSubscription": "Fes clic aquí per gestionar la teva subscripció.", - "errorGettingAudio": "Error en obtenir l'àudio. Actualitza la pàgina i torna-ho a provar.", "signUp": "Registra't", "pleaseChooseAtLeastChars": "Si us plau, tria almenys {min} caràcters.", "noEmailWarning": "Si us plau, introdueix una adreça de correu electrònic vàlida. Si no, no podràs restablir la contrasenya. Si no vols, torna a tocar el botó per continuar.", "pleaseEnterValidEmail": "Si us plau, introdueix una adreça de correu electrònic vàlida.", "pleaseChooseAUsername": "Si us plau, tria un nom d'usuari", - "chooseAUsername": "Tria un nom d'usuari", "define": "Definir", "listen": "Escoltar", - "addConversationBot": "Habilita el Bot de conversa", - "addConversationBotDesc": "Afegeix un bot a aquesta conversa", - "convoBotSettingsDescription": "Edita el tema de la conversa i la dificultat", - "enterAConversationTopic": "Introdueix un tema de conversa", - "conversationTopic": "Tema de conversa", - "enableModeration": "Habilita la moderació", - "enableModerationDesc": "Habilita la moderació automàtica per revisar els missatges abans d'enviar-los", - "conversationLanguageLevel": "Quin és el nivell de llengua d'aquesta conversa?", - "showDefinition": "Mostra la definició", - "subscriptionPopupTitle": "Aquesta frase podria tenir un error de gramàtica...", - "subscriptionPopupDesc": "Subscripteu-vos avui per desbloquejar la traducció i la correcció gramatical!", - "seeOptions": "Veure opcions", - "continuedWithoutSubscription": "Continuar sense subscripció", "trialPeriodExpired": "El període de prova ha expirat", - "selectToDefine": "Fes clic a qualsevol paraula per veure la seva definició!", "translations": "traduccions", "messageAudio": "àudio del missatge", "definitions": "definicions", "subscribedToUnlockTools": "Subscriu-te per desbloquejar la traducció interactiva i la comprovació gramatical, reproducció d'àudio, activitats de pràctica personalitzades i anàlisi d'aprenentatge!", "translationTooltip": "Tradueix", - "audioTooltip": "Reproduir àudio", "speechToTextTooltip": "Transcripció", - "certifyAge": "Certifico que tinc més de {age} anys", "kickBotWarning": "Treure el bot Pangea eliminarà el bot de conversa d'aquest xat.", - "joinToView": "Uneix-te a aquesta sala per veure els detalls", "refresh": "Actualitza", - "autoPlayTitle": "Reproducció automàtica de missatges", - "autoPlayDesc": "Quan està activat, l'àudio de text a veu dels missatges s'hi reproduirà automàticament quan es seleccionin.", "messageAnalytics": "Anàlisi de missatges", "words": "Paraules", "score": "Puntuació", "accuracy": "Precisió", "points": "Punts", "noPaymentInfo": "No cal informació de pagament!", - "conversationBotModeSelectDescription": "Activitat de xat", - "conversationBotModeSelectOption_discussion": "Discussió", - "conversationBotModeSelectOption_custom": "Personalitzat", - "conversationBotModeSelectOption_conversation": "Conversa", - "conversationBotModeSelectOption_textAdventure": "Aventura de text", - "conversationBotModeSelectOption_storyGame": "Joc d'històries", - "conversationBotDiscussionZone_title": "Configuració de discussió", - "conversationBotDiscussionZone_discussionTopicLabel": "Tema de discussió", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Estableix el tema de discussió", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Paraules clau de discussió", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Estableix paraules clau de discussió", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Llista separada per comes de paraules clau per guiar la discussió", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Envia una invitació a discutir segons un horari", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hores entre invitacions a discutir", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Respond amb reacció ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reacció per enviar la sol·licitud de discussió", - "conversationBotCustomZone_title": "Configuracions personalitzades", - "conversationBotCustomZone_customSystemPromptLabel": "Indicació del sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Estableix una indicació personalitzada del sistema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Falta la indicació personalitzada del sistema", - "botConfig": "Configuracions del bot i activitat", - "botConfigNoPermissionTitle": "Sense permís", - "botConfigNoPermissionMessage": "Contacta amb l'administrador de la sala per canviar la configuració del bot", - "addConversationBotDialogTitleInvite": "Confirma la invitació del bot de conversa", - "addConversationBotButtonInvite": "Convidar", - "addConversationBotDialogInviteConfirmation": "Convidar", - "addConversationBotButtonTitleRemove": "Confirma la eliminació del bot de conversa", - "addConversationBotButtonRemove": "Eliminar", - "addConversationBotDialogRemoveConfirmation": "Eliminar", - "conversationBotConfigConfirmChange": "Confirmar", - "conversationBotStatus": "Convida el bot", - "conversationBotTextAdventureZone_title": "Aventura de text", - "conversationBotTextAdventureZone_instructionLabel": "Instruccions del Mestre del Joc", - "conversationBotTextAdventureZone_instructionPlaceholder": "Estableix les instruccions del mestre del joc", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Falten les instruccions del mestre del joc", - "studentAnalyticsNotAvailable": "Dades de l'estudiant no disponibles actualment", - "roomDataMissing": "Algunes dades poden faltar de les habitacions on no ets membre.", "updatePhoneOS": "Pot ser que necessitis actualitzar la versió del sistema operatiu del teu dispositiu.", "wordsPerMinute": "Paraules per minut", "autoIGCToolName": "Executa automàticament l'assistència d'escriptura Pangea", "autoIGCToolDescription": "Executa automàticament l'assistència d'escriptura de gramàtica i traducció de Pangea abans d'enviar el meu missatge.", - "runGrammarCorrection": "Revisa el missatge", - "grammarCorrectionFailed": "Problemes a resoldre", - "grammarCorrectionComplete": "Sembla bé!", "tooltipInstructionsTitle": "No estàs segur de què fa això?", "tooltipInstructionsMobileBody": "Prem i mantén premut per veure les eines d'informació sobre les opcions.", "tooltipInstructionsBrowserBody": "Passa el cursor sobre els elements per veure les eines d'informació.", "chatCapacity": "Capacitat de xat", "roomFull": "Aquesta habitació ja està plena.", - "topicNotSet": "El tema no s'ha establert.", - "chatCapacityNotSet": "Aquest xat no té límit de capacitat.", "chatCapacityHasBeenChanged": "Capacitat de xat canviada", "chatCapacitySetTooLow": "La capacitat de xat ha de ser almenys {count}.", "chatCapacityExplanation": "La capacitat de xat limita el nombre de membres que poden participar en un xat.", - "chatExceedsCapacity": "Aquest xat supera la seva capacitat.", "tooManyRequest": "Massa sol·licituds, si us plau, torna-ho a provar més tard.", "enterNumber": "Si us plau, introdueix un valor numèric sencer.", "buildTranslation": "Construeix la teva traducció a partir de les opcions de dalt", - "nonexistentSelection": "La selecció ja no existeix.", - "changeAnalyticsLanguage": "Canvia l'idioma d'analítiques", "practice": "Practica", "noLanguagesSet": "No hi ha cap idioma configurat", - "noActivitiesFound": "Ja n'hi ha prou per ara! Torna més tard per més.", - "hintTitle": "Pista:", "speechToTextBody": "Per a missatges de veu, pots veure una transcripció així com la puntuació de Paraules per Minut del parlant.", "versionNotFound": "Versió no trobada", "fetchingVersion": "Obtenint versió...", "versionFetchError": "Error en obtenir la versió", "versionText": "Versió: {version}+{buildNumber}", - "languageButtonLabel": "Idioma: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Reproducció automàtica de la traducció", - "interactiveTranslatorAutoPlayDesc": "Llança el traductor interactiu sense preguntar.", - "changeAnalyticsView": "Canvia la vista d'analítiques", "l1TranslationBody": "Els missatges en el teu idioma base no seran traduïts.", "deleteSubscriptionWarningTitle": "Tens una subscripció activa", "deleteSubscriptionWarningBody": "Eliminant el teu compte no cancel·larà automàticament la teva subscripció.", @@ -4142,9 +3784,7 @@ "error520Title": "Si us plau, intenta-ho de nou.", "error520Desc": "Ho sentim, no hem pogut entendre el teu missatge...", "wordsUsed": "Paraules utilitzades", - "errorTypes": "Tipus d'error", "level": "Nivell", - "canceledSend": "Enviament cancel·lat", "morphsUsed": "Morfemes utilitzats", "translationChoicesBody": "Fes clic i mantén premut una opció per obtenir una pista.", "grammar": "Gramàtica", @@ -4154,7 +3794,6 @@ "reportContentIssueTitle": "Informar d'un problema de contingut", "feedback": "Comentaris opcionals", "reportContentIssueDescription": "Oh! La IA pot facilitar experiències d'aprenentatge personalitzades, però... també fa al·lucinacions. Si us plau, proporciona qualsevol comentari que tinguis i ho intentarem de nou.", - "changeContent": "Oh! La IA pot facilitar experiències d'aprenentatge personalitzades, però... també fa al·lucinacions. Què hauria de ser?", "clickTheWordAgainToDeselect": "Fes clic a la paraula seleccionada per deseleccionarla.", "l2SupportNa": "No disponible", "l2SupportAlpha": "Alpha", @@ -4388,7 +4027,6 @@ "grammarCopySPC": "Especificitat", "grammarCopyPARTTYPE": "Tipus Partitiu", "grammarCopyINTREL": "Interrogatiu-Relatiu", - "grammarCopyNUMFORMpsor": "Nombre del Possessor", "grammarCopyUNKNOWN": "Desconegut", "grammarCopyNUMBERPSOR": "Nombre del Possessor", "grammarCopyPOSS": "Possessiu", @@ -4434,28 +4072,14 @@ "grammarCopyVOICEdir": "Directe", "grammarCopyVOICEinv": "Inversa", "grammarCopyVOICErcp": "Recíproca", - "enterPrompt": "Si us plau, introdueixi un missatge de sistema", - "selectBotLanguage": "Seleccioneu l'idioma del bot", - "chooseVoice": "Tria una veu", - "enterLanguageLevel": "Si us plau, introdueix un nivell de llengua", - "enterDiscussionTopic": "Si us plau, introdueix un tema de discussió", - "selectBotChatMode": "Selecciona el mode de xat", - "messageNotInTargetLang": "Missatge no en l'idioma objectiu", "other": "Altres", "levelShort": "NIVL {level}", - "botModeValidation": "Si us plau, selecciona un mode de xat", "clickBestOption": "Tria les millors opcions per traduir el teu missatge!", "completeActivitiesToUnlock": "Completa almenys una activitat per desbloquejar la traducció!", - "botSettingsSubtitle": "Convida el bot per moderar l'activitat del xat", - "invitePeople": "Convida usuaris", "noCapacityLimit": "Sense límit de capacitat", "downloadGroupText": "Descarrega el text del grup", "notificationsOn": "Notificacions activades", "notificationsOff": "Notificacions desactivades", - "chatCanBeFoundViaSearch": "El xat es pot trobar mitjançant la cerca", - "requireCodeToJoin": "Requereix codi per unir-se", - "canFindInSearch": "Es pot trobar a la cerca", - "addChatToSpace": "Afegeix xat", "createChatAndInviteUsers": "Crear xat i convidar usuaris", "updatedNewSpaceDescription": "Els cursos us permeten consolidar els vostres xats i construir comunitats privades o públiques.", "joinWithCode": "Uneix-te amb codi", @@ -4491,39 +4115,19 @@ "constructUseCollected": "Recollit a la conversa", "constructUseNanDesc": "No aplicable", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Inicia sessió amb nom d'usuari i contrasenya", - "registrationEmailMessage": "Verifica el teu correu electrònic amb un enllaç enviat allà. En alguns casos, el correu triga fins a 5 minuts a arribar. També comprova la carpeta de correu no desitjat.", "enableTTSToolName": "Activat text-a-veu", "enableTTSToolDescription": "Permet a l'aplicació generar sortida de text-a-veu per a parts del text en la teva llengua objectiu.", - "couldNotFindTTS": "No hem pogut trobar un motor de text-a-veu per a la teva llengua objectiu actual.", - "ttsInstructionsHyperlink": "Fes clic aquí per veure les instruccions per descarregar una nova veu al teu dispositiu.", - "createAnAccount": "Crea un compte", - "signIn": "Inicia sessió", - "signUpWithEmail": "Registra't amb correu electrònic", - "signUpWithGoogle": "Registra't amb Google", - "signUpWithApple": "Registra't amb Apple", "yourUsername": "El teu nom d'usuari", "yourEmail": "El teu correu electrònic", - "pleaseEnterAnEmail": "Si us plau, introdueix una adreça de correu electrònic", - "signInWithGoogle": "Inicia sessió amb Google", - "signInWithApple": "Inicia sessió amb Apple", - "chooseYourAvatar": "Tria el teu avatar", "iWantToLearn": "Vull aprendre", - "letsStart": "Comencem", - "pleaseAgreeToTOS": "Si us plau, accepta els Termes i Condicions", "pleaseEnterEmail": "Si us plau, introdueix una adreça de correu electrònic vàlida.", - "pleaseSelectALanguage": "Si us plau, selecciona un idioma", "myBaseLanguage": "El meu idioma base", - "clickWordsInstructions": "🧻 Fes clic a qualsevol paraula per veure els detalls. 🤐", - "chooseBestDefinition": "Què vol dir aquesta paraula?", "meaningSectionHeader": "Significat:", "formSectionHeader": "Formes utilitzades en xats:", - "noEmojiSelectedTooltip": "No s'ha seleccionat cap emoji", "writingExercisesTooltip": "Escriptura", "listeningExercisesTooltip": "Escolta", "readingExercisesTooltip": "Lectura", "meaningNotFound": "No s'ha pogut trobar el significat.", - "formsNotFound": "No s'han pogut trobar les formes.", "chooseBaseForm": "Tria la forma base", "notTheCodeError": "Ho sentim, això no és el codi!", "totalXP": "XP total", @@ -4563,9 +4167,6 @@ "pickAnEmoji": "Quin és el teu emoji favorit per a '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Combina els significats amb les paraules del missatge!", "doubleClickToEdit": "Fes doble clic per editar.", - "removeFeature": "Elimina {feature}", - "chooseCorrectLabel": "Tria l'etiqueta correcta.", - "levelPopupTitle": "Felicitats per arribar al\nNivell {level}", "activityPlannerTitle": "Planificador d'activitats", "topicLabel": "Tema", "topicPlaceholder": "Tria un tema...", @@ -4573,7 +4174,6 @@ "modePlaceholder": "Tria un mode...", "learningObjectiveLabel": "Objectiu d'aprenentatge", "learningObjectivePlaceholder": "Tria un objectiu d'aprenentatge...", - "mediaLabel": "Mitjans que els estudiants haurien de compartir", "languageOfInstructionsLabel": "Idioma de les instruccions de l'activitat", "targetLanguageLabel": "Idioma objectiu", "cefrLevelLabel": "Nivell CEFR", @@ -4588,20 +4188,15 @@ "instructions": "Instruccions", "numberOfLearners": "Nombre d'aprenents", "mustBeInteger": "Ha de ser un nombre enter, p. ex. 1, 2, 3, ...", - "noLemmasFound": "No hi ha vocabulari amb més de {xp} d'XP. Continua practicant!", "constructUsePvmDesc": "Producit en missatge de veu", - "lockedMorphFeature": "Esperant ser desbloquejat", "leaveSpaceDescription": "En sortir del curs, sortiràs de tots els xats dins d'ell. Altres usuaris veuran que has sortit del curs.", - "whatIsLemma": "Què és el lema?", "constructUseCorMmDesc": "Missatge correcte amb significat", "constructUseIncMmDesc": "Missatge incorrect amb significat", "constructUseIgnMmDesc": "Missatge ignorat amb significat", "clickForMeaningActivity": "Fes clic aquí per a un Repte de Significat", "meaning": "Significat", "chatWith": "Grup amb {displayname}", - "slightlyOffensive": "Lleugerament ofensiu", "clickOnEmailLink": "Fes clic a l'enllaç de l'email i després continua.\n\nRevisa la carpeta de correu no desitjat si no ha arribat l'email.", - "whoIsAllowedToJoinThisChat": "Qui pot unir-se a aquest xat", "dontForgetPassword": "No t'oblidis de la teva contrasenya!", "enableAutocorrectToolName": "Habilita la correcció automàtica del dispositiu", "enableAutocorrectDescription": "Si el teu dispositiu suporta la llengua que estàs aprenent, pots habilitar la correcció automàtica per arreglar errors comuns mentre escrius.", @@ -4629,48 +4224,26 @@ "autocorrectNotAvailable": "Lamentablement, la teva plataforma actualment no és compatible amb aquesta funció. Estigues atent a futurs desenvolupaments!", "pleaseUpdateApp": "Actualitza l'aplicació per continuar.", "chooseEmojiInstructionsBody": "Combina emojis amb les paraules que millor els representen. No et preocupis! No hi haurà penalitzacions per estar en desacord. 😅", - "pickAnEmojiFor": "Tria un emoji per a {lemma}", "analyticsVocabListBody": "Això és tot el teu vocabulari! A mesura que guanyes XP per cada paraula, passaran de ser una llavor a una flor plena. Fes clic en qualsevol paraula per veure més detalls.", "morphAnalyticsListBody": "Aquests són tots els conceptes gramaticals de l'idioma que estàs aprenent! Els desbloquejaràs a mesura que els trobis mentre xateges. Fes clic per veure els detalls.", "knockSpaceSuccess": "Has sol·licitat unir-te a aquest curs! Un administrador respondre la teva sol·licitud quan la rebi 😀", - "joinByCode": "Uneix-te amb un codi", "chooseWordAudioInstructionsBody": "Escolta el missatge complet. Després, combina els àudios amb les paraules.", "chooseMorphsInstructionsBody": "Fes clic a les peces del trencaclosques per a preguntes de gramàtica!", - "inviteAndLaunch": "Llançar i convidar", - "createOwnChat": "Crea el teu propi xat", "pleaseEnterInt": "Si us plau, introdueix un número", "home": "Inici", "join": "Uneix-te", "readingAssistanceOverviewBody": "Fes clic als botons de sota per a mini-jocs de coincidència d'emojis, àudios, significats de paraules i conceptes gramaticals. O fes clic en qualsevol paraula per a més detalls.", - "learnByTexting": "Aprèn enviant missatges", - "levelSummaryTrigger": "Veure resum", "levelSummaryPopupTitle": "Resum del nivell {level}", - "referFriends": "Recomana amics", - "referFriendDialogTitle": "Convida un amic a la teva conversa", - "referFriendDialogDesc": "Tens un amic que està emocionat d'aprendre un idioma nou amb tu? Copia i envia aquest enllaç d'invitació per unir-se i començar a xatejar amb tu avui mateix.", - "youUnlocked": "Has desbloquejat", "resetInstructionTooltipsTitle": "Restableix les pistes d'instruccions", "resetInstructionTooltipsDesc": "Fes clic per mostrar pistes d'instruccions com per a un usuari completament nou.", "selectForGrammar": "Selecciona una icona de gramàtica per a activitats i detalls.", - "newChatActivityTitle": "Afegir una activitat divertida?", - "newChatActivityDesc": "Fes que cada xat de grup sigui una aventura amb l'Planificador d'Activitats! Estableix temes i objectius captivadors per al grup, i dóna vida a les converses amb imatges impressionants. Fomenta discussions imaginatives i mantingues la diversió sense esforç!", - "exploreMore": "Explora més", "randomize": "Barreja", "clear": "Esborra", "makeYourOwnActivity": "Crea la teva pròpia activitat", "featuredActivities": "Destacades", - "goToChat": "Ves al xat", "save": "Desa", - "selectActivity": "Selecciona l'activitat", - "wordFocusListeningMultipleChoice": "Quin àudio coincideix amb la paraula?", "startChat": "Inicia un xat", "translationProblem": "Problema de traducció", - "perfectTranslation": "Traducció perfecta!", - "greatJobTranslation": "Gran feina amb aquesta traducció!", - "goodJobTranslation": " Bona feina en aquesta traducció.", - "makingProgress": "Estàs progressant!", - "keepPracticing": "Segueix practicant!", - "niceJob": "Bona feina!", "askToJoin": "Prega per unir-te", "emptyChatWarningTitle": "El xat està buit", "emptyChatWarningDesc": "No has convidat ningú al teu xat. Ves a la configuració del xat per convidar els teus contactes o el Bot. També pots fer-ho més tard.", @@ -4689,8 +4262,6 @@ "languageLevelC2Desc": "Puc entendre pràcticament tot el que escolto o llegeixo i expressar-me amb fluïdesa i precisió.", "newVocab": "Vocabulari nou", "newGrammar": "Nous conceptes gramaticals", - "congratulationsOnReaching": "Has arribat al nivell {level}!", - "seeDetails": "Veure detalls", "choosePracticeMode": "Fes clic en un dels botons de dalt per començar una activitat de pràctica", "ban": "Prohibir", "unban": "Desprohibir", @@ -4704,8 +4275,6 @@ "timesUsedWithAssistance": "Vegades utilitzat amb assistència", "shareInviteCode": "Comparteix el codi d'invitació: {code}", "leaderboard": "Classificació", - "welcomeUser": "Benvingut {user}", - "joinSpaceOnboardingDesc": "Tens un codi o enllaç d'invitació a un curs públic?", "skipForNow": "Ometre per ara", "permissions": "Permisos", "spaceChildPermission": "Qui pot afegir nous xats a aquest curs", @@ -4713,12 +4282,8 @@ "defaultOption": "Per defecte", "deleteChatDesc": "Estàs segur que vols eliminar aquest xat? S'eliminarà per a tots els participants i tots els missatges dins del xat ja no estaran disponibles per a pràctica o anàlisi d'aprenentatge.", "deleteSpaceDesc": "El curs i qualsevol xat seleccionat s'eliminaran per a tots els participants i tots els missatges dins del xat ja no estaran disponibles per a pràctica o anàlisi d'aprenentatge. Aquesta acció no es pot desfer.", - "chatWithActivities": "Xat amb activitats", "launch": "Llançar", - "launchActivityToChats": "Llançar activitat als xats", "searchChats": "Cerca converses", - "selectChats": "Selecciona converses", - "selectChatToStart": "¡Completat! Selecciona una conversa per començar", "maxFifty": "Màxim 50", "configureSpace": "Configura el curs", "pinMessages": "Fixa missatges", @@ -4732,9 +4297,7 @@ "announcements": "Anuncis", "activities": "Activitats", "access": "Accés", - "botSettings": "Configuració del bot", "activitySuggestionTimeoutMessage": "Estem treballant dur per generar més activitats per a tu, si us plau, torna a consultar en un minut", - "accessSettingsWarning": "Ups! Sembla que no tens permís per establir les regles d'accés d'aquesta sala. Hauries de revisar-les per assegurar-te que són el que necessites i parlar amb un administrador de la sala si necessites canviar-les", "howSpaceCanBeFound": "Com es pot trobar aquest curs", "private": "Privat", "cannotBeFoundInSearch": "No es pot trobar a la cerca", @@ -4747,16 +4310,6 @@ "canBeFoundViaKnock": "• sol·licitud d'entrada i aprovació de l'administrador", "youHaveLeveledUp": "Has pujat de nivell!", "sendActivities": "Envia activitats", - "getStarted": "Comença", - "getStartedBotChatDesc": "Xatejar amb IA és un lloc fantàstic per començar i les eines de lectura, escriptura, escolta i parla de Pangea ho fan fàcil!", - "getStartedCommunitiesDesc": "Aprendre amb una comunitat és on destaca Pangea Chat!\nPots unir-te a la teva classe, trobar un curs, o fins i tot crear-ne un de nou!", - "getStartedFriendsDesc": "Tens un amic que vol aprendre amb tu?", - "getStartedBotChatComplete": "Ben fet! Estàs xatejant amb el bot!", - "getStartedCommunitiesComplete": "Genial, t'has unit a un curs!", - "getStartedComplete": "Has completat aquesta secció!\nSegueix explorant les nostres funcions increïbles xatejant amb amics!", - "getStartedFriendsComplete": "Woohoo! Tens amics! 😙", - "getStartedBotChatButton": "Comença a xatejar!", - "getStartedFriendsButton": "Xateja amb un amic", "groupChat": "Xat de grup", "directMessage": "Missatge directe", "newDirectMessage": "Nou missatge directe", @@ -4772,7 +4325,6 @@ "mySavedActivities": "Les meves activitats desades", "noSavedActivities": "No hi ha activitats desades", "saveActivity": "Desa aquesta activitat", - "yourSavedActivities": "Activitats desades", "failedToPlayVideo": "Error en reproduir el vídeo", "done": "Fet", "inThisSpace": "En aquest curs", @@ -4811,37 +4363,27 @@ "maximumActivityParticipants": "Cada activitat pot tenir un màxim de {count} participant(s).", "pending": "Pendent", "inactive": "Inactiu", - "unjoinedActivityMessage": "Vols participar? Tria un rol obert!\nO simplement passa l'estona i mira l'espectacle!", - "fullActivityMessage": "Sent-te lliure de veure l'espectacle! Tot i que no hi ha cap rol obert per participar, pots veure el xat!", "confirmRole": "Confirma el rol", "openRoleLabel": "OBERT", "joinedTheActivity": "👋 {username} s'ha unit com a {role}", "finishedTheActivity": "🎯 {username} ha finalitzat aquesta activitat", - "endActivityTitle": "He acabat", - "endActivityDesc": "Has completat els objectius?\nAixò és la teva confirmació que deixes de xatejar. Però no et preocupis, la diversió continua a la conversa! Sent-te lliure de passar l'estona i gaudir de l'espectacle fins que tothom faci clic a 'He acabat'.", "archiveToAnalytics": "Afegeix a les meves activitats completades", "activitySummaryError": "Resum d'activitats no disponible", "requestSummaries": "Sol·licitar resums", - "loadingActivitySummary": "Carregant resum d'activitat...", "generatingNewActivities": "Ets el primer usuari d'aquesta parella de llengües! Si us plau, dona'ns un minut, estem preparant activitats exclusives per a tu.", - "requestAccessTitle": "Sol·licitar accés a la vista d'analítiques?", + "requestAccessTitle": "Sol·licitar accés a l'analítica?", "requestAccessDesc": "Vols sol·licitar accés per veure les analítiques dels participants?\n\nSi els participants hi estan d'acord, els administradors d'aquest curs podran veure:\n • vocabulari total\n • conceptes gramaticals totals\n • sessions d'activitat completes\n • els conceptes gramaticals específics utilitzats, correctament i incorrectament\n\nNo podran veure:\n • missatges en converses fora del curs\n • llistat de vocabulari", "requestAccess": "Sol·licitar accés ({count})", "analyticsInactiveTitle": "Les sol·licituds a usuaris inactius no es van poder enviar", "analyticsInactiveDesc": "Els usuaris inactius que no han iniciat sessió des de la introducció d'aquesta funció no veuran la teva sol·licitud.\n\nEl botó de Sol·licitar apareixerà quan tornin. Pots reenviar la sol·licitud més tard fent clic al botó de Sol·licitar sota el seu nom quan estigui disponible.", "accessRequestedTitle": "Sol·licitud d'accés a analítiques", - "accessRequestedDesc": "Els administradors de “{space}” sol·liciten veure les teves analítiques d'aprenentatge.\n\nSi hi estàs d'acord, els administradors d'aquest curs podran veure:\n • vocabulari total\n • conceptes gramaticals totals\n • sessions d'activitat completes\n • els conceptes gramaticals específics utilitzats, correctament i incorrectament\n\nNo podran veure:\n • missatges en converses fora del curs\n • llistat de vocabulari", - "allowAccess": "Permetre l'accés", - "denyAccess": "Denegar l'accés", + "accessRequestedDesc": "Sol·licitant admin(s): {admin} \n\nEls administradors de “{space}” estan sol·licitant veure la teva analítica d'aprenentatge.\n\nSi estàs d'acord, podran veure el teu:\n • vocabulari total\n • conceptes gramaticals totals\n • sessions d'activitat completes\n • els conceptes gramaticals específics utilitzats, correctament i incorrectament\n\nNo podran veure el teu:\n • missatges en xats fora del curs\n • llista de vocabulari", "adminRequestedAccess": "Els administradors han sol·licitat veure les teves analítiques.", "lastUpdated": "Actualitzat\n{time}", "activityFinishedMessage": "Tot finalitzat!", "endForAll": "Finalitzar per a tots", "newCourse": "Nou curs", - "newCourseSubtitle": "Quin pla de curs t'agradaria utilitzar?", - "failedToLoadCourses": "No s'ha pogut carregar els cursos", "numModules": "{num} mòduls", - "numActivityPlans": "{num} plans d'activitat", "coursePlan": "Pla de curs", "editCourseLater": "Pots editar el títol de la plantilla, les descripcions i la imatge del curs més tard.", "newCourseAccess": "Per defecte, els cursos són privats i requereixen l'aprovació de l'administrador per unir-se. Pots editar aquests paràmetres en qualsevol moment.", @@ -4855,17 +4397,11 @@ "accessDesc": "Pots fer que el teu curs sigui obert al món! O bé, fer que el teu curs sigui privat i segur.", "createGroupChatDesc": "Mentre que les sessions d'activitat comencen i acaben, els xats de grup romandran oberts per a la comunicació rutinària.", "deleteDesc": "Només els administradors poden eliminar un curs. Aquesta és una acció destructiva que elimina tots els usuaris i elimina tots els xats seleccionats dins del curs. Procedeix amb precaució.", - "failedToLoadCourseInfo": "No s'ha pogut carregar la informació del curs", "noCourseFound": "Oh, aquest curs necessita un pla!\n\nEls plans de curs són una seqüència de temes i activitats de conversa.", "additionalParticipants": "+ {num} altres", - "activityNotFoundForCourse": "No s'ha trobat aquesta activitat dins del curs", - "courseChats": "Xats del curs", - "myActivitySessions": "Les meves sessions d'activitat", "directMessages": "Missatges directes", "whatNow": "I ara què?", "chooseNextActivity": "Tria la teva propera activitat!", - "seeInstructions": "Veure instruccions", - "hideInstructions": "Amaga les instruccions", "letsGo": "Anem-hi", "chooseRole": "Tria un rol!", "chooseRoleToParticipate": "Tria un rol per participar!", @@ -4875,23 +4411,15 @@ "inviteFriends": "Convida amics", "waitNotDone": "Esperem, encara no he acabat!", "waitingForOthersToFinish": "Esperant que la resta acabi...", - "saveToCompletedActivities": "Desa a activitats completades", "generatingSummary": "Analitzant el xat i generant resultats", - "instructionsLanguage": "Idioma de les instruccions", "findCourse": "Troba un curs", - "activityCompletedDesc": "La teva activitat completada s'ha afegit a l'analítica on pots revisar i practicar l'idioma que has utilitzat.", "pingParticipantsNotification": "{user} busca usuaris per unir-se a la sessió d'activitat a {room}", "course": "Curs", "courses": "Cursos", "courseName": "Nom del curs", "createNewCourse": "Nou curs", - "publicCourses": "Cursos públics", "goToCourse": "Ves al curs: {course}", "activityComplete": "Aquesta activitat s'ha completat. El resum de l'activitat hauria d'estar disponible a sota.", - "haventChattedMuch": "Sembla que no has xatejat gaire, prova d'utilitzar algunes paraules de vocabulari més! Si creus que has completat l'objectiu, pots acabar l'activitat a sota.", - "haveChatted": "Sembla que has estat xatejant durant una estona! Si creus que has completat l'objectiu, acaba per finalitzar l'activitat i t'hi generarem un resum al xat!", - "userDoneAndWaiting": "{num1}/{num2} participants han acabat. Espera que tothom acabi, i t'hi generarem un resum al xat! \n\nSi vols tornar a unir-te a la conversa, fes clic al botó de continuar al xat.", - "othersDoneAndWaiting": "{num1}/{num2} han acabat. Has completat el teu objectiu?", "startNewSession": "Inicia una nova sessió", "joinOpenSession": "Uneix-te a una sessió oberta", "less": "menys", @@ -4901,7 +4429,6 @@ "openToJoin": "Obert per unir-se", "results": "Resultats", "activityDone": "Activitat realitzada!", - "moreLabel": "més", "promoCodeInfo": "Els codis promocionals es poden introduir a la propera pàgina", "editsComingSoon": "La capacitat d'editar ciutats i activitats arribarà aviat.", "editing": "Editant", @@ -4917,13 +4444,10 @@ "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", - "chooseLanguage": "Tria un idioma.", + "chooseLanguage": "Trieu un idioma de destinació.", "planTrip": "Planifica el teu viatge", "howAreYouTraveling": "Com viatges?", "unlockPrivateTrip": "Desbloqueja un viatge privat", @@ -4936,25 +4460,20 @@ "courseCode": "Quina és la contrasenya secreta?", "courseCodeHint": "Codi o enllaç del viatge", "unlockMyTrip": "Desbloqueja el meu viatge", - "anyLevel": "Qualsevol nivell", "signupOption": "Com vols registrar-te?", "withApple": "Amb Apple", "withGoogle": "Amb Google", "withEmail": "Amb correu electrònic", "createAccount": "Crea un compte", - "noCoursesFound": "No s'han trobat cursos", "loginWithEmail": "Iniciar sessió amb correu electrònic", "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", - "allCefrLevels": "Tots els nivells CEFR", "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.", "directMessageBotTitle": "Missatge directe del Pangea Bot", "feedbackTitle": "Comentaris sobre l'activitat", - "feedbackDesc": "Com s'hauria d'augmentar l'activitat? Si pots proporcionar alguns detalls, farem el canvi!", "feedbackHint": "Els teus comentaris", "feedbackButton": "Envia els comentaris", "directMessageBotDesc": "Parlar amb humans és més divertit però... la IA sempre està a punt!", @@ -5029,30 +4548,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5068,18 +4563,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5104,18 +4587,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5152,38 +4623,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5192,62 +4635,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5284,10 +4683,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5296,14 +4691,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5312,46 +4699,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5360,10 +4711,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5420,18 +4767,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5440,14 +4775,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5476,18 +4803,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5496,42 +4811,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5540,14 +4823,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5568,26 +4843,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5608,10 +4863,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5644,25 +4895,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5719,34 +4951,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5775,778 +4979,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7539,14 +5975,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7558,14 +5986,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7597,10 +6017,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7609,18 +6025,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7629,14 +6033,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7661,38 +6057,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7738,10 +6106,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7766,10 +6130,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7794,10 +6154,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7806,66 +6162,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7886,42 +6186,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7946,154 +6222,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8110,18 +6238,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8142,14 +6258,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8166,10 +6274,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8182,14 +6286,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8198,14 +6294,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8233,26 +6321,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8281,18 +6349,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8329,10 +6389,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9265,10 +7321,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9449,34 +7501,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9489,10 +7513,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9501,14 +7521,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9525,22 +7537,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9688,14 +7684,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9704,34 +7692,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9740,54 +7700,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9796,10 +7720,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9816,10 +7736,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9991,26 +7907,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10039,10 +7935,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10099,30 +7991,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10151,18 +8027,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10279,14 +8147,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10299,10 +8159,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10311,14 +8167,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10335,14 +8183,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10351,22 +8191,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10379,18 +8203,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10407,22 +8219,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10431,30 +8231,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10527,18 +8303,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10595,18 +8359,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10635,30 +8387,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10711,18 +8447,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10771,46 +8499,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10875,10 +8563,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11050,14 +8734,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11085,14 +8761,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11105,10 +8773,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11144,19 +8808,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11181,14 +8840,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11197,14 +8848,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11257,10 +8900,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11273,18 +8912,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11297,14 +8924,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11345,26 +8964,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11392,10 +8999,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11406,36 +9009,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11472,10 +9045,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11540,18 +9109,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11616,10 +9173,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11640,10 +9193,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11660,10 +9209,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11672,10 +9217,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11688,10 +9229,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11716,16 +9253,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Convida amics a l'activitat", - "inviteFriendsToActivityCourse": "Convida amics a l'activitat i al curs", "feedbackRespDesc": "Revisa demà per actualitzacions de l'activitat.", "activityDropdownDesc": "Quan hagis acabat amb aquesta activitat, fes clic a sota", - "activityAnalyticsListBody": "Aquests són les teves activitats completes! Després de completar-les, pots veure-les aquí.", "languageMismatchTitle": "Desajust de llengua", "languageMismatchDesc": "La teva llengua objectiu no coincideix amb la llengua d'aquesta activitat. Actualitzar la teva llengua objectiu?", "reportWordIssueTooltip": "Informar d'un problema amb la informació de la paraula", "tokenInfoFeedbackDialogTitle": "Comentari sobre la informació de la paraula", - "tokenInfoFeedbackDialogDesc": "L'IA comete errors. Si us plau, descriu qualsevol problema que hagis trobat amb la informació anterior.", "noPublicCoursesFound": "No s'han trobat cursos públics. Voldries crear-ne un?", "noCourseTemplatesFound": "No hem pogut trobar cap curs per a la teva llengua objectiu. Mentrestant, pots xatejar amb Pangea Bot i tornar més tard per més cursos.", "botActivityJoinFailMessage": "El Pangea Bot està tardant a respondre. Si us plau, intenta-ho de nou més tard, o convida un amic.", @@ -11733,14 +9266,6 @@ "leaveDesc": "Sortir d'aquest espai i de tots els xats dins d'ell", "selectAll": "Selecciona tot", "deselectAll": "Desselecciona tot", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11749,10 +9274,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11769,10 +9290,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11806,7 +9323,6 @@ "newMessageInPangeaChat": "📝 Nou missatge a Pangea Chat", "shareCourse": "Comparteix el curs", "addCourse": "Afegeix un curs", - "joinCourseWithCode": "Uneix-te al curs amb un codi", "joinPublicCourse": "Uneix-te al curs públic", "vocabLevelsDesc": "Aquí és on aniran les paraules de vocabulari un cop les hagis pujat de nivell!", "highlightVocabTooltip": "Destaca les paraules de vocabulari objectiu a continuació enviant-les o practicant-les al xat", @@ -11830,10 +9346,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11842,7 +9354,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "No s'han trobat DMs ni xats. Assegura't que la teva cerca estigui escrita correctament.", + "activityAnalyticsTooltipBody": "Aquestes són les teves activitats desades per a revisió i pràctica.", + "numSavedActivities": "Nombre d'activitats desades", + "saveActivityTitle": "Desa l'activitat", + "saveActivityDesc": "Bona feina! Desa aquesta activitat per a una revisió i pràctica posteriors", + "levelInfoTooltip": "Aquí pots veure tots els punts que has guanyat i com!", + "alreadyInCourseWithID": "Ja estàs en un curs amb aquest pla. Vols crear un curs amb el mateix pla, o anar al curs existent?", + "goToExistingCourse": "Vés al curs existent", + "emojiView": "Vista d'emoji", + "feedbackDialogDesc": "Jo també cometo errors! Hi ha alguna cosa que pugui fer per millorar?", + "contactHasBeenInvitedToTheCourse": "El contacte ha estat convidat al curs", + "activityStatsButtonTooltip": "Informació de l'activitat", + "allow": "Permetre", + "deny": "Denegar", + "enabledRenewal": "Habilitar la renovació de la subscripció", + "subscriptionEndsOn": "La subscripció acaba el", + "subscriptionRenewsOn": "La subscripció es renova el", + "waitForSubscriptionChanges": "Els canvis a la teva subscripció poden trigar un moment a reflectir-se a l'aplicació.", + "subscribeReadingAssistance": "Subscriu-te per desbloquejar eines de missatge", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhàric", + "arDisplayName": "Àrab", + "asDisplayName": "Assamès", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaidjanès", + "baDisplayName": "Bashkir", + "banDisplayName": "Balines", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorús", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Búlgar", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalí", + "bnBDDisplayName": "Bengalí (Bangladesh)", + "bnINDisplayName": "Bengalí (Índia)", + "brDisplayName": "Bretó", + "bsDisplayName": "Bòsni", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Català", + "cebDisplayName": "Cebuà", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdisc Central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Cors", + "crhDisplayName": "Turc Crimeu", + "crsDisplayName": "Francès Crioll Seselwa", + "csDisplayName": "Txec", + "cvDisplayName": "Txuvash", + "cyDisplayName": "Gal·lès", + "daDisplayName": "Danès", + "deDisplayName": "Alemany", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Anglès", + "enAUDisplayName": "Anglès (Austràlia)", + "enGBDisplayName": "Anglès (Regne Unit)", + "enINDisplayName": "Anglès (Índia)", + "enUSDisplayName": "Anglès (EE. UU.)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espanyol", + "esESDisplayName": "Espanyol (Espanya)", + "esMXDisplayName": "Espanyol (Mèxic)", + "euDisplayName": "Basc", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finès", + "filDisplayName": "Filipí", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroès", + "frDisplayName": "Francès", + "frCADisplayName": "Francès (Canadà)", + "frFRDisplayName": "Francès (França)", + "fyDisplayName": "Frisó occidental", + "gaDisplayName": "Irlandès", + "gaaDisplayName": "Ga", + "gdDisplayName": "Galeg escocès", + "glDisplayName": "Gallec", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Konkani de Goa", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaià", + "heDisplayName": "Hebreu", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croat", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Crioll haità", + "huDisplayName": "Hongarès", + "hyDisplayName": "Armeni", + "idDisplayName": "Indonesi", + "igDisplayName": "Igbo", + "iloDisplayName": "Ilocà", + "isDisplayName": "Islandès", + "itDisplayName": "Italià", + "jaDisplayName": "Japonès", + "jvDisplayName": "Javanès", + "kaDisplayName": "Georgià", + "kkDisplayName": "Kazakh", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Coreà", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (República Democràtica del Congo)", + "kuDisplayName": "Kurd", + "kyDisplayName": "Kirguis", + "laDisplayName": "Llatí", + "lbDisplayName": "Luxemburgès", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburguès", + "lijDisplayName": "Ligur", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituà", + "ltgDisplayName": "Latgal", + "luoDisplayName": "Luo (Kènia i Tanzània)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letó", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaix", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedoni", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malai", + "msArabDisplayName": "Malai (Àrab)", + "msMYDisplayName": "Malai (Malàisia)", + "mtDisplayName": "Maltès", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmà", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Noruec (Bokmål)", + "neDisplayName": "Nepalí", + "newDisplayName": "Newari", + "nlDisplayName": "Neerlandès", + "nlBEDisplayName": "Flamenc", + "noDisplayName": "Noruec", + "nrDisplayName": "Ndebele del Sud", + "nsoDisplayName": "Sotho del Nord", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occità", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polonès", + "psDisplayName": "Pashto", + "ptDisplayName": "Portuguès", + "ptBRDisplayName": "Portuguès (Brasil)", + "ptPTDisplayName": "Portuguès (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romanès", + "roMDDisplayName": "Moldau", + "romDisplayName": "Romaní", + "ruDisplayName": "Rus", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sànscrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilià", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Eslovac", + "slDisplayName": "Eslovè", + "smDisplayName": "Samoà", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanès", + "srDisplayName": "Sèrbia", + "srMEDisplayName": "Montenegrí", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho del Sud", + "suDisplayName": "Sundanès", + "svDisplayName": "Suec", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesià", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadjik", + "thDisplayName": "Tailandès", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turcmè", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turc", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uigur", + "ukDisplayName": "Ucraïnès", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Índia)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yidish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucatec", + "yueDisplayName": "Cantonès", + "yueCNDisplayName": "Cantonès (Xina)", + "yueHKDisplayName": "Cantonès (Hong Kong)", + "zhDisplayName": "Xinès", + "zhCNDisplayName": "Xinès (Simplificat)", + "zhTWDisplayName": "Xinès (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11909,6 +10607,7 @@ "notStartedActivitiesTitle": "Sessions obertes ({num})", "inProgressActivitiesTitle": "Succeint ara ({num})", "completedActivitiesTitle": "Fet ({num})", + "pickDifferentActivity": "Trieu una activitat diferent", "inOngoingActivity": "Tens una activitat en curs!", "@notStartedActivitiesTitle": { "type": "String", @@ -11934,10 +10633,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "El teu idioma de destinació no coincideix amb aquest missatge. Vols actualitzar el teu idioma de destinació?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Això és tothom en aquest curs. Feu clic a l'avatar de qualsevol usuari i \"comenceu la conversa\" per enviar un DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Aquesta paraula de vocabulari s'eliminarà permanentment de les teves analítiques", + "woman": "Dona", + "man": "Home", + "otherGender": "Altre", + "unselectedGender": "Selecciona una opció de gènere", + "gender": "Gènere", + "chatParticipantTooltip": "Això és tothom en aquest xat. Fes clic a l'avatar de qualsevol usuari i \"inicia una conversa\" per enviar un DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Les eines d'aprenentatge estan desactivades per a missatges que no estan en el teu idioma objectiu.", + "vocabEmoji": "Emoji de vocabulari", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Sol·licitar regeneració", + "optionalRegenerateReason": "(Opcional) Motiu", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Has establert l'emoji per {lemma}! Utilitzarem aquesta emoji per representar la paraula en les activitats pràctiques d'ara endavant.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Esperant que la signatura es completi", + "ssoDialogDesc": "Hem obert una nova pestanya perquè puguis iniciar sessió de manera segura.", + "ssoDialogHelpText": "🤔 Si no has vist la nova pestanya, si us plau, comprova el teu bloquejador de finestres emergents.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desactivar eines d'idioma", + "disableLanguageToolsDesc": "Voleu desactivar l'assistència automàtica d'idioma?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permís denegat. Habilita els permisos de gravació per gravar missatges d'àudio.", + "genericWebRecordingError": "Alguna cosa ha anat malament. Recomanem utilitzar el navegador Chrome quan gravis missatges.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Per a la millor experiència utilitzant aquesta aplicació, si us plau, amplia la mida de la teva pantalla.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Activitats per Desbloquejar el Proper Tema", "activitiesToUnlockTopicDesc": "Estableix el nombre d'activitats per desbloquejar el proper tema del curs", "@activitiesToUnlockTopicTitle": { @@ -11947,5 +10764,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Pràctica correcta de definicions de vocabulari", + "constructUseIncLMDesc": "Pràctica incorrecta de definicions de vocabulari", + "constructUseCorLADesc": "Pràctica correcta d'àudio de vocabulari", + "constructUseIncLADesc": "Pràctica incorrecta d'àudio de vocabulari", + "constructUseBonus": "Boni durant la pràctica de vocabulari", + "practiceVocab": "Practica vocabulari", + "selectMeaning": "Selecciona el significat", + "selectAudio": "Selecciona l'àudio corresponent", + "congratulations": "Felicitats!", + "anotherRound": "Una altra ronda", + "noActivityRequest": "No hi ha cap sol·licitud d'activitat actual.", + "quit": "Sortir", + "congratulationsYouveCompletedPractice": "Felicitats! Has completat la sessió de pràctica.", + "mustHave10Words": "Has de tenir almenys 10 paraules de vocabulari per practicar-les. Prova a parlar amb un amic o amb el Pangea Bot per descobrir-ne més!", + "botSettings": "Configuració del Bot", + "activitySettingsOverrideWarning": "Idioma i nivell d'idioma determinats pel pla d'activitat", + "voice": "Veu", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index dc8c37687..ca1035047 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -1,6 +1,6 @@ { "@@locale": "cs", - "@@last_modified": "2026-01-06 13:01:46.866113", + "@@last_modified": "2026-01-07 14:26:03.848423", "about": "O aplikaci", "@about": { "type": "String", @@ -2907,26 +2907,14 @@ "commandHint_logoutall": "Odhlásit všechna aktivní zařízení", "displayNavigationRail": "Zobrazit navigační lištu na mobilu", "customReaction": "Vlastní reakce", - "accountInformation": "Informace o účtu", - "addGroupDescription": "Přidat popis chatu", - "addNewFriend": "Přidat nového přítele", - "alreadyHaveAnAccount": "Už máte účet?", - "createNewGroup": "Vytvořit nový chat", - "editChatPermissions": "Upravit oprávnění chatu", "writeAMessageLangCodes": "Napište v {l1} nebo {l2}...", "requests": "Žádosti", - "allCorrect": "Tak bych to řekl! Super!", - "newWayAllGood": "Tak bych to neřekl, ale vypadá to dobře!", - "othersAreBetter": "Hm, může být lepší způsob, jak to říct.", "holdForInfo": "Klikněte a podržte pro informace o slově.", "greenFeedback": "Tohle bych dal!", "yellowFeedback": "Hm, můžete to zkusit a uvidíte, jestli to funguje! Pro použití tohoto slova ho jednoduše znovu klikněte.", "redFeedback": "Nemyslím si, že je to správně...", "itInstructionsTitle": "Mohu vám pomoci s překladem!", "itInstructionsBody": "Můžete kliknout a podržet volby pro informace o slově.", - "oneday": "Posledních 24 hodin", - "oneweek": "Posledních 7 dní", - "onemonth": "Poslední měsíc", "gaTooltip": "L2 použití s gramatickou asistencí", "taTooltip": "L2 použití s překladatelskou asistencí", "unTooltip": "Jiné", @@ -2936,58 +2924,27 @@ "interactiveTranslatorAllowed": "Volba studenta", "interactiveTranslatorRequired": "Požadováno", "notYetSet": "Ještě nastavitelný", - "myLearning": "Moje analýzy", "waTooltip": "Použití L2 bez pomoci", - "changeDateRange": "Změnit rozsah data", - "classDescription": "Popis", - "addStudents": "Pozvat uživatele odkazem nebo kódem", - "copyClassLink": "Zkopírovat odkaz na pozvánku", - "copyClassCode": "Zkopírovat kód pozvánky", - "inviteStudentByUserName": "Pozvat uživatele podle uživatelského jména", "languageSettings": "Nastavení jazyka", "interactiveTranslator": "Pomoc s překladem", - "shareVideo": "Sdílet video", - "shareVideoDesc": "Zapněte toto, aby mohli studenti sdílet videa v chatech.", - "shareFiles": "Sdílet soubory", - "selectLanguageLevel": "Vyberte úroveň jazyka", "noIdenticalLanguages": "Prosím, vyberte různé základní a cílové jazyky", - "iWantALanguagePartnerFrom": "Je od:", - "worldWide": "Celosvětově", - "noResults": "Žádné výsledky! Zkuste rozšířit hledání.", "searchBy": "Hledat podle země a jazyků", - "iWantAConversationPartner": "Chci konverzačního partnera, který", - "iWantALanguagePartnerWhoSpeaks": "Hovoří:", - "iWantALanguagePartnerWhoIsLearning": "Se učí:", "joinWithClassCode": "Připojit se ke kurzu", - "joinWithClassCodeHint": "Zadejte pozvánkový kód", - "languageLevelPreA1": "Skutečný začátečník (Pre A1)", - "languageLevelA1": "Začátečník (A1)", - "languageLevelA2": "Základní (A2)", - "languageLevelB1": "Středně pokročilý (B1)", - "languageLevelB2": "Vyšší středně pokročilý (B2)", - "languageLevelC1": "Pokročilý (C1)", - "languageLevelC2": "Mistrovství (C2)", + "languageLevelPreA1": "Nováček Nízká (Pre A1)", + "languageLevelA1": "Nováček Mid (A1)", + "languageLevelA2": "Začátečník Vysoký (A2)", + "languageLevelB1": "Středně pokročilý Střední (B1)", + "languageLevelB2": "Pokročilý Nízký (B2)", + "languageLevelC1": "Pokročilý Střední (C1)", + "languageLevelC2": "Vysoce pokročilý (C2)", "changeTheNameOfTheClass": "Změnit název", "changeTheNameOfTheChat": "Změnit název chatu", - "askPangeaBot": "Požádejte Pangea Bota o kontextovou definici.", "sorryNoResults": "Omlouvám se, žádné výsledky.", "ignoreInThisText": "Ignorovat", - "helpMeTranslate": "Ano!", - "needsItShortMessage": "Mimo cíl", "needsItMessage": "Počkejte, to není {targetLanguage}! Potřebujete pomoc s překladem?", - "needsIgcMessage": "Tato zpráva obsahuje gramatickou chybu.", - "tokenTranslationTitle": "Slovo je ve vašem základním jazyce.", - "spanTranslationDesc": "Níže jsou uvedeny možné překlady.", - "spanTranslationTitle": "Některá slova jsou ve vašem základním jazyce.", - "l1SpanAndGrammarTitle": "Mimo cílový jazyk", - "l1SpanAndGrammarDesc": "Může být ve vašem základním jazyce nebo to může být gramatická chyba.", - "otherTitle": "Máte chybu.", - "otherDesc": "Níže jsou uvedeny možné opravy.", "countryInformation": "Moje země", - "myLanguages": "Mé základní a cílové jazyky", "targetLanguage": "Cílový jazyk", "sourceLanguage": "Základní jazyk", - "languagesISpeak": "Jazyky, kterými mluvím", "updateLanguage": "Mé jazyky", "whatLanguageYouWantToLearn": "Jaký jazyk se chcete naučit?", "whatIsYourBaseLanguage": "Jaký je váš základní jazyk?", @@ -3002,13 +2959,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klikněte zde pro aktualizaci nastavení pomoci s překladem a gramatikou", "errorDisableITClassDesc": "Pomoc s překladem je vypnuta pro kurz, ve kterém je tento chat.", "errorDisableIGCClassDesc": "Pomoc s gramatikou je vypnuta pro kurz, ve kterém je tento chat.", - "itIsDisabled": "Interaktivní překlad je vypnutý", - "igcIsDisabled": "Interaktivní kontrola gramatiky je vypnuta", - "goToLearningSettings": "Přejít na nastavení učení", "error405Title": "Jazyky nejsou nastaveny", "error405Desc": "Prosím, nastavte své jazyky v Hlavním menu > Nastavení učení.", - "loginOrSignup": "Přihlásit se pomocí", - "iAgreeToThe": "Souhlasím s ", "termsAndConditions": "Obchodními podmínkami", "andCertifyIAmAtLeast13YearsOfAge": "a potvrzuji, že mám alespoň 16 let.", "error502504Title": "Wow, je online hodně studentů!", @@ -3016,40 +2968,21 @@ "error404Title": "Chyba překladu!", "error404Desc": "Bot Pangea si není jistý, jak to přeložit...", "errorPleaseRefresh": "Řešíme to! Prosím, načtěte stránku znovu a zkuste to znovu.", - "toggleIT": "Interaktivní překlad", - "toggleIGC": "Interaktivní kontrola gramatiky", - "toggleToolSettingsDescription": "Zde můžete přepínat nastavení svého individuálního jazykového nástroje.", "connectedToStaging": "Připojeno k testovací verzi", "learningSettings": "Nastavení učení", - "sendVoiceNotes": "Odesílat hlasové poznámky", - "sendVoiceNotesDesc": "Zapněte toto, aby mohli studenti posílat hlasové poznámky v chatech.", - "chatTopic": "Téma chatu", - "chatTopicDesc": "Nastavte téma chatu", - "inviteStudentByUserNameDesc": "Pokud má váš student již účet, můžete ho vyhledat.", "participants": "Účastníci", - "almostPerfect": "To vypadá správně! Tady je, co bych řekl.", - "prettyGood": "Docela dobře! Tady je, co bych řekl.", - "letMeThink": "Hmm, pojďme zjistit, jak jsi to udělal!", "clickMessageTitle": "Potřebujete pomoc?", "clickMessageBody": "Klikněte na zprávu pro jazykové nástroje, jako je překlad, přehrávání a další!", - "understandingMessagesTitle": "Definice a překlady!", - "understandingMessagesBody": "Klikněte na podtržená slova pro definice. Překládejte pomocí možností zpráv (v pravém horním rohu).", "allDone": "Hotovo!", "vocab": "Slovní zásoba", "low": "Máme důkazy, že uživatel nerozumí těmto slovům.", "medium": "Tato slova byla použita. Není jasné, zda jsou slova plně pochopena nebo ne.", "high": "Máme důkazy, že uživatel tato slova rozumí.", - "unknownProficiency": "Tato slova nebyla použita v Pangea Chat.", - "changeView": "Přepnout zobrazení.", - "clearAll": "Vymazat všechna slova?", - "generateVocabulary": "Vytvořit slovní zásobu z názvu a popisu", - "generatePrompts": "Vytvořit podněty", "subscribe": "Odebírat", "getAccess": "Přihlaste se nyní!", "subscriptionDesc": "Zprávy jsou zdarma! Přihlaste se k odemčení interaktivního překladu, kontroly gramatiky a analytiky učení.", "subscriptionManagement": "Správa předplatného", "currentSubscription": "Aktuální předplatné", - "changeSubscription": "Změnit předplatné", "cancelSubscription": "Zrušit předplatné", "selectYourPlan": "Vyberte svůj plán", "subsciptionPlatformTooltip": "Pro správu svého plánu předplatného se prosím přihlaste na svém původním zařízení", @@ -3058,9 +2991,6 @@ "paymentHistory": "Historie plateb", "emptyChatDownloadWarning": "Nelze stáhnout prázdný chat", "update": "Aktualizovat", - "updateDesc": "Nyní můžete aktualizovat tuto aplikaci z {localVersion} na {storeVersion}", - "maybeLater": "Možná později", - "mainMenu": "Hlavní nabídka", "toggleImmersionMode": "Režim ponoření", "toggleImmersionModeDesc": "Když je aktivní, jsou všechny zprávy zobrazovány ve vašem cílovém jazyce. Toto nastavení je nejvíce užitečné při jazykových výměnách.", "itToggleDescription": "Tento nástroj pro učení jazyků identifikuje slova ve vašem základním jazyce a pomáhá vám je přeložit do cílového jazyka. Ačkoliv vzácně, AI může udělat chyby v překladu.", @@ -3075,212 +3005,13 @@ "definitionsToolDescription": "Když je povoleno, slova podtržená modře lze kliknutím zobrazit jejich definice. Klikněte na zprávy pro přístup k definicím.", "translationsToolDescrption": "Když je povoleno, klikněte na zprávu a ikonu překladu, abyste viděli zprávu ve svém základním jazyce.", "welcomeBack": "Vítejte zpět! Pokud jste byli součástí pilotního projektu 2023-2024, kontaktujte nás ohledně vaší speciální pilotní předplatného. Pokud jste učitel, který (nebo vaše instituce) zakoupil licence pro vaši třídu, kontaktujte nás ohledně vašeho učitelského předplatného.", - "kickAllStudents": "Vyhodit všechny studenty", - "kickAllStudentsConfirmation": "Jste si jistí, že chcete vyhodit všechny studenty?", - "inviteAllStudents": "Pozvat všechny studenty", - "inviteAllStudentsConfirmation": "Jste si jistí, že chcete pozvat všechny studenty?", - "inviteUsersFromPangea": "Přidat správce", - "redeemPromoCode": "Uplatnit promo kód", - "enterPromoCode": "Zadejte promo kód", "downloadTxtFile": "Stáhnout textový soubor", "downloadCSVFile": "Stáhnout CSV soubor", "promotionalSubscriptionDesc": "Aktuálně máte doživotní promo předplatné. Kontaktujte support@pangea.chat pro pomoc s změnou předplatného.", "originalSubscriptionPlatform": "Předplatné zakoupeno přes {purchasePlatform}", "oneWeekTrial": "Jedno-týdenní zkušební verze", "downloadXLSXFile": "Stáhnout Excel soubor", - "abDisplayName": "Abchazština", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albánština", - "amDisplayName": "Amharština", - "arDisplayName": "Arabština", - "anDisplayName": "Aragonština", - "hyDisplayName": "Arménština", - "asDisplayName": "Assámština", - "avDisplayName": "Avarština", - "aeDisplayName": "Avestánština", - "ayDisplayName": "Aymarština", - "azDisplayName": "Ázerbájdžánština", - "bmDisplayName": "Bambara", - "baDisplayName": "Baškirština", - "euDisplayName": "Baskičtina", - "beDisplayName": "Běloruština", - "bnDisplayName": "Bengálština", - "bhDisplayName": "Bihárština", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosenský", - "brDisplayName": "Breton", - "bgDisplayName": "Bulharština", - "myDisplayName": "Barmánština", - "caDisplayName": "Katalánština, Valencijština", - "chDisplayName": "Chamorro", - "ceDisplayName": "Čečenština", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Čínština", - "cvDisplayName": "Čuvaština", - "kwDisplayName": "Kornština", - "coDisplayName": "Korsičtina", - "crDisplayName": "Kree", - "hrDisplayName": "Chorvatština", - "csDisplayName": "Čeština", - "daDisplayName": "Dánština", - "dvDisplayName": "Divehi; Dhivehi; Maledivština;", - "nlDisplayName": "Nizozemština", - "enDisplayName": "Angličtina", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonština", - "eeDisplayName": "Ewe", - "foDisplayName": "Faerský", - "fjDisplayName": "Fijian", - "fiDisplayName": "Finština", - "frDisplayName": "Francouzština", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicijština", - "kaDisplayName": "Gruzie", - "deDisplayName": "Němčina", - "elDisplayName": "Řečtina, moderní", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gudžarátština", - "htDisplayName": "Haitská kreolština", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrejština (moderní)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindština", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Maďarština", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonéština", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irština", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandština", - "itDisplayName": "Italština", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonština", - "jvDisplayName": "Jávština", - "klDisplayName": "Kalaallisut, grónština", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kašmírština", - "kkDisplayName": "Kazaština", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizština, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korejština", - "kuDisplayName": "Kurdština", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latinčina", - "lbDisplayName": "Lucemburština, Lëtzebuergesch", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburština, Limburger, Limbourg", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosština", - "ltDisplayName": "Lotyština", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Lotyšština", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonština", - "mgDisplayName": "Madagaskarsky", - "msDisplayName": "Malajština", - "mlDisplayName": "Malajálam", - "mtDisplayName": "Maltsky", - "miDisplayName": "Maorijština", - "mrDisplayName": "Maráthština (Maráthí)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolština", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norština Bokmål", - "ndDisplayName": "Severní Ndebele", - "neDisplayName": "Nepálština", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norština Nynorsk", - "noDisplayName": "Norština", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Jižní Ndebele", - "ocDisplayName": "Okcitánština", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Staroslověnština, Církevní slovanština, Církevní slovanština, Starobulharština, Staroslověnština", - "omDisplayName": "Oromština", - "orDisplayName": "Orija", - "osDisplayName": "Osetština, Osetština", - "paDisplayName": "Panjábština, Pandžáb", - "piDisplayName": "Páli", - "faDisplayName": "Perština", - "plDisplayName": "Polština", - "psDisplayName": "Paštština, Pushto", - "ptDisplayName": "Portugalština", - "quDisplayName": "Kečuánština", - "rmDisplayName": "Řečtina", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumunština, moldavština", - "ruDisplayName": "Ruština", - "saDisplayName": "Sanskrt (Sánskrtā)", - "scDisplayName": "Sardinský", - "sdDisplayName": "Sindština", - "seDisplayName": "Severní sami", - "smDisplayName": "Samoanština", - "sgDisplayName": "Sango", - "srDisplayName": "Srbština", - "gdDisplayName": "Skotská gaelština, gaelština", - "snDisplayName": "Šona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovenský", - "slDisplayName": "Slovinský", - "soDisplayName": "Somálský", - "stDisplayName": "Jihosotština", - "esDisplayName": "Španělský", - "suDisplayName": "Sundajský", - "swDisplayName": "Swahilština", - "ssDisplayName": "Swati", - "svDisplayName": "Švédský", - "taDisplayName": "Tamilština", - "teDisplayName": "Telugský", - "tgDisplayName": "Tádžický", - "thDisplayName": "Thajský", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetština, Tibet", - "tkDisplayName": "Turkmenský", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga Islands)", - "trDisplayName": "Turečtina", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatarština", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitština", - "ugDisplayName": "Ujgur, Uyghur", - "ukDisplayName": "Ukrajinština", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbečtina", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamština", - "voDisplayName": "Volapük", - "waDisplayName": "Valonština", - "cyDisplayName": "Welština", - "woDisplayName": "Wolof", - "fyDisplayName": "Západní fríština", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Jorubština", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Neznámý", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havajský", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Více", - "cebDisplayName": "Cebuánský", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrejština", - "jwDisplayName": "Jávský", - "moDisplayName": "Moldavský", - "shDisplayName": "Srbochorvatský", "wwCountryDisplayName": "Celosvětově", "afCountryDisplayName": "Afghánistán", "axCountryDisplayName": "Alandy", @@ -3528,41 +3259,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambie", "zwCountryDisplayName": "Zimbabwe", - "pay": "Platba", - "allPrivateChats": "Přímé chaty", - "unknownPrivateChat": "Neznámý soukromý chat", + "pay": "Pokladna", "invitedToSpace": "{user} vás pozval připojit se ke kurzu: {space}! Chcete přijmout?", - "declinedInvitation": "Odmítnutá pozvánka", - "acceptedInvitation": "Přijata pozvánka", "youreInvited": "📩 Jste pozváni!", "invitedToChat": "{user} vás pozval připojit se ke chatu: {name}! Chcete přijmout?", "monthlySubscription": "Měsíční", "yearlySubscription": "Roční", "defaultSubscription": "Pangea Chat Předplatné", "freeTrial": "Zkušební verze zdarma", - "grammarAnalytics": "Chybová analytika", "total": "Celkem: ", "noDataFound": "Nebyly nalezeny žádné údaje", - "promoSubscriptionExpirationDesc": "Vaše aktuální předplatné je propagační a vyprší dne {expiration}. Kontaktujte support@pangea.chat pro pomoc s změnou předplatného.", - "emptyChatNameWarning": "Zadejte název tohoto chatu", "blurMeansTranslateTitle": "Proč je zpráva rozmazaná?", "blurMeansTranslateBody": "Když je zapnut režim ponoření, zprávy odeslané v základním jazyce budou rozmazané, zatímco Pangea Bot je překládá do vašeho cílového jazyka. Režim ponoření lze přepínat v nastavení jednotlivých kurzů a v nastavení kurzu.", - "someErrorTitle": "Hm, něco není v pořádku", - "someErrorBody": "Může jít o chybu nebo něco ve vašem základním jazyce.", "bestCorrectionFeedback": "To je správně!", "distractorFeedback": "To není úplně správné.", "bestAnswerFeedback": "To je správně!", "definitionDefaultPrompt": "Co znamená toto slovo?", "practiceDefaultPrompt": "Jaká je nejlepší odpověď?", "correctionDefaultPrompt": "Jaká je nejlepší náhrada?", - "itStartDefaultPrompt": "Chcete pomoc s překladem?", - "lockedChatWarning": "🔒 Tento chat byl uzamčen", - "lockChat": "Zamknout chat", - "suggestToChat": "Navrhnout tento chat", - "suggestToChatDesc": "Navržené chaty se objeví v seznamu chatů", "acceptSelection": "Přijmout opravu", - "acceptSelectionAnyway": "Použít to tak či tak", - "makingActivity": "Vytváření aktivity", "why": "Proč?", "definition": "Definice", "exampleSentence": "Příklad věty", @@ -3570,128 +3285,55 @@ "reportMessageTitle": "{reportingUserId} nahlásil zprávu od {reportedUserId} v chatu {roomName}", "reportMessageBody": "Zpráva: {reportedMessage}\nDůvod: {reason}", "noTeachersFound": "Nebyli nalezeni žádní učitelé k nahlášení", - "viewArchive": "Zobrazit archiv", "trialExpiration": "Váš bezplatný zkušební čas vyprší dne {expiration}", "freeTrialDesc": "Noví uživatelé získávají týdenní bezplatnou zkušební verzi Pangea Chat", "activateTrial": "Aktivovat bezplatnou 7denní zkušební verzi", "successfullySubscribed": "Úspěšně jste se přihlásili!", "clickToManageSubscription": "Klikněte zde pro správu předplatného.", - "errorGettingAudio": "Chyba při získávání audia. Obnovte stránku a zkuste to znovu.", "signUp": "Zaregistrovat se", "pleaseChooseAtLeastChars": "Vyberte alespoň {min} znaků.", "noEmailWarning": "Zadejte platnou e-mailovou adresu. Jinak nebudete moci resetovat heslo. Pokud nechcete, klepněte znovu na tlačítko pro pokračování.", "pleaseEnterValidEmail": "Zadejte platnou e-mailovou adresu.", "pleaseChooseAUsername": "Vyberte uživatelské jméno", - "chooseAUsername": "Vyberte uživatelské jméno", "define": "Definovat", "listen": "Poslouchat", - "addConversationBot": "Povolit konverzačního bota", - "addConversationBotDesc": "Přidat bota do tohoto chatu", - "convoBotSettingsDescription": "Upravit téma konverzace a obtížnost", - "enterAConversationTopic": "Zadejte téma konverzace", - "conversationTopic": "Téma konverzace", - "enableModeration": "Povolit moderování", - "enableModerationDesc": "Povolit automatické moderování pro kontrolu zpráv před jejich odesláním", - "conversationLanguageLevel": "Jaká je úroveň jazyka této konverzace?", - "showDefinition": "Zobrazit definici", - "subscriptionPopupTitle": "Tato věta může obsahovat gramatickou chybu...", - "subscriptionPopupDesc": "Přihlaste se dnes a odemkněte překlady a opravy gramatiky!", - "seeOptions": "Zobrazit možnosti", - "continuedWithoutSubscription": "Pokračovat bez předplatného", "trialPeriodExpired": "Vaše zkušební období vypršelo", - "selectToDefine": "Klikněte na jakékoli slovo, abyste viděli jeho definici!", "translations": "překlady", "messageAudio": "zvuk zprávy", "definitions": "definice", "subscribedToUnlockTools": "Přihlaste se k odemknutí interaktivního překladu a kontroly gramatiky, přehrávání zvuku, personalizovaných cvičení a analytiky učení!", "translationTooltip": "Překlad", - "audioTooltip": "Přehrát zvuk", "speechToTextTooltip": "Přepis", - "certifyAge": "Potvrzuji, že mi je více než {age} let", "kickBotWarning": "Vyhození Pangea Bota odstraní konverzačního bota z tohoto chatu.", - "joinToView": "Připojte se do této místnosti, abyste viděli podrobnosti", "refresh": "Obnovit", - "autoPlayTitle": "Automatické přehrávání zpráv", - "autoPlayDesc": "Když je povoleno, text-to-speech audio zpráv se bude automaticky přehrávat při výběru.", "messageAnalytics": "Analýza zpráv", "words": "Slova", "score": "Skóre", "accuracy": "Přesnost", "points": "Body", "noPaymentInfo": "Není třeba žádné platební informace!", - "conversationBotModeSelectDescription": "Aktivita chatu", - "conversationBotModeSelectOption_discussion": "Diskuse", - "conversationBotModeSelectOption_custom": "Vlastní", - "conversationBotModeSelectOption_conversation": "Konverzace", - "conversationBotModeSelectOption_textAdventure": "Textové dobrodružství", - "conversationBotModeSelectOption_storyGame": "Příběhová hra", - "conversationBotDiscussionZone_title": "Nastavení diskuse", - "conversationBotDiscussionZone_discussionTopicLabel": "Téma diskuse", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Nastavte téma diskuse", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Klíčová slova diskuse", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Nastavte klíčová slova diskuse", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Seznam klíčových slov oddělených čárkou, které řídí diskusi", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Odesílat výzvu k diskusi podle plánu", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hodiny mezi výzvami k diskusi", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reagovat na reakci ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakce na odeslání výzvy k diskusi", - "conversationBotCustomZone_title": "Vlastní nastavení", - "conversationBotCustomZone_customSystemPromptLabel": "Systémová výzva", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Nastavit vlastní systémovou výzvu", - "conversationBotCustomZone_customSystemPromptEmptyError": "Chybí vlastní systémová výzva", - "botConfig": "Nastavení bota a aktivity", - "botConfigNoPermissionTitle": "Žádná oprávnění", - "botConfigNoPermissionMessage": "Kontaktujte správce místnosti pro změnu konfigurace bota", - "addConversationBotDialogTitleInvite": "Potvrdit pozvání konverzačního bota", - "addConversationBotButtonInvite": "Pozvat", - "addConversationBotDialogInviteConfirmation": "Pozvat", - "addConversationBotButtonTitleRemove": "Potvrdit odstranění konverzačního bota", - "addConversationBotButtonRemove": "Odstranit", - "addConversationBotDialogRemoveConfirmation": "Odstranit", - "conversationBotConfigConfirmChange": "Potvrdit", - "conversationBotStatus": "Pozvat bota", - "conversationBotTextAdventureZone_title": "Textová dobrodružství", - "conversationBotTextAdventureZone_instructionLabel": "Instrukce pro Mistra hry", - "conversationBotTextAdventureZone_instructionPlaceholder": "Nastavte instrukce pro mistra hry", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Chybí instrukce pro mistra hry", - "studentAnalyticsNotAvailable": "Data studentů momentálně nejsou k dispozici", - "roomDataMissing": "Některá data mohou chybět v místnostech, ke kterým nemáte přístup", "updatePhoneOS": "Možná budete muset aktualizovat verzi operačního systému vašeho zařízení", "wordsPerMinute": "Slov za minutu", "autoIGCToolName": "Automaticky spustit pomoc s psaním Pangea", "autoIGCToolDescription": "Automaticky spustit gramatickou kontrolu a překlad pomocí Pangea Chat před odesláním mé zprávy", - "runGrammarCorrection": "Zkontrolovat zprávu", - "grammarCorrectionFailed": "Problémy k řešení", - "grammarCorrectionComplete": "Vypadá to dobře!", "tooltipInstructionsTitle": "Nejste si jistí, co to dělá?", "tooltipInstructionsMobileBody": "Podržte položky pro zobrazení nápověd.", "tooltipInstructionsBrowserBody": "Na položky najeďte myší pro zobrazení nápověd.", "chatCapacity": "Kapacita chatu", "roomFull": "Tato místnost je již plná.", - "topicNotSet": "Téma nebylo nastaveno.", - "chatCapacityNotSet": "Tento chat nemá stanovené omezení kapacity.", "chatCapacityHasBeenChanged": "Kapacita chatu byla změněna", "chatCapacitySetTooLow": "Kapacita chatu musí být alespoň {count}.", "chatCapacityExplanation": "Kapacita chatu omezuje počet členů povolených v chatu.", - "chatExceedsCapacity": "Tento chat překračuje svou kapacitu.", "tooManyRequest": "Příliš mnoho požadavků, zkuste to prosím později.", "enterNumber": "Zadejte celé číslo.", "buildTranslation": "Vytvořte svůj překlad z výše uvedených možností", - "nonexistentSelection": "Výběr již neexistuje.", - "changeAnalyticsLanguage": "Změnit jazyk analytiky", "practice": "Procvičování", "noLanguagesSet": "Není nastaven žádný jazyk", - "noActivitiesFound": "Na to je zatím dost! Vraťte se později pro více.", - "hintTitle": "Nápověda:", "speechToTextBody": "Pro hlasové zprávy můžete vidět přepis i skóre slov za minutu mluvčího.", "versionNotFound": "Verze nenalezena", "fetchingVersion": "Načítání verze...", "versionFetchError": "Chyba při načítání verze", "versionText": "Verze: {version}+{buildNumber}", - "languageButtonLabel": "Jazyk: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatické přehrávání překladu", - "interactiveTranslatorAutoPlayDesc": "Spustí interaktivní překladač bez dotazu.", - "changeAnalyticsView": "Změnit pohled na analytiku", "l1TranslationBody": "Zprávy v základním jazyce nebudou překládány.", "deleteSubscriptionWarningTitle": "Máte aktivní předplatné", "deleteSubscriptionWarningBody": "Smazání vašeho účtu automaticky nezruší vaše předplatné.", @@ -3699,9 +3341,7 @@ "error520Title": "Prosím zkuste to znovu.", "error520Desc": "Omlouváme se, nerozuměli jsme vaší zprávě...", "wordsUsed": "Použité slova", - "errorTypes": "Typy chyb", "level": "Úroveň", - "canceledSend": "Zrušené odeslání", "morphsUsed": "Použité morfy", "translationChoicesBody": "Klikněte a podržte možnost pro nápovědu.", "grammar": "Gramatika", @@ -3711,7 +3351,6 @@ "reportContentIssueTitle": "Nahlásit problém s obsahem", "feedback": "Volná zpětná vazba", "reportContentIssueDescription": "Ó, AI může usnadnit personalizované vzdělávací zážitky, ale... také halucinovat. Poskytněte nám jakoukoli zpětnou vazbu a pokusíme se to znovu.", - "changeContent": "Ó, AI může usnadnit personalizované vzdělávací zážitky, ale... také halucinovat. Co by to mělo být?", "clickTheWordAgainToDeselect": "Klikněte na vybrané slovo, abyste jej zrušili.", "l2SupportNa": "Není k dispozici", "l2SupportAlpha": "Alpha", @@ -3945,7 +3584,6 @@ "grammarCopySPC": "Specifičnost", "grammarCopyPARTTYPE": "Dílčí typ", "grammarCopyINTREL": "Otázkově-vztažný", - "grammarCopyNUMFORMpsor": "Číslo držitele", "grammarCopyUNKNOWN": "Neznámé", "grammarCopyNUMBERPSOR": "Číslo držitele", "grammarCopyPOSS": "Přivlastňovací", @@ -3991,28 +3629,14 @@ "grammarCopyVOICEdir": "Přímý", "grammarCopyVOICEinv": "Zvrácený", "grammarCopyVOICErcp": "Vzájemný", - "enterPrompt": "Zadejte systémový pokyn", - "selectBotLanguage": "Vyberte jazyk bota", - "chooseVoice": "Vyberte hlas", - "enterLanguageLevel": "Zadejte úroveň jazyka", - "enterDiscussionTopic": "Zadejte téma diskuse", - "selectBotChatMode": "Vyberte režim chatu", - "messageNotInTargetLang": "Zpráva není v cílovém jazyce", "other": "Jiné", "levelShort": "ÚROVEŇ {level}", - "botModeValidation": "Vyberte režim chatu", "clickBestOption": "Vyberte nejlepší možnosti pro překlad vaší zprávy!", "completeActivitiesToUnlock": "Dokončete alespoň jednu aktivitu pro odemčení překladu!", - "botSettingsSubtitle": "Pozvat bota k moderování aktivity chatu", - "invitePeople": "Pozvat uživatele", "noCapacityLimit": "Žádný limit kapacity", "downloadGroupText": "Stáhnout text skupiny", "notificationsOn": "Oznámení zapnuta", "notificationsOff": "Oznámení vypnuta", - "chatCanBeFoundViaSearch": "Chat lze najít přes vyhledávání", - "requireCodeToJoin": "Vyžadovat kód pro připojení", - "canFindInSearch": "Lze najít ve vyhledávání", - "addChatToSpace": "Přidat chat", "createChatAndInviteUsers": "Vytvořit chat a pozvat uživatele", "updatedNewSpaceDescription": "Kurzy vám umožní zefektivnit vaše chaty a budovat soukromé nebo veřejné komunity.", "joinWithCode": "Připojit se s kódem", @@ -4048,39 +3672,19 @@ "constructUseCollected": "Sebráno v chatu", "constructUseNanDesc": "Nepoužitelné", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Přihlásit se pomocí uživatelského jména a hesla", - "registrationEmailMessage": "Ověřte svůj e-mail pomocí odkazu, který vám byl zaslán. V některých případech může dorazit až za 5 minut. Také zkontrolujte složku spam.", "enableTTSToolName": "Povolený převod textu na řeč", "enableTTSToolDescription": "Umožněte aplikaci generovat výstup z textu na řeč pro části textu ve vašem cílovém jazyce.", - "couldNotFindTTS": "Nenašli jsme engine pro převod textu na řeč pro váš aktuální cílový jazyk.", - "ttsInstructionsHyperlink": "Klikněte zde pro zobrazení pokynů ke stažení nového hlasu na vašem zařízení.", - "createAnAccount": "Vytvořit účet", - "signIn": "Přihlásit se", - "signUpWithEmail": "Zaregistrovat se e-mailem", - "signUpWithGoogle": "Zaregistrovat se přes Google", - "signUpWithApple": "Zaregistrovat se přes Apple", "yourUsername": "Vaše uživatelské jméno", "yourEmail": "Váš e-mail", - "pleaseEnterAnEmail": "Zadejte e-mailovou adresu", - "signInWithGoogle": "Přihlásit se přes Google", - "signInWithApple": "Přihlásit se přes Apple", - "chooseYourAvatar": "Vyberte si svůj avatar", "iWantToLearn": "Chci se naučit", - "letsStart": "Začněme", - "pleaseAgreeToTOS": "Souhlasím s podmínkami použití", "pleaseEnterEmail": "Zadejte platnou e-mailovou adresu.", - "pleaseSelectALanguage": "Vyberte jazyk", "myBaseLanguage": "Moje základní jazyk", - "clickWordsInstructions": "🧻 Klikněte na jakékoli slovo pro podrobnosti. 🤐", - "chooseBestDefinition": "Co znamená toto slovo?", "meaningSectionHeader": "Význam:", "formSectionHeader": "Používané tvary v chatech:", - "noEmojiSelectedTooltip": "Není vybrána žádná emoji", "writingExercisesTooltip": "Psaní", "listeningExercisesTooltip": "Poslech", "readingExercisesTooltip": "Čtení", "meaningNotFound": "Význam nelze nalézt.", - "formsNotFound": "Tvary nelze nalézt.", "chooseBaseForm": "Vyberte základní tvar", "notTheCodeError": "Omlouvám se, to není kód!", "totalXP": "Celkové XP", @@ -4120,9 +3724,6 @@ "pickAnEmoji": "Jaká je vaše oblíbená emoji pro '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Spojte významy se slovy ve zprávě!", "doubleClickToEdit": "Dvakrát klikněte pro úpravu.", - "removeFeature": "Odstranit {feature}", - "chooseCorrectLabel": "Vyberte správnou značku.", - "levelPopupTitle": "Gratulujeme k dosažení\núrovně {level}", "activityPlannerTitle": "Plánovač aktivit", "topicLabel": "Téma", "topicPlaceholder": "Vyberte téma...", @@ -4130,7 +3731,6 @@ "modePlaceholder": "Vyberte režim...", "learningObjectiveLabel": "Cíl učení", "learningObjectivePlaceholder": "Vyberte cíl učení...", - "mediaLabel": "Média studenti by měli sdílet", "languageOfInstructionsLabel": "Jazyk pokynů k aktivitě", "targetLanguageLabel": "Cílový jazyk", "cefrLevelLabel": "Úroveň CEFR", @@ -4145,20 +3745,15 @@ "instructions": "Pokyny", "numberOfLearners": "Počet studentů", "mustBeInteger": "Musí být celé číslo např. 1, 2, 3, ...", - "noLemmasFound": "Není žádná slovní zásoba s více než {xp} XP. Pokračujte v procvičování!", "constructUsePvmDesc": "Vytvořeno ve formě hlasové zprávy", - "lockedMorphFeature": "Čeká na odemčení", "leaveSpaceDescription": "Opuštěním kurzu opustíte všechny chaty v něm. Ostatní uživatelé uvidí, že jste kurz opustili.", - "whatIsLemma": "Co je lemma?", "constructUseCorMmDesc": "Správný význam zprávy", "constructUseIncMmDesc": "Nesprávný význam zprávy", "constructUseIgnMmDesc": "Ignorovaný význam zprávy", "clickForMeaningActivity": "Klikněte zde pro výzvu k významu", "meaning": "Význam", "chatWith": "Skupina s {displayname}", - "slightlyOffensive": "Mírně urážlivé", "clickOnEmailLink": "Klikněte na odkaz v e-mailu a pokračujte.\n\nZkontrolujte složku spam, pokud e-mail nedorazil.", - "whoIsAllowedToJoinThisChat": "Kdo má povolení připojit se k tomuto chatu", "dontForgetPassword": "Nezapomeňte své heslo!", "enableAutocorrectToolName": "Povolit automatickou korekci zařízení", "enableAutocorrectDescription": "Pokud vaše zařízení podporuje jazyk, který se učíte, můžete povolit automatickou korekci zařízení, která opraví běžné chyby při psaní.", @@ -4186,48 +3781,26 @@ "autocorrectNotAvailable": "Bohužel vaše platforma momentálně nepodporuje tuto funkci. Sledujte další vývoj!", "pleaseUpdateApp": "Prosím aktualizujte aplikaci, abyste mohli pokračovat.", "chooseEmojiInstructionsBody": "Porovnejte emotikony s slovy, která nejlépe reprezentují. Nebojte se! Není žádná penalizace za nesouhlas. 😅", - "pickAnEmojiFor": "Vyberte emotikon pro {lemma}", "analyticsVocabListBody": "To je veškerá vaše slovní zásoba! Jak získáváte XP za každé slovo, přechází od semínka k plnému rozkvětu. Klikněte na jakékoli slovo pro více detailů.", "morphAnalyticsListBody": "To jsou všechny gramatické koncepty v jazyce, který se učíte! Odemykají se, jak je potkáte při chatování. Klikněte pro podrobnosti.", "knockSpaceSuccess": "Požádali jste o připojení k tomuto kurzu! Administrátor odpoví na vaši žádost, jakmile ji obdrží 😄", - "joinByCode": "Připojit se pomocí kódu", "chooseWordAudioInstructionsBody": "Poslouchejte úplnou zprávu. Poté přiřaďte audia ke slovům.", "chooseMorphsInstructionsBody": "Klikněte na puzzle kousky pro gramatické otázky!", - "inviteAndLaunch": "Pozvat a spustit", - "createOwnChat": "Vytvořit vlastní chat", "pleaseEnterInt": "Zadejte číslo", "home": "Domů", "join": "Připojit se", "readingAssistanceOverviewBody": "Klikněte na tlačítka níže pro mini-hry na přiřazování emoji, audia, významů slov a gramatických konceptů. Nebo klikněte na jakékoli slovo pro podrobnosti.", - "learnByTexting": "Učit se psaním zpráv", - "levelSummaryTrigger": "Zobrazit souhrn", "levelSummaryPopupTitle": "Souhrn úrovně {level}", - "referFriends": "Doporučit přátele", - "referFriendDialogTitle": "Pozvat přítele do vašeho rozhovoru", - "referFriendDialogDesc": "Máte přítele, který je nadšený z učení se novému jazyku s vámi? Pak zkopírujte a pošlete tento odkaz na pozvání, aby se připojil a začal s vámi chatovat ještě dnes.", - "youUnlocked": "Odemkli jste", "resetInstructionTooltipsTitle": "Obnovit instrukční nápovědy", "resetInstructionTooltipsDesc": "Klikněte pro zobrazení instrukčních nápověd, jako pro úplného nováčka.", "selectForGrammar": "Vyberte ikonu gramatiky pro aktivity a podrobnosti.", - "newChatActivityTitle": "Přidat zábavnou aktivitu?", - "newChatActivityDesc": "Udělejte z každého skupinového chatu dobrodružství s Plánovačem aktivit! Nastavte poutavá témata a cíle pro skupinu a oživte konverzace ohromujícími obrázky. Vyvolejte kreativní diskuse a udržujte zábavu plynule!", - "exploreMore": "Prozkoumat více", "randomize": "Náhodně", "clear": "Vymazat", "makeYourOwnActivity": "Vytvořte si vlastní aktivitu", "featuredActivities": "Zvýrazněné", - "goToChat": "Přejít do chatu", "save": "Uložit", - "selectActivity": "Vybrat aktivitu", - "wordFocusListeningMultipleChoice": "Které audio odpovídá slovu?", "startChat": "Začít chat", "translationProblem": "Problém s překladem", - "perfectTranslation": "Perfektní překlad!", - "greatJobTranslation": "Skvělá práce s tímto překladem!", - "goodJobTranslation": "Dobrá práce na tomto překladu.", - "makingProgress": "Děláte pokrok!", - "keepPracticing": "Pokračujte v cvičení!", - "niceJob": "Dobrá práce!", "askToJoin": "Požádat o připojení", "emptyChatWarningTitle": "Chat je prázdný", "emptyChatWarningDesc": "Ještě jste nikoho nezval do svého chatu. Přejděte do nastavení chatu, abyste pozvali své kontakty nebo bota. Můžete to udělat i později.", @@ -4246,8 +3819,6 @@ "languageLevelC2Desc": "Rozumím téměř všemu, co slyším nebo čtu, a vyjadřuji se plynule a přesně.", "newVocab": "Nová slovní zásoba", "newGrammar": "Nové gramatické koncepty", - "congratulationsOnReaching": "Dosáhli jste úrovně {level}!", - "seeDetails": "Zobrazit podrobnosti", "choosePracticeMode": "Klikněte na jedno z tlačítek výše a začněte cvičební aktivitu", "ban": "Blokovat", "unban": "Odemknout", @@ -4261,8 +3832,6 @@ "timesUsedWithAssistance": "Počet použití s pomocí", "shareInviteCode": "Sdílet kód pozvánky: {code}", "leaderboard": "Žebříček", - "welcomeUser": "Vítejte {user}", - "joinSpaceOnboardingDesc": "Máte kód nebo odkaz na veřejný kurz?", "skipForNow": "Přeskočit zatím", "permissions": "Oprávnění", "spaceChildPermission": "Kdo může přidat nové chaty do tohoto kurzu", @@ -4270,12 +3839,8 @@ "defaultOption": "Výchozí", "deleteChatDesc": "Jste si jistí, že chcete smazat tento chat? Bude smazán pro všechny účastníky a všechny zprávy v chatu již nebudou dostupné pro praxi nebo analytiku učení.", "deleteSpaceDesc": "Kurz a jakékoli vybrané chaty budou smazány pro všechny účastníky a všechny zprávy v chatu již nebudou dostupné pro praxi nebo analytiku učení. Tato akce nelze vrátit zpět.", - "chatWithActivities": "Chat s aktivitami", "launch": "Spustit", - "launchActivityToChats": "Spustit aktivitu do chatů", "searchChats": "Hledat chaty", - "selectChats": "Vybrat chaty", - "selectChatToStart": "Hotovo! Vyberte chat pro začátek", "maxFifty": "Max 50", "configureSpace": "Nastavit kurz", "pinMessages": " Připnout zprávy", @@ -4289,9 +3854,7 @@ "announcements": "Oznámení", "activities": "Aktivity", "access": "Přístup", - "botSettings": "Nastavení bota", "activitySuggestionTimeoutMessage": "Pracujeme tvrdě na generování více aktivit pro vás, prosím, vraťte se za minutu", - "accessSettingsWarning": "Ups! Vypadá to, že nemáte oprávnění nastavovat pravidla přístupu do této místnosti. Měli byste zkontrolovat tyto nastavení, aby odpovídaly vašim potřebám, a pokud je třeba, kontaktujte správce místnosti", "howSpaceCanBeFound": "Jak lze tento kurz najít", "private": "Soukromé", "cannotBeFoundInSearch": "Nelze najít ve vyhledávání", @@ -4304,16 +3867,6 @@ "canBeFoundViaKnock": "• žádost o připojení a schválení správce", "youHaveLeveledUp": "Postoupili jste na vyšší úroveň!", "sendActivities": "Odeslat aktivity", - "getStarted": "Začít", - "getStartedBotChatDesc": "Chatování s AI je skvělým místem pro začátek a nástroje Pangea pro čtení, psaní, poslech a mluvení to usnadňují!", - "getStartedCommunitiesDesc": "Učení s komunitou je místem, kde září Pangea Chat!\nMůžete se připojit ke své třídě, najít kurz nebo dokonce vytvořit svůj vlastní!", - "getStartedFriendsDesc": "Máte kamaráda, který chce s vámi učit se?", - "getStartedBotChatComplete": "Dobře uděláno! Chatujete s botem!", - "getStartedCommunitiesComplete": "Skvěle, připojili jste se ke kurzu!", - "getStartedComplete": "Dokončili jste tuto sekci!\nPokračujte v objevování našich úžasných funkcí chatováním s přáteli!", - "getStartedFriendsComplete": "Hurá! Máte přátele! 😉", - "getStartedBotChatButton": "Začněte chatovat!", - "getStartedFriendsButton": "Chatovat s přítelem", "groupChat": "Skupinový chat", "directMessage": "Přímá zpráva", "newDirectMessage": "Nová přímá zpráva", @@ -4329,7 +3882,6 @@ "mySavedActivities": "Mé uložené aktivity", "noSavedActivities": "Žádné uložené aktivity", "saveActivity": "Uložit tuto aktivitu", - "yourSavedActivities": "Uložené aktivity", "failedToPlayVideo": "Nepodařilo se přehrát video", "done": "Hotovo", "inThisSpace": "V tomto kurzu", @@ -4368,37 +3920,27 @@ "maximumActivityParticipants": "Každá aktivita může mít maximálně {count} účastníka(ů).", "pending": "Čeká se", "inactive": "Neaktivní", - "unjoinedActivityMessage": "Chcete se zúčastnit? Vyberte otevřenou roli!\nNebo si jen tak povídejte a sledujte show!", - "fullActivityMessage": "Neváhejte a sledujte show! Ačkoliv nejsou žádné otevřené role k účasti, můžete sledovat chat!", "confirmRole": "Potvrdit roli", "openRoleLabel": "Otevřeno", "joinedTheActivity": "👋 {username} se připojil jako {role}", "finishedTheActivity": "🎯 {username} ukončil tuto aktivitu", - "endActivityTitle": "Jsem hotov", - "endActivityDesc": "Dokončili jste cíle?\nToto je vaše potvrzení, že se stahujete od psaní zpráv. Ale nebojte se, zábava pokračuje v chatu! Klidně si povídejte a užívejte si show, dokud všichni nekliknou na 'Hotovo'.", "archiveToAnalytics": "Přidat do mých dokončených aktivit", "activitySummaryError": "Souhrny aktivit nejsou k dispozici", "requestSummaries": "Požádat o souhrny", - "loadingActivitySummary": "Načítám souhrn aktivity...", "generatingNewActivities": "Jste první uživatel tohoto jazykového páru! Počkejte chvíli, připravujeme aktivity právě pro vás.", - "requestAccessTitle": "Požádat o přístup k analytice?", + "requestAccessTitle": "Požádat o přístup k analýzám?", "requestAccessDesc": "Chcete požádat o přístup k zobrazení analytiky účastníků?\n\nPokud se účastníci shodnou, správci tohoto kurzu budou moci vidět:\n • celkovou slovní zásobu\n • celkové gramatické koncepty\n • počet dokončených aktivit\n • konkrétní gramatické koncepty použité správně a nesprávně\n\nNebudou moci vidět:\n • zprávy v chatech mimo kurz\n • seznam slovní zásoby", "requestAccess": "Požádat o přístup ({count})", "analyticsInactiveTitle": "Žádosti o přístup od neaktivních uživatelů nemohly být odeslány", "analyticsInactiveDesc": "Neaktivní uživatelé, kteří se od té doby, co byla tato funkce představena, nepřihlásili, neuvidí vaši žádost.\n\nTlačítko Žádost se zobrazí, jakmile se vrátí. Můžete požadavek znovu odeslat později kliknutím na tlačítko Žádost pod jejich jménem, když bude dostupné.", "accessRequestedTitle": "Žádost o přístup k analytice", - "accessRequestedDesc": "Správci „{space}“ žádají o zobrazení vašich analytických dat.\n\nPokud souhlasíte, správci tohoto kurzu budou moci vidět:\n • celkovou slovní zásobu\n • celkové gramatické koncepty\n • počet dokončených aktivit\n • konkrétní gramatické koncepty použité správně a nesprávně\n\nNebudou moci vidět:\n • zprávy v chatech mimo kurz\n • seznam slovní zásoby", - "allowAccess": "Povolit přístup", - "denyAccess": "Odmítnout přístup", + "accessRequestedDesc": "Žádající admin(i): {admin} \n\nAdmini z „{space}“ žádají o zobrazení vašich analytických údajů o učení.\n\nPokud souhlasíte, budou moci zobrazit vaše:\n • celkovou slovní zásobu\n • celkové gramatické koncepty\n • celkový počet dokončených aktivit\n • konkrétní gramatické koncepty použité, správně a nesprávně\n\nNebudou moci zobrazit vaše:\n • zprávy v chatech mimo kurz\n • seznam slovní zásoby", "adminRequestedAccess": "Správci požádali o zobrazení vašich analytik.", "lastUpdated": "Poslední aktualizace\n{time}", "activityFinishedMessage": "Vše hotovo!", "endForAll": "Ukončit pro všechny", "newCourse": "Nový kurz", - "newCourseSubtitle": "Který plán kurzu byste chtěli použít?", - "failedToLoadCourses": "Nepodařilo se načíst kurzy", "numModules": "{num} modulů", - "numActivityPlans": "{num} plánů aktivit", "coursePlan": "Plán kurzu", "editCourseLater": "Později můžete upravit název šablony, popisy a obrázek kurzu.", "newCourseAccess": "Ve výchozím nastavení jsou kurzy soukromé a vyžadují schválení správce pro připojení. Tyto nastavení můžete upravit kdykoli.", @@ -4412,17 +3954,11 @@ "accessDesc": "Můžete udělat svůj kurz otevřený pro celý svět! Nebo ho udělat soukromým a zabezpečeným.", "createGroupChatDesc": "Zatímco se začínají a končí aktivity, skupinové chaty zůstanou otevřené pro rutinní komunikaci.", "deleteDesc": "Pouze správci mohou smazat kurz. Jedná se o destruktivní akci, která odstraní všechny uživatele a smaže všechny vybrané chaty v kurzu. Postupujte opatrně.", - "failedToLoadCourseInfo": "Nepodařilo se načíst informace o kurzu", "noCourseFound": "Ó, tento kurz potřebuje plán!\n\nPlány kurzů jsou posloupností témat a aktivit konverzace.", "additionalParticipants": "+ {num} dalších", - "activityNotFoundForCourse": "Tato aktivita nebyla nalezena v kurzu", - "courseChats": "Kurzy chatů", - "myActivitySessions": "Mé aktivity", "directMessages": "Přímé zprávy", "whatNow": "Co teď?", "chooseNextActivity": "Vyberte si další aktivitu!", - "seeInstructions": "Zobrazit pokyny", - "hideInstructions": "Skrýt pokyny", "letsGo": "Jdeme na to", "chooseRole": "Vyberte roli!", "chooseRoleToParticipate": "Vyberte roli pro účast!", @@ -4432,23 +3968,15 @@ "inviteFriends": "Pozvat přátele", "waitNotDone": "Počkejte, nejsem hotov!", "waitingForOthersToFinish": "Čekám na ostatní, až dokončí...", - "saveToCompletedActivities": "Uložit do dokončených aktivit", "generatingSummary": "Analyzuji chat a generuji výsledky", - "instructionsLanguage": "Jazyk instrukcí", "findCourse": "Najít kurz", - "activityCompletedDesc": "Vaše dokončená aktivita byla přidána do analytiky, kde si můžete prohlédnout a procvičit použitý jazyk.", "pingParticipantsNotification": "{user} hledá uživatele, kteří se připojí ke schůzce v {room}", "course": "Kurz", "courses": "Kurzy", "courseName": "Název kurzu", "createNewCourse": "Nový kurz", - "publicCourses": "Veřejné kurzy", "goToCourse": "Přejít na kurz: {course}", "activityComplete": "Tato aktivita byla dokončena. Shrnutí aktivity by mělo být k dispozici níže.", - "haventChattedMuch": "Vypadá to, že jste moc nemluvili, zkuste použít více slovní zásoby! Pokud máte pocit, že jste splnili svůj cíl, můžete aktivitu ukončit níže.", - "haveChatted": "Vypadá to, že jste si povídali nějakou dobu! Pokud máte pocit, že jste splnili svůj cíl, ukončete aktivitu a my vám v chatu vygenerujeme shrnutí!", - "userDoneAndWaiting": "{num1}/{num2} účastníků dokončilo. Počkejte, až všichni dokončí, a my vám v chatu vygenerujeme shrnutí! \n\nPokud se chcete znovu připojit ke konverzaci, klikněte na tlačítko pokračovat v chatu.", - "othersDoneAndWaiting": "{num1}/{num2} je hotovo. Dokončili jste svůj cíl?", "startNewSession": "Začít novou relaci", "joinOpenSession": "Připojit se k otevřené relaci", "less": "méně", @@ -4458,7 +3986,6 @@ "openToJoin": "Otevřeno pro připojení", "results": "Výsledky", "activityDone": "Aktivita hotová!", - "moreLabel": "více", "promoCodeInfo": "Promo kódy lze zadat na další stránce", "editsComingSoon": "Funkce úpravy měst a aktivit brzy přijde.", "editing": "Úprava", @@ -4474,13 +4001,10 @@ "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", - "chooseLanguage": "Vyberte jazyk.", + "chooseLanguage": "Vyberte cílový jazyk.", "planTrip": "Naplánujte si výlet", "howAreYouTraveling": "Jak cestujete?", "unlockPrivateTrip": "Odemknout soukromý výlet", @@ -4493,25 +4017,20 @@ "courseCode": "Jaké je tajné heslo?", "courseCodeHint": "Trip kód nebo odkaz", "unlockMyTrip": "Odemknout mou cestu", - "anyLevel": "Jakákoli úroveň", "signupOption": "Jak se chcete zaregistrovat?", "withApple": "S Apple", "withGoogle": "S Google", "withEmail": "S e-mailem", "createAccount": "Vytvořit účet", - "noCoursesFound": "Nebyly nalezeny žádné kurzy", "loginWithEmail": "Přihlásit se e-mailem", "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", - "allCefrLevels": "Všechny úrovně CEFR", "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.", "directMessageBotTitle": "Přímá zpráva Pangea Bot", "feedbackTitle": "Zpětná vazba k aktivitě", - "feedbackDesc": "Jak by měla být aktivita vylepšena? Pokud můžete poskytnout nějaké podrobnosti, provedeme změnu!", "feedbackHint": "Vaše zpětná vazba", "feedbackButton": "Odeslat zpětnou vazbu", "directMessageBotDesc": "Mluvit s lidmi je zábavnější, ale... AI je vždy připravena!", @@ -5612,30 +5131,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5651,18 +5146,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5687,18 +5170,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5735,38 +5206,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5775,62 +5218,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5867,10 +5266,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5879,14 +5274,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5895,46 +5282,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5943,10 +5294,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6003,18 +5350,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6023,14 +5358,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6059,18 +5386,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6079,42 +5394,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6123,14 +5406,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6151,26 +5426,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6191,10 +5446,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6227,25 +5478,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6302,34 +5534,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6358,778 +5562,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8122,14 +6558,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8141,14 +6569,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8180,10 +6600,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8192,18 +6608,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8212,14 +6616,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8244,38 +6640,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8321,10 +6689,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8349,10 +6713,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8377,10 +6737,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8389,66 +6745,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8469,42 +6769,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8529,154 +6805,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8693,18 +6821,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8725,14 +6841,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8749,10 +6857,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8765,14 +6869,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8781,14 +6877,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8816,26 +6904,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8864,18 +6932,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8912,10 +6972,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9848,10 +7904,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10032,34 +8084,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10072,10 +8096,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10084,14 +8104,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10108,22 +8120,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10271,14 +8267,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10287,34 +8275,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10323,54 +8283,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10379,10 +8303,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10399,10 +8319,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10574,26 +8490,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10622,10 +8518,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10682,30 +8574,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10734,18 +8610,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10862,14 +8730,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10882,10 +8742,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10894,14 +8750,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10918,14 +8766,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10934,22 +8774,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10962,18 +8786,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10990,22 +8802,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11014,30 +8814,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11110,18 +8886,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11178,18 +8942,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11218,30 +8970,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11294,18 +9030,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11354,46 +9082,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11458,10 +9146,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11633,14 +9317,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11668,14 +9344,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11688,10 +9356,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11727,19 +9391,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11764,14 +9423,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11780,14 +9431,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11840,10 +9483,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11856,18 +9495,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11880,14 +9507,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11928,26 +9547,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11975,10 +9582,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11989,36 +9592,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12055,10 +9628,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12123,18 +9692,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12199,10 +9756,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12223,10 +9776,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12243,10 +9792,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12255,10 +9800,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12271,10 +9812,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12299,16 +9836,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Pozvat přátele na aktivitu", - "inviteFriendsToActivityCourse": "Pozvat přátele na aktivitu a kurz", "feedbackRespDesc": "Zítra se vraťte pro aktualizace aktivit.", "activityDropdownDesc": "Když dokončíte tuto aktivitu, klikněte níže", - "activityAnalyticsListBody": "Toto jsou vaše dokončené aktivity! Po dokončení aktivit je zde můžete zobrazit.", "languageMismatchTitle": "Neshoda jazyka", "languageMismatchDesc": "Váš cílový jazyk se neshoduje s jazykem této aktivity. Chcete aktualizovat svůj cílový jazyk?", "reportWordIssueTooltip": "Nahlásit problém s informacemi o slově", "tokenInfoFeedbackDialogTitle": "Zpětná vazba k informacím o slově", - "tokenInfoFeedbackDialogDesc": "AI dělá chyby. Prosím, popište jakékoli problémy, které jste s výše uvedenými informacemi našli.", "noPublicCoursesFound": "Nebyly nalezeny žádné veřejné kurzy. Chcete vytvořit nový?", "noCourseTemplatesFound": "Nebyly nalezeny žádné kurzy pro váš cílový jazyk. Mezitím si můžete povídat s Pangea Botem a později se vrátit pro více kurzů.", "botActivityJoinFailMessage": "Pangea Bot se chvíli zpracovává. Zkuste to prosím později nebo pozvěte přítele.", @@ -12316,14 +9849,6 @@ "leaveDesc": "Opustit tento prostor a všechny chaty v něm", "selectAll": "Vybrat vše", "deselectAll": "Zrušit výběr všeho", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12332,10 +9857,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12352,10 +9873,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12389,7 +9906,6 @@ "newMessageInPangeaChat": "📝 Nová zpráva v chatu Pangea", "shareCourse": "Sdílet kurz", "addCourse": "Přidat kurz", - "joinCourseWithCode": "Připojit se ke kurzu s kódem", "joinPublicCourse": "Připojit se k veřejnému kurzu", "vocabLevelsDesc": "Zde se objeví slovíčka, jakmile je vylepšíte na vyšší úroveň!", "highlightVocabTooltip": "Zvýrazněte cílová slovíčka níže tím, že je pošlete nebo s nimi cvičíte v chatu", @@ -12413,10 +9929,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12425,7 +9937,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Žádné přímé zprávy nebo chaty nebyly nalezeny. Ujistěte se, že je vaše hledání napsáno správně.", + "activityAnalyticsTooltipBody": "Toto jsou vaše uložené aktivity k přezkoumání a procvičování.", + "numSavedActivities": "Počet uložených aktivit", + "saveActivityTitle": "Uložit aktivitu", + "saveActivityDesc": "Dobrá práce! Uložte tuto aktivitu pro pozdější přezkoumání a procvičování", + "levelInfoTooltip": "Zde můžete vidět všechny body, které jste získali, a jak!", + "alreadyInCourseWithID": "Již jste v kurzu s tímto plánem. Chcete vytvořit kurz se stejným plánem, nebo přejít do stávajícího kurzu?", + "goToExistingCourse": "Přejít do stávajícího kurzu", + "emojiView": "Zobrazení emoji", + "feedbackDialogDesc": "Dělám chyby také! Můžete mi pomoci se zlepšit?", + "contactHasBeenInvitedToTheCourse": "Kontaktní osoba byla pozvána do kurzu", + "activityStatsButtonTooltip": "Informace o aktivitě", + "allow": "Povolit", + "deny": "Odmítnout", + "enabledRenewal": "Povolit obnovení předplatného", + "subscriptionEndsOn": "Předplatné končí dne", + "subscriptionRenewsOn": "Předplatné se obnoví dne", + "waitForSubscriptionChanges": "Změny ve vašem předplatném mohou chvíli trvat, než se projeví v aplikaci.", + "subscribeReadingAssistance": "Přihlaste se k odběru pro odemknutí nástrojů pro zprávy", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikánština", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharština", + "arDisplayName": "Arabština", + "asDisplayName": "Ásamština", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Ázerbájdžánština", + "baDisplayName": "Baškirština", + "banDisplayName": "Baliština", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Běloruština", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulharština", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengálština", + "bnBDDisplayName": "Bengálština (Bangladéš)", + "bnINDisplayName": "Bengálština (Indie)", + "brDisplayName": "Bretonština", + "bsDisplayName": "Bosenština", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriatština", + "caDisplayName": "Katalánština", + "cebDisplayName": "Cebuánština", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centrální kurdština", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsičan", + "crhDisplayName": "Krymská turečtina", + "crsDisplayName": "Seselwa kreolská francouzština", + "csDisplayName": "Čeština", + "cvDisplayName": "Čuvaš", + "cyDisplayName": "Velšština", + "daDisplayName": "Dánština", + "deDisplayName": "Němčina", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Angličtina", + "enAUDisplayName": "Angličtina (Austrálie)", + "enGBDisplayName": "Angličtina (UK)", + "enINDisplayName": "Angličtina (Indie)", + "enUSDisplayName": "Angličtina (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Španělština", + "esESDisplayName": "Španělština (Španělsko)", + "esMXDisplayName": "Španělština (Mexiko)", + "euDisplayName": "Baskičtina", + "faDisplayName": "Perština", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finština", + "filDisplayName": "Filipínský", + "fjDisplayName": "Fidžijský", + "foDisplayName": "Faroese", + "frDisplayName": "Francouzský", + "frCADisplayName": "Francouzský (Kanada)", + "frFRDisplayName": "Francouzský (Francie)", + "fyDisplayName": "Západní fríština", + "gaDisplayName": "Irský", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skotská gaelština", + "glDisplayName": "Galicijština", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Goanská konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havajština", + "heDisplayName": "Hebrejština", + "hiDisplayName": "Hindština", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Čhattísgarhí", + "hrDisplayName": "Chorvatský", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitská kreolština", + "huDisplayName": "Maďarský", + "hyDisplayName": "Arménský", + "idDisplayName": "Indonéský", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islanský", + "itDisplayName": "Italský", + "jaDisplayName": "Japonský", + "jvDisplayName": "Javánský", + "kaDisplayName": "Gruzínský", + "kkDisplayName": "Kazachstánský", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Korejský", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kašmírština", + "ktuDisplayName": "Kituba (Demokratická republika Kongo)", + "kuDisplayName": "Kurdština", + "kyDisplayName": "Kyrgyzština", + "laDisplayName": "Latina", + "lbDisplayName": "Lucemburština", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburština", + "lijDisplayName": "Ligurština", + "lmoDisplayName": "Lombardština", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litevština", + "ltgDisplayName": "Latgalsky", + "luoDisplayName": "Luo (Keňa a Tanzanie)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lotyština", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaština", + "miDisplayName": "Maorština", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonština", + "mlDisplayName": "Malajálam", + "mnDisplayName": "Mongolština", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Maráthí", + "msDisplayName": "Malajština", + "msArabDisplayName": "Malajština (arabsky)", + "msMYDisplayName": "Malajština (Malajsie)", + "mtDisplayName": "Maltézština", + "mwrDisplayName": "Marwari", + "myDisplayName": "Barmština", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norština (Bokmål)", + "neDisplayName": "Nepálština", + "newDisplayName": "Newarština", + "nlDisplayName": "Nizozemština", + "nlBEDisplayName": "Vlámský", + "noDisplayName": "Norština", + "nrDisplayName": "Jižní Ndebele", + "nsoDisplayName": "Severní Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitán", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Pandžábština", + "paArabDisplayName": "Pandžábština (Shahmukhi)", + "paINDisplayName": "Pandžábština (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polština", + "psDisplayName": "Paštština", + "ptDisplayName": "Portugalština", + "ptBRDisplayName": "Portugalština (Brazílie)", + "ptPTDisplayName": "Portugalština (Portugalsko)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rádžasthání", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumunština", + "roMDDisplayName": "Moldavština", + "romDisplayName": "Romština", + "ruDisplayName": "Ruština", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrt", + "satDisplayName": "Santálština", + "scnDisplayName": "Sicilština", + "sdDisplayName": "Sindhština", + "sgDisplayName": "Sango", + "shnDisplayName": "Šan", + "siDisplayName": "Sinhálština", + "skDisplayName": "Slovenština", + "slDisplayName": "Slovinština", + "smDisplayName": "Samoánština", + "snDisplayName": "Šonština", + "soDisplayName": "Somálština", + "sqDisplayName": "Albánština", + "srDisplayName": "Srbština", + "srMEDisplayName": "Černohorština", + "ssDisplayName": "Swati", + "stDisplayName": "Jižní Sotho", + "suDisplayName": "Sundština", + "svDisplayName": "Švédština", + "swDisplayName": "Svahilština", + "szlDisplayName": "Slezština", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tádžik", + "thDisplayName": "Thajský", + "tiDisplayName": "Tigrinijský", + "tkDisplayName": "Turkmenský", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turecký", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Ujgur", + "ukDisplayName": "Ukrajinský", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indie)", + "urPKDisplayName": "Urdu (Pákistán)", + "uzDisplayName": "Uzbečtina", + "viDisplayName": "Vietnamština", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukatec", + "yueDisplayName": "Kantonština", + "yueCNDisplayName": "Kantonština (Čína)", + "yueHKDisplayName": "Kantonština (Hongkong)", + "zhDisplayName": "Čínština", + "zhCNDisplayName": "Čínština (zjednodušená)", + "zhTWDisplayName": "Čínština (tradiční)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12492,6 +11190,7 @@ "notStartedActivitiesTitle": "Otevřené sezení ({num})", "inProgressActivitiesTitle": "Probíhá nyní ({num})", "completedActivitiesTitle": "Hotovo ({num})", + "pickDifferentActivity": "Vyberte jinou aktivitu", "inOngoingActivity": "Máte probíhající aktivitu!", "@notStartedActivitiesTitle": { "type": "String", @@ -12517,10 +11216,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Jazyk cíle neodpovídá této zprávě. Chcete aktualizovat svůj cílový jazyk?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Toto jsou všichni účastníci tohoto kurzu. Klikněte na avatara jakéhokoli uživatele a „zahájit konverzaci“, abyste poslali přímou zprávu.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Toto slovo ve slovní zásobě bude trvale odstraněno z vašich analýz", + "woman": "Žena", + "man": "Muž", + "otherGender": "Jiné", + "unselectedGender": "Vyberte možnost pohlaví", + "gender": "Pohlaví", + "chatParticipantTooltip": "Toto jsou všichni v tomto chatu. Klikněte na avatar jakéhokoli uživatele a “začněte konverzaci” pro odeslání DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Nástroje pro učení jsou zakázány pro zprávy, které nejsou ve vašem cílovém jazyce.", + "vocabEmoji": "Emoji slovní zásoby", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Žádat o regeneraci", + "optionalRegenerateReason": "(Volitelné) Důvod", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Nastavili jste emoji pro {lemma}! Toto emoji použijeme k reprezentaci slova v praktických aktivitách v budoucnu.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Čekání na dokončení přihlášení", + "ssoDialogDesc": "Otevřeli jsme novou kartu, abyste se mohli bezpečně přihlásit.", + "ssoDialogHelpText": "🤔 Pokud jste novou kartu neviděli, zkontrolujte prosím blokátor vyskakovacích oken.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Deaktivovat jazykové nástroje", + "disableLanguageToolsDesc": "Chtěli byste deaktivovat automatickou jazykovou pomoc?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Přístup odepřen. Povolte oprávnění pro nahrávání, abyste mohli nahrávat audio zprávy.", + "genericWebRecordingError": "Něco se pokazilo. Doporučujeme používat pro nahrávání zpráv prohlížeč Chrome.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Pro nejlepší zážitek z používání této aplikace prosím zvětšete velikost obrazovky.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivity k odemčení dalšího tématu", "activitiesToUnlockTopicDesc": "Nastavte počet aktivit k odemčení dalšího tématu kurzu", "@activitiesToUnlockTopicTitle": { @@ -12530,5 +11347,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Správná praxe definice slovní zásoby", + "constructUseIncLMDesc": "Nesprávná praxe definice slovní zásoby", + "constructUseCorLADesc": "Správná praxe audio slovní zásoby", + "constructUseIncLADesc": "Nesprávná praxe audio slovní zásoby", + "constructUseBonus": "Bonus během praxe slovní zásoby", + "practiceVocab": "Procvičování slovní zásoby", + "selectMeaning": "Vyberte význam", + "selectAudio": "Vyberte odpovídající audio", + "congratulations": "Gratulujeme!", + "anotherRound": "Další kolo", + "noActivityRequest": "Žádná aktuální žádost o aktivitu.", + "quit": "Ukončit", + "congratulationsYouveCompletedPractice": "Gratulujeme! Dokončili jste cvičební sezení.", + "mustHave10Words": "Musíte mít alespoň 10 slovní zásoby, abyste je mohli procvičovat. Zkuste si promluvit s přítelem nebo Pangea Botem, abyste objevili více!", + "botSettings": "Nastavení bota", + "activitySettingsOverrideWarning": "Jazyk a jazyková úroveň určené plánem aktivity", + "voice": "Hlas", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index 14a7d6a66..512ab67cf 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -797,28 +797,16 @@ "commandHint_logoutall": "Log ud af alle aktive enheder", "displayNavigationRail": "Vis navigationsbjælke på mobil", "customReaction": "Brugerdefineret reaktion", - "accountInformation": "Kontoinformation", - "addGroupDescription": "Tilføj en chatbeskrivelse", - "addNewFriend": "Tilføj ny ven", - "alreadyHaveAnAccount": "Har du allerede en konto?", - "createNewGroup": "Opret en ny chat", - "editChatPermissions": "Rediger chat tilladelser", "ignore": "Bloker", "ignoredUsers": "Blokerede brugere", "writeAMessageLangCodes": "Skriv i {l1} eller {l2}...", "requests": "Anmodninger", - "allCorrect": "Det er sådan, jeg ville sige det! Godt!", - "newWayAllGood": "Det er ikke sådan, jeg ville have sagt det, men det ser godt ud!", - "othersAreBetter": "Hm, der kan være en bedre måde at sige det på.", "holdForInfo": "Klik og hold for ordinfo.", "greenFeedback": "Det er, hvad jeg ville have skrevet!", "yellowFeedback": "Hm, du kan prøve det og se, om det virker! For at bruge dette ord skal du bare klikke på det igen.", "redFeedback": "Jeg tror ikke, det er rigtigt...", "itInstructionsTitle": "Jeg kan hjælpe dig med at oversætte!", "itInstructionsBody": "Du kan klikke og holde valg for ordinfo.", - "oneday": "Sidste 24 timer", - "oneweek": "Sidste 7 dage", - "onemonth": "Sidste måned", "gaTooltip": "L2 brug med grammatikassistance", "taTooltip": "L2 brug med oversættelsesassistance", "unTooltip": "Andet", @@ -828,58 +816,27 @@ "interactiveTranslatorAllowed": "Elev Valg", "interactiveTranslatorRequired": "Påkrævet", "notYetSet": "Endnu ikke sat", - "myLearning": "Mine Analyser", "waTooltip": "L2 brug uden assistance", - "changeDateRange": "Skift datointerval", - "classDescription": "Beskrivelse", - "addStudents": "Inviter brugere via link eller kode", - "copyClassLink": "Kopier invitationslink", - "copyClassCode": "Kopier invitationskode", - "inviteStudentByUserName": "Inviter brugere via brugernavn", "languageSettings": "Sprogindstillinger", "interactiveTranslator": "Oversættelsesassistance", - "shareVideo": "Del video", - "shareVideoDesc": "Tænd for dette for at give elever mulighed for at dele videoer i chats.", - "shareFiles": "Del filer", - "selectLanguageLevel": "Vælg sprogniveau", "noIdenticalLanguages": "Vælg venligst forskellige base- og målsprog", - "iWantALanguagePartnerFrom": "Er fra:", - "worldWide": "Verdensomspændende", - "noResults": "Ingen resultater! Prøv at udvide din søgning.", "searchBy": "Søg efter land og sprog", - "iWantAConversationPartner": "Jeg vil have en samtalepartner, der", - "iWantALanguagePartnerWhoSpeaks": "Taler:", - "iWantALanguagePartnerWhoIsLearning": "Lærer:", "joinWithClassCode": "Deltag i kursus", - "joinWithClassCodeHint": "Indtast invitationskoden", - "languageLevelPreA1": "Sandbegynder (Pre A1)", - "languageLevelA1": "Begynder (A1)", - "languageLevelA2": "Elementær (A2)", - "languageLevelB1": "Mellem (B1)", - "languageLevelB2": "Øvre Mellem (B2)", - "languageLevelC1": "Avanceret (C1)", - "languageLevelC2": "Mestring (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice High (A2)", + "languageLevelB1": "Intermediate Mid (B1)", + "languageLevelB2": "Advanced Low (B2)", + "languageLevelC1": "Advanced Mid (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Skift navn", "changeTheNameOfTheChat": "Skift chatnavn", - "askPangeaBot": "Spørg Pangea Bot om en kontekstuel definition.", "sorryNoResults": "Beklager, ingen resultater.", "ignoreInThisText": "Ignorer", - "helpMeTranslate": "Ja!", - "needsItShortMessage": "Uden mål", "needsItMessage": "Vent, det er ikke {targetLanguage}! Har du brug for hjælp til oversættelse?", - "needsIgcMessage": "Denne besked har en grammatikfejl.", - "tokenTranslationTitle": "Et ord er på dit grundsprog.", - "spanTranslationDesc": "Se mulige oversættelser nedenfor.", - "spanTranslationTitle": "Nogle ord er på dit grundsprog.", - "l1SpanAndGrammarTitle": "Uden for målsproget", - "l1SpanAndGrammarDesc": "Dette kan være på dit grundsprog, eller det kan være en grammatikk fejl.", - "otherTitle": "Du har en fejl.", - "otherDesc": "Se mulige rettelser nedenfor.", "countryInformation": "Mit land", - "myLanguages": "Mine grund- og målsprog", "targetLanguage": "Målsprog", "sourceLanguage": "Grundsprog", - "languagesISpeak": "Sprog jeg taler", "updateLanguage": "Mine sprog", "whatLanguageYouWantToLearn": "Hvilket sprog vil du lære?", "whatIsYourBaseLanguage": "Hvad er dit grundsprog?", @@ -894,13 +851,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klik her for at opdatere oversættelses- og grammatikkens assistanceindstillinger", "errorDisableITClassDesc": "Oversættelsesassistance er deaktiveret for kurset, som denne chat er i.", "errorDisableIGCClassDesc": "Grammatikassistance er deaktiveret for kurset, som denne chat er i.", - "itIsDisabled": "Interaktiv oversættelse er deaktiveret", - "igcIsDisabled": "Interaktiv grammatikkontrol er deaktiveret", - "goToLearningSettings": "Gå til læringsindstillinger", "error405Title": "Sprog er ikke indstillet", "error405Desc": "Indstil dine sprog i Hovedmenu > Læringsindstillinger.", - "loginOrSignup": "Log ind med", - "iAgreeToThe": "Jeg accepterer ", "termsAndConditions": "Vilkår og betingelser", "andCertifyIAmAtLeast13YearsOfAge": " og bekræfter, at jeg er mindst 16 år gammel.", "error502504Title": "Wow, der er mange elever online!", @@ -908,40 +860,21 @@ "error404Title": "Oversættelsesfejl!", "error404Desc": "Pangea-botten er ikke sikker på, hvordan det skal oversætte det...", "errorPleaseRefresh": "Vi undersøger det! Opdater venligst siden og prøv igen.", - "toggleIT": "Interaktiv oversættelse", - "toggleIGC": "Interaktiv grammatikkontrol", - "toggleToolSettingsDescription": "Her kan du skifte dine individuelle sprogværktøjsindstillinger.", "connectedToStaging": "Forbundet til staging", "learningSettings": "Læringsindstillinger", - "sendVoiceNotes": "Send stemmebeskeder", - "sendVoiceNotesDesc": "Skift dette til for at give elever mulighed for at sende stemmebeskeder i chats.", - "chatTopic": "Chat-emne", - "chatTopicDesc": "Indstil et chat-emne", - "inviteStudentByUserNameDesc": "Hvis din elev allerede har en konto, kan du søge efter dem.", "participants": "Deltagere", - "almostPerfect": "Det virker rigtigt! Her er, hvad jeg ville have sagt.", - "prettyGood": "Ret godt! Her er, hvad jeg ville have sagt.", - "letMeThink": "Hmm, lad os se, hvordan du klarede det!", "clickMessageTitle": "Brug for hjælp?", "clickMessageBody": "Klik på en besked for sprogværktøjer som oversættelse, afspilning og mere!", - "understandingMessagesTitle": "Definitioner og oversættelser!", - "understandingMessagesBody": "Klik på understregede ord for definitioner. Oversæt med beskedmuligheder (øverst til højre).", "allDone": "Alt færdigt!", "vocab": "Ordforråd", "low": "Vi har beviser for, at brugeren ikke forstår disse ord.", "medium": "Disse ord er blevet brugt. Det er uklart, om ordene er fuldt ud forstået eller ej.", "high": "Vi har beviser for, at brugeren forstår disse ord.", - "unknownProficiency": "Disse ord er ikke blevet brugt i Pangea Chat.", - "changeView": "Skift visning.", - "clearAll": "Ryd alle ord?", - "generateVocabulary": "Generer ordforråd ud fra titel og beskrivelse", - "generatePrompts": "Generer prompts", "subscribe": "Abonner", "getAccess": "Abonner nu!", "subscriptionDesc": "Beskeder er gratis! Abonner for at låse op for interaktiv oversættelse, grammatikkontrol og læringsanalyser.", "subscriptionManagement": "Abonnementshåndtering", "currentSubscription": "Nuværende abonnement", - "changeSubscription": "Skift dit abonnement", "cancelSubscription": "Annuller dit abonnement", "selectYourPlan": "Vælg din plan", "subsciptionPlatformTooltip": "Log ind på din oprindelige enhed for at administrere dit abonnement", @@ -950,9 +883,6 @@ "paymentHistory": "Betalingshistorik", "emptyChatDownloadWarning": "Kan ikke downloade tom chat", "update": "Opdater", - "updateDesc": "Du kan nu opdatere denne app fra {localVersion} til {storeVersion}", - "maybeLater": "Måske senere", - "mainMenu": "Hovedmenu", "toggleImmersionMode": "Immersionsindstilling", "toggleImmersionModeDesc": "Når den er aktiveret, vises alle beskeder på dit målsprog. Denne indstilling er mest nyttig i sprogudvekslinger.", "itToggleDescription": "Dette sprogindlæringsværktøj vil identificere ord på dit grundsprog og hjælpe dig med at oversætte dem til dit målsprog. Selvom det er sjældent, kan AI lave oversættelsesfejl.", @@ -967,212 +897,13 @@ "definitionsToolDescription": "Når den er aktiveret, kan ord understreget med blåt klikkes for definitioner. Klik på beskeder for at få adgang til definitioner.", "translationsToolDescrption": "Når den er aktiveret, klik på en besked og oversættelsesikonet for at se en besked på dit grundsprog.", "welcomeBack": "Velkommen tilbage! Hvis du var en del af pilotprojektet 2023-2024, bedes du kontakte os for dit særlige pilotabonnement. Hvis du er lærer, der har (eller din institution har) købt licenser til din klasse, kontakt os for dit lærerabonnement.", - "kickAllStudents": "Kast alle elever ud", - "kickAllStudentsConfirmation": "Er du sikker på, at du vil kaste alle elever ud?", - "inviteAllStudents": "Inviter alle elever", - "inviteAllStudentsConfirmation": "Er du sikker på, at du vil invitere alle elever?", - "inviteUsersFromPangea": "Tilføj administratorer", - "redeemPromoCode": "Indløs rabatkode", - "enterPromoCode": "Indtast rabatkode", "downloadTxtFile": "Download tekstfil", "downloadCSVFile": "Download CSV-fil", "promotionalSubscriptionDesc": "Du har i øjeblikket et livstids kampagnetilbud. Send en besked til support@pangea.chat for hjælp til at ændre dit abonnement.", "originalSubscriptionPlatform": "Abonnement købt via {purchasePlatform}", "oneWeekTrial": "Én uges prøveperiode", "downloadXLSXFile": "Download Excel-fil", - "abDisplayName": "Abkhasisk", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albansk", - "amDisplayName": "Amharisk", - "arDisplayName": "Arabisk", - "anDisplayName": "Aragonsk", - "hyDisplayName": "Armensk", - "asDisplayName": "Assamesisk", - "avDisplayName": "Avarisk", - "aeDisplayName": "Avestisk", - "ayDisplayName": "Aymara", - "azDisplayName": "Aserbajdsjansk", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Baskisk", - "beDisplayName": "Hviderussisk", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnisk", - "brDisplayName": "Bretonsk", - "bgDisplayName": "Bulgarsk", - "myDisplayName": "Burmesisk", - "caDisplayName": "Katalansk, Valenciansk", - "chDisplayName": "Chamorro", - "ceDisplayName": "Tsjetsjensk", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kinesisk", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornisk", - "coDisplayName": " Korsikansk", - "crDisplayName": " Cree", - "hrDisplayName": " Kroatisk", - "csDisplayName": " Tjekkisk", - "daDisplayName": " Dansk", - "dvDisplayName": " Divehi; Dhivehi; Maldivisk;", - "nlDisplayName": " Hollandsk", - "enDisplayName": " Engelsk", - "eoDisplayName": " Esperanto", - "etDisplayName": " Estisk", - "eeDisplayName": " Ewe", - "foDisplayName": " Færøsk", - "fjDisplayName": " Fijiansk", - "fiDisplayName": " Finsk", - "frDisplayName": " Fransk", - "ffDisplayName": " Fula; Fulah; Pulaar; Pular", - "glDisplayName": " Galicisk", - "kaDisplayName": " Georgisk", - "deDisplayName": " Tysk", - "elDisplayName": " Græsk, Moderne", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitisk, haitisk kreol", - "haDisplayName": "Hausa", - "heDisplayName": "Hebraisk (moderne)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungarsk", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesisk", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irsk", - "igDisplayName": "Ibo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islænding", - "itDisplayName": "Italiensk", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japansk", - "jvDisplayName": "Javanesisk", - "klDisplayName": "Kalaallisut, Grønlandsk", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kasakhisk", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgisisk, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreansk", - "kuDisplayName": "Kurdisk", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxembourgsk, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgsk, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Lao", - "ltDisplayName": "Litauisk", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letlandsk", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonsk", - "mgDisplayName": "Madagaskisk", - "msDisplayName": "Malaysisk", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltesisk", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolsk", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norsk Bokmål", - "ndDisplayName": "Nord Ndebele", - "neDisplayName": "Nepalesisk", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norsk Nynorsk", - "noDisplayName": "Norsk", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Syd Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Oldkirke-slavisk, Kirkelig slavisk, Kirkelig slavisk, Oldbulgarsk, Oldslavisk", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Ossetisk, Ossetisk", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persisk", - "plDisplayName": "Polsk", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugisisk", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumænsk, Moldavisk, Moldovansk", - "ruDisplayName": "Russisk", - "saDisplayName": "Sanskrit (Saṁskṛta)", - "scDisplayName": "Sardinisk", - "sdDisplayName": "Sindhi", - "seDisplayName": "Nord-Samisk", - "smDisplayName": "Samoansk", - "sgDisplayName": "Sango", - "srDisplayName": "Serbisk", - "gdDisplayName": "Skotsk gælisk, gælisk", - "snDisplayName": "Shona", - "siDisplayName": "Singalesisk, Sinhalese", - "skDisplayName": "Slovakisk", - "slDisplayName": "Slovensk", - "soDisplayName": "Somalisk", - "stDisplayName": "Sydsotho", - "esDisplayName": "Spansk", - "suDisplayName": "Sundanesisk", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Svensk", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadsjikisk", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetansk Standard, Tibetansk, Central", - "tkDisplayName": "Turkmensk", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga-øerne)", - "trDisplayName": "Tyrkisk", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitisk", - "ugDisplayName": "Uighur, Uighur", - "ukDisplayName": "Ukrainsk", - "urDisplayName": "Urdu", - "uzDisplayName": "Usbekisk", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamesisk", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Walisisk", - "woDisplayName": "Wolof", - "fyDisplayName": "Vestfrisisk", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Ukendt", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiisk", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Flere", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebraisk", - "jwDisplayName": "Javanesisk", - "moDisplayName": "Moldavisk", - "shDisplayName": "Serbisk-kroatisk", "wwCountryDisplayName": "Verdensomspændende", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Åland Islands", @@ -1420,41 +1151,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Betal", - "allPrivateChats": "Private beskeder", - "unknownPrivateChat": "Ukendt privat chat", + "pay": "Til betaling", "invitedToSpace": "{user} har inviteret dig til at deltage i et kursus: {space}! Vil du acceptere?", - "declinedInvitation": "Afvist invitation", - "acceptedInvitation": "Accepteret invitation", "youreInvited": "📩 Du er inviteret!", "invitedToChat": "{user} har inviteret dig til at deltage i en chat: {name}! Vil du acceptere?", "monthlySubscription": "Månedlig", "yearlySubscription": "Årlig", "defaultSubscription": "Pangea Chat-abonnement", "freeTrial": "Gratis prøveperiode", - "grammarAnalytics": "Fejl Analyse", "total": "Total: ", "noDataFound": "Ingen data fundet", - "promoSubscriptionExpirationDesc": "Dit nuværende abonnement er kampagnetilbud og udløber den {expiration}. Send en besked til support@pangea.chat for hjælp til at ændre dit abonnement.", - "emptyChatNameWarning": "Indtast venligst et navn til denne chat", "blurMeansTranslateTitle": "Hvorfor er beskeden sløret?", "blurMeansTranslateBody": "Mens Immersion-tilstand er aktiveret, vil beskeder, der sendes på dit basis sprog, være slørede, mens Pangea Bot oversætter dem til dit målsprog. Immersion-tilstand kan tændes og slukkes i individuelle og kursusindstillinger.", - "someErrorTitle": "Hm, noget er ikke rigtigt", - "someErrorBody": "Det kan være en fejl eller noget i dit basis sprog.", "bestCorrectionFeedback": "Det er korrekt!", "distractorFeedback": "Det er ikke helt rigtigt.", "bestAnswerFeedback": "Det er korrekt!", "definitionDefaultPrompt": "Hvad betyder dette ord?", "practiceDefaultPrompt": "Hvad er det bedste svar?", "correctionDefaultPrompt": "Hvad er den bedste erstatning?", - "itStartDefaultPrompt": "Vil du have hjælp til at oversætte?", - "lockedChatWarning": "🔒 Denne chat er blevet låst", - "lockChat": "Lås chat", - "suggestToChat": "Foreslå denne chat", - "suggestToChatDesc": "Foreslåede chats vil vises i chatlister", "acceptSelection": "Accepter rettelsen", - "acceptSelectionAnyway": "Brug dette alligevel", - "makingActivity": "Udfører aktivitet", "why": "Hvorfor?", "definition": "Definition", "exampleSentence": "Eksempelsætning", @@ -1462,128 +1177,55 @@ "reportMessageTitle": "{reportingUserId} har rapporteret en besked fra {reportedUserId} i chatten {roomName}", "reportMessageBody": "Besked: {reportedMessage}\nÅrsag: {reason}", "noTeachersFound": "Ingen lærere fundet til rapportering", - "viewArchive": "Se Arkiv", "trialExpiration": "Din gratis prøveperiode udløber den {expiration}", "freeTrialDesc": "Nye brugere får en gratis prøveperiode på en uge med Pangea Chat", "activateTrial": "Gratis 7-dages prøve", "successfullySubscribed": "Du har tilmeldt dig med succes!", "clickToManageSubscription": "Klik her for at administrere dit abonnement.", - "errorGettingAudio": "Fejl ved hentning af lyd. Opdater venligst og prøv igen.", "signUp": "Tilmeld dig", "pleaseChooseAtLeastChars": "Vælg venligst mindst {min} tegn.", "noEmailWarning": "Indtast venligst en gyldig e-mailadresse. Ellers kan du ikke nulstille din adgangskode. Hvis du ikke vil, skal du trykke igen på knappen for at fortsætte.", "pleaseEnterValidEmail": "Indtast venligst en gyldig e-mailadresse.", "pleaseChooseAUsername": "Vælg venligst et brugernavn", - "chooseAUsername": "Vælg et brugernavn", "define": "Definer", "listen": "Lyt", - "addConversationBot": "Aktivér samtalebot", - "addConversationBotDesc": "Tilføj en bot til denne chat", - "convoBotSettingsDescription": "Rediger samtaleemne og sværhedsgrad", - "enterAConversationTopic": "Indtast et samtaleemne", - "conversationTopic": "Samtaleemne", - "enableModeration": "Aktivér moderation", - "enableModerationDesc": "Aktivér automatisk moderation for at gennemgå beskeder, før de sendes", - "conversationLanguageLevel": "Hvad er sprogniveauet for denne samtale?", - "showDefinition": "Vis definition", - "subscriptionPopupTitle": "Denne sætning kan have en grammatikk fejl...", - "subscriptionPopupDesc": "Abonner i dag for at låse op for oversættelse og grammatikkorrektion!", - "seeOptions": "Se muligheder", - "continuedWithoutSubscription": "Fortsæt uden abonnement", "trialPeriodExpired": "Din prøveperiode er udløbet", - "selectToDefine": "Klik på et hvilket som helst ord for at se dets definition!", "translations": "oversættelser", "messageAudio": "lyd til besked", "definitions": "definitioner", "subscribedToUnlockTools": "Abonner for at låse op for interaktiv oversættelse og grammatikkontrol, lydafspilning, personlige øvelsesaktiviteter og læringsanalyser!", "translationTooltip": "Oversæt", - "audioTooltip": "Afspil lyd", "speechToTextTooltip": "Transskription", - "certifyAge": "Jeg bekræfter, at jeg er over {age} år gammel", "kickBotWarning": "At fjerne Pangea Bot vil fjerne samtalebotten fra denne chat.", - "joinToView": "Deltag i dette rum for at se detaljer", "refresh": "Opdater", - "autoPlayTitle": "Automatisk afspil beskeder", - "autoPlayDesc": "Når aktiveret, vil tekst-til-tale-lyden af beskeder automatisk afspilles, når de vælges.", "messageAnalytics": "Beskedanalyse", "words": "Ord", "score": "Point", "accuracy": "Nøjagtighed", "points": "Point", "noPaymentInfo": "Ingen betalingsoplysninger nødvendige!", - "conversationBotModeSelectDescription": "Chataktivitet", - "conversationBotModeSelectOption_discussion": "Diskussion", - "conversationBotModeSelectOption_custom": "Brugerdefineret", - "conversationBotModeSelectOption_conversation": "Samtale", - "conversationBotModeSelectOption_textAdventure": "Teksteventyr", - "conversationBotModeSelectOption_storyGame": "Historie Spil", - "conversationBotDiscussionZone_title": "Diskussionsindstillinger", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskussionsemne", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Indstil diskussionsemne", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskussionsnøgler", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Indstil diskussionsnøgler", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Komma-separeret liste over nøgleord til at vejlede diskussionen", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Send diskussionsprompt efter en tidsplan", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Timer mellem diskussionsprompter", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reagerer på ⏩ reaktion", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaktion for at sende diskussionsprompt", - "conversationBotCustomZone_title": "Brugerdefinerede indstillinger", - "conversationBotCustomZone_customSystemPromptLabel": "Systemprompt", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Indstil brugerdefineret systemprompt", - "conversationBotCustomZone_customSystemPromptEmptyError": "Manglende brugerdefineret systemprompt", - "botConfig": "Bot- og aktivitetsindstillinger", - "botConfigNoPermissionTitle": "Ingen tilladelse", - "botConfigNoPermissionMessage": "Kontakt rumadministrator for at ændre bot-konfigurationen", - "addConversationBotDialogTitleInvite": "Bekræft invitation til samtalebot", - "addConversationBotButtonInvite": "Inviter", - "addConversationBotDialogInviteConfirmation": "Inviter", - "addConversationBotButtonTitleRemove": "Bekræft fjernelse af samtalebot", - "addConversationBotButtonRemove": "Fjern", - "addConversationBotDialogRemoveConfirmation": "Fjern", - "conversationBotConfigConfirmChange": "Bekræft", - "conversationBotStatus": "Inviter bot", - "conversationBotTextAdventureZone_title": "Teksteventyr", - "conversationBotTextAdventureZone_instructionLabel": "Instruktioner til spilmester", - "conversationBotTextAdventureZone_instructionPlaceholder": "Indstil spilmesterinstruktioner", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Manglende instruktioner til spilmester", - "studentAnalyticsNotAvailable": "Elevdata er i øjeblikket ikke tilgængelige", - "roomDataMissing": "Nogle data kan mangle fra rum, hvor du ikke er medlem.", "updatePhoneOS": "Du kan være nødt til at opdatere din enheds OS-version.", "wordsPerMinute": "Ord pr. minut", "autoIGCToolName": "Kør Pangea skriveassistance automatisk", "autoIGCToolDescription": "Kør automatisk Pangea Chat grammatik- og oversættelsesassistance, før jeg sender min besked.", - "runGrammarCorrection": "Tjek besked", - "grammarCorrectionFailed": "Problemer at løse", - "grammarCorrectionComplete": "Ser godt ud!", "tooltipInstructionsTitle": "Er du ikke sikker på, hvad det gør?", "tooltipInstructionsMobileBody": "Tryk og hold på elementer for at se værktøjstip.", "tooltipInstructionsBrowserBody": "Hold musen over elementer for at se værktøjstip.", "chatCapacity": "Chatkapacitet", "roomFull": "Dette rum er allerede fyldt.", - "topicNotSet": "Emnet er ikke sat.", - "chatCapacityNotSet": "Denne chat har ingen kapacitetsgrænse.", "chatCapacityHasBeenChanged": "Chatkapacitet ændret", "chatCapacitySetTooLow": "Chatkapaciteten skal være mindst {count}.", "chatCapacityExplanation": "Chatkapacitet begrænser antallet af medlemmer i en chat.", - "chatExceedsCapacity": "Denne chat overskrider sin kapacitet.", "tooManyRequest": "For mange forespørgsler, prøv igen senere.", "enterNumber": "Indtast venligst et helt tal.", "buildTranslation": "Byg din oversættelse ud fra valgene ovenfor", - "nonexistentSelection": "Valget findes ikke længere.", - "changeAnalyticsLanguage": "Skift Analytics Sprog", "practice": "Øv", "noLanguagesSet": "Ingen sprog er indstillet", - "noActivitiesFound": "Det er nok for nu! Kom tilbage senere for mere.", - "hintTitle": "Tip:", "speechToTextBody": "For stemmemeddelelser kan du se en transskription samt talerens ord pr. minut-score.", "versionNotFound": "Version ikke fundet", "fetchingVersion": "Henter version...", "versionFetchError": "Fejl ved hentning af version", "versionText": "Version: {version}+{buildNumber}", - "languageButtonLabel": "Sprog: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatisk afspilning af oversættelse", - "interactiveTranslatorAutoPlayDesc": "Starter den interaktive oversætter uden at spørge.", - "changeAnalyticsView": "Skift analysemode", "l1TranslationBody": "Beskeder på dit basis sprog vil ikke blive oversat.", "deleteSubscriptionWarningTitle": "Du har et aktivt abonnement", "deleteSubscriptionWarningBody": "Sletning af din konto vil ikke automatisk afbryde dit abonnement.", @@ -1591,9 +1233,7 @@ "error520Title": "Prøv igen.", "error520Desc": "Beklager, vi kunne ikke forstå din besked...", "wordsUsed": "Ord brugt", - "errorTypes": "Fejltyper", "level": "Niveau", - "canceledSend": "Afsendt afbrudt", "morphsUsed": "Morphs brugt", "translationChoicesBody": "Tryk og hold en mulighed for et hint.", "grammar": "Grammatik", @@ -1603,7 +1243,6 @@ "reportContentIssueTitle": "Rapporter indholdsproblem", "feedback": "Valgfri feedback", "reportContentIssueDescription": "Ups! AI kan facilitere personlige læringserfaringer, men... hallucinerer også. Giv venligst din feedback, så prøver vi igen.", - "changeContent": "Ups! AI kan facilitere personlige læringserfaringer, men... hallucinerer også. Hvad skal det være?", "clickTheWordAgainToDeselect": "Klik på det valgte ord for at fjerne markeringen.", "l2SupportNa": "Ikke tilgængelig", "l2SupportAlpha": "Alpha", @@ -1837,7 +1476,6 @@ "grammarCopySPC": "Specificitet", "grammarCopyPARTTYPE": "Partitivtype", "grammarCopyINTREL": "Interrogativ-Relativ", - "grammarCopyNUMFORMpsor": "Possessors Nummer", "grammarCopyUNKNOWN": "Ukendt", "grammarCopyNUMBERPSOR": "Possessors Nummer", "grammarCopyPOSS": "Possessiv", @@ -1883,28 +1521,14 @@ "grammarCopyVOICEdir": "Direkte", "grammarCopyVOICEinv": "Invers", "grammarCopyVOICErcp": "Reciprokt", - "enterPrompt": "Indtast venligst en systemprompt", - "selectBotLanguage": "Vælg bot-sprog", - "chooseVoice": "Vælg en stemme", - "enterLanguageLevel": "Indtast venligst et sprogniveau", - "enterDiscussionTopic": "Indtast venligst et diskussionsemne", - "selectBotChatMode": "Vælg chat-tilstand", - "messageNotInTargetLang": "Besked ikke på målsproget", "other": "Andet", "levelShort": "LVL {level}", - "botModeValidation": "Vælg venligst en chattilstand", "clickBestOption": "Vælg de bedste muligheder for at oversætte din besked!", "completeActivitiesToUnlock": "Fuldfør mindst en aktivitet for at låse op for oversættelsen!", - "botSettingsSubtitle": "Inviter bot til at moderere chataktivitet", - "invitePeople": "Inviter brugere", "noCapacityLimit": "Ingen kapacitetsgrænse", "downloadGroupText": "Download gruppe tekst", "notificationsOn": "Notifikationer til", "notificationsOff": "Notifikationer fra", - "chatCanBeFoundViaSearch": "Chat kan findes via søgning", - "requireCodeToJoin": "Kræv kode for at deltage", - "canFindInSearch": "Kan findes i søgning", - "addChatToSpace": "Tilføj chat", "createChatAndInviteUsers": "Opret chat og inviter brugere", "updatedNewSpaceDescription": "Kurser giver dig mulighed for at konsolidere dine chats og opbygge private eller offentlige fællesskaber.", "joinWithCode": "Deltag med kode", @@ -1940,39 +1564,19 @@ "constructUseCollected": "Indsamlet i chat", "constructUseNanDesc": "Ikke relevant", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Log ind med brugernavn og adgangskode", - "registrationEmailMessage": "Bekræft venligst din e-mail med et link, der sendes der. I nogle tilfælde kan e-mailen tage op til 5 minutter at ankomme. Tjek også din spam-mappe.", "enableTTSToolName": "Aktiveret tekst-til-tale", "enableTTSToolDescription": "Tillad appen at generere tekst-til-tale output for dele af teksten på dit målsprog.", - "couldNotFindTTS": "Vi kunne ikke finde en tekst-til-tale motor til dit nuværende målsprog.", - "ttsInstructionsHyperlink": "Klik her for at se instruktioner til download af en ny stemme på din enhed.", - "createAnAccount": "Opret en konto", - "signIn": "Log ind", - "signUpWithEmail": "Tilmeld dig med e-mail", - "signUpWithGoogle": "Tilmeld dig med Google", - "signUpWithApple": "Tilmeld dig med Apple", "yourUsername": "Dit brugernavn", "yourEmail": "Din e-mail", - "pleaseEnterAnEmail": "Indtast venligst en e-mailadresse", - "signInWithGoogle": "Log ind med Google", - "signInWithApple": "Log ind med Apple", - "chooseYourAvatar": "Vælg dit avatar", "iWantToLearn": "Jeg vil gerne lære", - "letsStart": "Lad os starte", - "pleaseAgreeToTOS": "Vær venlig at acceptere vilkårene", "pleaseEnterEmail": "Indtast en gyldig e-mailadresse.", - "pleaseSelectALanguage": "Vælg venligst et sprog", "myBaseLanguage": "Mit grundsprog", - "clickWordsInstructions": "🧻 Klik på et hvilket som helst ord for detaljer. 🤐", - "chooseBestDefinition": "Hvad betyder dette ord?", "meaningSectionHeader": "Betydning:", "formSectionHeader": "Brugte former i chats:", - "noEmojiSelectedTooltip": "Ingen emoji valgt", "writingExercisesTooltip": "Skrivning", "listeningExercisesTooltip": "Lytning", "readingExercisesTooltip": "Læsning", "meaningNotFound": "Betydning kunne ikke findes.", - "formsNotFound": "Skemaer kunne ikke findes.", "chooseBaseForm": "Vælg grundformen", "notTheCodeError": "Beklager, det er ikke koden!", "totalXP": "Samlet XP", @@ -2012,9 +1616,6 @@ "pickAnEmoji": "Hvad er din yndlingsemoji for '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Match betydninger med ordene i beskeden!", "doubleClickToEdit": "Dobbeltklik for at redigere.", - "removeFeature": "Fjern {feature}", - "chooseCorrectLabel": "Vælg den korrekte etiket.", - "levelPopupTitle": "Tillykke med at nå\nNiveau {level}", "activityPlannerTitle": "Aktivitetsplanlægger", "topicLabel": "Emne", "topicPlaceholder": "Vælg et emne...", @@ -2022,7 +1623,6 @@ "modePlaceholder": "Vælg en tilstand...", "learningObjectiveLabel": "Læringsmål", "learningObjectivePlaceholder": "Vælg et læringsmål...", - "mediaLabel": "Medier, som eleverne skal dele", "languageOfInstructionsLabel": "Sprog for aktivitetsinstruktioner", "targetLanguageLabel": "Mål sprog", "cefrLevelLabel": "CEFR-niveau", @@ -2037,20 +1637,15 @@ "instructions": "Instruktioner", "numberOfLearners": "Antal elever", "mustBeInteger": "Skal være et heltal f.eks. 1, 2, 3, ...", - "noLemmasFound": "Der er intet ordforråd med mere end {xp} XP. Fortsæt med at øve!", "constructUsePvmDesc": "Produceret i stemmemeddelelse", - "lockedMorphFeature": "Venter på at blive låst op", "leaveSpaceDescription": "Ved at forlade kurset vil du forlade alle chats inden for det. Andre brugere vil se, at du har forladt kurset.", - "whatIsLemma": "Hvad er lemmatet?", "constructUseCorMmDesc": "Korrekt beskedbetydning", "constructUseIncMmDesc": "Forkert beskedbetydning", "constructUseIgnMmDesc": "Ignoreret beskedbetydning", "clickForMeaningActivity": "Klik her for en Betydningsudfordring", "meaning": "Betydning", "chatWith": "Gruppe med {displayname}", - "slightlyOffensive": "Lidt krænkende", "clickOnEmailLink": "Klik venligst på linket i e-mailen og fortsæt.\n\nTjek din spam-mappe, hvis e-mailen ikke er ankommet.", - "whoIsAllowedToJoinThisChat": "Hvem har lov til at deltage i denne chat", "dontForgetPassword": "Glem ikke din adgangskode!", "enableAutocorrectToolName": "Aktiver automatisk rettelse på enheden", "enableAutocorrectDescription": "Hvis din enhed understøtter det sprog, du lærer, kan du aktivere automatisk rettelse for at rette almindelige fejl, mens du skriver.", @@ -2078,48 +1673,26 @@ "autocorrectNotAvailable": "Desværre understøttes din platform ikke i øjeblikket til denne funktion. Følg med for yderligere udvikling!", "pleaseUpdateApp": "Opdater venligst appen for at fortsætte.", "chooseEmojiInstructionsBody": "Match emojis med de ord, de bedst repræsenterer. Bare rolig! Der er ingen pointtab for uenighed. 😅", - "pickAnEmojiFor": "Vælg en emoji til {lemma}", "analyticsVocabListBody": "Dette er dit hele ordforråd! Når du tjener XP for hvert ord, går de fra spire til fuldt blomstrende. Klik på et hvilket som helst ord for at se flere detaljer.", "morphAnalyticsListBody": "Disse er alle grammatiske begreber i det sprog, du lærer! Du låser dem op, når du støder på dem under chat. Klik for flere oplysninger.", "knockSpaceSuccess": "Du har anmodet om at deltage i dette kursus! En administrator vil svare på din anmodning, når de modtager den 😄", - "joinByCode": "Deltag med kode", "chooseWordAudioInstructionsBody": "Lyt til den komplette besked. Match derefter lydene med ordene.", "chooseMorphsInstructionsBody": "Klik på puslespilsbrikkerne for grammatiske spørgsmål!", - "inviteAndLaunch": "Inviter og start", - "createOwnChat": "Opret din egen chat", "pleaseEnterInt": "Indtast venligst et tal", "home": "Hjem", "join": "Deltag", "readingAssistanceOverviewBody": "Klik på knapperne nedenfor for mini-spil om matchning af emojis, lyde, ords betydninger og grammatiske begreber. Eller klik på et hvilket som helst ord for flere detaljer.", - "learnByTexting": "Lær ved at sende beskeder", - "levelSummaryTrigger": "Se resumé", "levelSummaryPopupTitle": "Niveau {level} Resumé", - "referFriends": "Henvis venner", - "referFriendDialogTitle": "Inviter en ven til din samtale", - "referFriendDialogDesc": "Har du en ven, der er begejstret for at lære et nyt sprog med dig? Kopier og send dette invitationslink for at deltage og begynde at chatte med dig i dag.", - "youUnlocked": "Du har låst op for", "resetInstructionTooltipsTitle": "Nulstil vejledningstips", "resetInstructionTooltipsDesc": "Klik for at vise vejledningstips som for en helt ny bruger.", "selectForGrammar": "Vælg et grammatik-ikon til aktiviteter og detaljer.", - "newChatActivityTitle": "Tilføj en sjov aktivitet?", - "newChatActivityDesc": "Gør hver gruppechat til et eventyr med Aktivitet Planlægger! Sæt fængende emner og mål for gruppen, og bring samtaler til live med fantastiske billeder. Skab fantasifulde diskussioner og hold humøret højt uden besvær!", - "exploreMore": "Udforsk mere", "randomize": "Tilfældig", "clear": "Ryd", "makeYourOwnActivity": "Opret din egen aktivitet", "featuredActivities": "Udvalgt", - "goToChat": "Gå til chat", "save": "Gem", - "selectActivity": "Vælg aktivitet", - "wordFocusListeningMultipleChoice": "Hvilket lydklip matcher ordet?", "startChat": "Start en chat", "translationProblem": "Oversættelsesproblem", - "perfectTranslation": "Perfekt oversættelse!", - "greatJobTranslation": "Godt arbejde med denne oversættelse!", - "goodJobTranslation": "Godt arbejde med denne oversættelse.", - "makingProgress": "Du gør fremskridt!", - "keepPracticing": "Fortsæt med at øve!", - "niceJob": "Godt klaret!", "askToJoin": "Anmod om at deltage", "emptyChatWarningTitle": "Chat er tom", "emptyChatWarningDesc": "Du har ikke inviteret nogen til din chat. Gå til Chat-indstillinger for at invitere dine kontakter eller Bot. Du kan også gøre dette senere.", @@ -2138,8 +1711,6 @@ "languageLevelC2Desc": "Jeg kan forstå næsten alt, jeg hører eller læser, og udtrykke mig flydende og præcist.", "newVocab": "Nyt ordforråd", "newGrammar": "Nye grammatiske begreber", - "congratulationsOnReaching": "Du har nået niveau {level}!", - "seeDetails": "Se detaljer", "choosePracticeMode": "Klik på en af knapperne ovenfor for at starte en øvelsesaktivitet", "ban": "Blokér", "unban": "Fjern blokering", @@ -2153,8 +1724,6 @@ "timesUsedWithAssistance": "Brugt med assistance antal gange", "shareInviteCode": "Del invitationskode: {code}", "leaderboard": "Topscorer", - "welcomeUser": "Velkommen {user}", - "joinSpaceOnboardingDesc": "Har du en invitationskode eller et link til et offentligt kursus?", "skipForNow": "Spring over for nu", "permissions": "Tilladelser", "spaceChildPermission": "Hvem kan tilføje nye chats til dette kursus", @@ -2162,12 +1731,8 @@ "defaultOption": "Standard", "deleteChatDesc": "Er du sikker på, at du vil slette denne chat? Den vil blive slettet for alle deltagere, og alle beskeder i chatten vil ikke længere være tilgængelige til øvelse eller læringsanalyser.", "deleteSpaceDesc": "Kurset og eventuelle valgte chats vil blive slettet for alle deltagere, og alle beskeder i chatten vil ikke længere være tilgængelige til øvelse eller læringsanalyser. Denne handling kan ikke fortrydes.", - "chatWithActivities": "Chat med aktiviteter", "launch": "Start", - "launchActivityToChats": "Start aktivitet til chats", "searchChats": "Søg chats", - "selectChats": "Vælg chats", - "selectChatToStart": "Færdig! Vælg en chat for at starte", "maxFifty": "Maks 50", "configureSpace": "Konfigurer kursus", "pinMessages": "Fastgør beskeder", @@ -2181,9 +1746,7 @@ "announcements": "Meddelelser", "activities": "Aktiviteter", "access": "Adgang", - "botSettings": "Bot-indstillinger", "activitySuggestionTimeoutMessage": "Vi arbejder hårdt på at generere flere aktiviteter til dig, venligst tjek igen om et minut", - "accessSettingsWarning": "Ups! Det ser ud til, at du ikke har tilladelse til at indstille adgangsreglerne for dette rum. Du bør tjekke disse for at sikre, at de er, hvad du har brug for, og tale med en rumadministrator, hvis du skal ændre dem", "howSpaceCanBeFound": "Hvordan dette kursus kan findes", "private": "Privat", "cannotBeFoundInSearch": "Kan ikke findes i søgning", @@ -2196,16 +1759,6 @@ "canBeFoundViaKnock": "• anmodning om at deltage og godkendelse af administrator", "youHaveLeveledUp": "Du har niveauopgraderet!", "sendActivities": "Send aktiviteter", - "getStarted": "Kom i gang", - "getStartedBotChatDesc": "Chat med AI er et godt sted at starte, og Pangea læse-, skrive-, lytte- og taleværktøjer gør det nemt!", - "getStartedCommunitiesDesc": "Læring med et fællesskab er, hvor Pangea Chat skinner!\nDu kan tilslutte dig din klasse, finde et kursus eller endda lave dit eget!", - "getStartedFriendsDesc": "Har du en ven, der vil lære med dig?", - "getStartedBotChatComplete": "Godt gået! Du chatter med botten!", - "getStartedCommunitiesComplete": "Super, du har tilsluttet dig et kursus!", - "getStartedComplete": "Du har gennemført denne sektion!\nFortsæt med at udforske vores fantastiske funktioner ved at chatte med venner!", - "getStartedFriendsComplete": "Woohoo! Du har venner! 😉", - "getStartedBotChatButton": "Start chat!", - "getStartedFriendsButton": "Chat med en ven", "groupChat": "Gruppemøde", "directMessage": "Direkte besked", "newDirectMessage": "Ny direkte besked", @@ -2221,7 +1774,6 @@ "mySavedActivities": "Mine gemte aktiviteter", "noSavedActivities": "Ingen gemte aktiviteter", "saveActivity": "Gem denne aktivitet", - "yourSavedActivities": "Gemte aktiviteter", "failedToPlayVideo": "Mislykkedes med at afspille video", "done": "Færdig", "inThisSpace": "I dette kursus", @@ -2260,37 +1812,27 @@ "maximumActivityParticipants": "Hver aktivitet kan have maksimalt {count} deltager(e).", "pending": "Afventer", "inactive": "Inaktiv", - "unjoinedActivityMessage": "Vil du deltage? Vælg en åben rolle!\nEller hæng ud og se showet!", - "fullActivityMessage": "Du er velkommen til at se showet! Selvom der ikke er nogen åbne roller at deltage i, kan du se chatten!", "confirmRole": "Bekræft rolle", "openRoleLabel": "ÅBEN", "joinedTheActivity": "👋 {username} deltog som {role}", "finishedTheActivity": "🎯 {username} afsluttede denne aktivitet", - "endActivityTitle": "Jeg er færdig", - "endActivityDesc": "Har du opnået målene?\nDette er din bekræftelse på, at du går ud af chatten. Men bare rolig, sjovet fortsætter i chatten! Hæng ud og nyd showet, indtil alle klikker på 'Færdig'.", "archiveToAnalytics": "Tilføj til mine afsluttede aktiviteter", "activitySummaryError": "Aktivitetsoversigter er ikke tilgængelige", "requestSummaries": "Anmod om oversigter", - "loadingActivitySummary": "Indlæser aktivitetsoversigt...", "generatingNewActivities": "Du er den første bruger af denne sprogpar! Giv os et øjeblik, vi forbereder aktiviteter kun til dig.", - "requestAccessTitle": "Anmodning om adgang til analytics-visning?", + "requestAccessTitle": "Anmod om adgang til analyser?", "requestAccessDesc": "Vil du anmode om adgang til at se deltageranalyser?\n\nHvis deltagerne er enige, vil administratorerne for dette kursus kunne se deres:\n • samlet ordforråd\n • samlede grammatiske begreber\n • samlede gennemførte aktivitetsessioner\n • de specifikke grammatiske begreber, der er brugt, korrekt og forkert\n\nDe vil ikke kunne se deres:\n • beskeder i chats uden for kurset\n • ordforrådslisten", "requestAccess": "Anmod om adgang ({count})", "analyticsInactiveTitle": "Anmodninger til inaktive brugere kunne ikke sendes", "analyticsInactiveDesc": "Inaktive brugere, der ikke har logget ind, siden denne funktion blev introduceret, vil ikke se din anmodning.\n\nAnmodningsknappen vil vises, når de vender tilbage. Du kan gensende anmodningen senere ved at klikke på Anmodningsknappen under deres navn, når den er tilgængelig.", "accessRequestedTitle": "Anmodning om adgang til analytics", - "accessRequestedDesc": "Administratorerne af “{space}” anmoder om at se dine læringsanalyser.\n\nHvis du er enig, vil administratorerne for dette kursus kunne se dine:\n • samlet ordforråd\n • samlede grammatiske begreber\n • samlede gennemførte aktivitetsessioner\n • de specifikke grammatiske begreber, der er brugt, korrekt og forkert\n\nDe vil ikke kunne se dine:\n • beskeder i chats uden for kurset\n • ordforrådslisten", - "allowAccess": "Tillad adgang", - "denyAccess": "Afvis adgang", + "accessRequestedDesc": "Anmoder admin(s): {admin} \n\nAdministratorer fra “{space}” anmoder om at se dine læringsanalyser.\n\nHvis du accepterer, vil de kunne se din:\n • samlede ordforråd\n • samlede grammatikbegreber\n • samlede gennemførte aktivitetssessioner\n • de specifikke grammatikbegreber, der er brugt, korrekt og forkert\n\nDe vil ikke kunne se din:\n • beskeder i chats uden for kurset\n • ordforrådsliste", "adminRequestedAccess": "Administratorer har bedt om at se dine analyser.", "lastUpdated": "Opdateret\n{time}", "activityFinishedMessage": "Alt færdigt!", "endForAll": "Afslut for alle", "newCourse": "Nyt kursus", - "newCourseSubtitle": "Hvilken kursusplan vil du bruge?", - "failedToLoadCourses": "Kunne ikke indlæse kurser", "numModules": "{num} moduler", - "numActivityPlans": "{num} aktivitetsplaner", "coursePlan": "Kursusplan", "editCourseLater": "Du kan redigere skabelonens titel, beskrivelser og kursusbillede senere.", "newCourseAccess": "Som standard er kurser private og kræver godkendelse fra administrator for at deltage. Du kan redigere disse indstillinger når som helst.", @@ -2304,17 +1846,11 @@ "accessDesc": "Du kan gøre dit kursus åbent for alle! Eller gøre det privat og sikkert.", "createGroupChatDesc": "Mens aktivitetsessioner starter og slutter, forbliver gruppechats åbne for rutinemæssig kommunikation.", "deleteDesc": "Kun administratorer kan slette et kursus. Dette er en destruktiv handling, der fjerner alle brugere og sletter alle valgte chats inden for kurset. Vær forsigtig.", - "failedToLoadCourseInfo": "Kunne ikke indlæse kursusoplysninger", "noCourseFound": "Åh, dette kursus har brug for en plan!\n\nKursusplaner er en sekvens af emner og samtaleaktiviteter.", "additionalParticipants": "+ {num} andre", - "activityNotFoundForCourse": "Denne aktivitet blev ikke fundet i kurset", - "courseChats": "Kursuschats", - "myActivitySessions": "Mine aktivitetsessioner", "directMessages": "Direkte beskeder", "whatNow": "Hvad nu?", "chooseNextActivity": "Vælg din næste aktivitet!", - "seeInstructions": "Se instruktioner", - "hideInstructions": "Skjul instruktioner", "letsGo": "Lad os gå", "chooseRole": "Vælg en rolle!", "chooseRoleToParticipate": "Vælg en rolle for at deltage!", @@ -2324,23 +1860,15 @@ "inviteFriends": "Inviter venner", "waitNotDone": "Vent, jeg er ikke færdig!", "waitingForOthersToFinish": "Venter på, at de andre bliver færdige...", - "saveToCompletedActivities": "Gem til fuldførte aktiviteter", "generatingSummary": "Analyserer chat og genererer resultater", - "instructionsLanguage": "Instruktionssprog", "findCourse": "Find et kursus", - "activityCompletedDesc": "Din fuldførte aktivitet blev tilføjet til analyser, hvor du kan gennemgå og øve det sprog, du brugte.", "pingParticipantsNotification": "{user} leder efter brugere til at deltage i aktivitetssessionen i {room}", "course": "Kursus", "courses": "Kurser", "courseName": "Kursets navn", "createNewCourse": "Opret nyt kursus", - "publicCourses": "Offentlige kurser", "goToCourse": "Gå til kursus: {course}", "activityComplete": "Denne aktivitet er fuldført. Resuméet af aktiviteten bør være tilgængeligt nedenfor.", - "haventChattedMuch": "Det ser ud til, at du ikke har talt så meget, prøv at bruge flere ordforrådsord! Hvis du føler, at du har opnået dit mål, kan du afslutte aktiviteten nedenfor.", - "haveChatted": "Det ser ud til, at du har talt i et stykke tid! Hvis du føler, at du har opnået dit mål, afslut aktiviteten, og vi vil generere et resumé til dig i chatten!", - "userDoneAndWaiting": "{num1}/{num2} deltagere har afsluttet. Vent på, at alle er færdige, og vi vil generere et resumé til dig i chatten! \n\nHvis du vil genoptage samtalen, skal du klikke på fortsæt-knappen i chatten.", - "othersDoneAndWaiting": "{num1}/{num2} er færdige. Har du opnået dit mål?", "startNewSession": "Start ny session", "joinOpenSession": "Deltag i åben session", "less": "mindre", @@ -2350,7 +1878,6 @@ "openToJoin": "Åben for deltagelse", "results": "Resultater", "activityDone": "Aktivitet fuldført!", - "moreLabel": "mere", "promoCodeInfo": "Kampagnekoder kan indtastes på næste side", "editsComingSoon": "Redigering af byer og aktiviteter kommer snart.", "editing": "Redigerer", @@ -2366,13 +1893,10 @@ "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", - "chooseLanguage": "Vælg et sprog.", + "chooseLanguage": "Vælg et målsprog.", "planTrip": "Planlæg din rejse", "howAreYouTraveling": "Hvordan rejser du?", "unlockPrivateTrip": "Lås op for en privat rejse", @@ -2385,25 +1909,20 @@ "courseCode": "Hvad er den hemmelige adgangskode?", "courseCodeHint": "Rejsekode eller link", "unlockMyTrip": "Lås op for min rejse", - "anyLevel": "Alle niveauer", "signupOption": "Hvordan vil du tilmelde dig?", "withApple": "Med Apple", "withGoogle": "Med Google", "withEmail": "Med e-mail", "createAccount": "Opret konto", - "noCoursesFound": "Ingen kurser fundet", "loginWithEmail": "Log ind med e-mail", "usernameOrEmail": "Brugernavn eller e-mail", "email": "E-mail", "forgotPassword": "Glemt adgangskode?", - "writingAnalyticsDesc": "Send beskeder for at øve skrivning.", "endActivity": "Afslut aktivitet", "allLanguages": "Alle sprog", - "allCefrLevels": "Alle CEFR-niveauer", "chatListTooltip": "Her finder du dine direkte beskeder! Klik på en brugers avatar og “start samtale” for at sende en DM.", "directMessageBotTitle": "Direkte besked Pangea Bot", "feedbackTitle": "Aktivitetsfeedback", - "feedbackDesc": "Hvordan kan aktiviteten forbedres? Hvis du kan give nogle detaljer, vil vi foretage ændringen!", "feedbackHint": "Din feedback", "feedbackButton": "Send feedback", "directMessageBotDesc": "At tale med mennesker er sjovere, men... AI er altid klar!", @@ -2411,7 +1930,7 @@ "playWithAI": "Leg med AI for nu", "courseStartDesc": "Pangea Bot er klar til at starte når som helst!\n\n...men læring er bedre med venner!", "@@locale": "da", - "@@last_modified": "2026-01-06 13:01:06.115252", + "@@last_modified": "2026-01-07 14:23:47.042043", "@aboutHomeserver": { "type": "String", "placeholders": { @@ -6059,30 +5578,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6106,18 +5601,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6142,18 +5625,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6190,38 +5661,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6230,62 +5673,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6322,10 +5721,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6334,14 +5729,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6350,46 +5737,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6398,10 +5749,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6458,18 +5805,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6478,14 +5813,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6514,18 +5841,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6534,42 +5849,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6578,14 +5861,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6606,26 +5881,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6646,10 +5901,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6682,25 +5933,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6757,34 +5989,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6813,778 +6017,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8577,14 +7013,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8596,14 +7024,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8635,10 +7055,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8647,18 +7063,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8667,14 +7071,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8699,38 +7095,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8776,10 +7144,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8804,10 +7168,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8832,10 +7192,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8844,66 +7200,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8924,42 +7224,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8984,154 +7260,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9148,18 +7276,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9180,14 +7296,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9204,10 +7312,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9220,14 +7324,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9236,14 +7332,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9271,26 +7359,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9319,18 +7387,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9367,10 +7427,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10303,10 +8359,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10487,34 +8539,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10527,10 +8551,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10539,14 +8559,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10563,22 +8575,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10726,14 +8722,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10742,34 +8730,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10778,54 +8738,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10834,10 +8758,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10854,10 +8774,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11029,26 +8945,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11077,10 +8973,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11137,30 +9029,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11189,18 +9065,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11317,14 +9185,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11337,10 +9197,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11349,14 +9205,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11373,14 +9221,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11389,22 +9229,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11417,18 +9241,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11445,22 +9257,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11469,30 +9269,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11565,18 +9341,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11633,18 +9397,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11673,30 +9425,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11749,18 +9485,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11809,46 +9537,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11913,10 +9601,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12088,14 +9772,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12123,14 +9799,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12143,10 +9811,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12182,19 +9846,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12219,14 +9878,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12235,14 +9886,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12295,10 +9938,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12311,18 +9950,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12335,14 +9962,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12383,26 +10002,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12430,10 +10037,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12444,36 +10047,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12510,10 +10083,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12578,18 +10147,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12654,10 +10211,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12678,10 +10231,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12698,10 +10247,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12710,10 +10255,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12726,10 +10267,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12754,16 +10291,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Inviter venner til aktivitet", - "inviteFriendsToActivityCourse": "Inviter venner til aktivitet og kursus", "feedbackRespDesc": "Tjek igen i morgen for opdateringer om aktiviteten.", "activityDropdownDesc": "Når du er færdig med denne aktivitet, klik nedenfor", - "activityAnalyticsListBody": "Disse er dine gennemførte aktiviteter! Efter at have afsluttet aktiviteter, kan du se dem her.", "languageMismatchTitle": "Sprogfejl", "languageMismatchDesc": "Dit målsprog stemmer ikke overens med sproget for denne aktivitet. Vil du opdatere dit målsprog?", "reportWordIssueTooltip": "Rapporter problem med ordinformation", "tokenInfoFeedbackDialogTitle": "Feedback om ordinformation", - "tokenInfoFeedbackDialogDesc": "AI laver fejl. Beskriv venligst eventuelle problemer, du har fundet med ovenstående information.", "noPublicCoursesFound": "Ingen offentlige kurser fundet. Vil du oprette et?", "noCourseTemplatesFound": "Vi kunne ikke finde nogen kurser for dit målsprog. Du kan chatte med Pangea Bot i mellemtiden og vende tilbage senere for flere kurser.", "botActivityJoinFailMessage": "Pangea Bot tager lidt tid at svare. Prøv igen senere, eller inviter en ven.", @@ -12771,14 +10304,6 @@ "leaveDesc": "Forlad dette rum og alle chats inden for det", "selectAll": "Vælg alle", "deselectAll": "Fravælg alle", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12787,10 +10312,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12807,10 +10328,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12844,10 +10361,8 @@ "newMessageInPangeaChat": "💬 Ny besked i Pangea Chat", "shareCourse": "Del kursus", "addCourse": "Tilføj et kursus", - "joinCourseWithCode": "Deltag i kursus med kode", "joinPublicCourse": "Deltag i offentligt kursus", "vocabLevelsDesc": "Her vil ordforrådsord blive placeret, når du har opgraderet dem!", - "highlightVocabTooltip": "Fremhæv målordene nedenfor ved at sende dem eller øve med dem i chatten", "@startOwn": { "type": "String", "placeholders": {} @@ -12868,10 +10383,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12880,7 +10391,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Ingen DMs eller chats fundet. Sørg for, at din søgning er stavet korrekt.", + "activityAnalyticsTooltipBody": "Dette er dine gemte aktiviteter til gennemgang og øvelse.", + "numSavedActivities": "Antal gemte aktiviteter", + "saveActivityTitle": "Gem aktivitet", + "saveActivityDesc": "Godt klaret! Gem denne aktivitet til senere gennemgang og øvelse", + "levelInfoTooltip": "Her kan du se alle de point, du har tjent, og hvordan!", + "alreadyInCourseWithID": "Du er allerede i et kursus med denne plan. Vil du oprette et kursus med den samme plan, eller gå til det eksisterende kursus?", + "goToExistingCourse": "Gå til eksisterende kursus", + "emojiView": "Emoji visning", + "feedbackDialogDesc": "Jeg laver også fejl! Er der noget, der kan hjælpe mig med at forbedre mig?", + "contactHasBeenInvitedToTheCourse": "Kontakt er blevet inviteret til kurset", + "activityStatsButtonTooltip": "Aktivitetsinfo", + "allow": "Tillad", + "deny": "Afvis", + "enabledRenewal": "Aktiver abonnement fornyelse", + "subscriptionEndsOn": "Abonnementet slutter den", + "subscriptionRenewsOn": "Abonnementet fornyes den", + "waitForSubscriptionChanges": "Ændringer til dit abonnement kan tage et øjeblik at afspejle i appen.", + "subscribeReadingAssistance": "Abonner for at låse op for beskedværktøjer", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharisk", + "arDisplayName": "Arabisk", + "asDisplayName": "Assamesisk", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Aserbajdsjansk", + "baDisplayName": "Bashkir", + "banDisplayName": "Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Hviderussisk", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgarisk", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Indien)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnisk", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalansk", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Central Kurdisk", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsikansk", + "crhDisplayName": "Krim Tyrkisk", + "crsDisplayName": "Seselwa Kreol Fransk", + "csDisplayName": "Tjekkisk", + "cvDisplayName": "Tjuvash", + "cyDisplayName": "Walisisk", + "daDisplayName": "Dansk", + "deDisplayName": "Tysk", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Engelsk", + "enAUDisplayName": "Engelsk (Australien)", + "enGBDisplayName": "Engelsk (UK)", + "enINDisplayName": "Engelsk (Indien)", + "enUSDisplayName": "Engelsk (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spansk", + "esESDisplayName": "Spansk (Spanien)", + "esMXDisplayName": "Spansk (Mexico)", + "euDisplayName": "Baskisk", + "faDisplayName": "Persisk", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finsk", + "filDisplayName": "Filippinsk", + "fjDisplayName": "Fijiansk", + "foDisplayName": "Færøsk", + "frDisplayName": "Fransk", + "frCADisplayName": "Fransk (Canada)", + "frFRDisplayName": "Fransk (Frankrig)", + "fyDisplayName": "Vestfrisisk", + "gaDisplayName": "Irsk", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skotsk gælisk", + "glDisplayName": "Galicisk", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiiansk", + "heDisplayName": "Hebraisk", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatisk", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitiansk Kreol", + "huDisplayName": "Ungarsk", + "hyDisplayName": "Armenisk", + "idDisplayName": "Indonesisk", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandsk", + "itDisplayName": "Italiensk", + "jaDisplayName": "Japansk", + "jvDisplayName": "Javanesisk", + "kaDisplayName": "Georgisk", + "kkDisplayName": "Kasakhisk", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreansk", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Den Demokratiske Republik Congo)", + "kuDisplayName": "Kurdisk", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgsk", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgisk", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litauisk", + "ltgDisplayName": "Latgalisk", + "luoDisplayName": "Luo (Kenya og Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lettisk", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonsk", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolsk", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (arabisk)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltesisk", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmesisk", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norsk (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Hollandsk", + "nlBEDisplayName": "Flamsk", + "noDisplayName": "Norsk", + "nrDisplayName": "Syd Ndebele", + "nsoDisplayName": "Nord Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polsk", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugisisk", + "ptBRDisplayName": "Portugisisk (Brasilien)", + "ptPTDisplayName": "Portugisisk (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumænsk", + "roMDDisplayName": "Moldovisk", + "romDisplayName": "Romani", + "ruDisplayName": "Russisk", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliansk", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovakisk", + "slDisplayName": "Slovensk", + "smDisplayName": "Samoansk", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albansk", + "srDisplayName": "Serbisk", + "srMEDisplayName": "Montenegrinsk", + "ssDisplayName": "Swati", + "stDisplayName": "Sydsotho", + "suDisplayName": "Sundanesisk", + "svDisplayName": "Svensk", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadsjik", + "thDisplayName": "Thailandsk", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmensk", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Tyrkisk", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uighur", + "ukDisplayName": "Ukrainsk", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indien)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Usbekisk", + "viDisplayName": "Vietnamesisk", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddisch", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonesisk", + "yueCNDisplayName": "Kantonesisk (Kina)", + "yueHKDisplayName": "Kantonesisk (Hongkong)", + "zhDisplayName": "Kinesisk", + "zhCNDisplayName": "Kinesisk (Forenklet)", + "zhTWDisplayName": "Kinesisk (Traditionelt)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12947,6 +11644,7 @@ "notStartedActivitiesTitle": "Åbne sessioner ({num})", "inProgressActivitiesTitle": "Foregår nu ({num})", "completedActivitiesTitle": "Færdig ({num})", + "pickDifferentActivity": "Vælg en anden aktivitet", "inOngoingActivity": "Du har en igangværende aktivitet!", "@notStartedActivitiesTitle": { "type": "String", @@ -12972,10 +11670,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Dit målsprog stemmer ikke overens med denne besked. Opdater dit målsprog?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Dette er alle i dette kursus. Klik på enhver brugers avatar og \"start samtale\" for at sende en DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Dette ord vil blive permanent fjernet fra din analyse", + "woman": "Kvinde", + "man": "Mand", + "otherGender": "Andet", + "unselectedGender": "Vælg en kønsoption", + "gender": "Køn", + "chatParticipantTooltip": "Dette er alle i denne chat. Klik på en brugers avatar og \"start samtale\" for at sende en DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Læringsværktøjer er deaktiveret for beskeder, der ikke er på dit målsprog.", + "vocabEmoji": "Vocab emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Anmod om regenerering", + "optionalRegenerateReason": "(Valgfri) Årsag", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Du har indstillet emoji'en for {lemma}! Vi vil bruge denne emoji til at repræsentere ordet i praksisaktiviteter fremover.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Venter på, at login skal fuldføres", + "ssoDialogDesc": "Vi har åbnet en ny fane, så du kan logge ind sikkert.", + "ssoDialogHelpText": "🤔 Hvis du ikke så den nye fane, skal du tjekke din popup-blokker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Deaktiver sprogværktøjer", + "disableLanguageToolsDesc": "Vil du deaktivere automatisk sprogassistance?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Tilladelse nægtet. Aktivér optagelsestilladelser for at optage lydbeskeder.", + "genericWebRecordingError": "Noget gik galt. Vi anbefaler at bruge Chrome-browseren, når du optager beskeder.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "For den bedste oplevelse med denne applikation, bedes du udvide din skærmstørrelse.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktiviteter til at låse op for næste emne", "activitiesToUnlockTopicDesc": "Indstil antallet af aktiviteter for at låse op for det næste kursusemne", "@activitiesToUnlockTopicTitle": { @@ -12985,5 +11801,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Korrekt orddefinition praksis", + "constructUseIncLMDesc": "Forkert orddefinition praksis", + "constructUseCorLADesc": "Korrekt ordlyd praksis", + "constructUseIncLADesc": "Forkert ordlyd praksis", + "constructUseBonus": "Bonus under ordpraksis", + "practiceVocab": "Øv ordforråd", + "selectMeaning": "Vælg betydningen", + "selectAudio": "Vælg den matchende lyd", + "congratulations": "Tillykke!", + "anotherRound": "En runde mere", + "noActivityRequest": "Ingen aktuelle aktivitetsanmodning.", + "quit": "Afslut", + "congratulationsYouveCompletedPractice": "Tillykke! Du har gennemført øvelsessessionen.", + "mustHave10Words": "Du skal have mindst 10 ordforrådsord for at øve dem. Prøv at tale med en ven eller Pangea Bot for at opdage mere!", + "botSettings": "Botindstillinger", + "activitySettingsOverrideWarning": "Sprog og sprogniveau bestemt af aktivitetsplan", + "voice": "Stemme", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 5cced4193..63d7c56b2 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,6 +1,6 @@ { "@@locale": "de", - "@@last_modified": "2026-01-06 13:01:34.264308", + "@@last_modified": "2026-01-07 14:25:24.418870", "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." @@ -3385,26 +3385,14 @@ "commandHint_logoutall": "Alle aktiven Geräte abmelden", "displayNavigationRail": "Navigationsleiste auf Mobilgeräten anzeigen", "customReaction": "Benutzerdefinierte Reaktion", - "accountInformation": "Kontoinformationen", - "addGroupDescription": "Fügen Sie eine Chat-Beschreibung hinzu", - "addNewFriend": "Neuen Freund hinzufügen", - "alreadyHaveAnAccount": "Haben Sie bereits ein Konto?", - "createNewGroup": "Neuen Chat erstellen", - "editChatPermissions": "Chat-Berechtigungen bearbeiten", "writeAMessageLangCodes": "Geben Sie in {l1} oder {l2} ein...", "requests": "Anfragen", - "allCorrect": "So würde ich es sagen! Schön!", - "newWayAllGood": "So hätte ich es nicht gesagt, aber es sieht gut aus!", - "othersAreBetter": "Hm, es gibt vielleicht eine bessere Art, das zu sagen.", "holdForInfo": "Klicken und halten für Wortinformationen.", "greenFeedback": "Das würde ich eintragen!", "yellowFeedback": "Hm, du kannst es versuchen und sehen, ob es funktioniert! Um dieses Wort zu verwenden, klicke es einfach erneut.", "redFeedback": "Ich glaube nicht, dass das richtig ist...", "itInstructionsTitle": "Ich kann dir beim Übersetzen helfen!", "itInstructionsBody": "Sie können durch Tippen und Halten Informationen zum Wort erhalten.", - "oneday": "Letzte 24 Stunden", - "oneweek": "Letzte 7 Tage", - "onemonth": "Letzter Monat", "gaTooltip": "L2 Verwendung mit Grammatikhilfe", "taTooltip": "L2 Verwendung mit Übersetzungshilfe", "unTooltip": "Andere", @@ -3414,58 +3402,27 @@ "interactiveTranslatorAllowed": "Schülerwahl", "interactiveTranslatorRequired": "Erforderlich", "notYetSet": "Noch nicht festgelegt", - "myLearning": "Meine Analysen", "waTooltip": "L2 Verwendung ohne Hilfe", - "changeDateRange": "Datumsbereich ändern", - "classDescription": "Beschreibung", - "addStudents": "Benutzer per Link oder Code einladen", - "copyClassLink": "Einladungslink kopieren", - "copyClassCode": "Einladungscode kopieren", - "inviteStudentByUserName": "Benutzer nach Benutzernamen einladen", "languageSettings": "Spracheinstellungen", "interactiveTranslator": "Übersetzungshilfe", - "shareVideo": "Video teilen", - "shareVideoDesc": "Aktivieren Sie dies, um Schülern das Teilen von Videos in Chats zu ermöglichen.", - "shareFiles": "Dateien teilen", - "selectLanguageLevel": "Sprachniveau auswählen", "noIdenticalLanguages": "Bitte wählen Sie unterschiedliche Ausgangs- und Zielsprache", - "iWantALanguagePartnerFrom": "Ist von:", - "worldWide": "Weltweit", - "noResults": "Keine Ergebnisse! Versuchen Sie, Ihre Suche zu erweitern.", "searchBy": "Suche nach Land und Sprachen", - "iWantAConversationPartner": "Ich möchte einen Gesprächspartner, der", - "iWantALanguagePartnerWhoSpeaks": "Spricht:", - "iWantALanguagePartnerWhoIsLearning": "Lernt:", "joinWithClassCode": "Kurs beitreten", - "joinWithClassCodeHint": "Einladungscode eingeben", - "languageLevelPreA1": "Wahrer Anfänger (Pre A1)", - "languageLevelA1": "Anfänger (A1)", - "languageLevelA2": "Grundstufe (A2)", + "languageLevelPreA1": "Anfänger Niedrig (Pre A1)", + "languageLevelA1": "Novize Mitte (A1)", + "languageLevelA2": "Anfänger Hoch (A2)", "languageLevelB1": "Mittelstufe (B1)", - "languageLevelB2": "Obere Mittelstufe (B2)", - "languageLevelC1": "Fortgeschritten (C1)", - "languageLevelC2": "Meisterschaft (C2)", + "languageLevelB2": "Fortgeschritten Niedrig (B2)", + "languageLevelC1": "Fortgeschritten Mittel (C1)", + "languageLevelC2": "Überlegen (C2)", "changeTheNameOfTheClass": "Namen ändern", "changeTheNameOfTheChat": "Den Namen des Chats ändern", - "askPangeaBot": "Fragen Sie Pangea Bot nach einer kontextbezogenen Definition.", "sorryNoResults": "Entschuldigung, keine Ergebnisse.", "ignoreInThisText": "Ignorieren", - "helpMeTranslate": "Ja!", - "needsItShortMessage": "Außer Ziel", "needsItMessage": "Warte, das ist nicht {targetLanguage}! Bist du bei der Übersetzung Hilfe nötig?", - "needsIgcMessage": "Diese Nachricht enthält einen Grammatikfehler.", - "tokenTranslationTitle": "Ein Wort ist in deiner Basissprache.", - "spanTranslationDesc": "Siehe mögliche Übersetzungen unten.", - "spanTranslationTitle": "Einige Wörter sind in deiner Basissprache.", - "l1SpanAndGrammarTitle": "Außerhalb der Zielsprache", - "l1SpanAndGrammarDesc": "Dies könnte in deiner Basissprache sein oder ein Grammatikfehler sein.", - "otherTitle": "Du hast einen Fehler.", - "otherDesc": "Siehe mögliche Korrekturen unten.", "countryInformation": "Mein Land", - "myLanguages": "Meine Basis- und Zielsprache", "targetLanguage": "Zielsprache", "sourceLanguage": "Ausgangssprache", - "languagesISpeak": "Ich spreche Sprachen", "updateLanguage": "Meine Sprachen", "whatLanguageYouWantToLearn": "Welche Sprache möchtest du lernen?", "whatIsYourBaseLanguage": "Was ist deine Ausgangssprache?", @@ -3480,13 +3437,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klicken Sie hier, um die Einstellungen für Übersetzungs- und Grammatikhilfe zu aktualisieren", "errorDisableITClassDesc": "Die Übersetzungshilfe ist für den Kurs, in dem sich dieser Chat befindet, deaktiviert.", "errorDisableIGCClassDesc": "Die Grammatikhilfe ist für den Kurs, in dem sich dieser Chat befindet, deaktiviert.", - "itIsDisabled": "Interaktive Übersetzung ist deaktiviert", - "igcIsDisabled": "Interaktive Grammatikprüfung ist deaktiviert", - "goToLearningSettings": "Zu den Lerneinstellungen gehen", "error405Title": "Sprachen nicht eingestellt", "error405Desc": "Bitte stellen Sie Ihre Sprachen im Hauptmenü > Lerneinstellungen ein.", - "loginOrSignup": "Anmelden mit", - "iAgreeToThe": "Ich stimme den ", "termsAndConditions": "Allgemeinen Geschäftsbedingungen", "andCertifyIAmAtLeast13YearsOfAge": " zu und bestätigen, dass ich mindestens 16 Jahre alt bin.", "error502504Title": "Wow, es sind viele Schüler online!", @@ -3494,40 +3446,21 @@ "error404Title": "Übersetzungsfehler!", "error404Desc": "Der Pangea-Bot ist sich nicht sicher, wie das zu übersetzen ist...", "errorPleaseRefresh": "Wir kümmern uns darum! Bitte laden Sie die Seite neu und versuchen Sie es erneut.", - "toggleIT": "Interaktive Übersetzung", - "toggleIGC": "Interaktive Grammatikprüfung", - "toggleToolSettingsDescription": "Hier können Sie Ihre individuellen Spracheinstellungen für die Tools umschalten.", "connectedToStaging": "Mit Staging verbunden", "learningSettings": "Lerneinstellungen", - "sendVoiceNotes": "Sprachnotizen senden", - "sendVoiceNotesDesc": "Aktivieren Sie dies, um es Schülern zu ermöglichen, Sprachnotizen in Chats zu senden.", - "chatTopic": "Chat-Thema", - "chatTopicDesc": "Ein Chat-Thema festlegen", - "inviteStudentByUserNameDesc": "Wenn dein Schüler bereits ein Konto hat, kannst du nach ihm suchen.", "participants": "Teilnehmer", - "almostPerfect": "Das scheint richtig zu sein! Hier ist, was ich gesagt hätte.", - "prettyGood": "Ziemlich gut! Hier ist, was ich gesagt hätte.", - "letMeThink": "Hmm, mal sehen, wie du dich geschlagen hast!", "clickMessageTitle": "Brauchen Sie Hilfe?", "clickMessageBody": "Klicken Sie auf eine Nachricht für Sprachtools wie Übersetzung, Wiedergabe und mehr!", - "understandingMessagesTitle": "Definitionen und Übersetzungen!", - "understandingMessagesBody": "Klicken Sie auf unterstrichene Wörter für Definitionen. Übersetzen Sie mit Nachrichtenoptionen (oben rechts).", "allDone": "Alles erledigt!", "vocab": "Vokabular", "low": "Wir haben Hinweise darauf, dass der Benutzer diese Wörter nicht versteht.", "medium": "Diese Wörter wurden verwendet. Es ist unklar, ob die Wörter vollständig verstanden wurden oder nicht.", "high": "Wir haben Hinweise darauf, dass der Benutzer diese Wörter versteht.", - "unknownProficiency": "Diese Wörter wurden in Pangea Chat nicht verwendet.", - "changeView": "Ansichten wechseln.", - "clearAll": "Alle Wörter löschen?", - "generateVocabulary": "Vokabular aus Titel und Beschreibung generieren", - "generatePrompts": "Aufforderungen generieren", "subscribe": "Abonnieren", "getAccess": "Jetzt abonnieren!", "subscriptionDesc": "Messaging ist kostenlos! Abonnieren Sie, um interaktive Übersetzungen, Grammatikprüfung und Lernanalysen freizuschalten.", "subscriptionManagement": "Abonnementverwaltung", "currentSubscription": "Aktuelles Abonnement", - "changeSubscription": "Ändern Sie Ihr Abonnement", "cancelSubscription": "Abonnement kündigen", "selectYourPlan": "Wählen Sie Ihren Plan", "subsciptionPlatformTooltip": "Bitte melden Sie sich auf Ihrem ursprünglichen Gerät an, um Ihren Abonnementplan zu verwalten", @@ -3536,9 +3469,6 @@ "paymentHistory": "Zahlungsverlauf", "emptyChatDownloadWarning": "Leeren Chat können nicht heruntergeladen werden", "update": "Aktualisieren", - "updateDesc": "Sie können diese App jetzt von {localVersion} auf {storeVersion} aktualisieren", - "maybeLater": "Vielleicht später", - "mainMenu": "Hauptmenü", "toggleImmersionMode": "Immersionsmodus", "toggleImmersionModeDesc": "Wenn aktiviert, werden alle Nachrichten in Ihrer Zielsprache angezeigt. Diese Einstellung ist in Sprachaustauschen am nützlichsten.", "itToggleDescription": "Dieses Werkzeug zum Sprachenlernen erkennt Wörter in Ihrer Ausgangssprache und hilft Ihnen, sie in Ihre Zielsprache zu übersetzen. Obwohl selten, kann die KI Übersetzungsfehler machen.", @@ -3553,212 +3483,13 @@ "definitionsToolDescription": "Wenn aktiviert, können Wörter, die blau unterstrichen sind, angeklickt werden, um Definitionen anzuzeigen. Klicken Sie auf Nachrichten, um Definitionen zu erhalten.", "translationsToolDescrption": "Wenn aktiviert, klicken Sie auf eine Nachricht und auf das Übersetzungssymbol, um eine Nachricht in Ihrer Ausgangssprache zu sehen.", "welcomeBack": "Willkommen zurück! Wenn Sie Teil des Pilotprojekts 2023-2024 waren, kontaktieren Sie uns bitte für Ihr spezielles Pilotabonnement. Wenn Sie Lehrer sind, der (oder dessen Institution) Lizenzen für Ihre Klasse gekauft hat, kontaktieren Sie uns für Ihr Lehrerausweis.", - "kickAllStudents": "Alle Schüler ausschließen", - "kickAllStudentsConfirmation": "Sind Sie sicher, dass Sie alle Schüler ausschließen möchten?", - "inviteAllStudents": "Alle Schüler einladen", - "inviteAllStudentsConfirmation": "Sind Sie sicher, dass Sie alle Schüler einladen möchten?", - "inviteUsersFromPangea": "Administratoren hinzufügen", - "redeemPromoCode": "Aktionscode einlösen", - "enterPromoCode": "Aktionscode eingeben", "downloadTxtFile": "Textdatei herunterladen", "downloadCSVFile": "CSV-Datei herunterladen", "promotionalSubscriptionDesc": "Sie haben derzeit ein lebenslanges Aktionsabonnement. Kontaktieren Sie support@pangea.chat, um Hilfe bei der Änderung Ihres Abonnements zu erhalten.", "originalSubscriptionPlatform": "Abonnement gekauft über {purchasePlatform}", "oneWeekTrial": "Einwöchige Testversion", "downloadXLSXFile": "Excel-Datei herunterladen", - "abDisplayName": "Abchasisch", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanisch", - "amDisplayName": "Amharisch", - "arDisplayName": "Arabisch", - "anDisplayName": "Aragonisch", - "hyDisplayName": "Armenisch", - "asDisplayName": "Assamesisch", - "avDisplayName": "Avarisch", - "aeDisplayName": "Avestisch", - "ayDisplayName": "Aymara", - "azDisplayName": "Aserbaidschanisch", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkirisch", - "euDisplayName": "Baskisch", - "beDisplayName": "Belarussisch", - "bnDisplayName": "Bengalisch", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnisch", - "brDisplayName": "Bretonisch", - "bgDisplayName": "Bulgarisch", - "myDisplayName": "Birmanisch", - "caDisplayName": "Katalanisch, Valencianisch", - "chDisplayName": "Chamorro", - "ceDisplayName": "Tschetschenisch", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinesisch", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Kornisch", - "coDisplayName": "Korsisch", - "crDisplayName": "Cree", - "hrDisplayName": "Kroatisch", - "csDisplayName": "Tschechisch", - "daDisplayName": "Dänisch", - "dvDisplayName": "Divehi; Dhivehi; Maledivisch;", - "nlDisplayName": "Niederländisch", - "enDisplayName": "Englisch", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estnisch", - "eeDisplayName": "Ewe", - "foDisplayName": "Färöisch", - "fjDisplayName": "Fidschi", - "fiDisplayName": "Finnisch", - "frDisplayName": "Französisch", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicisch", - "kaDisplayName": "Georgisch", - "deDisplayName": "Deutsch", - "elDisplayName": "Griechisch, Modern", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitianisch, Haitian Creole", - "haDisplayName": "Haussa", - "heDisplayName": "Hebräisch (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungarisch", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesisch", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irisch", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Isländisch", - "itDisplayName": "Italienisch", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japanisch", - "jvDisplayName": "Javanisch", - "klDisplayName": "Kalaallisut, Grönländisch", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kasachisch", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgisisch, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreanisch", - "kuDisplayName": "Kurdisch", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latein", - "lbDisplayName": "Luxemburgisch, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgisch, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laotisch", - "ltDisplayName": "Litauisch", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Lettisch", - "gvDisplayName": "Manx", - "mkDisplayName": "Mazedonisch", - "mgDisplayName": "Malagasy", - "msDisplayName": "Malaiisch", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltesisch", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolisch", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norwegisch Bokmål", - "ndDisplayName": "Nord-Ndebele", - "neDisplayName": "Nepalesisch", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norwegisch Nynorsk", - "noDisplayName": "Norwegisch", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Süd-Ndebele", - "ocDisplayName": "Okzitanisch", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Altslawisch, Kirchenslawisch, Kirchenslawisch, Altes Bulgarisch, Altslawisch", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetisch, Ossetisch", - "paDisplayName": "Pandschabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persisch", - "plDisplayName": "Polnisch", - "psDisplayName": "Paschtu, Pushto", - "ptDisplayName": "Portugiesisch", - "quDisplayName": "Quechua", - "rmDisplayName": "Rätoromanisch", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumänisch, Moldauisch, Moldovanisch", - "ruDisplayName": "Russisch", - "saDisplayName": "Sanskrit (Sanskṛta)", - "scDisplayName": "Sardinisch", - "sdDisplayName": "Sindhi", - "seDisplayName": "Nordsamisch", - "smDisplayName": "Samoanisch", - "sgDisplayName": "Sango", - "srDisplayName": "Serbisch", - "gdDisplayName": "Schottisch-Gälisch, Gälisch", - "snDisplayName": "Shona", - "siDisplayName": "Singhalesisch, Sinhala", - "skDisplayName": "Slowakisch", - "slDisplayName": "Slowenisch", - "soDisplayName": "Somalisch", - "stDisplayName": "Süd-Sotho", - "esDisplayName": "Spanisch", - "suDisplayName": "Sundanesisch", - "swDisplayName": "Suaheli", - "ssDisplayName": "Swati", - "svDisplayName": "Schwedisch", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadschikisch", - "thDisplayName": "Thailändisch", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetisch Standard, Tibetisch, Zentral", - "tkDisplayName": "Turkmenisch", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga-Inseln)", - "trDisplayName": "Türkisch", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatarisch", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitisch", - "ugDisplayName": "Uigurisch, Uighurisch", - "ukDisplayName": "Ukrainisch", - "urDisplayName": "Urdu", - "uzDisplayName": "Usbekisch", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamesisch", - "voDisplayName": "Volapük", - "waDisplayName": "Wallonisch", - "cyDisplayName": "Walisisch", - "woDisplayName": "Wolof", - "fyDisplayName": "Westfriesisch", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Unbekannt", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiianisch", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Mehrfach", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebräisch", - "jwDisplayName": "Javanisch", - "moDisplayName": "Moldawisch", - "shDisplayName": "Serbo-Kroatisch", "wwCountryDisplayName": "Weltweit", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Alandinseln", @@ -4006,41 +3737,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Sambia", "zwCountryDisplayName": "Simbabwe", - "pay": "Bezahlen", - "allPrivateChats": "Private Chats", - "unknownPrivateChat": "Unbekannter Privatchat", + "pay": "Zur Kasse", "invitedToSpace": "{user} hat Sie eingeladen, an einem Kurs teilzunehmen: {space}! Möchten Sie annehmen?", - "declinedInvitation": "Einladung abgelehnt", - "acceptedInvitation": "Einladung angenommen", "youreInvited": "📩 Sie sind eingeladen!", "invitedToChat": "{user} hat Sie eingeladen, an einem Chat teilzunehmen: {name}! Möchten Sie annehmen?", "monthlySubscription": "Monatlich", "yearlySubscription": "Jährlich", "defaultSubscription": "Pangea Chat-Abonnement", "freeTrial": "Kostenlose Testversion", - "grammarAnalytics": "Fehleranalyse", "total": "Gesamt: ", "noDataFound": "Keine Daten gefunden", - "promoSubscriptionExpirationDesc": "Ihr aktuelles Abonnement ist werblich und läuft am {expiration} ab. Senden Sie eine Nachricht an support@pangea.chat, um Hilfe bei der Änderung Ihres Abonnements zu erhalten.", - "emptyChatNameWarning": "Bitte geben Sie einen Namen für diesen Chat ein", "blurMeansTranslateTitle": "Warum ist die Nachricht verschwommen?", "blurMeansTranslateBody": "Wenn der Immersionsmodus aktiviert ist, werden Nachrichten, die in Ihrer Basissprache gesendet werden, verschwommen dargestellt, während Pangea Bot sie in Ihre Zielsprache übersetzt. Der Immersionsmodus kann in den Einstellungen für einzelne Chats und Kurse umgeschaltet werden.", - "someErrorTitle": "Hm, etwas stimmt nicht", - "someErrorBody": "Es könnte ein Fehler sein oder etwas in Ihrer Basissprache.", "bestCorrectionFeedback": "Das ist richtig!", "distractorFeedback": "Das ist nicht ganz richtig.", "bestAnswerFeedback": "Das ist richtig!", "definitionDefaultPrompt": "Was bedeutet dieses Wort?", "practiceDefaultPrompt": "Was ist die beste Antwort?", "correctionDefaultPrompt": "Was ist die beste Alternative?", - "itStartDefaultPrompt": "Möchten Sie Hilfe beim Übersetzen?", - "lockedChatWarning": "🔒 Dieser Chat wurde gesperrt", - "lockChat": "Chat sperren", - "suggestToChat": "Diesen Chat vorschlagen", - "suggestToChatDesc": "Vorgeschlagene Chats erscheinen in der Chatliste", "acceptSelection": "Korrektur akzeptieren", - "acceptSelectionAnyway": "Trotzdem verwenden", - "makingActivity": "Aktivität wird erstellt", "why": "Warum?", "definition": "Definition", "exampleSentence": "Beispielsatz", @@ -4048,128 +3763,55 @@ "reportMessageTitle": "{reportingUserId} hat eine Nachricht von {reportedUserId} im Chat {roomName} gemeldet", "reportMessageBody": "Nachricht: {reportedMessage}\nGrund: {reason}", "noTeachersFound": "Keine Lehrer zum Melden gefunden", - "viewArchive": "Archiv anzeigen", "trialExpiration": "Ihre kostenlose Testphase läuft am {expiration} ab", "freeTrialDesc": "Neue Nutzer erhalten eine einwöchige kostenlose Testphase von Pangea Chat", "activateTrial": "Kostenlose 7-Tage-Testversion", "successfullySubscribed": "Sie haben erfolgreich abonniert!", "clickToManageSubscription": "Klicken Sie hier, um Ihr Abonnement zu verwalten.", - "errorGettingAudio": "Fehler beim Abrufen des Audios. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut.", "signUp": "Registrieren", "pleaseChooseAtLeastChars": "Bitte wählen Sie mindestens {min} Zeichen.", "noEmailWarning": "Bitte geben Sie eine gültige E-Mail-Adresse ein. Andernfalls können Sie Ihr Passwort nicht zurücksetzen. Wenn Sie das nicht möchten, tippen Sie erneut auf die Schaltfläche, um fortzufahren.", "pleaseEnterValidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", "pleaseChooseAUsername": "Bitte wählen Sie einen Benutzernamen", - "chooseAUsername": "Benutzernamen wählen", "define": "Definieren", "listen": "Hören", - "addConversationBot": "Konversations-Bot aktivieren", - "addConversationBotDesc": "Fügen Sie diesem Chat einen Bot hinzu", - "convoBotSettingsDescription": "Konversationsthema und Schwierigkeitsgrad bearbeiten", - "enterAConversationTopic": "Geben Sie ein Gesprächsthema ein", - "conversationTopic": "Gesprächsthema", - "enableModeration": "Moderation aktivieren", - "enableModerationDesc": "Automatische Moderation aktivieren, um Nachrichten vor dem Senden zu überprüfen", - "conversationLanguageLevel": "Wie ist das Sprachniveau dieser Unterhaltung?", - "showDefinition": "Definition anzeigen", - "subscriptionPopupTitle": "Dieser Satz könnte einen Grammatikfehler enthalten...", - "subscriptionPopupDesc": "Abonnieren Sie noch heute, um Übersetzungen und Grammatikprüfung freizuschalten!", - "seeOptions": "Optionen anzeigen", - "continuedWithoutSubscription": "Ohne Abonnement fortfahren", "trialPeriodExpired": "Ihre Testphase ist abgelaufen", - "selectToDefine": "Klicken Sie auf ein Wort, um die Definition zu sehen!", "translations": "Übersetzungen", "messageAudio": "Nachrichten-Audio", "definitions": "Definitionen", "subscribedToUnlockTools": "Abonnieren Sie, um interaktive Übersetzungen und Grammatikprüfungen, Audio-Wiedergabe, personalisierte Übungsaktivitäten und Lernanalysen freizuschalten!", "translationTooltip": "Übersetzen", - "audioTooltip": "Audio abspielen", "speechToTextTooltip": "Transkript", - "certifyAge": "Ich bestätige, dass ich über {age} Jahre alt bin", "kickBotWarning": "Das Entfernen des Pangea-Bots entfernt den Konversationsbot aus diesem Chat.", - "joinToView": "Treten Sie diesem Raum bei, um Details anzuzeigen", "refresh": "Aktualisieren", - "autoPlayTitle": "Automatisches Abspielen von Nachrichten", - "autoPlayDesc": "Wenn aktiviert, wird die Text-zu-Sprache-Audio der Nachrichten automatisch abgespielt, wenn sie ausgewählt werden.", "messageAnalytics": "Nachrichtenanalyse", "words": "Wörter", "score": "Punktzahl", "accuracy": "Genauigkeit", "points": "Punkte", "noPaymentInfo": "Keine Zahlungsinformationen erforderlich!", - "conversationBotModeSelectDescription": "Chat-Aktivität", - "conversationBotModeSelectOption_discussion": "Diskussion", - "conversationBotModeSelectOption_custom": "Benutzerdefiniert", - "conversationBotModeSelectOption_conversation": "Konversation", - "conversationBotModeSelectOption_textAdventure": "Text-Adventure", - "conversationBotModeSelectOption_storyGame": "Geschichtenspiel", - "conversationBotDiscussionZone_title": "Diskussionseinstellungen", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskussionsthema", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Diskussionsthema festlegen", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskussions-Schlüsselwörter", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Diskussions-Schlüsselwörter festlegen", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Kommagetrennte Liste von Schlüsselwörtern zur Steuerung der Diskussion", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Diskussionsaufforderung nach Zeitplan senden", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Stunden zwischen Diskussionsaufforderungen", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reagiert auf ⏩ Reaktion", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaktion zum Senden der Diskussionsaufforderung", - "conversationBotCustomZone_title": "Benutzerdefinierte Einstellungen", - "conversationBotCustomZone_customSystemPromptLabel": "System-Aufforderung", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Benutzerdefinierte System-Aufforderung festlegen", - "conversationBotCustomZone_customSystemPromptEmptyError": "Fehlende benutzerdefinierte System-Aufforderung", - "botConfig": "Bot- und Aktivitätseinstellungen", - "botConfigNoPermissionTitle": "Keine Berechtigung", - "botConfigNoPermissionMessage": "Kontaktieren Sie den Raum-Administrator, um die Bot-Konfiguration zu ändern", - "addConversationBotDialogTitleInvite": "Bestätigen Sie die Einladung des Gesprächs-Bots", - "addConversationBotButtonInvite": "Einladen", - "addConversationBotDialogInviteConfirmation": "Einladen", - "addConversationBotButtonTitleRemove": "Bestätigen Sie die Entfernung des Konversationsbots", - "addConversationBotButtonRemove": "Entfernen", - "addConversationBotDialogRemoveConfirmation": "Entfernen", - "conversationBotConfigConfirmChange": "Bestätigen", - "conversationBotStatus": "Bot einladen", - "conversationBotTextAdventureZone_title": "Textabenteuer", - "conversationBotTextAdventureZone_instructionLabel": "Anweisungen des Spielleiters", - "conversationBotTextAdventureZone_instructionPlaceholder": "Anweisungen des Spielleiters festlegen", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Fehlende Anweisungen des Spielleiters", - "studentAnalyticsNotAvailable": "Studentendaten sind derzeit nicht verfügbar", - "roomDataMissing": "Einige Daten in Räumen, in denen Sie kein Mitglied sind, könnten fehlen.", "updatePhoneOS": "Sie müssen möglicherweise die OS-Version Ihres Geräts aktualisieren.", "wordsPerMinute": "Wörter pro Minute", "autoIGCToolName": "Pangea Schreibhilfe automatisch ausführen", "autoIGCToolDescription": "Führen Sie die Pangea Chat-Grammatik- und Übersetzungs-Schreibhilfe automatisch aus, bevor Sie meine Nachricht senden.", - "runGrammarCorrection": "Nachricht überprüfen", - "grammarCorrectionFailed": "Zu behebenende Probleme", - "grammarCorrectionComplete": "Sieht gut aus!", "tooltipInstructionsTitle": "Nicht sicher, was das macht?", "tooltipInstructionsMobileBody": "Tippen und halten Sie Elemente, um Tooltips anzuzeigen.", "tooltipInstructionsBrowserBody": "Bewegen Sie den Mauszeiger über Elemente, um Tooltips anzuzeigen.", "chatCapacity": "Chat-Kapazität", "roomFull": "Dieser Raum ist bereits voll.", - "topicNotSet": "Das Thema wurde noch nicht festgelegt.", - "chatCapacityNotSet": "Dieser Chat hat keine Kapazitätsbegrenzung.", "chatCapacityHasBeenChanged": "Chat-Kapazität wurde geändert", "chatCapacitySetTooLow": "Die Chat-Kapazität muss mindestens {count} sein.", "chatCapacityExplanation": "Die Chat-Kapazität begrenzt die Anzahl der Mitglieder, die in einem Chat erlaubt sind.", - "chatExceedsCapacity": "Dieser Chat überschreitet seine Kapazität.", "tooManyRequest": "Zu viele Anfragen, bitte versuchen Sie es später erneut.", "enterNumber": "Bitte geben Sie eine ganze Zahl ein.", "buildTranslation": "Erstellen Sie Ihre Übersetzung aus den oben genannten Optionen", - "nonexistentSelection": "Auswahl existiert nicht mehr.", - "changeAnalyticsLanguage": "Analytics-Sprache ändern", "practice": "Üben", "noLanguagesSet": "Keine Sprachen festgelegt", - "noActivitiesFound": "Das ist für den Moment genug! Kommen Sie später wieder für mehr.", - "hintTitle": "Hinweis:", "speechToTextBody": "Bei Sprachnachrichten können Sie sowohl eine Transkription als auch die Wörter pro Minute des Sprechers sehen.", "versionNotFound": "Version nicht gefunden", "fetchingVersion": "Version wird abgerufen...", "versionFetchError": "Fehler beim Abrufen der Version", "versionText": "Version: {version}+{buildNumber}", - "languageButtonLabel": "Sprache: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatisches Abspielen der Übersetzung", - "interactiveTranslatorAutoPlayDesc": "Startet den interaktiven Übersetzer ohne Nachfrage.", - "changeAnalyticsView": "Analytics-Ansicht ändern", "l1TranslationBody": "Nachrichten in Ihrer Basissprache werden nicht übersetzt.", "deleteSubscriptionWarningTitle": "Sie haben ein aktives Abonnement", "deleteSubscriptionWarningBody": "Das Löschen Ihres Kontos wird Ihr Abonnement nicht automatisch kündigen.", @@ -4177,9 +3819,7 @@ "error520Title": "Bitte versuchen Sie es erneut.", "error520Desc": "Entschuldigung, wir konnten Ihre Nachricht nicht verstehen...", "wordsUsed": "Verwendete Wörter", - "errorTypes": "Fehlertypen", "level": "Stufe", - "canceledSend": "Senden abgebrochen", "morphsUsed": "Verwendete Morphs", "translationChoicesBody": "Klicken und halten Sie eine Option für einen Hinweis.", "grammar": "Grammatik", @@ -4189,7 +3829,6 @@ "reportContentIssueTitle": "Inhaltproblem melden", "feedback": "Optionale Rückmeldung", "reportContentIssueDescription": "Oh je! KI kann personalisierte Lernerfahrungen erleichtern, aber... halluziniert auch. Bitte geben Sie jegliches Feedback, das Sie haben, und wir versuchen es erneut.", - "changeContent": "Oh je! KI kann personalisierte Lernerfahrungen erleichtern, aber... halluziniert auch. Was soll es sein?", "clickTheWordAgainToDeselect": "Klicken Sie auf das ausgewählte Wort, um es abzuwählen.", "l2SupportNa": "Nicht verfügbar", "l2SupportAlpha": "Alpha", @@ -4423,7 +4062,6 @@ "grammarCopySPC": "Spezifizität", "grammarCopyPARTTYPE": "Partitivtyp", "grammarCopyINTREL": "Interrogativ-Relativ", - "grammarCopyNUMFORMpsor": "Besitzers Nummer", "grammarCopyUNKNOWN": "Unbekannt", "grammarCopyNUMBERPSOR": "Besitzers Nummer", "grammarCopyPOSS": "Possessiv", @@ -4469,28 +4107,14 @@ "grammarCopyVOICEdir": "Direkt", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Reziprok", - "enterPrompt": "Bitte Eingabeaufforderung eingeben", - "selectBotLanguage": "Bot-Sprache auswählen", - "chooseVoice": "Stimme wählen", - "enterLanguageLevel": "Bitte Sprachniveau eingeben", - "enterDiscussionTopic": "Bitte Diskussionsthema eingeben", - "selectBotChatMode": "Chat-Modus auswählen", - "messageNotInTargetLang": "Nachricht nicht in der Zielsprache", "other": "Andere", "levelShort": "LVL {level}", - "botModeValidation": "Bitte Chat-Modus auswählen", "clickBestOption": "Wählen Sie die besten Optionen, um Ihre Nachricht zu übersetzen!", "completeActivitiesToUnlock": "Absolvieren Sie mindestens eine Aktivität, um die Übersetzung freizuschalten!", - "botSettingsSubtitle": "Bot einladen, um die Chat-Aktivität zu moderieren", - "invitePeople": "Benutzer einladen", "noCapacityLimit": "Keine Kapazitätsbegrenzung", "downloadGroupText": "Gruppentext herunterladen", "notificationsOn": "Benachrichtigungen aktiviert", "notificationsOff": "Benachrichtigungen deaktiviert", - "chatCanBeFoundViaSearch": "Chat kann über Suche gefunden werden", - "requireCodeToJoin": "Code zum Beitreten erforderlich", - "canFindInSearch": "In Suche auffindbar", - "addChatToSpace": "Chat hinzufügen", "createChatAndInviteUsers": "Chat erstellen und Benutzer einladen", "updatedNewSpaceDescription": "Kurse ermöglichen es, Ihre Chats zu konsolidieren und private oder öffentliche Gemeinschaften aufzubauen.", "joinWithCode": "Mit Code beitreten", @@ -4526,39 +4150,19 @@ "constructUseCollected": "Im Chat gesammelt", "constructUseNanDesc": "Nicht anwendbar", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Mit Benutzername und Passwort anmelden", - "registrationEmailMessage": "Bitte bestätigen Sie Ihre E-Mail mit einem dort gesendeten Link. In einigen Fällen kann die E-Mail bis zu 5 Minuten dauern. Überprüfen Sie auch Ihren Spam-Ordner.", "enableTTSToolName": "Text-zu-Sprache aktiviert", "enableTTSToolDescription": "Erlauben Sie der App, Text-zu-Sprache-Ausgaben für Textteile in Ihrer Zielsprache zu generieren.", - "couldNotFindTTS": "Wir konnten keine Text-zu-Sprache-Engine für Ihre aktuelle Zielsprache finden.", - "ttsInstructionsHyperlink": "Klicken Sie hier, um Anweisungen zum Herunterladen einer neuen Stimme auf Ihrem Gerät anzuzeigen.", - "createAnAccount": "Ein Konto erstellen", - "signIn": "Anmelden", - "signUpWithEmail": "Mit E-Mail anmelden", - "signUpWithGoogle": "Mit Google anmelden", - "signUpWithApple": "Mit Apple anmelden", "yourUsername": "Ihr Benutzername", "yourEmail": "Ihre E-Mail", - "pleaseEnterAnEmail": "Bitte geben Sie eine E-Mail-Adresse ein", - "signInWithGoogle": "Mit Google anmelden", - "signInWithApple": "Mit Apple anmelden", - "chooseYourAvatar": "Wähle deinen Avatar", "iWantToLearn": "Ich möchte lernen", - "letsStart": "Lass uns anfangen", - "pleaseAgreeToTOS": "Bitte stimme den Allgemeinen Geschäftsbedingungen zu", "pleaseEnterEmail": "Bitte gib eine gültige E-Mail-Adresse ein.", - "pleaseSelectALanguage": "Bitte wähle eine Sprache", "myBaseLanguage": "Meine Basissprache", - "clickWordsInstructions": "🧻 Klicke auf ein Wort für Details. 🤐", - "chooseBestDefinition": "Was bedeutet dieses Wort?", "meaningSectionHeader": "Bedeutung:", "formSectionHeader": "In Chats verwendete Formen:", - "noEmojiSelectedTooltip": "Kein Emoji ausgewählt", "writingExercisesTooltip": "Schreiben", "listeningExercisesTooltip": "Hören", "readingExercisesTooltip": "Lesen", "meaningNotFound": "Bedeutung konnte nicht gefunden werden.", - "formsNotFound": "Formen konnten nicht gefunden werden.", "chooseBaseForm": "Wähle die Grundform", "notTheCodeError": "Entschuldigung, das ist nicht der Code!", "totalXP": "Gesamt-XP", @@ -4598,9 +4202,6 @@ "pickAnEmoji": "Welches ist dein Lieblings-Emoji für '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Ordne Bedeutungen den Wörtern in der Nachricht zu!", "doubleClickToEdit": "Doppelklicken zum Bearbeiten.", - "removeFeature": "Entferne {feature}", - "chooseCorrectLabel": "Wähle die richtige Beschriftung.", - "levelPopupTitle": "Herzlichen Glückwunsch zum Erreichen\nLevel {level}", "activityPlannerTitle": "Aktivitätsplaner", "topicLabel": "Thema", "topicPlaceholder": "Wählen Sie ein Thema...", @@ -4608,7 +4209,6 @@ "modePlaceholder": "Wählen Sie einen Modus...", "learningObjectiveLabel": "Lernziel", "learningObjectivePlaceholder": "Wählen Sie ein Lernziel...", - "mediaLabel": "Medien, die Lernende teilen sollen", "languageOfInstructionsLabel": "Sprache der Anweisungen", "targetLanguageLabel": "Zielsprache", "cefrLevelLabel": "CEFR-Niveau", @@ -4623,20 +4223,15 @@ "instructions": "Anweisungen", "numberOfLearners": "Anzahl der Lernenden", "mustBeInteger": "Muss eine ganze Zahl sein, z.B. 1, 2, 3, ...", - "noLemmasFound": "Es gibt keinen Wortschatz mit mehr als {xp} XP. Weiter üben!", "constructUsePvmDesc": "In Sprachmitteilung produziert", - "lockedMorphFeature": "Wartet auf Freischaltung", "leaveSpaceDescription": "Wenn Sie den Kurs verlassen, verlassen Sie alle Chats darin. Andere Nutzer sehen, dass Sie den Kurs verlassen haben.", - "whatIsLemma": "Was ist das Lemma?", "constructUseCorMmDesc": "Korrekte Nachrichtenbedeutung", "constructUseIncMmDesc": "Falsche Nachrichtenbedeutung", "constructUseIgnMmDesc": "Ignorierte Nachrichtenbedeutung", "clickForMeaningActivity": "Klicken Sie hier für eine Bedeutungsherausforderung", "meaning": "Bedeutung", "chatWith": "Gruppe mit {displayname}", - "slightlyOffensive": "Leicht anstößig", "clickOnEmailLink": "Bitte klicken Sie auf den Link in der E-Mail und fahren Sie fort.\n\nÜberprüfen Sie Ihren Spam-Ordner, falls die E-Mail nicht angekommen ist.", - "whoIsAllowedToJoinThisChat": "Wer darf diesem Chat beitreten", "dontForgetPassword": "Vergessen Sie nicht Ihr Passwort!", "enableAutocorrectToolName": "Gerätekorrektur aktivieren", "enableAutocorrectDescription": "Wenn Ihr Gerät die Sprache unterstützt, die Sie lernen, können Sie die Gerätekorrektur aktivieren, um häufige Fehler beim Tippen zu korrigieren.", @@ -4664,48 +4259,26 @@ "autocorrectNotAvailable": "Leider wird diese Plattform derzeit nicht für diese Funktion unterstützt. Bleiben Sie dran für weitere Entwicklungen!", "pleaseUpdateApp": "Bitte aktualisieren Sie die App, um fortzufahren.", "chooseEmojiInstructionsBody": "Ordnen Sie Emojis den Wörtern zu, die sie am besten repräsentieren. Keine Sorge! Es gibt keine Punktabzüge bei Meinungsverschiedenheiten. 😅", - "pickAnEmojiFor": "Wählen Sie ein Emoji für {lemma}", "analyticsVocabListBody": "Das ist Ihr gesamter Wortschatz! Während Sie XP für jedes Wort verdienen, entwickeln sie sich vom Keimling zur vollen Blüte. Klicken Sie auf ein Wort, um mehr Details zu sehen.", "morphAnalyticsListBody": "Dies sind alle Grammatik-Konzepte in der Sprache, die Sie lernen! Sie werden sie freischalten, wenn Sie ihnen beim Chatten begegnen. Klicken Sie für Details.", "knockSpaceSuccess": "Sie haben die Anfrage gestellt, an diesem Kurs teilzunehmen! Ein Administrator wird auf Ihre Anfrage antworten, sobald er sie erhält 😄", - "joinByCode": "Per Code beitreten", "chooseWordAudioInstructionsBody": "Hören Sie sich die vollständige Nachricht an. Ordnen Sie dann die Audios den Wörtern zu.", "chooseMorphsInstructionsBody": "Klicken Sie auf die Puzzleteile für Grammatikfragen!", - "inviteAndLaunch": "Starten und einladen", - "createOwnChat": "Eigenen Chat erstellen", "pleaseEnterInt": "Bitte geben Sie eine Zahl ein", "home": "Startseite", "join": "Beitreten", "readingAssistanceOverviewBody": "Klicken Sie auf die Buttons unten für Minispiele zum Zuordnen von Emojis, Audios, Wortbedeutungen und Grammatik-Konzepten. Oder klicken Sie auf ein Wort für Details.", - "learnByTexting": "Lernen durch Texten", - "levelSummaryTrigger": "Zusammenfassung anzeigen", "levelSummaryPopupTitle": "Level {level} Zusammenfassung", - "referFriends": "Freunde empfehlen", - "referFriendDialogTitle": "Einen Freund zu deinem Gespräch einladen", - "referFriendDialogDesc": "Hast du einen Freund, der begeistert ist, eine neue Sprache mit dir zu lernen? Dann kopiere und sende diesen Einladungslink, um beizutreten und noch heute mit dir zu chatten.", - "youUnlocked": "Du hast freigeschaltet", "resetInstructionTooltipsTitle": "Anleitungstooltips zurücksetzen", "resetInstructionTooltipsDesc": "Klicke, um Anleitungstooltips wie für einen völlig neuen Benutzer anzuzeigen.", "selectForGrammar": "Wähle ein Grammatik-Icon für Aktivitäten und Details.", - "newChatActivityTitle": "Möchtest du eine lustige Aktivität hinzufügen?", - "newChatActivityDesc": "Mache jeden Gruppenchat zu einem Abenteuer mit Activity Planner! Setze fesselnde Themen und Ziele für die Gruppe und erwecke Gespräche mit atemberaubenden Bildern zum Leben. Entfache kreative Diskussionen und halte den Spaß mühelos am Laufen!", - "exploreMore": "Mehr entdecken", "randomize": "Zufällig", "clear": "Löschen", "makeYourOwnActivity": "Erstelle deine eigene Aktivität", "featuredActivities": "Vorgestellt", - "goToChat": "Zum Chat", "save": "Speichern", - "selectActivity": "Aktivität auswählen", - "wordFocusListeningMultipleChoice": "Welcher Ton passt zum Wort?", "startChat": "Chat starten", "translationProblem": "Übersetzungsproblem", - "perfectTranslation": "Perfekte Übersetzung!", - "greatJobTranslation": "Großartige Arbeit bei dieser Übersetzung!", - "goodJobTranslation": "Gute Arbeit bei dieser Übersetzung.", - "makingProgress": "Du machst Fortschritte!", - "keepPracticing": "Weiter üben!", - "niceJob": "Gute Arbeit!", "askToJoin": "Frage zum Beitritt", "emptyChatWarningTitle": "Chat ist leer", "emptyChatWarningDesc": "Du hast niemanden zu deinem Chat eingeladen. Gehe zu den Chat-Einstellungen, um deine Kontakte oder den Bot einzuladen. Du kannst das auch später tun.", @@ -4724,8 +4297,6 @@ "languageLevelC2Desc": "Ich kann fast alles, was ich höre oder lese, verstehen und mich fließend und präzise ausdrücken.", "newVocab": "Neues Vokabular", "newGrammar": "Neue Grammatik-Konzepte", - "congratulationsOnReaching": "Du hast Level {level} erreicht!", - "seeDetails": "Details anzeigen", "choosePracticeMode": "Klicken Sie auf eine der Schaltflächen oben, um eine Übungsaktivität zu starten", "ban": "Ban", "unban": "Entbannen", @@ -4739,8 +4310,6 @@ "timesUsedWithAssistance": "Anzahl der Verwendungen mit Unterstützung", "shareInviteCode": "Einladungs-Code teilen: {code}", "leaderboard": "Bestenliste", - "welcomeUser": "Willkommen {user}", - "joinSpaceOnboardingDesc": "Haben Sie einen Einladungscode oder Link zu einem öffentlichen Kurs?", "skipForNow": "Jetzt überspringen", "permissions": "Berechtigungen", "spaceChildPermission": "Wer kann neue Chats zu diesem Kurs hinzufügen", @@ -4748,12 +4317,8 @@ "defaultOption": "Standard", "deleteChatDesc": "Möchten Sie diesen Chat wirklich löschen? Er wird für alle Teilnehmer gelöscht und alle Nachrichten im Chat sind nicht mehr für Übungen oder Lernanalysen verfügbar.", "deleteSpaceDesc": "Der Kurs und alle ausgewählten Chats werden für alle Teilnehmer gelöscht und alle Nachrichten im Chat sind nicht mehr für Übungen oder Lernanalysen verfügbar. Diese Aktion kann nicht rückgängig gemacht werden.", - "chatWithActivities": "Chat mit Aktivitäten", "launch": "Starten", - "launchActivityToChats": "Aktivität zu Chats starten", "searchChats": "Chats suchen", - "selectChats": "Chats auswählen", - "selectChatToStart": "Fertig! Wählen Sie einen Chat zum Starten", "maxFifty": "Maximal 50", "configureSpace": "Kurs konfigurieren", "pinMessages": "Nachrichten anheften", @@ -4767,9 +4332,7 @@ "announcements": "Ankündigungen", "activities": "Aktivitäten", "access": "Zugang", - "botSettings": "Bot-Einstellungen", "activitySuggestionTimeoutMessage": "Wir arbeiten hart daran, mehr Aktivitäten für Sie zu generieren. Bitte schauen Sie in einer Minute wieder vorbei", - "accessSettingsWarning": "Ups! Es sieht so aus, als hätten Sie keine Berechtigung, die Zugriffsregeln dieses Raums festzulegen. Überprüfen Sie diese, um sicherzustellen, dass sie Ihren Anforderungen entsprechen, und sprechen Sie mit einem Raumadministrator, wenn Sie Änderungen vornehmen müssen", "howSpaceCanBeFound": "Wie dieser Kurs gefunden werden kann", "private": "Privat", "cannotBeFoundInSearch": "In der Suche nicht auffindbar", @@ -4782,16 +4345,6 @@ "canBeFoundViaKnock": "• Anfrage zum Beitritt und Admin-Genehmigung", "youHaveLeveledUp": "Du hast ein Level aufgestiegen!", "sendActivities": "Aktivitäten senden", - "getStarted": "Loslegen", - "getStartedBotChatDesc": "Das Chatten mit KI ist ein großartiger Einstieg, und Pangea-Lese-, Schreib-, Hör- und Sprechwerkzeuge machen es einfach!", - "getStartedCommunitiesDesc": "Lernen mit einer Gemeinschaft ist der Bereich, in dem Pangea Chat glänzt!\nDu kannst deiner Klasse beitreten, einen Kurs finden oder sogar deinen eigenen erstellen!", - "getStartedFriendsDesc": "Hast du einen Freund, der mit dir lernen möchte?", - "getStartedBotChatComplete": "Gut gemacht! Du chattest mit dem Bot!", - "getStartedCommunitiesComplete": "Großartig, du hast an einem Kurs teilgenommen!", - "getStartedComplete": "Du hast diesen Abschnitt abgeschlossen!\nErkunde weiterhin unsere erstaunlichen Funktionen, indem du mit Freunden chattest!", - "getStartedFriendsComplete": "Woohoo! Du hast Freunde! 😉", - "getStartedBotChatButton": "Beginne das Chatten!", - "getStartedFriendsButton": "Mit einem Freund chatten", "groupChat": "Gruppenchats", "directMessage": "Direktnachricht", "newDirectMessage": "Neue Direktnachricht", @@ -4807,7 +4360,6 @@ "mySavedActivities": "Meine gespeicherten Aktivitäten", "noSavedActivities": "Keine gespeicherten Aktivitäten", "saveActivity": "Aktivität speichern", - "yourSavedActivities": "Gespeicherte Aktivitäten", "failedToPlayVideo": "Video konnte nicht abgespielt werden", "done": "Fertig", "inThisSpace": "In diesem Kurs", @@ -4846,37 +4398,27 @@ "maximumActivityParticipants": "Jede Aktivität kann maximal {count} Teilnehmer haben.", "pending": "Ausstehend", "inactive": "Inaktiv", - "unjoinedActivityMessage": "Möchten Sie teilnehmen? Wählen Sie eine offene Rolle!\nOder verbringen Sie einfach Zeit und schauen Sie sich die Show an!", - "fullActivityMessage": "Fühlen Sie sich frei, die Show zu schauen! Während es keine offenen Rollen zur Teilnahme gibt, können Sie den Chat ansehen!", "confirmRole": "Rolle bestätigen", "openRoleLabel": "OFFEN", "joinedTheActivity": "👋 {username} ist als {role} beigetreten", "finishedTheActivity": "🎯 {username} hat diese Aktivität beendet", - "endActivityTitle": "Ich bin fertig", - "endActivityDesc": "Haben Sie die Ziele erreicht?\nDies ist Ihre Bestätigung, dass Sie das Schreiben beenden. Aber keine Sorge, der Spaß geht im Chat weiter! Fühlen Sie sich frei, herumzuhängen und die Show zu genießen, bis alle auf 'Fertig' klicken.", "archiveToAnalytics": "Zu meinen abgeschlossenen Aktivitäten hinzufügen", "activitySummaryError": "Aktivitätszusammenfassungen nicht verfügbar", "requestSummaries": "Zusammenfassungen anfordern", - "loadingActivitySummary": "Lade Aktivitätszusammenfassung...", "generatingNewActivities": "Sie sind der erste Benutzer dieses Sprachpaares! Bitte geben Sie uns eine Minute, wir bereiten Aktivitäten nur für Sie vor.", - "requestAccessTitle": "Zugriff auf Analytics anfordern?", + "requestAccessTitle": "Zugriff auf Analysen anfordern?", "requestAccessDesc": "Möchten Sie Zugriff auf die Teilnehmeranalyse beantragen?\n\nWenn die Teilnehmer zustimmen, können Administratoren dieses Kurses ihre:\n • Gesamtvokabular\n • Gesammtgrammatik-Konzepte\n • Anzahl der abgeschlossenen Aktivitätssitzungen\n • die verwendeten Grammatik-Konzepte, richtig und falsch\n\nSie werden nicht in der Lage sein, ihre:\n • Nachrichten in Chats außerhalb des Kurses\n • Vokabelliste", "requestAccess": "Zugriff anfordern ({count})", "analyticsInactiveTitle": "Anfragen an inaktive Benutzer konnten nicht gesendet werden", "analyticsInactiveDesc": "Inaktive Benutzer, die sich seit der Einführung dieses Features nicht angemeldet haben, sehen Ihre Anfrage nicht.\n\nDer Button „Anfrage“ erscheint, sobald sie zurückkehren. Sie können die Anfrage später erneut senden, indem Sie auf den Button „Anfrage“ unter ihrem Namen klicken, wenn dieser verfügbar ist.", "accessRequestedTitle": "Anfrage für Analytics-Zugriff", - "accessRequestedDesc": "Die Administratoren von „{space}“ bitten um Zugriff auf Ihre Lernanalysen.\n\nWenn Sie zustimmen, können die Administratoren dieses Kurses Ihre:\n • Gesamtvokabeln\n • Gesamtkonzept der Grammatik\n • Insgesamt abgeschlossene Aktivitätssitzungen\n • Die verwendeten Grammatikthemen, richtig und falsch\n\nSie werden nicht in der Lage sein, Ihre:\n • Nachrichten in Chats außerhalb des Kurses\n • Vokabelliste zu sehen", - "allowAccess": "Zugriff erlauben", - "denyAccess": "Zugriff verweigern", + "accessRequestedDesc": "Anfordernde(r) Admin(s): {admin} \n\nAdmins von “{space}” bitten darum, Ihre Lernanalysen einzusehen.\n\nWenn Sie zustimmen, können sie Folgendes einsehen:\n • gesamten Wortschatz\n • gesamte Grammatik Konzepte\n • insgesamt abgeschlossene Aktivitätssitzungen\n • die spezifischen Grammatik Konzepte, die korrekt und inkorrekt verwendet wurden\n\nSie werden nicht in der Lage sein, Folgendes einzusehen:\n • Nachrichten in Chats außerhalb des Kurses\n • Wortschatzliste", "adminRequestedAccess": "Administratoren haben um Zugriff auf Ihre Analysen gebeten.", "lastUpdated": "Aktualisiert\n{time}", "activityFinishedMessage": "Alles erledigt!", "endForAll": "Für alle beenden", "newCourse": "Neuer Kurs", - "newCourseSubtitle": "Welchen Kursplan möchten Sie verwenden?", - "failedToLoadCourses": "Kurse konnten nicht geladen werden", "numModules": "{num} Module", - "numActivityPlans": "{num} Aktivitätspläne", "coursePlan": "Kursplan", "editCourseLater": "Sie können den Titel, die Beschreibungen und das Kursbild später bearbeiten.", "newCourseAccess": "Standardmäßig sind Kurse privat und erfordern die Genehmigung eines Administrators, um beizutreten. Sie können diese Einstellungen jederzeit ändern.", @@ -4890,17 +4432,11 @@ "accessDesc": "Sie können Ihren Kurs für die Welt öffnen! Oder machen Sie Ihren Kurs privat und sicher.", "createGroupChatDesc": "Während Aktivitätssitzungen starten und enden, bleiben Gruppenchats für die routinemäßige Kommunikation offen.", "deleteDesc": "Nur Administratoren können einen Kurs löschen. Dies ist eine zerstörerische Aktion, die alle Benutzer entfernt und alle ausgewählten Chats im Kurs löscht. Bitte vorsichtig vorgehen.", - "failedToLoadCourseInfo": "Kursinformationen konnten nicht geladen werden", "noCourseFound": "Oh, dieser Kurs braucht einen Plan!\n\nKurspläne sind eine Abfolge von Themen und Gesprächsaktivitäten.", "additionalParticipants": "+ {num} weitere", - "activityNotFoundForCourse": "Diese Aktivität wurde im Kurs nicht gefunden", - "courseChats": "Kurschats", - "myActivitySessions": "Meine Aktivitätssitzungen", "directMessages": "Direktnachrichten", "whatNow": "Was jetzt?", "chooseNextActivity": "Wählen Sie Ihre nächste Aktivität!", - "seeInstructions": "Anweisungen anzeigen", - "hideInstructions": "Anweisungen ausblenden", "letsGo": "Los geht's", "chooseRole": "Wähle eine Rolle!", "chooseRoleToParticipate": "Wähle eine Rolle zur Teilnahme!", @@ -4910,23 +4446,15 @@ "inviteFriends": "Freunde einladen", "waitNotDone": "Warte, ich bin noch nicht fertig!", "waitingForOthersToFinish": "Warte, bis die anderen fertig sind...", - "saveToCompletedActivities": "In abgeschlossene Aktivitäten speichern", "generatingSummary": "Chat wird analysiert und Ergebnisse werden generiert", - "instructionsLanguage": "Anleitungssprache", "findCourse": "Kurs finden", - "activityCompletedDesc": "Deine abgeschlossene Aktivität wurde zu den Analysen hinzugefügt, wo du die verwendete Sprache überprüfen und üben kannst.", "pingParticipantsNotification": "{user} sucht nach Nutzern, die an der Sitzung in {room} teilnehmen möchten", "course": "Kurs", "courses": "Kurse", "courseName": "Kursname", "createNewCourse": "Neuer Kurs", - "publicCourses": "Öffentliche Kurse", "goToCourse": "Zum Kurs: {course}", "activityComplete": "Diese Aktivität wurde abgeschlossen. Die Zusammenfassung der Aktivität sollte unten verfügbar sein.", - "haventChattedMuch": "Es sieht so aus, als hätten Sie nicht viel gechattet, versuchen Sie, mehr Vokabeln zu verwenden! Wenn Sie das Gefühl haben, Ihr Ziel erreicht zu haben, können Sie die Aktivität unten beenden.", - "haveChatted": "Es sieht so aus, als hätten Sie schon eine Weile gechattet! Wenn Sie das Gefühl haben, Ihr Ziel erreicht zu haben, beenden Sie die Aktivität, und wir erstellen eine Zusammenfassung im Chat!", - "userDoneAndWaiting": "{num1}/{num2} Teilnehmer haben die Aktivität beendet. Warten Sie, bis alle fertig sind, und wir erstellen eine Zusammenfassung im Chat! \n\nWenn Sie das Gespräch wieder aufnehmen möchten, klicken Sie auf die Schaltfläche 'Weiter' im Chat.", - "othersDoneAndWaiting": "{num1}/{num2} sind fertig. Haben Sie Ihr Ziel erreicht?", "startNewSession": "Neue Sitzung starten", "joinOpenSession": "Offene Sitzung beitreten", "less": "weniger", @@ -4936,7 +4464,6 @@ "openToJoin": "Offen zum Beitreten", "results": "Ergebnisse", "activityDone": "Aktivität abgeschlossen!", - "moreLabel": "mehr", "promoCodeInfo": "Promo-Codes können auf der nächsten Seite eingegeben werden", "editsComingSoon": "Die Möglichkeit, Städte und Aktivitäten zu bearbeiten, kommt bald.", "editing": "Bearbeiten", @@ -4952,13 +4479,10 @@ "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", - "chooseLanguage": "Wähle eine Sprache.", + "chooseLanguage": "Wählen Sie eine Zielsprache.", "planTrip": "Plane deine Reise", "howAreYouTraveling": "Wie reist du?", "unlockPrivateTrip": "Einen privaten Trip freischalten", @@ -4971,25 +4495,20 @@ "courseCode": "Was ist das geheime Passwort?", "courseCodeHint": "Reisecode oder Link", "unlockMyTrip": "Meinen Trip freischalten", - "anyLevel": "Jedes Niveau", "signupOption": "Wie möchten Sie sich anmelden?", "withApple": "Mit Apple", "withGoogle": "Mit Google", "withEmail": "Mit E-Mail", "createAccount": "Konto erstellen", - "noCoursesFound": "Keine Kurse gefunden", "loginWithEmail": "Mit E-Mail anmelden", "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", - "allCefrLevels": "Alle CEFR-Stufen", "chatListTooltip": "Hier finden Sie Ihre Direktnachrichten! Klicken Sie auf das Avatar eines Nutzers und “Unterhaltung starten”, um eine DM zu senden.", "directMessageBotTitle": "Direktnachricht Pangea Bot", "feedbackTitle": "Aktivitätsfeedback", - "feedbackDesc": "Wie sollte die Aktivität verbessert werden? Wenn Sie einige Details angeben können, nehmen wir die Änderungen vor!", "feedbackHint": "Ihr Feedback", "feedbackButton": "Feedback absenden", "directMessageBotDesc": "Mit Menschen zu sprechen macht mehr Spaß, aber... KI ist immer bereit!", @@ -5012,30 +4531,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5051,18 +4546,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5087,18 +4570,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5135,38 +4606,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5175,62 +4618,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5267,10 +4666,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5279,14 +4674,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5295,46 +4682,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5343,10 +4694,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5403,18 +4750,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5423,14 +4758,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5459,18 +4786,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5479,42 +4794,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5523,14 +4806,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5551,26 +4826,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5591,10 +4846,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5627,25 +4878,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5702,34 +4934,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5758,778 +4962,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7522,14 +5958,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7541,14 +5969,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7580,10 +6000,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7592,18 +6008,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7612,14 +6016,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7644,38 +6040,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7721,10 +6089,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7749,10 +6113,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7777,10 +6137,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7789,66 +6145,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7869,42 +6169,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7929,154 +6205,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8093,18 +6221,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8125,14 +6241,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8149,10 +6257,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8165,14 +6269,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8181,14 +6277,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8216,26 +6304,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8264,18 +6332,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8312,10 +6372,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9248,10 +7304,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9432,34 +7484,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9472,10 +7496,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9484,14 +7504,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9508,22 +7520,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9671,14 +7667,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9687,34 +7675,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9723,54 +7683,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9779,10 +7703,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9799,10 +7719,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9974,26 +7890,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10022,10 +7918,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10082,30 +7974,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10134,18 +8010,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10262,14 +8130,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10282,10 +8142,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10294,14 +8150,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10318,14 +8166,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10334,22 +8174,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10362,18 +8186,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10390,22 +8202,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10414,30 +8214,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10510,18 +8286,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10578,18 +8342,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10618,30 +8370,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10694,18 +8430,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10754,46 +8482,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10858,10 +8546,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11033,14 +8717,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11068,14 +8744,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11088,10 +8756,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11127,19 +8791,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11164,14 +8823,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11180,14 +8831,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11240,10 +8883,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11256,18 +8895,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11280,14 +8907,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11328,26 +8947,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11375,10 +8982,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11389,36 +8992,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11455,10 +9028,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11523,18 +9092,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11599,10 +9156,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11623,10 +9176,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11643,10 +9192,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11655,10 +9200,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11671,10 +9212,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11699,16 +9236,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Freunde zur Aktivität einladen", - "inviteFriendsToActivityCourse": "Freunde zur Aktivität und zum Kurs einladen", "feedbackRespDesc": "Kehren Sie morgen zurück, um Updates zur Aktivität zu erhalten.", "activityDropdownDesc": "Wenn Sie mit dieser Aktivität fertig sind, klicken Sie unten", - "activityAnalyticsListBody": "Dies sind Ihre abgeschlossenen Aktivitäten! Nach Abschluss der Aktivitäten können Sie sie hier ansehen.", "languageMismatchTitle": "Sprachinkonsistenz", "languageMismatchDesc": "Ihre Zielsprache stimmt nicht mit der Sprache dieser Aktivität überein. Möchten Sie Ihre Zielsprache aktualisieren?", "reportWordIssueTooltip": "Meldung eines Wortinformationsproblems", "tokenInfoFeedbackDialogTitle": "Feedback zu Wortinformationen", - "tokenInfoFeedbackDialogDesc": "KI macht Fehler. Bitte beschreiben Sie alle Probleme, die Sie mit den obigen Informationen gefunden haben.", "noPublicCoursesFound": "Keine öffentlichen Kurse gefunden. Möchten Sie einen erstellen?", "noCourseTemplatesFound": "Wir konnten keine Kurse für Ihre Zielsprache finden. Sie können in der Zwischenzeit mit Pangea Bot chatten und später nach weiteren Kursen suchen.", "botActivityJoinFailMessage": "Pangea Bot benötigt etwas Zeit, um zu antworten. Bitte versuchen Sie es später erneut oder laden Sie einen Freund ein.", @@ -11716,14 +9249,6 @@ "leaveDesc": "Diesen Raum und alle Chats darin verlassen", "selectAll": "Alle auswählen", "deselectAll": "Alle abwählen", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11732,10 +9257,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11752,10 +9273,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11789,7 +9306,6 @@ "newMessageInPangeaChat": "🗨️ Neue Nachricht im Pangea-Chat", "shareCourse": "Kurs teilen", "addCourse": "Einen Kurs hinzufügen", - "joinCourseWithCode": "Kurs mit Code beitreten", "joinPublicCourse": "Öffentlichen Kurs beitreten", "vocabLevelsDesc": "Hier kommen die Vokabeln hin, sobald du sie aufgestuft hast!", "highlightVocabTooltip": "Hebe die Zielvokabeln unten hervor, indem du sie im Chat sendest oder mit ihnen übst.", @@ -11813,10 +9329,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11825,7 +9337,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Keine DMs oder Chats gefunden. Stellen Sie sicher, dass Ihre Suche korrekt geschrieben ist.", + "activityAnalyticsTooltipBody": "Dies sind Ihre gespeicherten Aktivitäten zur Überprüfung und Übung.", + "numSavedActivities": "Anzahl der gespeicherten Aktivitäten", + "saveActivityTitle": "Aktivität speichern", + "saveActivityDesc": "Gut gemacht! Speichern Sie diese Aktivität für eine spätere Überprüfung und Übung.", + "levelInfoTooltip": "Hier können Sie alle Punkte sehen, die Sie verdient haben und wie!", + "alreadyInCourseWithID": "Sie sind bereits in einem Kurs mit diesem Plan. Möchten Sie einen Kurs mit demselben Plan erstellen oder zum bestehenden Kurs gehen?", + "goToExistingCourse": "Zum bestehenden Kurs gehen", + "emojiView": "Emoji-Ansicht", + "feedbackDialogDesc": "Ich mache auch Fehler! Gibt es etwas, das mir helfen kann, mich zu verbessern?", + "contactHasBeenInvitedToTheCourse": "Kontakt wurde zum Kurs eingeladen", + "activityStatsButtonTooltip": "Aktivitätsinformationen", + "allow": "Erlauben", + "deny": "Ablehnen", + "enabledRenewal": "Abonnementverlängerung aktivieren", + "subscriptionEndsOn": "Abonnement endet am", + "subscriptionRenewsOn": "Abonnement erneuert sich am", + "waitForSubscriptionChanges": "Änderungen an Ihrem Abonnement können einen Moment dauern, um in der App angezeigt zu werden.", + "subscribeReadingAssistance": "Abonnieren, um Nachrichtentools freizuschalten", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharisch", + "arDisplayName": "Arabisch", + "asDisplayName": "Assamesisch", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Aserbaidschanisch", + "baDisplayName": "Baskirisch", + "banDisplayName": "Balinésisch", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Weißrussisch", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgarisch", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalisch", + "bnBDDisplayName": "Bengalisch (Bangladesch)", + "bnINDisplayName": "Bengalisch (Indien)", + "brDisplayName": "Bretonisch", + "bsDisplayName": "Bosnisch", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Burjatisch", + "caDisplayName": "Katalanisch", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Zentral-Kurdisch", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsisch", + "crhDisplayName": "Krim-Türkisch", + "crsDisplayName": "Seselwa-Kreolisch-Französisch", + "csDisplayName": "Tschechisch", + "cvDisplayName": "Tschuwasch", + "cyDisplayName": "Walisisch", + "daDisplayName": "Dänisch", + "deDisplayName": "Deutsch", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Englisch", + "enAUDisplayName": "Englisch (Australien)", + "enGBDisplayName": "Englisch (Vereinigtes Königreich)", + "enINDisplayName": "Englisch (Indien)", + "enUSDisplayName": "Englisch (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spanisch", + "esESDisplayName": "Spanisch (Spanien)", + "esMXDisplayName": "Spanisch (Mexiko)", + "euDisplayName": "Baskisch", + "faDisplayName": "Persisch", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnisch", + "filDisplayName": "Filipino", + "fjDisplayName": "Fidschian", + "foDisplayName": "Färöisch", + "frDisplayName": "Französisch", + "frCADisplayName": "Französisch (Kanada)", + "frFRDisplayName": "Französisch (Frankreich)", + "fyDisplayName": "Westfriesisch", + "gaDisplayName": "Irisch", + "gaaDisplayName": "Ga", + "gdDisplayName": "Schottisch-Gälisch", + "glDisplayName": "Galizisch", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiian", + "heDisplayName": "Hebräisch", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatisch", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitianisch Kreolisch", + "huDisplayName": "Ungarisch", + "hyDisplayName": "Armenisch", + "idDisplayName": "Indonesisch", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Isländisch", + "itDisplayName": "Italienisch", + "jaDisplayName": "Japanisch", + "jvDisplayName": "Javanesisch", + "kaDisplayName": "Georgisch", + "kkDisplayName": "Kasachisch", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreanisch", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kaschmirisch", + "ktuDisplayName": "Kituba (Demokratische Republik Kongo)", + "kuDisplayName": "Kurdisch", + "kyDisplayName": "Kirgisisch", + "laDisplayName": "Latein", + "lbDisplayName": "Luxemburgisch", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgisch", + "lijDisplayName": "Ligurisch", + "lmoDisplayName": "Lombardisch", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litauisch", + "ltgDisplayName": "Latgalisch", + "luoDisplayName": "Luo (Kenia und Tansania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lettisch", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Mazedonisch", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolisch", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaiisch", + "msArabDisplayName": "Malaiisch (Arabisch)", + "msMYDisplayName": "Malaiisch (Malaysia)", + "mtDisplayName": "Maltesisch", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmesisch", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norwegisch (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Niederländisch", + "nlBEDisplayName": "Flämisch", + "noDisplayName": "Norwegisch", + "nrDisplayName": "Süd-Ndebele", + "nsoDisplayName": "Nord-Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okzitanisch", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polnisch", + "psDisplayName": "Paschtu", + "ptDisplayName": "Portugiesisch", + "ptBRDisplayName": "Portugiesisch (Brasilien)", + "ptPTDisplayName": "Portugiesisch (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumänisch", + "roMDDisplayName": "Moldawisch", + "romDisplayName": "Romanes", + "ruDisplayName": "Russisch", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sizilianisch", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Singhalesisch", + "skDisplayName": "Slowakisch", + "slDisplayName": "Slowenisch", + "smDisplayName": "Samoanisch", + "snDisplayName": "Shona", + "soDisplayName": "Somalisch", + "sqDisplayName": "Albanisch", + "srDisplayName": "Serbisch", + "srMEDisplayName": "Montenegrinisch", + "ssDisplayName": "Swati", + "stDisplayName": "Süd-Sotho", + "suDisplayName": "Sundanesisch", + "svDisplayName": "Schwedisch", + "swDisplayName": "Swahili", + "szlDisplayName": "Schlesisch", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadschikisch", + "thDisplayName": "Thailändisch", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmenisch", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Türkisch", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatarisch", + "ugDisplayName": "Uigur", + "ukDisplayName": "Ukrainisch", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indien)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Usbekisch", + "viDisplayName": "Vietnamesisch", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddisch", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonesisch", + "yueCNDisplayName": "Kantonesisch (China)", + "yueHKDisplayName": "Kantonesisch (Hongkong)", + "zhDisplayName": "Chinesisch", + "zhCNDisplayName": "Chinesisch (Vereinfacht)", + "zhTWDisplayName": "Chinesisch (Traditionell)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11892,6 +10590,7 @@ "notStartedActivitiesTitle": "Offene Sitzungen ({num})", "inProgressActivitiesTitle": "Gerade jetzt ({num})", "completedActivitiesTitle": "Fertig ({num})", + "pickDifferentActivity": "Wählen Sie eine andere Aktivität", "inOngoingActivity": "Sie haben eine laufende Aktivität!", "@notStartedActivitiesTitle": { "type": "String", @@ -11917,10 +10616,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ihre Zielsprache stimmt nicht mit dieser Nachricht überein. Möchten Sie Ihre Zielsprache aktualisieren?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Das sind alle in diesem Kurs. Klicken Sie auf das Avatar eines Benutzers und \"Gespräch starten\", um eine DM zu senden.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Dieses Vokabelwort wird dauerhaft aus Ihren Analysen entfernt", + "woman": "Frau", + "man": "Mann", + "otherGender": "Sonstiges", + "unselectedGender": "Wählen Sie eine Geschlechtsoption", + "gender": "Geschlecht", + "chatParticipantTooltip": "Das sind alle in diesem Chat. Klicken Sie auf das Avatar eines Benutzers und \"Gespräch starten\", um eine DM zu senden.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Lernwerkzeuge sind für Nachrichten, die nicht in deiner Zielsprache sind, deaktiviert.", + "vocabEmoji": "Vokabel-Emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Anforderung der Regeneration", + "optionalRegenerateReason": "(Optional) Grund", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Sie haben das Emoji für {lemma} festgelegt! Wir werden dieses Emoji verwenden, um das Wort in zukünftigen Übungsaktivitäten darzustellen.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Warten auf den Abschluss der Anmeldung", + "ssoDialogDesc": "Wir haben einen neuen Tab geöffnet, damit Sie sich sicher anmelden können.", + "ssoDialogHelpText": "🤔 Wenn Sie den neuen Tab nicht gesehen haben, überprüfen Sie bitte Ihren Popup-Blocker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Spracheinstellungen deaktivieren", + "disableLanguageToolsDesc": "Möchten Sie die automatische Sprachunterstützung deaktivieren?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Zugriff verweigert. Aktivieren Sie die Aufnahmeberechtigungen, um Sprachnachrichten aufzunehmen.", + "genericWebRecordingError": "Etwas ist schiefgelaufen. Wir empfehlen, den Chrome-Browser zu verwenden, wenn Sie Nachrichten aufnehmen.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Für das beste Erlebnis mit dieser Anwendung erweitern Sie bitte Ihre Bildschirmgröße.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivitäten zum Freischalten des nächsten Themas", "activitiesToUnlockTopicDesc": "Legen Sie die Anzahl der Aktivitäten fest, um das nächste Kursthema freizuschalten", "@activitiesToUnlockTopicTitle": { @@ -11930,5 +10747,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Korrekte Vokabeldefinitionsübung", + "constructUseIncLMDesc": "Falsche Vokabeldefinitionsübung", + "constructUseCorLADesc": "Korrekte Vokabelaudioübung", + "constructUseIncLADesc": "Falsche Vokabelaudioübung", + "constructUseBonus": "Bonus während der Vokabelübung", + "practiceVocab": "Vokabeln üben", + "selectMeaning": "Wähle die Bedeutung", + "selectAudio": "Wähle das passende Audio", + "congratulations": "Herzlichen Glückwunsch!", + "anotherRound": "Eine weitere Runde", + "noActivityRequest": "Keine aktuellen Aktivitätsanfragen.", + "quit": "Beenden", + "congratulationsYouveCompletedPractice": "Herzlichen Glückwunsch! Sie haben die Übungssitzung abgeschlossen.", + "mustHave10Words": "Sie müssen mindestens 10 Vokabeln haben, um sie zu üben. Versuchen Sie, mit einem Freund oder dem Pangea Bot zu sprechen, um mehr zu entdecken!", + "botSettings": "Bot-Einstellungen", + "activitySettingsOverrideWarning": "Sprache und Sprachniveau werden durch den Aktivitätsplan bestimmt", + "voice": "Stimme", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index 23cfc88c3..a8651b345 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -3323,28 +3323,16 @@ "commandHint_logoutall": "Αποσυνδεθείτε από όλες τις ενεργές συσκευές", "displayNavigationRail": "Εμφάνιση της γραμμής πλοήγησης σε κινητά", "customReaction": "Προσαρμοσμένη αντίδραση", - "accountInformation": "Πληροφορίες λογαριασμού", - "addGroupDescription": "Προσθέστε περιγραφή chat", - "addNewFriend": "Προσθέστε νέο φίλο", - "alreadyHaveAnAccount": "Έχετε ήδη λογαριασμό;", - "createNewGroup": "Δημιουργία νέου chat", - "editChatPermissions": "Επεξεργασία δικαιωμάτων chat", "ignore": "Αποκλεισμός", "ignoredUsers": "Αποκλεισμένοι χρήστες", "writeAMessageLangCodes": "Πληκτρολογήστε σε {l1} ή {l2}...", "requests": "Αιτήματα", - "allCorrect": "Έτσι θα το έλεγα! Ωραία!", - "newWayAllGood": "Αυτό δεν θα το έλεγα έτσι, αλλά φαίνεται καλό!", - "othersAreBetter": "Χμ, ίσως υπάρχει καλύτερος τρόπος να το πεις.", "holdForInfo": "Κάντε κλικ και κρατήστε πατημένο για πληροφορίες λέξης.", "greenFeedback": "Αυτό θα έβαζα!", "yellowFeedback": "Χμ, μπορείς να το δοκιμάσεις και να δεις αν λειτουργεί! Για να χρησιμοποιήσεις αυτή τη λέξη, απλώς κάνε κλικ ξανά.", "redFeedback": "Δεν νομίζω ότι είναι σωστό...", "itInstructionsTitle": "Μπορώ να σε βοηθήσω με τη μετάφραση!", "itInstructionsBody": "Μπορείς να κάνεις κλικ και να κρατήσεις πατημένο τις επιλογές για πληροφορίες λέξης.", - "oneday": "Τελευταίες 24 ώρες", - "oneweek": "Τελευταίες 7 ημέρες", - "onemonth": "Προηγούμενος μήνας", "gaTooltip": "L2 χρήση με βοήθεια γραμματικής", "taTooltip": "L2 χρήση με βοήθεια μετάφρασης", "unTooltip": "Άλλο", @@ -3354,58 +3342,27 @@ "interactiveTranslatorAllowed": "Επιλογή Μαθητή", "interactiveTranslatorRequired": "Απαιτείται", "notYetSet": "Δεν έχει οριστεί ακόμα", - "myLearning": "Τα Analytics μου", "waTooltip": "Χρήση L2 χωρίς βοήθεια", - "changeDateRange": "Αλλαγή εύρους ημερομηνιών", - "classDescription": "Περιγραφή", - "addStudents": "Πρόσκληση χρηστών μέσω συνδέσμου ή κωδικού", - "copyClassLink": "Αντιγραφή συνδέσμου πρόσκλησης", - "copyClassCode": "Αντιγραφή κωδικού πρόσκλησης", - "inviteStudentByUserName": "Πρόσκληση χρηστών με όνομα χρήστη", "languageSettings": "Ρυθμίσεις γλώσσας", "interactiveTranslator": "Βοήθεια μετάφρασης", - "shareVideo": "Μοιραστείτε βίντεο", - "shareVideoDesc": "Ενεργοποιήστε αυτό για να επιτρέψετε στους μαθητές να μοιράζονται βίντεο στις συνομιλίες.", - "shareFiles": "Μοιραστείτε αρχεία", - "selectLanguageLevel": "Επιλέξτε επίπεδο γλώσσας", "noIdenticalLanguages": "Παρακαλώ επιλέξτε διαφορετικές βασικές και στόχους γλώσσες", - "iWantALanguagePartnerFrom": "Είναι από:", - "worldWide": "Παγκοσμίως", - "noResults": "Δεν βρέθηκαν αποτελέσματα! Δοκιμάστε να διευρύνετε την αναζήτησή σας.", "searchBy": "Αναζήτηση με βάση χώρα και γλώσσες", - "iWantAConversationPartner": "Θέλω έναν συνομιλητή που", - "iWantALanguagePartnerWhoSpeaks": "Μιλάει:", - "iWantALanguagePartnerWhoIsLearning": "Μαθαίνει:", "joinWithClassCode": "Εγγραφή στο μάθημα", - "joinWithClassCodeHint": "Εισάγετε τον κωδικό πρόσκλησης", - "languageLevelPreA1": "Πραγματικά αρχάριος (Προ A1)", - "languageLevelA1": "Αρχάριος (A1)", - "languageLevelA2": "Βασικό (A2)", - "languageLevelB1": "Μεσαίο (B1)", - "languageLevelB2": "Ανώτερο μεσαίο (B2)", - "languageLevelC1": "Προχωρημένο (C1)", - "languageLevelC2": "Διδασκαλία (C2)", + "languageLevelPreA1": "Νέος Χαμηλός (Προ Α1)", + "languageLevelA1": "Νέος Μέσος (A1)", + "languageLevelA2": "Αρχάριος Υψηλού Επιπέδου (A2)", + "languageLevelB1": "Μεσαίος Μέτριος (B1)", + "languageLevelB2": "Προχωρημένος Χαμηλού Επιπέδου (B2)", + "languageLevelC1": "Προχωρημένος Μέτριος (C1)", + "languageLevelC2": "Ανώτερος (C2)", "changeTheNameOfTheClass": "Αλλαγή ονόματος", "changeTheNameOfTheChat": "Αλλαγή ονόματος της συνομιλίας", - "askPangeaBot": "Ζητήστε από το Pangea Bot μια συμφραζόμενη ορισμό.", "sorryNoResults": "Λυπούμαστε, δεν βρέθηκαν αποτελέσματα.", "ignoreInThisText": "Αγνόηση", - "helpMeTranslate": "Ναι!", - "needsItShortMessage": "Εκτός στόχου", "needsItMessage": "Περίμενε, αυτό δεν είναι {targetLanguage}! Χρειάζεστε βοήθεια με τη μετάφραση;", - "needsIgcMessage": "Αυτό το μήνυμα έχει γραμματικό λάθος.", - "tokenTranslationTitle": "Μια λέξη βρίσκεται στη βασική σας γλώσσα.", - "spanTranslationDesc": "Δείτε πιθανές μεταφράσεις παρακάτω.", - "spanTranslationTitle": "Μερικές λέξεις βρίσκονται στη βασική σας γλώσσα.", - "l1SpanAndGrammarTitle": "Εκτός στόχου γλώσσας", - "l1SpanAndGrammarDesc": "Αυτό θα μπορούσε να είναι στη βασική σας γλώσσα ή να είναι λάθος γραμματικής.", - "otherTitle": "Έχετε ένα σφάλμα.", - "otherDesc": "Δείτε πιθανές διορθώσεις παρακάτω.", "countryInformation": "Η χώρα μου", - "myLanguages": "Οι βασικές και στόχοι γλώσσες μου", "targetLanguage": "Γλώσσα στόχος", "sourceLanguage": "Βασική γλώσσα", - "languagesISpeak": "Γλώσσες που μιλάω", "updateLanguage": "Οι γλώσσες μου", "whatLanguageYouWantToLearn": "Ποια γλώσσα θέλετε να μάθετε;", "whatIsYourBaseLanguage": "Ποια είναι η βασική σας γλώσσα;", @@ -3420,13 +3377,8 @@ "errorDisableLanguageAssistanceUserDesc": "Κάντε κλικ εδώ για να ενημερώσετε τις ρυθμίσεις βοήθειας μετάφρασης και γραμματικής", "errorDisableITClassDesc": "Η βοήθεια μετάφρασης είναι απενεργοποιημένη για το μάθημα στο οποίο βρίσκεται αυτή η συνομιλία.", "errorDisableIGCClassDesc": "Η βοήθεια γραμματικής είναι απενεργοποιημένη για το μάθημα στο οποίο βρίσκεται αυτή η συνομιλία.", - "itIsDisabled": "Η Διαδραστική Μετάφραση είναι απενεργοποιημένη", - "igcIsDisabled": "Ο Διαδραστικός Έλεγχος Γραμματικής είναι απενεργοποιημένος", - "goToLearningSettings": "Μεταβείτε στις Ρυθμίσεις Μάθησης", "error405Title": "Οι γλώσσες δεν έχουν οριστεί", "error405Desc": "Ορίστε τις γλώσσες σας στο Μενού > Ρυθμίσεις Μάθησης.", - "loginOrSignup": "Συνδεθείτε με", - "iAgreeToThe": "Συμφωνώ με τους ", "termsAndConditions": "Όρους και Προϋποθέσεις", "andCertifyIAmAtLeast13YearsOfAge": " και πιστοποιώ ότι είμαι τουλάχιστον 16 ετών.", "error502504Title": "Ω, υπάρχουν πολλοί μαθητές online!", @@ -3434,40 +3386,21 @@ "error404Title": "Σφάλμα μετάφρασης!", "error404Desc": "Ο Pangea Bot δεν είναι σίγουρος πώς να μεταφράσει αυτό...", "errorPleaseRefresh": "Το ερευνούμε! Παρακαλούμε ανανεώστε και δοκιμάστε ξανά.", - "toggleIT": "Διαδραστική Μετάφραση", - "toggleIGC": "Διαδραστικός Έλεγχος Γραμματικής", - "toggleToolSettingsDescription": "Εδώ μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε τις ατομικές ρυθμίσεις εργαλείων γλώσσας.", "connectedToStaging": "Συνδεδεμένο με το Staging", "learningSettings": "Ρυθμίσεις Μάθησης", - "sendVoiceNotes": "Αποστολή Φωνητικών Σημειώσεων", - "sendVoiceNotesDesc": "Ενεργοποιήστε αυτό για να επιτρέψετε στους μαθητές να στέλνουν φωνητικές σημειώσεις σε συνομιλίες.", - "chatTopic": "Θέμα Συνομιλίας", - "chatTopicDesc": "Ορίστε ένα θέμα συνομιλίας", - "inviteStudentByUserNameDesc": "Αν ο μαθητής σας έχει ήδη λογαριασμό, μπορείτε να τον αναζητήσετε.", "participants": "Συμμετέχοντες", - "almostPerfect": "Φαίνεται σωστό! Να τι θα είχα πει.", - "prettyGood": "Πολύ καλό! Να τι θα είχα πει.", - "letMeThink": "Χμ, ας δούμε πώς τα πήγες!", "clickMessageTitle": "Χρειάζεστε βοήθεια;", "clickMessageBody": "Κάντε κλικ σε ένα μήνυμα για εργαλεία γλώσσας όπως μετάφραση, αναπαραγωγή και άλλα!", - "understandingMessagesTitle": "Ορισμοί και μεταφράσεις!", - "understandingMessagesBody": "Κάντε κλικ σε υπογραμμισμένες λέξεις για ορισμούς. Μεταφράστε με επιλογές μηνυμάτων (πάνω δεξιά).", "allDone": "Ολοκληρώθηκε!", "vocab": "Λεξιλόγιο", "low": "Έχουμε αποδείξεις ότι ο χρήστης δεν καταλαβαίνει αυτές τις λέξεις.", "medium": "Αυτές οι λέξεις έχουν χρησιμοποιηθεί. Δεν είναι σαφές αν οι λέξεις κατανοούνται πλήρως ή όχι.", "high": "Έχουμε αποδείξεις ότι ο χρήστης καταλαβαίνει αυτές τις λέξεις.", - "unknownProficiency": "Αυτές οι λέξεις δεν έχουν χρησιμοποιηθεί στο Pangea Chat.", - "changeView": "Αλλάξτε προβολές.", - "clearAll": "Εκκαθάριση όλων των λέξεων;", - "generateVocabulary": "Δημιουργία λεξιλογίου από τίτλο και περιγραφή", - "generatePrompts": "Δημιουργία προτροπών", "subscribe": "Εγγραφή", "getAccess": "Εγγραφείτε τώρα!", "subscriptionDesc": "Οι μηνύσεις είναι δωρεάν! Εγγραφείτε για να ξεκλειδώσετε διαδραστική μετάφραση, έλεγχο γραμματικής και αναλυτικά στοιχεία μάθησης.", "subscriptionManagement": "Διαχείριση Συνδρομής", "currentSubscription": "Τρέχουσα Συνδρομή", - "changeSubscription": "Αλλάξτε τη συνδρομή σας", "cancelSubscription": "Ακυρώστε τη συνδρομή σας", "selectYourPlan": "Επιλέξτε το πλάνο σας", "subsciptionPlatformTooltip": "Παρακαλώ συνδεθείτε στη αρχική συσκευή σας για να διαχειριστείτε το πλάνο της συνδρομής σας", @@ -3476,9 +3409,6 @@ "paymentHistory": "Ιστορικό Πληρωμών", "emptyChatDownloadWarning": "Δεν είναι δυνατή η λήψη κενής συνομιλίας", "update": "Ενημέρωση", - "updateDesc": "Τώρα μπορείτε να ενημερώσετε αυτήν την εφαρμογή από {localVersion} σε {storeVersion}", - "maybeLater": "Ίσως αργότερα", - "mainMenu": "Κύριο Μενού", "toggleImmersionMode": "Λειτουργία Εμβάπτισης", "toggleImmersionModeDesc": "Όταν ενεργοποιείται, όλα τα μηνύματα εμφανίζονται στη γλώσσα στόχο σας. Αυτή η ρύθμιση είναι πιο χρήσιμη σε ανταλλαγές γλωσσών.", "itToggleDescription": "Αυτό το εργαλείο εκμάθησης γλωσσών θα εντοπίζει λέξεις στη βασική σας γλώσσα και θα σας βοηθά να τις μεταφράσετε στη γλώσσα στόχο. Αν και σπάνιο, το AI μπορεί να κάνει λάθη στη μετάφραση.", @@ -3493,212 +3423,13 @@ "definitionsToolDescription": "Όταν ενεργοποιείται, οι λέξεις με υπογράμμιση μπλε μπορούν να πατηθούν για ορισμούς. Πατήστε μηνύματα για πρόσβαση στους ορισμούς.", "translationsToolDescrption": "Όταν ενεργοποιείται, πατήστε ένα μήνυμα και το εικονίδιο μετάφρασης για να δείτε ένα μήνυμα στη βασική σας γλώσσα.", "welcomeBack": "Καλώς ήρθατε ξανά! Αν ήσασταν μέρος του πιλοτικού προγράμματος 2023-2024, παρακαλούμε επικοινωνήστε μαζί μας για τη ειδική σας συνδρομή πιλοτικού προγράμματος. Αν είστε εκπαιδευτικός που έχει αγοράσει (ή η εκπαιδευτική σας ιδιότητα έχει αγοράσει) άδειες για την τάξη σας, επικοινωνήστε μαζί μας για τη συνδρομή εκπαιδευτικού.", - "kickAllStudents": "Απομάκρυνση Όλων των Μαθητών", - "kickAllStudentsConfirmation": "Είστε σίγουροι ότι θέλετε να αποβάλετε όλους τους μαθητές;", - "inviteAllStudents": "Προσκαλέστε όλους τους μαθητές", - "inviteAllStudentsConfirmation": "Είστε σίγουροι ότι θέλετε να προσκαλέσετε όλους τους μαθητές;", - "inviteUsersFromPangea": "Προσθήκη διαχειριστών", - "redeemPromoCode": "Εξαργύρωση κωδικού προώθησης", - "enterPromoCode": "Εισάγετε κωδικό προώθησης", "downloadTxtFile": "Λήψη αρχείου κειμένου", "downloadCSVFile": "Λήψη αρχείου CSV", "promotionalSubscriptionDesc": "Έχετε επί του παρόντος μια συνδρομή προώθησης διάρκειας ζωής. Στείλτε μήνυμα στο support@pangea.chat για βοήθεια στην αλλαγή της συνδρομής σας.", "originalSubscriptionPlatform": "Συνδρομή αγοράστηκε μέσω {purchasePlatform}", "oneWeekTrial": "Δοκιμαστική περίοδος μιας εβδομάδας", "downloadXLSXFile": "Λήψη αρχείου Excel", - "abDisplayName": "Αμπχαζικά", - "aaDisplayName": "Αφάρ", - "afDisplayName": "Αφρικάανς", - "akDisplayName": "Ακαν", - "sqDisplayName": "Αλβανικά", - "amDisplayName": "Αμχαρικά", - "arDisplayName": "Αραβικά", - "anDisplayName": "Αραγονικά", - "hyDisplayName": "Αρμενική", - "asDisplayName": "Ασαμική", - "avDisplayName": "Αβαρική", - "aeDisplayName": "Αβέστα", - "ayDisplayName": "Αϊμαρά", - "azDisplayName": "Αζερική", - "bmDisplayName": "Μπαμπάρα", - "baDisplayName": "Μπασκίρ", - "euDisplayName": "Βασκική", - "beDisplayName": "Λευκορωσική", - "bnDisplayName": "Βεγγαλική", - "bhDisplayName": "Μπιχάρι", - "biDisplayName": "Μπισλάμα", - "bsDisplayName": "Βοσνιακή", - "brDisplayName": "Βρετονική", - "bgDisplayName": "Βουλγαρική", - "myDisplayName": "Βιρμανική", - "caDisplayName": "Καταλανική, Βαλεαρινή", - "chDisplayName": "Τσαμόρο", - "ceDisplayName": "Τσεchen", - "nyDisplayName": "Τσιτσέουα, Τσέουα, Νιάντζα", - "zhDisplayName": "Κινέζικα", - "cvDisplayName": "Τσουβάς", - "kwDisplayName": "Κορνουάλλικος", - "coDisplayName": "Κορσικανός", - "crDisplayName": "Κρι", - "hrDisplayName": "Κροατικά", - "csDisplayName": "Τσέχικα", - "daDisplayName": "Δανικά", - "dvDisplayName": "Ντιβέχι; Ντιβέχι; Μαλδίβικα;", - "nlDisplayName": "Ολλανδικά", - "enDisplayName": "Αγγλικά", - "eoDisplayName": "Εспεράντο", - "etDisplayName": "Εσθονικά", - "eeDisplayName": "Εβέ", - "foDisplayName": "Φαροϊκά", - "fjDisplayName": "Φιλιππινέζικα", - "fiDisplayName": "Φινλανδικά", - "frDisplayName": "Γαλλικά", - "ffDisplayName": "Φούλα; Φουλάχ; Πουλάαρ; Πουλάρ", - "glDisplayName": "Γαλικιανά", - "kaDisplayName": "Γεωργιανά", - "deDisplayName": "Γερμανικά", - "elDisplayName": "Ελληνικά, Σύγχρονα", - "gnDisplayName": "Γκουαρανί", - "guDisplayName": "Γκουτζαρατικά", - "htDisplayName": "Αϊτινά, Κρεολικά Αϊτής", - "haDisplayName": "Χάουσα", - "heDisplayName": "Εβραϊκά (σύγχρονα)", - "hzDisplayName": "Ερέρο", - "hiDisplayName": "Χίντι", - "hoDisplayName": "Χίρι Μότου", - "huDisplayName": "Ουγγρικά", - "iaDisplayName": "Ιντερλίνγκουα", - "idDisplayName": "Ινδονησιακά", - "ieDisplayName": "Ιντερλίνγκουι", - "gaDisplayName": "Ιρλανδικά", - "igDisplayName": "Ίγκο", - "ikDisplayName": "Ινουπιάκ", - "ioDisplayName": "Ιντό", - "isDisplayName": "Ισλανδικά", - "itDisplayName": "Ιταλικά", - "iuDisplayName": "Ινουκίτουτ", - "jaDisplayName": "Ιαπωνικά", - "jvDisplayName": "Ιαβανικά", - "klDisplayName": "Καλυαλίσουτ, Γροιλανδικά", - "knDisplayName": "Κανναδικά", - "krDisplayName": "Κανουρί", - "ksDisplayName": "Κασμίρ", - "kkDisplayName": "Καζακικά", - "kmDisplayName": "Χμερ", - "kiDisplayName": "Κικουγιού, Γκικουγιού", - "rwDisplayName": "Κινυαρουάντα", - "kyDisplayName": "Κιργιζικά, Κιργιζικά", - "kvDisplayName": "Κόμι", - "kgDisplayName": "Κονγκολέζικα", - "koDisplayName": "Κορεατικά", - "kuDisplayName": "Κουρδικά", - "kjDisplayName": "Κουανιάμα, Κουανιάμα", - "laDisplayName": "Λατινικά", - "lbDisplayName": "Λουξεμβουργιανά, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Λιμβουργικά, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Λαοτικά", - "ltDisplayName": "Λιθουανικά", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Λετονικά", - "gvDisplayName": "Μανξ", - "mkDisplayName": "Μακεδονικά", - "mgDisplayName": "Μαλαγασικά", - "msDisplayName": "Μαλαισιανά", - "mlDisplayName": "Μαλαιαλάμ", - "mtDisplayName": "Μαλτεζικά", - "miDisplayName": "Μάορι", - "mrDisplayName": "Μαραθικά (Marādhī)", - "mhDisplayName": "Μάρσαλλες", - "mnDisplayName": "Μογγολικά", - "naDisplayName": "Ναουρού", - "nvDisplayName": "Ναβάχο, Navaho", - "nbDisplayName": "Νορβηγικά Μποκμάλ", - "ndDisplayName": "Βόρειο Ndebele", - "neDisplayName": "Νεπαλικά", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Νορβηγικά Nynorsk", - "noDisplayName": "Νορβηγικά", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Νότιο Ndebele", - "ocDisplayName": "Οξιτανικά", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Παλαιά Εκκλησιαστική Σλαβονική, Εκκλησιαστική Σλαβονική, Παλαιά Βουλγαρική, Παλαιά Σλαβονική", - "omDisplayName": "Ορομό", - "orDisplayName": "Ορίγια", - "osDisplayName": "Οσετική, Οσετική γλώσσα", - "paDisplayName": "Παντζάμπι, Πουντζάμπι", - "piDisplayName": "Πάλι", - "faDisplayName": "Περσικά", - "plDisplayName": "Πολωνικά", - "psDisplayName": "Παστό, Πουστό", - "ptDisplayName": "Πορτογαλικά", - "quDisplayName": "Κέτσουα", - "rmDisplayName": "Ρομανσικά", - "rnDisplayName": "Κιρουάντι", - "roDisplayName": "Ρουμανικά, Μολδαβικά, Μολδαβικά", - "ruDisplayName": "Ρωσικά", - "saDisplayName": "Σανσκριτικά (Σανσκριτικά)", - "scDisplayName": "Σαρδηνιακά", - "sdDisplayName": "Σίντι", - "seDisplayName": "Βόρειο Σάμι", - "smDisplayName": "Σαμόα", - "sgDisplayName": "Σάνγκο", - "srDisplayName": "Σερβικά", - "gdDisplayName": "Σκωτσέζικα Γαελικά, Γαελικά", - "snDisplayName": "Σόνα", - "siDisplayName": "Σιναλικά, Σιναλέζικα", - "skDisplayName": "Σλοβακικά", - "slDisplayName": "Σλοβένικα", - "soDisplayName": "Σομαλικά", - "stDisplayName": "Νότια Σόθο", - "esDisplayName": "Ισπανικά", - "suDisplayName": "Σουνδανέζικα", - "swDisplayName": "Σουαχίλι", - "ssDisplayName": "Σουάτι", - "svDisplayName": "Σουηδικά", - "taDisplayName": "Ταμίλ", - "teDisplayName": "Τελούγκου", - "tgDisplayName": "Τατζικικά", - "thDisplayName": "Ταϊλανδικά", - "tiDisplayName": "Τιγκρινύα", - "boDisplayName": "Τιβέτ, Τιβέτ, Κεντρικό", - "tkDisplayName": "Τουρκμενικά", - "tlDisplayName": "Ταγκαλόγ", - "tnDisplayName": "Τσουάνα", - "toDisplayName": "Τόνγκα (Νήσοι Τόνγκα)", - "trDisplayName": "Τουρκικά", - "tsDisplayName": "Τσόνγκα", - "ttDisplayName": "Ταταρικά", - "twDisplayName": "Τουί", - "tyDisplayName": "Ταϊτιανά", - "ugDisplayName": "Ουιγούρ, Ουιγούρ", - "ukDisplayName": "Ουκρανικά", - "urDisplayName": "Ουρντού", - "uzDisplayName": "Ουζμπεκικά", - "veDisplayName": "Βέντα", - "viDisplayName": "Βιετναμικά", - "voDisplayName": "Βολαπούκ", - "waDisplayName": "Ουαλικά", - "cyDisplayName": "Ουαλικά", - "woDisplayName": "Γαλλικά", - "fyDisplayName": "Δυτικά Φριζικά", - "xhDisplayName": "Χόσα", - "yiDisplayName": "Ιερατική", - "yoDisplayName": "Γκρέγκο", - "zaDisplayName": "Ζουάνγκ, Τσουάνγκ", "unkDisplayName": "Άγνωστο", - "zuDisplayName": "Ζουλού", - "hawDisplayName": "Χαβανέζικα", - "hmnDisplayName": "Μογκνγκ", - "multiDisplayName": "Πολλαπλά", - "cebDisplayName": "Σέμπουαν", - "dzDisplayName": "Ντόνγκχα", - "iwDisplayName": "Εβραϊκά", - "jwDisplayName": "Ιαβανικά", - "moDisplayName": "Μολδαβικά", - "shDisplayName": "Σερβο-κροατικά", "wwCountryDisplayName": "Παγκόσμιος", "afCountryDisplayName": "Αφγανιστάν", "axCountryDisplayName": "Νήσοι Αλάντες", @@ -3946,41 +3677,25 @@ "yeCountryDisplayName": "Υεμένη", "zmCountryDisplayName": "Ζάμπια", "zwCountryDisplayName": "Ζιμπάμπουε", - "pay": "Πληρωμή", - "allPrivateChats": "Άμεσες συνομιλίες", - "unknownPrivateChat": "Άγνωστη ιδιωτική συνομιλία", + "pay": "Checkout", "invitedToSpace": "{user} σας έχει προσκαλέσει να συμμετάσχετε σε ένα μάθημα: {space}! Θέλετε να αποδεχθείτε;", - "declinedInvitation": "Αρνήθηκε πρόσκληση", - "acceptedInvitation": "Αποδέχθηκε πρόσκληση", "youreInvited": "📩 Είστε προσκεκλημένοι!", "invitedToChat": "{user} σας έχει προσκαλέσει να συμμετάσχετε σε μια συνομιλία: {name}! Θέλετε να αποδεχθείτε;", "monthlySubscription": "Μηνιαία", "yearlySubscription": "Ετήσια", "defaultSubscription": "Συνδρομή Pangea Chat", "freeTrial": "Δωρεάν Δοκιμή", - "grammarAnalytics": "Ανάλυση Σφαλμάτων", "total": "Σύνολο: ", "noDataFound": "Δεν βρέθηκαν δεδομένα", - "promoSubscriptionExpirationDesc": "Η τρέχουσα συνδρομή σας είναι προωθητική και λήγει στις {expiration}. Στείλτε μήνυμα στο support@pangea.chat για βοήθεια στην αλλαγή της συνδρομής σας.", - "emptyChatNameWarning": "Παρακαλώ εισάγετε ένα όνομα για αυτήν τη συνομιλία", "blurMeansTranslateTitle": "Γιατί είναι θολό το μήνυμα;", "blurMeansTranslateBody": "Ενώ είναι ενεργή η λειτουργία Εμβάθυνσης, τα μηνύματα που αποστέλλονται στη βασική σας γλώσσα θα θολώνουν ενώ το Pangea Bot τα μεταφράζει στη γλώσσα στόχο σας. Η λειτουργία Εμβάθυνσης μπορεί να ενεργοποιείται ή να απενεργοποιείται στις ρυθμίσεις μεμονωμένων και μαθημάτων.", - "someErrorTitle": "Χμ, κάτι δεν πάει καλά", - "someErrorBody": "Μπορεί να είναι σφάλμα ή κάτι στη βασική σας γλώσσα.", "bestCorrectionFeedback": "Αυτό είναι σωστό!", "distractorFeedback": "Δεν είναι ακριβώς σωστό.", "bestAnswerFeedback": "Αυτό είναι σωστό!", "definitionDefaultPrompt": "Τι σημαίνει αυτή η λέξη;", "practiceDefaultPrompt": "Ποια είναι η καλύτερη απάντηση;", "correctionDefaultPrompt": "Ποια είναι η καλύτερη αντικατάσταση;", - "itStartDefaultPrompt": "Θέλετε βοήθεια στη μετάφραση;", - "lockedChatWarning": "🔒 Αυτή η συνομιλία έχει κλειδωθεί", - "lockChat": "Κλείδωμα Συνομιλίας", - "suggestToChat": "Προτείνετε αυτή τη συνομιλία", - "suggestToChatDesc": "Οι προτεινόμενες συνομιλίες θα εμφανίζονται στις λίστες συνομιλιών", "acceptSelection": "Αποδοχή Διόρθωσης", - "acceptSelectionAnyway": "Χρησιμοποιήστε το ούτως ή άλλως", - "makingActivity": "Δημιουργία δραστηριότητας", "why": "Γιατί;", "definition": "Ορισμός", "exampleSentence": "Παράδειγμα πρότασης", @@ -3988,128 +3703,55 @@ "reportMessageTitle": "{reportingUserId} ανέφερε ένα μήνυμα από τον {reportedUserId} στη συνομιλία {roomName}", "reportMessageBody": "Μήνυμα: {reportedMessage}\nΑιτία: {reason}", "noTeachersFound": "Δεν βρέθηκαν δάσκαλοι για αναφορά", - "viewArchive": "Προβολή Αρχείου", "trialExpiration": "Η δωρεάν δοκιμή σας λήγει στις {expiration}", "freeTrialDesc": "Οι νέοι χρήστες λαμβάνουν μια εβδομάδα δωρεάν δοκιμής του Pangea Chat", "activateTrial": "Δωρεάν 7-ήμερη Δοκιμή", "successfullySubscribed": "Έχετε εγγραφεί με επιτυχία!", "clickToManageSubscription": "Κάντε κλικ εδώ για να διαχειριστείτε τη συνδρομή σας.", - "errorGettingAudio": "Σφάλμα κατά την λήψη ήχου. Παρακαλώ ανανεώστε και δοκιμάστε ξανά.", "signUp": "Εγγραφή", "pleaseChooseAtLeastChars": "Παρακαλώ επιλέξτε τουλάχιστον {min} χαρακτήρες.", "noEmailWarning": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email. Διαφορετικά δεν θα μπορείτε να επαναφέρετε τον κωδικό πρόσβασής σας. Αν δεν θέλετε, πατήστε ξανά το κουμπί για να συνεχίσετε.", "pleaseEnterValidEmail": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.", "pleaseChooseAUsername": "Παρακαλώ επιλέξτε ένα όνομα χρήστη", - "chooseAUsername": "Επιλέξτε ένα όνομα χρήστη", "define": "Ορίστε", "listen": "Ακούστε", - "addConversationBot": "Ενεργοποίηση Bot Συνομιλίας", - "addConversationBotDesc": "Προσθέστε ένα bot σε αυτήν τη συνομιλία", - "convoBotSettingsDescription": "Επεξεργαστείτε το θέμα και τη δυσκολία της συνομιλίας", - "enterAConversationTopic": "Εισάγετε ένα θέμα συνομιλίας", - "conversationTopic": "Θέμα συνομιλίας", - "enableModeration": "Ενεργοποίηση διαχείρισης", - "enableModerationDesc": "Ενεργοποιήστε την αυτόματη διαχείριση για την ανασκόπηση μηνυμάτων πριν αποσταλούν", - "conversationLanguageLevel": "Ποιο είναι το επίπεδο γλώσσας αυτής της συνομιλίας;", - "showDefinition": "Εμφάνιση Ορισμού", - "subscriptionPopupTitle": "Αυτή η πρόταση θα μπορούσε να έχει γραμματικό λάθος...", - "subscriptionPopupDesc": "Εγγραφείτε σήμερα για να ξεκλειδώσετε μετάφραση και διόρθωση γραμματικής!", - "seeOptions": "Δείτε επιλογές", - "continuedWithoutSubscription": "Συνεχίστε χωρίς συνδρομή", "trialPeriodExpired": "Η δοκιμαστική περίοδος σας έχει λήξει", - "selectToDefine": "Κάντε κλικ σε οποιαδήποτε λέξη για να δείτε τον ορισμό της!", "translations": "μεταφράσεις", "messageAudio": "ήχος μηνύματος", "definitions": "ορισμοί", "subscribedToUnlockTools": "Εγγραφείτε για να ξεκλειδώσετε διαδραστική μετάφραση και έλεγχο γραμματικής, αναπαραγωγή ήχου, εξατομικευμένες δραστηριότητες πρακτικής και αναλύσεις μάθησης!", "translationTooltip": "Μετάφραση", - "audioTooltip": "Αναπαραγωγή ήχου", "speechToTextTooltip": "Μεταγραφή", - "certifyAge": "Βεβαιώνω ότι είμαι άνω των {age} ετών", "kickBotWarning": "Το κλείσιμο του Pangea Bot θα αφαιρέσει το bot συνομιλίας από αυτήν τη συζήτηση.", - "joinToView": "Εγγραφείτε σε αυτό το δωμάτιο για να δείτε λεπτομέρειες", "refresh": "Ανανέωση", - "autoPlayTitle": "Αυτόματη αναπαραγωγή μηνυμάτων", - "autoPlayDesc": "Όταν ενεργοποιείται, ο ήχος κειμένου σε ομιλία των μηνυμάτων θα παίζει αυτόματα όταν επιλέγεται.", "messageAnalytics": "Ανάλυση μηνυμάτων", "words": "Λέξεις", "score": "Βαθμολογία", "accuracy": "Ακρίβεια", "points": "Βαθμοί", "noPaymentInfo": "Δεν απαιτείται πληροφορία πληρωμής!", - "conversationBotModeSelectDescription": "Δραστηριότητα συνομιλίας", - "conversationBotModeSelectOption_discussion": "Συζήτηση", - "conversationBotModeSelectOption_custom": "Προσαρμοσμένο", - "conversationBotModeSelectOption_conversation": "Συνομιλία", - "conversationBotModeSelectOption_textAdventure": "Περιπέτεια κειμένου", - "conversationBotModeSelectOption_storyGame": "Παιχνίδι ιστορίας", - "conversationBotDiscussionZone_title": "Ρυθμίσεις συζήτησης", - "conversationBotDiscussionZone_discussionTopicLabel": "Θέμα συζήτησης", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Ορίστε θέμα συζήτησης", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Λέξεις-κλειδιά συζήτησης", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Ορίστε λέξεις-κλειδιά συζήτησης", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Λίστα λέξεων-κλειδιών διαχωρισμένων με κόμμα για καθοδήγηση της συζήτησης", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Αποστολή προτροπής συζήτησης σε πρόγραμμα", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Ώρες μεταξύ προτροπών συζήτησης", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Ανταπόκριση σε αντίδραση ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Αντίδραση για αποστολή προτροπής συζήτησης", - "conversationBotCustomZone_title": "Προσαρμοσμένες ρυθμίσεις", - "conversationBotCustomZone_customSystemPromptLabel": "Προτροπή συστήματος", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Ορίστε προσαρμοσμένη προτροπή συστήματος", - "conversationBotCustomZone_customSystemPromptEmptyError": "Λείπει η προσαρμοσμένη προτροπή συστήματος", - "botConfig": "Ρυθμίσεις bot και δραστηριότητας", - "botConfigNoPermissionTitle": "Χωρίς άδεια", - "botConfigNoPermissionMessage": "Επικοινωνήστε με τον διαχειριστή του δωματίου για να αλλάξετε τη διαμόρφωση του bot", - "addConversationBotDialogTitleInvite": "Επιβεβαιώστε την πρόσκληση του bot συνομιλίας", - "addConversationBotButtonInvite": "Πρόσκληση", - "addConversationBotDialogInviteConfirmation": "Πρόσκληση", - "addConversationBotButtonTitleRemove": "Επιβεβαιώστε την αφαίρεση του bot συνομιλίας", - "addConversationBotButtonRemove": "Αφαίρεση", - "addConversationBotDialogRemoveConfirmation": "Αφαίρεση", - "conversationBotConfigConfirmChange": "Επιβεβαίωση", - "conversationBotStatus": "Πρόσκληση bot", - "conversationBotTextAdventureZone_title": "Κείμενο Περιπέτειας", - "conversationBotTextAdventureZone_instructionLabel": "Οδηγίες Game Master", - "conversationBotTextAdventureZone_instructionPlaceholder": "Ορίστε οδηγίες game master", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Λείπουν οι οδηγίες game master", - "studentAnalyticsNotAvailable": "Τα δεδομένα μαθητών δεν είναι διαθέσιμα αυτήν τη στιγμή", - "roomDataMissing": "Μπορεί να λείπουν ορισμένα δεδομένα από δωμάτια στα οποία δεν είστε μέλος.", "updatePhoneOS": "Ίσως χρειαστεί να ενημερώσετε την έκδοση του λειτουργικού συστήματος της συσκευής σας.", "wordsPerMinute": "Λέξεις ανά λεπτό", "autoIGCToolName": "Αυτόματη εκτέλεση της βοήθειας γραφής Pangea", "autoIGCToolDescription": "Αυτόματα εκτελείτε τη γραμματική και τη βοήθεια μετάφρασης του Pangea Chat πριν στείλετε το μήνυμά μου.", - "runGrammarCorrection": "Έλεγχος μηνύματος", - "grammarCorrectionFailed": "Θέματα που πρέπει να αντιμετωπιστούν", - "grammarCorrectionComplete": "Φαίνεται καλό!", "tooltipInstructionsTitle": "Δεν είστε σίγουροι τι κάνει αυτό;", "tooltipInstructionsMobileBody": "Πατήστε και κρατήστε πατημένο αντικείμενα για να δείτε τις συμβουλές εργαλείων.", "tooltipInstructionsBrowserBody": "Τοποθετήστε το δείκτη πάνω από αντικείμενα για να δείτε τις συμβουλές εργαλείων.", "chatCapacity": "Χωρητικότητα συνομιλίας", "roomFull": "Αυτή η αίθουσα είναι ήδη γεμάτη.", - "topicNotSet": "Το θέμα δεν έχει οριστεί.", - "chatCapacityNotSet": "Αυτή η συνομιλία δεν έχει όριο χωρητικότητας.", "chatCapacityHasBeenChanged": "Η χωρητικότητα της συνομιλίας άλλαξε", "chatCapacitySetTooLow": "Η χωρητικότητα της συνομιλίας πρέπει να είναι τουλάχιστον {count}.", "chatCapacityExplanation": "Η χωρητικότητα της συνομιλίας περιορίζει τον αριθμό των μελών που επιτρέπονται σε μια συνομιλία.", - "chatExceedsCapacity": "Αυτή η συνομιλία υπερβαίνει τη χωρητικότητά της.", "tooManyRequest": "Πάρα πολλά αιτήματα, παρακαλώ δοκιμάστε ξανά αργότερα.", "enterNumber": "Παρακαλώ εισάγετε μια ακέραια τιμή.", "buildTranslation": "Δημιουργήστε τη μετάφρασή σας από τις επιλογές παραπάνω", - "nonexistentSelection": "Η επιλογή δεν υπάρχει πλέον.", - "changeAnalyticsLanguage": "Αλλαγή γλώσσας ανάλυσης", "practice": "Εξάσκηση", "noLanguagesSet": "Δεν έχουν οριστεί γλώσσες", - "noActivitiesFound": "Αυτά είναι αρκετά για τώρα! Επιστρέψτε αργότερα για περισσότερα.", - "hintTitle": "Υπόδειξη:", "speechToTextBody": "Για φωνητικά μηνύματα, μπορείτε να δείτε μια μεταγραφή καθώς και το σκορ Λέξεων ανά Λεπτό του ομιλητή.", "versionNotFound": "Δεν βρέθηκε έκδοση", "fetchingVersion": "Λήψη έκδοσης...", "versionFetchError": "Σφάλμα κατά τη λήψη έκδοσης", "versionText": "Έκδοση: {version}+{buildNumber}", - "languageButtonLabel": "Γλώσσα: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Αυτόματη αναπαραγωγή μετάφρασης", - "interactiveTranslatorAutoPlayDesc": "Ξεκινά τον διαδραστικό μεταφραστή χωρίς ερώτηση.", - "changeAnalyticsView": "Αλλαγή προβολής ανάλυσης", "l1TranslationBody": "Τα μηνύματα στη βασική σας γλώσσα δεν θα μεταφραστούν.", "deleteSubscriptionWarningTitle": "Έχετε ενεργή συνδρομή", "deleteSubscriptionWarningBody": "Η διαγραφή του λογαριασμού σας δεν θα ακυρώσει αυτόματα τη συνδρομή σας.", @@ -4117,9 +3759,7 @@ "error520Title": "Παρακαλώ δοκιμάστε ξανά.", "error520Desc": "Λυπούμαστε, δεν καταλάβαμε το μήνυμά σας...", "wordsUsed": "Χρησιμοποιημένες λέξεις", - "errorTypes": "Τύποι σφαλμάτων", "level": "Επίπεδο", - "canceledSend": "Ακύρωση αποστολής", "morphsUsed": "Χρησιμοποιημένες μορφές", "translationChoicesBody": "Κάντε κλικ και κρατήστε μια επιλογή για μια υπόδειξη.", "grammar": "Γραμματική", @@ -4129,7 +3769,6 @@ "reportContentIssueTitle": "Αναφορά προβλήματος περιεχομένου", "feedback": "Προαιρετικά σχόλια", "reportContentIssueDescription": "Ωχ! Η ΤΝ μπορεί να διευκολύνει εξατομικευμένες εκπαιδευτικές εμπειρίες αλλά... επίσης hallucinate. Παρακαλούμε δώστε τυχόν σχόλια και θα προσπαθήσουμε ξανά.", - "changeContent": "Ωχ! Η ΤΝ μπορεί να διευκολύνει εξατομικευμένες εκπαιδευτικές εμπειρίες αλλά... επίσης hallucinate. Τι πρέπει να είναι;", "clickTheWordAgainToDeselect": "Κάντε κλικ στη επιλεγμένη λέξη για να την αποεπιλέξετε.", "l2SupportNa": "Μη διαθέσιμο", "l2SupportAlpha": "Άλφα", @@ -4363,7 +4002,6 @@ "grammarCopySPC": "Ειδικότητα", "grammarCopyPARTTYPE": "Τύπος Μερισμού", "grammarCopyINTREL": "Ερωτηματική-Σχετική", - "grammarCopyNUMFORMpsor": "Αριθμός Κυριότητας", "grammarCopyUNKNOWN": "Άγνωστο", "grammarCopyNUMBERPSOR": "Αριθμός Κυριότητας", "grammarCopyPOSS": "Κτητική", @@ -4409,28 +4047,14 @@ "grammarCopyVOICEdir": "Άμεση", "grammarCopyVOICEinv": "Αντίστροφη", "grammarCopyVOICErcp": "Αμοιβαία", - "enterPrompt": "Παρακαλώ εισάγετε ένα σύστημα προτροπής", - "selectBotLanguage": "Επιλέξτε γλώσσα bot", - "chooseVoice": "Επιλέξτε φωνή", - "enterLanguageLevel": "Παρακαλώ εισάγετε επίπεδο γλώσσας", - "enterDiscussionTopic": "Παρακαλώ εισάγετε θέμα συζήτησης", - "selectBotChatMode": "Επιλέξτε λειτουργία συνομιλίας", - "messageNotInTargetLang": "Το μήνυμα δεν είναι στη γλώσσα στόχο", "other": "Άλλο", "levelShort": "ΕΠΙΠΕΔΟ {level}", - "botModeValidation": "Παρακαλώ επιλέξτε λειτουργία συνομιλίας", "clickBestOption": "Επιλέξτε τις καλύτερες επιλογές για να μεταφράσετε το μήνυμά σας!", "completeActivitiesToUnlock": "Ολοκληρώστε τουλάχιστον μια δραστηριότητα για να ξεκλειδώσετε τη μετάφραση!", - "botSettingsSubtitle": "Προσκαλέστε το bot για να διαχειριστεί τη δραστηριότητα της συνομιλίας", - "invitePeople": "Προσκαλέστε χρήστες", "noCapacityLimit": "Χωρίς όριο χωρητικότητας", "downloadGroupText": "Λήψη κειμένου ομάδας", "notificationsOn": "Ειδοποιήσεις ενεργές", "notificationsOff": "Ειδοποιήσεις απενεργοποιημένες", - "chatCanBeFoundViaSearch": "Η συνομιλία μπορεί να βρεθεί μέσω αναζήτησης", - "requireCodeToJoin": "Απαιτείται κωδικός για συμμετοχή", - "canFindInSearch": "Μπορεί να βρεθεί μέσω αναζήτησης", - "addChatToSpace": "Προσθήκη συνομιλίας", "createChatAndInviteUsers": "Δημιουργία συνομιλίας και πρόσκληση χρηστών", "updatedNewSpaceDescription": "Τα μαθήματα σας επιτρέπουν να ενοποιήσετε τις συνομιλίες σας και να δημιουργήσετε ιδιωτικές ή δημόσιες κοινότητες.", "joinWithCode": "Συμμετοχή με κωδικό", @@ -4466,39 +4090,19 @@ "constructUseCollected": "Συλλέχθηκε στη συνομιλία", "constructUseNanDesc": "Μη εφαρμόσιμο", "xpIntoLevel": "{currentXP} / {maxXP} Πόντοι XP", - "signInWithUsername": "Σύνδεση με όνομα χρήστη και κωδικό πρόσβασης", - "registrationEmailMessage": "Παρακαλούμε επαληθεύστε το email σας με έναν σύνδεσμο που αποστέλλεται εκεί. Σε ορισμένες περιπτώσεις, το email μπορεί να φτάσει έως και 5 λεπτά. Παρακαλούμε επίσης ελέγξτε τον φάκελο spam.", "enableTTSToolName": "Ενεργοποιημένη φωνητική ανάγνωση κειμένου", "enableTTSToolDescription": "Επιτρέψτε στην εφαρμογή να παράγει έξοδο φωνητικής ανάγνωσης για τμήματα κειμένου στη γλώσσα στόχο σας.", - "couldNotFindTTS": "Δεν βρήκαμε μηχανή φωνητικής ανάγνωσης για τη τρέχουσα γλώσσα στόχο σας.", - "ttsInstructionsHyperlink": "Κάντε κλικ εδώ για να δείτε οδηγίες για τη λήψη νέας φωνής στη συσκευή σας.", - "createAnAccount": "Δημιουργία λογαριασμού", - "signIn": "Σύνδεση", - "signUpWithEmail": "Εγγραφείτε με email", - "signUpWithGoogle": "Εγγραφείτε με Google", - "signUpWithApple": "Εγγραφείτε με Apple", "yourUsername": "Το όνομα χρήστη σας", "yourEmail": "Το email σας", - "pleaseEnterAnEmail": "Παρακαλώ εισάγετε μια διεύθυνση email", - "signInWithGoogle": "Σύνδεση με Google", - "signInWithApple": "Σύνδεση με Apple", - "chooseYourAvatar": "Επιλέξτε το avatar σας", "iWantToLearn": "Θέλω να μάθω", - "letsStart": "Ας ξεκινήσουμε", - "pleaseAgreeToTOS": "Παρακαλώ συμφωνήστε με τους Όρους και Προϋποθέσεις", "pleaseEnterEmail": "Παρακαλώ εισάγετε μια έγκυρη διεύθυνση email.", - "pleaseSelectALanguage": "Παρακαλώ επιλέξτε μια γλώσσα", "myBaseLanguage": "Η βασική μου γλώσσα", - "clickWordsInstructions": "🧻 Κάντε κλικ σε οποιαδήποτε λέξη για λεπτομέρειες. 🤐", - "chooseBestDefinition": "Τι σημαίνει αυτή η λέξη;", "meaningSectionHeader": "Νόημα:", "formSectionHeader": "Μορφές που χρησιμοποιούνται στα chat:", - "noEmojiSelectedTooltip": "Δεν έχει επιλεγεί emoji", "writingExercisesTooltip": "Γράψιμο", "listeningExercisesTooltip": "Ακρόαση", "readingExercisesTooltip": "Ανάγνωση", "meaningNotFound": "Δεν ήταν δυνατή η εύρεση του νοήματος.", - "formsNotFound": "Δεν ήταν δυνατή η εύρεση των μορφών.", "chooseBaseForm": "Επιλέξτε τη βασική μορφή", "notTheCodeError": "Λυπούμαστε, αυτό δεν είναι ο κώδικας!", "totalXP": "Συνολικά XP", @@ -4538,9 +4142,6 @@ "pickAnEmoji": "Ποιο είναι το αγαπημένο σου emoji για το '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Ταιριάξτε τις σημασίες με τις λέξεις στο μήνυμα!", "doubleClickToEdit": "Διπλό κλικ για επεξεργασία.", - "removeFeature": "Αφαίρεση {feature}", - "chooseCorrectLabel": "Επιλέξτε την σωστή ετικέτα.", - "levelPopupTitle": "Συγχαρητήρια για την επίτευξη\nΕπιπέδου {level}", "activityPlannerTitle": "Προγραμματιστής Δραστηριοτήτων", "topicLabel": "Θέμα", "topicPlaceholder": "Επιλέξτε ένα θέμα...", @@ -4548,7 +4149,6 @@ "modePlaceholder": "Επιλέξτε μια λειτουργία...", "learningObjectiveLabel": "Στόχος μάθησης", "learningObjectivePlaceholder": "Επιλέξτε στόχο μάθησης...", - "mediaLabel": "Μέσα που πρέπει να μοιραστούν οι μαθητές", "languageOfInstructionsLabel": "Γλώσσα οδηγιών δραστηριότητας", "targetLanguageLabel": "Στόχος γλώσσα", "cefrLevelLabel": "Επίπεδο CEFR", @@ -4563,20 +4163,15 @@ "instructions": "Οδηγίες", "numberOfLearners": "Αριθμός μαθητών", "mustBeInteger": "Πρέπει να είναι ακέραιος π.χ. 1, 2, 3, ...", - "noLemmasFound": "Δεν βρέθηκε λεξιλόγιο με περισσότερα από {xp} XP. Συνεχίστε την πρακτική!", "constructUsePvmDesc": "Παράγεται σε φωνητικό μήνυμα", - "lockedMorphFeature": "Αναμονή απελευθέρωσης", "leaveSpaceDescription": "Αφήνοντας το μάθημα, θα αφήσετε όλες τις συνομιλίες μέσα σε αυτό. Οι άλλοι χρήστες θα δουν ότι έχετε φύγει από το μάθημα.", - "whatIsLemma": "Τι είναι το λήμμα;", "constructUseCorMmDesc": "Ορθό μήνυμα σημασίας", "constructUseIncMmDesc": "Λάθος μήνυμα σημασίας", "constructUseIgnMmDesc": "Αγνοημένο μήνυμα σημασίας", "clickForMeaningActivity": "Κάντε κλικ εδώ για μια Πρόκληση Νοήματος", "meaning": "Νόημα", "chatWith": "Ομάδα με {displayname}", - "slightlyOffensive": "Ελαφρώς προσβλητικό", "clickOnEmailLink": "Παρακαλώ κάντε κλικ στον σύνδεσμο στο email και συνεχίστε.\n\nΕλέγξτε τον φάκελο spam αν το email δεν έχει φτάσει.", - "whoIsAllowedToJoinThisChat": "Ποιος επιτρέπεται να συμμετάσχει σε αυτήν τη συνομιλία", "dontForgetPassword": "Μην ξεχάσετε τον κωδικό πρόσβασής σας!", "enableAutocorrectToolName": "Ενεργοποίηση αυτόματης διόρθωσης συσκευής", "enableAutocorrectDescription": "Αν η συσκευή σας υποστηρίζει τη γλώσσα που μαθαίνετε, μπορείτε να ενεργοποιήσετε την αυτόματη διόρθωση για να διορθώνει κοινά λάθη καθώς πληκτρολογείτε.", @@ -4604,48 +4199,26 @@ "autocorrectNotAvailable": "Δυστυχώς, η πλατφόρμα σας δεν υποστηρίζεται αυτήν τη στιγμή για αυτήν τη λειτουργία. Μείνετε συντονισμένοι για περαιτέρω ανάπτυξη!", "pleaseUpdateApp": "Παρακαλούμε ενημερώστε την εφαρμογή για να συνεχίσετε.", "chooseEmojiInstructionsBody": "Ταιριάξτε emojis με τις λέξεις που καλύτερα αντιπροσωπεύουν. Μην ανησυχείτε! Δεν θα χάσετε πόντους αν διαφωνείτε. 😅", - "pickAnEmojiFor": "Επιλέξτε ένα emoji για {lemma}", "analyticsVocabListBody": "Αυτή είναι όλη η λεξιλογική σας λίστα! Καθώς κερδίζετε XP για κάθε λέξη, θα μετατρέπονται από σπορά σε πλήρη άνθιση. Κάντε κλικ σε οποιαδήποτε λέξη για περισσότερες λεπτομέρειες.", "morphAnalyticsListBody": "Αυτές είναι όλες οι γραμματικές έννοιες στη γλώσσα που μαθαίνετε! Θα τις ξεκλειδώσετε καθώς τις συναντάτε κατά τη διάρκεια της συνομιλίας. Κάντε κλικ για λεπτομέρειες.", "knockSpaceSuccess": "Έχετε ζητήσει να συμμετάσχετε σε αυτό το μάθημα! Ένας διαχειριστής θα απαντήσει στο αίτημά σας μόλις το λάβει 😀", - "joinByCode": "Συμμετοχή με κωδικό", "chooseWordAudioInstructionsBody": "Ακούστε το πλήρες μήνυμα. Στη συνέχεια, ταιριάξτε τα ηχητικά με τις λέξεις.", "chooseMorphsInstructionsBody": "Κάντε κλικ στα κομμάτια παζλ για γραμματικές ερωτήσεις!", - "inviteAndLaunch": "Πρόσκληση και εκκίνηση", - "createOwnChat": "Δημιουργήστε το δικό σας chat", "pleaseEnterInt": "Παρακαλούμε εισάγετε έναν αριθμό", "home": "Αρχική", "join": "Συμμετοχή", "readingAssistanceOverviewBody": "Κάντε κλικ στα κουμπιά παρακάτω για mini-games με αντιστοίχιση emoji, ήχων, σημασιών λέξεων και γραμματικών εννοιών. Ή κάντε κλικ σε οποιαδήποτε λέξη για λεπτομέρειες.", - "learnByTexting": "Μάθε μέσω μηνυμάτων", - "levelSummaryTrigger": "Προβολή περίληψης", "levelSummaryPopupTitle": "Περίληψη Επιπέδου {level}", - "referFriends": "Παραπέμψτε φίλους", - "referFriendDialogTitle": "Προσκαλέστε έναν φίλο στη συζήτησή σας", - "referFriendDialogDesc": "Έχετε έναν φίλο που ενθουσιάζεται να μάθει μια νέα γλώσσα μαζί σας; Αν ναι, αντιγράψτε και στείλτε αυτόν τον σύνδεσμο πρόσκλησης για να συμμετάσχει και να αρχίσει να συνομιλεί μαζί σας σήμερα.", - "youUnlocked": "Ξεκλειδώσατε", "resetInstructionTooltipsTitle": "Επαναφορά οδηγιών βοήθειας", "resetInstructionTooltipsDesc": "Κάντε κλικ για να εμφανίσετε ξανά τις οδηγίες βοήθειας, όπως για έναν ολοκαίνουργιο χρήστη.", "selectForGrammar": "Επιλέξτε ένα εικονίδιο γραμματικής για δραστηριότητες και λεπτομέρειες.", - "newChatActivityTitle": "Θέλετε να προσθέσετε μια διασκεδαστική δραστηριότητα;", - "newChatActivityDesc": "Κάντε κάθε ομαδική συνομιλία μια περιπέτεια με το Activity Planner! Ορίστε συναρπαστικά θέματα και στόχους για την ομάδα, και ζωντανέψτε τις συζητήσεις με εκπληκτικές εικόνες. Εμπνεύστε δημιουργικές συζητήσεις και διατηρήστε τη διασκέδαση χωρίς κόπο!", - "exploreMore": "Εξερευνήστε περισσότερα", "randomize": "Τυχαία επιλογή", "clear": "Καθαρισμός", "makeYourOwnActivity": "Δημιουργήστε τη δική σας δραστηριότητα", "featuredActivities": "Προτεινόμενες", - "goToChat": "Πήγαινε στη συνομιλία", "save": "Αποθήκευση", - "selectActivity": "Επιλογή δραστηριότητας", - "wordFocusListeningMultipleChoice": "Ποιο ηχητικό ταιριάζει με τη λέξη;", "startChat": "Ξεκίνα μια συνομιλία", "translationProblem": "Πρόβλημα μετάφρασης", - "perfectTranslation": "Τέλεια μετάφραση!", - "greatJobTranslation": "Καλή δουλειά με αυτή τη μετάφραση!", - "goodJobTranslation": "Καλή δουλειά σε αυτή τη μετάφραση.", - "makingProgress": "Κάνεις πρόοδο!", - "keepPracticing": "Συνέχισε την πρακτική!", - "niceJob": "Καλή δουλειά!", "askToJoin": "Ζήτησε να συμμετάσχεις", "emptyChatWarningTitle": "Η συνομιλία είναι κενή", "emptyChatWarningDesc": "Δεν έχεις προσκαλέσει κανέναν στη συνομιλία σου. Πήγαινε στις ρυθμίσεις συνομιλίας για να προσκαλέσεις τις επαφές σου ή το Bot. Μπορείς επίσης να το κάνεις αργότερα.", @@ -4664,8 +4237,6 @@ "languageLevelC2Desc": "Μπορώ να καταλάβω σχεδόν τα πάντα που ακούω ή διαβάζω και να εκφράζομαι με ευφράδεια και ακρίβεια.", "newVocab": "Νέες λέξεις", "newGrammar": "Νέες γραμματικές έννοιες", - "congratulationsOnReaching": "Έφτασες στο Επίπεδο {level}!", - "seeDetails": "Δες λεπτομέρειες", "choosePracticeMode": "Κάνε κλικ σε μία από τις παραπάνω επιλογές για να ξεκινήσεις μια δραστηριότητα εξάσκησης", "ban": "Απαγόρευση", "unban": "Άρση απαγόρευσης", @@ -4679,8 +4250,6 @@ "timesUsedWithAssistance": "Χρησιμοποιήθηκε με βοήθεια", "shareInviteCode": "Μοιραστείτε τον κωδικό πρόσκλησης: {code}", "leaderboard": "Κατάταξη", - "welcomeUser": "Καλώς ήρθατε {user}", - "joinSpaceOnboardingDesc": "Έχετε κωδικό πρόσκλησης ή σύνδεσμο σε δημόσιο μάθημα;", "skipForNow": "Παραλείψτε προς το παρόν", "permissions": "Άδειες", "spaceChildPermission": "Ποιος μπορεί να προσθέσει νέες συνομιλίες σε αυτό το μάθημα", @@ -4688,12 +4257,8 @@ "defaultOption": "Προεπιλογή", "deleteChatDesc": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτήν τη συνομιλία; Θα διαγραφεί για όλους τους συμμετέχοντες και όλα τα μηνύματα μέσα στη συνομιλία δεν θα είναι πλέον διαθέσιμα για πρακτική ή αναλυτικά δεδομένα μάθησης.", "deleteSpaceDesc": "Το μάθημα και οποιεσδήποτε επιλεγμένες συνομιλίες θα διαγραφούν για όλους τους συμμετέχοντες και όλα τα μηνύματα μέσα στη συνομιλία δεν θα είναι πλέον διαθέσιμα για πρακτική ή αναλυτικά δεδομένα μάθησης. Αυτή η ενέργεια δεν μπορεί να αναιρεθεί.", - "chatWithActivities": "Συνομιλία με δραστηριότητες", "launch": "Έναρξη", - "launchActivityToChats": "Εκκίνηση δραστηριότητας σε συνομιλίες", "searchChats": "Αναζήτηση συνομιλιών", - "selectChats": "Επιλογή συνομιλιών", - "selectChatToStart": "Ολοκληρώθηκε! Επιλέξτε μια συνομιλία για να ξεκινήσετε", "maxFifty": "Μέγιστο 50", "configureSpace": "Διαμόρφωση μαθήματος", "pinMessages": "Καρφιτσώστε μηνύματα", @@ -4707,9 +4272,7 @@ "announcements": "Ανακοινώσεις", "activities": "Δραστηριότητες", "access": "Πρόσβαση", - "botSettings": "Ρυθμίσεις bot", "activitySuggestionTimeoutMessage": "Δουλεύουμε σκληρά για να δημιουργήσουμε περισσότερες δραστηριότητες για εσάς, παρακαλούμε ελέγξτε ξανά σε ένα λεπτό", - "accessSettingsWarning": "Ωχ! Φαίνεται ότι δεν έχετε άδεια να ορίσετε τους κανόνες Πρόσβασης αυτού του δωματίου. Θα πρέπει να ελέγξετε αυτά για να βεβαιωθείτε ότι είναι ό,τι χρειάζεστε και να μιλήσετε σε διαχειριστή δωματίου αν χρειάζεται να τα αλλάξετε", "howSpaceCanBeFound": "Πώς μπορεί να βρεθεί αυτό το μάθημα", "private": "Ιδιωτικό", "cannotBeFoundInSearch": "Δεν μπορεί να βρεθεί στην αναζήτηση", @@ -4722,16 +4285,6 @@ "canBeFoundViaKnock": "• αίτημα συμμετοχής και έγκριση διαχειριστή", "youHaveLeveledUp": "Έχετε ανέβει επίπεδο!", "sendActivities": "Αποστολή δραστηριοτήτων", - "getStarted": "Ξεκινήστε", - "getStartedBotChatDesc": "Το chat με AI είναι ένα εξαιρετικό μέρος για να ξεκινήσετε και τα εργαλεία ανάγνωσης, γραφής, ακρόασης και ομιλίας του Pangea το καθιστούν εύκολο!", - "getStartedCommunitiesDesc": "Η μάθηση με μια κοινότητα είναι όπου λάμπει το Pangea Chat!\nΜπορείτε να ενταχθείτε στην τάξη σας, να βρείτε ένα μάθημα ή ακόμα και να δημιουργήσετε το δικό σας!", - "getStartedFriendsDesc": "Έχετε φίλο που θέλει να μάθει μαζί σας;", - "getStartedBotChatComplete": "Μπράβο! Μιλάτε με το bot!", - "getStartedCommunitiesComplete": "Υπέροχα, έχετε ενταχθεί σε ένα μάθημα!", - "getStartedComplete": "Ολοκληρώσατε αυτό το τμήμα!\nΣυνεχίστε να εξερευνάτε τις εκπληκτικές λειτουργίες μας μιλώντας με φίλους!", - "getStartedFriendsComplete": "Ουάου! Έχετε φίλους! 😊", - "getStartedBotChatButton": "Ξεκινήστε το chat!", - "getStartedFriendsButton": "Μιλήστε με έναν φίλο", "groupChat": "Ομαδική Συνομιλία", "directMessage": "Άμεσο μήνυμα", "newDirectMessage": "Νέο άμεσο μήνυμα", @@ -4747,7 +4300,6 @@ "mySavedActivities": "Αποθηκευμένες Δραστηριότητες μου", "noSavedActivities": "Δεν υπάρχουν αποθηκευμένες δραστηριότητες", "saveActivity": "Αποθήκευση αυτής της δραστηριότητας", - "yourSavedActivities": "Αποθηκευμένες Δραστηριότητες", "failedToPlayVideo": "Αποτυχία αναπαραγωγής βίντεο", "done": "Ολοκληρώθηκε", "inThisSpace": "Σε αυτό το μάθημα", @@ -4786,37 +4338,27 @@ "maximumActivityParticipants": "Κάθε δραστηριότητα μπορεί να έχει το μέγιστο {count} συμμετέχοντα(ους).", "pending": "Εκκρεμεί", "inactive": "Ανενεργό", - "unjoinedActivityMessage": "Θέλετε να συμμετάσχετε; Επιλέξτε έναν ανοιχτό ρόλο!\nΉ απλά περάστε χρόνο και παρακολουθήστε την παράσταση!", - "fullActivityMessage": "Μη διστάσετε να παρακολουθήσετε την παράσταση! Ενώ δεν υπάρχουν ανοιχτοί ρόλοι για συμμετοχή, μπορείτε να δείτε τη συζήτηση!", "confirmRole": "Επιβεβαίωση ρόλου", "openRoleLabel": "ΑΝΟΙΧΤΟ", "joinedTheActivity": "👋 {username} συμμετείχε ως {role}", "finishedTheActivity": "🎯 {username} ολοκλήρωσε αυτήν τη δραστηριότητα", - "endActivityTitle": "Έχω τελειώσει", - "endActivityDesc": "Ολοκληρώσατε τους στόχους;\nΑυτή είναι η επιβεβαίωσή σας ότι αποχωρείτε από το μήνυμα. Αλλά μην ανησυχείτε, η διασκέδαση συνεχίζεται στη συζήτηση! Μη διστάσετε να περάσετε χρόνο και να απολαύσετε την παράσταση μέχρι όλοι να πατήσουν 'Τελείωσα'.", "archiveToAnalytics": "Προσθήκη στις Ολοκληρωμένες Δραστηριότητες μου", "activitySummaryError": "Οι περιλήψεις δραστηριοτήτων δεν είναι διαθέσιμες", "requestSummaries": "Αιτήματα περιλήψεων", - "loadingActivitySummary": "Φόρτωση περίληψης δραστηριότητας...", "generatingNewActivities": "Είστε ο πρώτος χρήστης αυτής της ζεύξης γλωσσών! Παρακαλούμε δώστε μας ένα λεπτό, ετοιμάζουμε δραστηριότητες αποκλειστικά για εσάς.", - "requestAccessTitle": "Αίτηση πρόσβασης στην προβολή αναλυτικών στοιχείων;", + "requestAccessTitle": "Ζητήστε πρόσβαση σε αναλύσεις;", "requestAccessDesc": "Θα θέλατε να ζητήσετε πρόσβαση για να δείτε τα αναλυτικά στοιχεία των συμμετεχόντων;\n\nΑν οι συμμετέχοντες συμφωνήσουν, οι διαχειριστές αυτού του μαθήματος θα μπορούν να δουν:\n • συνολικό λεξιλόγιο\n • συνολικές γραμματικές έννοιες\n • συνολικές συνεδρίες δραστηριότητας που ολοκληρώθηκαν\n • τις συγκεκριμένες γραμματικές έννοιες που χρησιμοποιήθηκαν, σωστά και λανθασμένα\n\nΔεν θα μπορούν να δουν:\n • μηνύματα σε συνομιλίες εκτός του μαθήματος\n • λίστα λεξιλογίου", "requestAccess": "Αίτηση πρόσβασης ({count})", "analyticsInactiveTitle": "Οι αιτήσεις σε ανενεργούς χρήστες δεν μπορούν να σταλούν", "analyticsInactiveDesc": "Οι ανενεργοί χρήστες που δεν έχουν συνδεθεί από τότε που εισήχθη αυτή η λειτουργία δεν θα δουν το αίτημά σας.\n\nΤο κουμπί Αίτημα θα εμφανιστεί μόλις επιστρέψουν. Μπορείτε να ξαναστείλετε το αίτημα αργότερα κάνοντας κλικ στο κουμπί Αίτημα κάτω από το όνομά τους όταν είναι διαθέσιμο.", "accessRequestedTitle": "Αίτημα πρόσβασης στα αναλυτικά στοιχεία", - "accessRequestedDesc": "Οι διαχειριστές του “{space}” ζητούν να δουν τα αναλυτικά σας στοιχεία μάθησης.\n\nΑν συμφωνείτε, οι διαχειριστές αυτού του μαθήματος θα μπορούν να δουν:\n • συνολικό λεξιλόγιο\n • συνολικές γραμματικές έννοιες\n • συνολικές συνεδρίες δραστηριότητας που ολοκληρώθηκαν\n • τις συγκεκριμένες γραμματικές έννοιες που χρησιμοποιήθηκαν, σωστά και λανθασμένα\n\nΔεν θα μπορούν να δουν:\n • μηνύματα σε συνομιλίες εκτός του μαθήματος\n • λίστα λεξιλογίου", - "allowAccess": "Επιτρέψτε την πρόσβαση", - "denyAccess": "Αρνηθείτε την πρόσβαση", + "accessRequestedDesc": "Ζητώντας admin(s): {admin} \n\nΟι διαχειριστές από το «{space}» ζητούν να δουν τις αναλύσεις μάθησής σας.\n\nΑν συμφωνείτε, θα μπορούν να δουν:\n • το συνολικό λεξιλόγιο\n • τις συνολικές έννοιες γραμματικής\n • τις συνολικές συνεδρίες δραστηριότητας που ολοκληρώθηκαν\n • τις συγκεκριμένες έννοιες γραμματικής που χρησιμοποιήθηκαν, σωστά και λανθασμένα\n\nΔεν θα μπορούν να δουν:\n • μηνύματα σε συνομιλίες εκτός του μαθήματος\n • τη λίστα λεξιλογίου", "adminRequestedAccess": "Οι διαχειριστές ζήτησαν να δουν τα αναλυτικά σας στοιχεία.", "lastUpdated": "Ενημερώθηκε\n{time}", "activityFinishedMessage": "Όλα Ολοκληρώθηκαν!", "endForAll": "Τέλος για όλους", "newCourse": "Νέο μάθημα", - "newCourseSubtitle": "Ποιο σχέδιο μαθήματος θα θέλατε να χρησιμοποιήσετε;", - "failedToLoadCourses": "Αποτυχία φόρτωσης μαθημάτων", "numModules": "{num} ενότητες", - "numActivityPlans": "{num} σχέδια δραστηριοτήτων", "coursePlan": "Πλάνο Μαθήματος", "editCourseLater": "Μπορείτε να επεξεργαστείτε τον τίτλο, τις περιγραφές και την εικόνα του μαθήματος αργότερα.", "newCourseAccess": "Κατά κανόνα, τα μαθήματα είναι ιδιωτικά και απαιτούν έγκριση διαχειριστή για συμμετοχή. Μπορείτε να επεξεργαστείτε αυτές τις ρυθμίσεις οποτεδήποτε.", @@ -4830,17 +4372,11 @@ "accessDesc": "Μπορείτε να κάνετε το μάθημά σας ανοιχτό στον κόσμο! Ή, να το κρατήσετε ιδιωτικό και ασφαλές.", "createGroupChatDesc": "Ενώ οι συνεδρίες δραστηριοτήτων ξεκινούν και τελειώνουν, οι ομαδικές συνομιλίες θα παραμένουν ανοιχτές για τακτική επικοινωνία.", "deleteDesc": "Μόνο διαχειριστές μπορούν να διαγράψουν ένα μάθημα. Αυτή είναι μια καταστροφική ενέργεια που αφαιρεί όλους τους χρήστες και διαγράφει όλες τις επιλεγμένες συνομιλίες εντός του μαθήματος. Προχωρήστε με προσοχή.", - "failedToLoadCourseInfo": "Αποτυχία φόρτωσης πληροφοριών μαθήματος", "noCourseFound": "Ωχ, αυτό το μάθημα χρειάζεται ένα πλάνο!\n\nΤα πλάνα μαθημάτων είναι μια σειρά θεμάτων και δραστηριοτήτων συζήτησης.", "additionalParticipants": "+ {num} άλλοι", - "activityNotFoundForCourse": "Αυτή η δραστηριότητα δεν βρέθηκε στο μάθημα", - "courseChats": "Ομάδες Μαθημάτων", - "myActivitySessions": "Οι Συνεδρίες Δραστηριότητάς μου", "directMessages": "Άμεσες Μηνύσεις", "whatNow": "Τι τώρα;", "chooseNextActivity": "Επιλέξτε την επόμενη δραστηριότητά σας!", - "seeInstructions": "Δείτε τις οδηγίες", - "hideInstructions": "Απόκρυψη οδηγιών", "letsGo": "Πάμε", "chooseRole": "Επιλέξτε ρόλο!", "chooseRoleToParticipate": "Επιλέξτε ρόλο για συμμετοχή!", @@ -4850,23 +4386,15 @@ "inviteFriends": "Προσκαλέστε φίλους", "waitNotDone": "Περίμενε, δεν έχω τελειώσει!", "waitingForOthersToFinish": "Αναμονή για τους υπόλοιπους να τελειώσουν...", - "saveToCompletedActivities": "Αποθήκευση σε ολοκληρωμένες δραστηριότητες", "generatingSummary": "Ανάλυση συνομιλίας και δημιουργία αποτελεσμάτων", - "instructionsLanguage": "Γλώσσα οδηγιών", "findCourse": "Βρείτε ένα μάθημα", - "activityCompletedDesc": "Ο ολοκληρωμένος σας δραστηριότητα προστέθηκε στην ανάλυση όπου μπορείτε να αναθεωρήσετε και να εξασκηθείτε στη γλώσσα που χρησιμοποιήσατε.", "pingParticipantsNotification": "{user} ψάχνει χρήστες να συμμετάσχουν στη συνεδρία δραστηριότητας στο {room}", "course": "Μάθημα", "courses": "Μαθήματα", "courseName": "Όνομα μαθήματος", "createNewCourse": "Νέο μάθημα", - "publicCourses": "Δημόσια μαθήματα", "goToCourse": "Πήγαινε στο μάθημα: {course}", "activityComplete": "Αυτή η δραστηριότητα έχει ολοκληρωθεί. Η περίληψη της δραστηριότητας θα πρέπει να είναι διαθέσιμη παρακάτω.", - "haventChattedMuch": "Φαίνεται ότι δεν έχετε μιλήσει πολύ, δοκιμάστε να χρησιμοποιήσετε περισσότερες λέξεις λεξιλογίου! Αν νιώθετε ότι έχετε ολοκληρώσει τον στόχο σας, μπορείτε να τερματίσετε τη δραστηριότητα παρακάτω.", - "haveChatted": "Φαίνεται ότι έχετε μιλήσει για λίγο! Αν νιώθετε ότι έχετε ολοκληρώσει τον στόχο σας, ολοκληρώστε για να τελειώσετε τη δραστηριότητα και θα δημιουργήσουμε μια περίληψη στο chat!", - "userDoneAndWaiting": "{num1}/{num2} συμμετέχοντες έχουν ολοκληρώσει. Περιμένετε όλοι να τελειώσουν, και θα δημιουργήσουμε μια περίληψη στο chat! \n\nΑν θέλετε να ξαναμπείτε στη συζήτηση, κάντε κλικ στο κουμπί συνέχεια στο chat.", - "othersDoneAndWaiting": "{num1}/{num2} έχουν ολοκληρώσει. Έχετε ολοκληρώσει τον στόχο σας;", "startNewSession": "Ξεκινήστε νέα συνεδρία", "joinOpenSession": "Συμμετοχή σε ανοιχτή συνεδρία", "less": "λιγότερο", @@ -4876,7 +4404,6 @@ "openToJoin": "Ανοιχτό για συμμετοχή", "results": "Αποτελέσματα", "activityDone": "Ολοκληρώθηκε η δραστηριότητα!", - "moreLabel": "περισσότερα", "promoCodeInfo": "Οι κωδικοί προώθησης μπορούν να εισαχθούν στη σελίδα που ακολουθεί", "editsComingSoon": "Η δυνατότητα επεξεργασίας πόλεων και δραστηριοτήτων έρχεται σύντομα.", "editing": "Επεξεργασία", @@ -4892,13 +4419,10 @@ "courseSavedSuccessfully": "Το μάθημα αποθηκεύτηκε με επιτυχία", "addCoursePlan": "Προσθήκη σχεδίου μαθήματος", "activityStatsButtonInstruction": "Κάντε κλικ εδώ για να δείτε τα στατιστικά της δραστηριότητάς σας και να κλείσετε τη δραστηριότητα όταν τελειώσετε", - "readingAnalyticsDesc": "Κάντε κλικ στην πρακτική σε κάθε μήνυμα για δραστηριότητες ανάγνωσης.", - "speakingAnalyticsDesc": "Καταγράψτε φωνητικά μηνύματα για πρακτική ομιλίας.", - "audioAnalyticsDesc": "Κάντε κλικ στην πρακτική σε κάθε μήνυμα για δραστηριότητες ακρόασης.", "loginToAccount": "Συνδεθείτε στον λογαριασμό μου", "appDescription": "Μάθε μια γλώσσα\nενώ στέλνεις μηνύματα στους φίλους σου.", "languages": "Γλώσσες", - "chooseLanguage": "Επιλέξτε μια γλώσσα.", + "chooseLanguage": "Επιλέξτε μια γλώσσα στόχου.", "planTrip": "Προγραμματίστε το ταξίδι σας", "howAreYouTraveling": "Πώς ταξιδεύετε;", "unlockPrivateTrip": "Ξεκλειδώστε ένα ιδιωτικό ταξίδι", @@ -4911,25 +4435,20 @@ "courseCode": "Ποιος είναι ο μυστικός κωδικός;", "courseCodeHint": "Κωδικός ή σύνδεσμος ταξιδιού", "unlockMyTrip": "Ξεκλειδώστε το ταξίδι μου", - "anyLevel": "Οποιοδήποτε επίπεδο", "signupOption": "Πώς θέλετε να εγγραφείτε;", "withApple": "Με την Apple", "withGoogle": "Με Google", "withEmail": "Με Email", "createAccount": "Δημιουργία λογαριασμού", - "noCoursesFound": "Δεν βρέθηκαν μαθήματα", "loginWithEmail": "Σύνδεση με email", "usernameOrEmail": "Όνομα χρήστη ή email", "email": "Email", "forgotPassword": "Ξεχάσατε τον κωδικό;", - "writingAnalyticsDesc": "Αποστέλλετε μηνύματα για να εξασκηθείτε στη γραφή.", "endActivity": "Τέλος δραστηριότητας", "allLanguages": "Όλες οι γλώσσες", - "allCefrLevels": "Όλα τα επίπεδα CEFR", "chatListTooltip": "Εδώ θα βρείτε τα άμεσα μηνύματά σας! Κάντε κλικ σε οποιονδήποτε avatar χρήστη και \"ξεκινήστε συνομιλία\" για να στείλετε ένα DM.", "directMessageBotTitle": "Άμεσο μήνυμα Pangea Bot", "feedbackTitle": "Ανατροφοδότηση δραστηριότητας", - "feedbackDesc": "Πώς θα πρέπει να βελτιωθεί η δραστηριότητα; Αν μπορείτε να δώσετε μερικές λεπτομέρειες, θα κάνουμε τις αλλαγές!", "feedbackHint": "Η ανατροφοδότησή σας", "feedbackButton": "Υποβολή ανατροφοδότησης", "directMessageBotDesc": "Το να μιλάς με ανθρώπους είναι πιο διασκεδαστικό, αλλά... η ΤΝ είναι πάντα έτοιμη!", @@ -4937,7 +4456,7 @@ "playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν", "courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!", "@@locale": "el", - "@@last_modified": "2026-01-06 13:02:36.159093", + "@@last_modified": "2026-01-07 14:28:33.144714", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6063,30 +5582,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6102,18 +5597,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6138,18 +5621,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6186,38 +5657,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6226,62 +5669,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6318,10 +5717,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6330,14 +5725,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6346,46 +5733,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6394,10 +5745,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6454,18 +5801,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6474,14 +5809,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6510,18 +5837,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6530,42 +5845,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6574,14 +5857,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6602,26 +5877,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6642,10 +5897,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6678,25 +5929,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6753,34 +5985,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6809,778 +6013,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8573,14 +7009,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8592,14 +7020,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8631,10 +7051,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8643,18 +7059,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8663,14 +7067,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8695,38 +7091,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8772,10 +7140,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8800,10 +7164,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8828,10 +7188,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8840,66 +7196,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8920,42 +7220,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8980,154 +7256,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9144,18 +7272,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9176,14 +7292,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9200,10 +7308,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9216,14 +7320,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9232,14 +7328,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9267,26 +7355,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9315,18 +7383,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9363,10 +7423,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10299,10 +8355,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10483,34 +8535,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10523,10 +8547,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10535,14 +8555,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10559,22 +8571,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10722,14 +8718,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10738,34 +8726,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10774,54 +8734,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10830,10 +8754,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10850,10 +8770,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11025,26 +8941,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11073,10 +8969,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11133,30 +9025,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11185,18 +9061,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11313,14 +9181,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11333,10 +9193,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11345,14 +9201,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11369,14 +9217,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11385,22 +9225,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11413,18 +9237,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11441,22 +9253,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11465,30 +9265,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11561,18 +9337,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11629,18 +9393,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11669,30 +9421,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11745,18 +9481,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11805,46 +9533,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11909,10 +9597,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12084,14 +9768,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12119,14 +9795,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12139,10 +9807,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12178,19 +9842,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12215,14 +9874,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12231,14 +9882,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12291,10 +9934,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12307,18 +9946,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12331,14 +9958,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12379,26 +9998,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12426,10 +10033,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12440,36 +10043,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12506,10 +10079,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12574,18 +10143,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12650,10 +10207,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12674,10 +10227,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12694,10 +10243,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12706,10 +10251,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12722,10 +10263,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12750,16 +10287,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Προσκαλέστε φίλους σε δραστηριότητα", - "inviteFriendsToActivityCourse": "Προσκαλέστε φίλους σε δραστηριότητα και μάθημα", "feedbackRespDesc": "Ελέγξτε ξανά αύριο για ενημερώσεις δραστηριότητας.", "activityDropdownDesc": "Όταν τελειώσετε με αυτή τη δραστηριότητα, κάντε κλικ παρακάτω", - "activityAnalyticsListBody": "Αυτές είναι οι ολοκληρωμένες δραστηριότητές σας! Μετά την ολοκλήρωση των δραστηριοτήτων, μπορείτε να τις δείτε εδώ.", "languageMismatchTitle": "Αντιφάσεις γλώσσας", "languageMismatchDesc": "Η γλώσσα στόχος σας δεν ταιριάζει με τη γλώσσα αυτής της δραστηριότητας. Θέλετε να ενημερώσετε τη γλώσσα στόχο;", "reportWordIssueTooltip": "Αναφορά προβλήματος με τις πληροφορίες της λέξης", "tokenInfoFeedbackDialogTitle": "Ανατροφοδότηση Πληροφοριών Λέξης", - "tokenInfoFeedbackDialogDesc": "Η τεχνητή νοημοσύνη κάνει λάθη. Παρακαλώ περιγράψτε τυχόν προβλήματα που βρήκατε με τις παραπάνω πληροφορίες.", "noPublicCoursesFound": "Δεν βρέθηκαν δημόσια μαθήματα. Θα θέλατε να δημιουργήσετε ένα;", "noCourseTemplatesFound": "Δεν βρήκαμε μαθήματα για τη γλώσσα στόχο σας. Μπορείτε να συνομιλήσετε με το Pangea Bot εν τω μεταξύ, και να επιστρέψετε αργότερα για περισσότερα μαθήματα.", "botActivityJoinFailMessage": "Ο Pangea Bot καθυστερεί να απαντήσει. Παρακαλώ δοκιμάστε ξανά αργότερα, ή προσκαλέστε έναν φίλο.", @@ -12767,14 +10300,6 @@ "leaveDesc": "Αφήστε αυτόν τον χώρο και όλες τις συνομιλίες μέσα σε αυτόν", "selectAll": "Επιλογή όλων", "deselectAll": "Αποεπιλογή όλων", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12783,10 +10308,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12803,10 +10324,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12840,7 +10357,6 @@ "newMessageInPangeaChat": "🔊 Νέο μήνυμα στο Pangea Chat", "shareCourse": "Μοιράσου το μάθημα", "addCourse": "Πρόσθεσε ένα μάθημα", - "joinCourseWithCode": "Συνδεθείτε με κωδικό μαθήματος", "joinPublicCourse": "Συνδεθείτε σε δημόσιο μάθημα", "vocabLevelsDesc": "Εδώ θα προστεθούν οι λέξεις λεξιλογίου μόλις τις αναβαθμίσετε!", "highlightVocabTooltip": "Επισημάνετε τις λέξεις-στόχους παρακάτω στέλνοντάς τες ή εξασκώντας τες στη συνομιλία", @@ -12864,10 +10380,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12876,7 +10388,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Δεν βρέθηκαν άμεσες μηνύματα ή συνομιλίες. Βεβαιωθείτε ότι η αναζήτησή σας είναι σωστά γραμμένη.", + "activityAnalyticsTooltipBody": "Αυτές είναι οι αποθηκευμένες δραστηριότητές σας για ανασκόπηση και πρακτική.", + "numSavedActivities": "Αριθμός αποθηκευμένων δραστηριοτήτων", + "saveActivityTitle": "Αποθήκευση δραστηριότητας", + "saveActivityDesc": "Καλή δουλειά! Αποθηκεύστε αυτή τη δραστηριότητα για μελλοντική ανασκόπηση και πρακτική", + "levelInfoTooltip": "Εδώ μπορείτε να δείτε όλους τους πόντους που έχετε κερδίσει και πώς!", + "alreadyInCourseWithID": "Είστε ήδη σε ένα μάθημα με αυτό το σχέδιο. Θέλετε να δημιουργήσετε ένα μάθημα με το ίδιο σχέδιο ή να πάτε στο υπάρχον μάθημα;", + "goToExistingCourse": "Πηγαίνετε στο υπάρχον μάθημα", + "emojiView": "Προβολή emoji", + "feedbackDialogDesc": "Κάνω λάθη κι εγώ! Οτιδήποτε μπορεί να με βοηθήσει να βελτιωθώ;", + "contactHasBeenInvitedToTheCourse": "Η επαφή έχει προσκληθεί στο μάθημα", + "activityStatsButtonTooltip": "Πληροφορίες δραστηριότητας", + "allow": "Επιτρέπω", + "deny": "Αρνούμαι", + "enabledRenewal": "Ενεργοποίηση Ανανέωσης Συνδρομής", + "subscriptionEndsOn": "Η Συνδρομή Λήγει Στις", + "subscriptionRenewsOn": "Η Συνδρομή Ανανεώνεται Στις", + "waitForSubscriptionChanges": "Οι αλλαγές στη συνδρομή σας μπορεί να χρειαστούν λίγο χρόνο για να εμφανιστούν στην εφαρμογή.", + "subscribeReadingAssistance": "Εγγραφείτε για να ξεκλειδώσετε τα εργαλεία μηνυμάτων", + "aceDisplayName": "Αχινέζικα", + "achDisplayName": "Ακόλι", + "afDisplayName": "Αφρικάανς", + "akDisplayName": "Ακάν", + "alzDisplayName": "Αλούρ", + "amDisplayName": "Αμχαρικά", + "arDisplayName": "Αραβικά", + "asDisplayName": "Ασαμέζ", + "awaDisplayName": "Αουάντι", + "ayDisplayName": "Αϊμάρα", + "azDisplayName": "Αζερικά", + "baDisplayName": "Μπασκίρ", + "banDisplayName": "Μπαλινέζικα", + "bbcDisplayName": "Μπατάκ Τόμπα", + "beDisplayName": "Λευκορωσικά", + "bemDisplayName": "Μπέμπα", + "bewDisplayName": "Μπεταβί", + "bgDisplayName": "Βουλγαρικά", + "bhoDisplayName": "Μποχτζπούρι", + "bikDisplayName": "Μπικολ", + "bmDisplayName": "Μπαμπάρα", + "bnDisplayName": "Μπενγκάλι", + "bnBDDisplayName": "Μπενγκάλι (Μπαγκλαντές)", + "bnINDisplayName": "Μπενγκάλι (Ινδία)", + "brDisplayName": "Βρετονικά", + "bsDisplayName": "Βοσνιακά", + "btsDisplayName": "Μπατάκ Σιμαλούνγκουν", + "btxDisplayName": "Μπατάκ Καρό", + "buaDisplayName": "Μπουριάτ", + "caDisplayName": "Καταλανικά", + "cebDisplayName": "Σεμπουάνο", + "cggDisplayName": "Χίγκα", + "chmDisplayName": "Μάρι", + "ckbDisplayName": "Κεντρικά Κουρδικά", + "cnhDisplayName": "Χάκα Τσιν", + "coDisplayName": "Κορσικανικά", + "crhDisplayName": "Κριμαϊκά Τουρκικά", + "crsDisplayName": "Σεσέλβα Κρεολικά Γαλλικά", + "csDisplayName": "Τσέχικα", + "cvDisplayName": "Τσουβάς", + "cyDisplayName": "Ουαλικά", + "daDisplayName": "Δανέζικα", + "deDisplayName": "Γερμανικά", + "dinDisplayName": "Ντίγκα", + "doiDisplayName": "Ντόγκρι", + "dovDisplayName": "Ντόμπε", + "dzDisplayName": "Ντζονγκκά", + "eeDisplayName": "Εβέ", + "enDisplayName": "Αγγλικά", + "enAUDisplayName": "Αγγλικά (Αυστραλία)", + "enGBDisplayName": "Αγγλικά (Ηνωμένο Βασίλειο)", + "enINDisplayName": "Αγγλικά (Ινδία)", + "enUSDisplayName": "Αγγλικά (ΗΠΑ)", + "eoDisplayName": "Εσπεράντο", + "esDisplayName": "Ισπανικά", + "esESDisplayName": "Ισπανικά (Ισπανία)", + "esMXDisplayName": "Ισπανικά (Μεξικό)", + "euDisplayName": "Βάσκικα", + "faDisplayName": "Περσικά", + "ffDisplayName": "Φουλάχ", + "fiDisplayName": "Φινλανδικά", + "filDisplayName": "Φιλιππινέζικα", + "fjDisplayName": "Φιτζιανικά", + "foDisplayName": "Φαροέζικα", + "frDisplayName": "Γαλλικά", + "frCADisplayName": "Γαλλικά (Καναδάς)", + "frFRDisplayName": "Γαλλικά (Γαλλία)", + "fyDisplayName": "Δυτικά Φριζιανά", + "gaDisplayName": "Ιρλανδικά", + "gaaDisplayName": "Γκα", + "gdDisplayName": "Σκωτικά Γαελικά", + "glDisplayName": "Γαλικιανά", + "gnDisplayName": "Γκουαρανί", + "gomDisplayName": "Γκόαν Κονκάνι", + "guDisplayName": "Γκουτζαράτι", + "haDisplayName": "Χάουσα", + "hawDisplayName": "Χαβανέζικα", + "heDisplayName": "Εβραϊκά", + "hiDisplayName": "Χίντι", + "hilDisplayName": "Χιλιγκάινον", + "hmnDisplayName": "Χμονγκ", + "hneDisplayName": "Χαττισγκάρχι", + "hrDisplayName": "Κροατικά", + "hrxDisplayName": "Χουνσρικ", + "htDisplayName": "Αϊτινός Κρεόλ", + "huDisplayName": "Ουγγρικά", + "hyDisplayName": "Αρμενικά", + "idDisplayName": "Ινδονησιακά", + "igDisplayName": "Ίγκο", + "iloDisplayName": "Ιλόκο", + "isDisplayName": "Ισλανδικά", + "itDisplayName": "Ιταλικά", + "jaDisplayName": "Ιαπωνικά", + "jvDisplayName": "Ιαβανικά", + "kaDisplayName": "Γεωργιανά", + "kkDisplayName": "Καζακικά", + "kmDisplayName": "Χμερ", + "knDisplayName": "Καννάδα", + "koDisplayName": "Κορεατικά", + "kokDisplayName": "Κονκάνι", + "kriDisplayName": "Κρίο", + "ksDisplayName": "Κασμίρι", + "ktuDisplayName": "Κιτούμπα (Δημοκρατική Δημοκρατία του Κονγκό)", + "kuDisplayName": "Κουρδικά", + "kyDisplayName": "Κιργιζικά", + "laDisplayName": "Λατινικά", + "lbDisplayName": "Λουξεμβουργιανά", + "lgDisplayName": "Γκάντα", + "liDisplayName": "Λιμβουργιανά", + "lijDisplayName": "Λιγουριανά", + "lmoDisplayName": "Λομβαρδικά", + "lnDisplayName": "Λινγκάλα", + "loDisplayName": "Λάο", + "ltDisplayName": "Λιθουανικά", + "ltgDisplayName": "Λατγαλικά", + "luoDisplayName": "Λούο (Κένυα και Τανζανία)", + "lusDisplayName": "Μίζο", + "lvDisplayName": "Λετονικά", + "maiDisplayName": "Μαϊθίλι", + "makDisplayName": "Μακασάρ", + "mgDisplayName": "Μαλαγασί", + "miDisplayName": "Μάορι", + "minDisplayName": "Μιναγκαμπάου", + "mkDisplayName": "Μακεδονικά", + "mlDisplayName": "Μαλαγιαλάμ", + "mnDisplayName": "Μογγολικά", + "mniDisplayName": "Μανιπούρι", + "mrDisplayName": "Μαραθί", + "msDisplayName": "Μαλάι", + "msArabDisplayName": "Μαλάι (Αραβικά)", + "msMYDisplayName": "Μαλάι (Μαλαισία)", + "mtDisplayName": "Μαλτέζικα", + "mwrDisplayName": "Μαραθί", + "myDisplayName": "Βιρμανικά", + "nanDisplayName": "Μιν Ναν", + "nbDisplayName": "Νορβηγικά (Μποκμάλ)", + "neDisplayName": "Νεπαλέζικα", + "newDisplayName": "Νεουαρί", + "nlDisplayName": "Ολλανδικά", + "nlBEDisplayName": "Φλαμανδικά", + "noDisplayName": "Νορβηγικά", + "nrDisplayName": "Νότιο Ντεμπέλε", + "nsoDisplayName": "Βόρειος Σόθο", + "nusDisplayName": "Νούερ", + "nyDisplayName": "Νιάντζα", + "ocDisplayName": "Οξιτανικά", + "omDisplayName": "Ορόμο", + "orDisplayName": "Οντία", + "paDisplayName": "Παντζάμπι", + "paArabDisplayName": "Παντζάμπι (Σαχμουκί)", + "paINDisplayName": "Παντζάμπι (Γκουρμούκι)", + "pagDisplayName": "Πανγκασινάν", + "pamDisplayName": "Πάμπανγκα", + "papDisplayName": "Πάπιεντο", + "plDisplayName": "Πολωνικά", + "psDisplayName": "Παστού", + "ptDisplayName": "Πορτογαλικά", + "ptBRDisplayName": "Πορτογαλικά (Βραζιλία)", + "ptPTDisplayName": "Πορτογαλικά (Πορτογαλία)", + "quDisplayName": "Κετσούα", + "rajDisplayName": "Ρατζαστάνι", + "rnDisplayName": "Ρούντι", + "roDisplayName": "Ρουμανικά", + "roMDDisplayName": "Μολδαβικά", + "romDisplayName": "Ρομά", + "ruDisplayName": "Ρωσικά", + "rwDisplayName": "Κινυαρουάντα", + "saDisplayName": "Σανσκριτικά", + "satDisplayName": "Σαντάλι", + "scnDisplayName": "Σικελικά", + "sdDisplayName": "Σιντί", + "sgDisplayName": "Σάνγκο", + "shnDisplayName": "Σαν", + "siDisplayName": "Σινχάλα", + "skDisplayName": "Σλοβακικά", + "slDisplayName": "Σλοβενικά", + "smDisplayName": "Σαμοά", + "snDisplayName": "Σόνα", + "soDisplayName": "Σομαλικά", + "sqDisplayName": "Αλβανικά", + "srDisplayName": "Σερβικά", + "srMEDisplayName": "Μαυροβούνιο", + "ssDisplayName": "Σουαχίλι", + "stDisplayName": "Νότιος Σόθο", + "suDisplayName": "Σουντανησιακά", + "svDisplayName": "Σουηδικά", + "swDisplayName": "Σουαχίλι", + "szlDisplayName": "Σιλεσιανά", + "taDisplayName": "Ταμίλ", + "teDisplayName": "Τελούγκου", + "tetDisplayName": "Τετούμ", + "tgDisplayName": "Τατζικικά", + "thDisplayName": "Ταϊλανδέζικα", + "tiDisplayName": "Τιγκρινιά", + "tkDisplayName": "Τουρκμενικά", + "tlDisplayName": "Ταγκάλογ", + "tnDisplayName": "Τσουάνα", + "trDisplayName": "Τουρκικά", + "tsDisplayName": "Τσόνγκα", + "ttDisplayName": "Τατάρ", + "ugDisplayName": "Ουιγούρο", + "ukDisplayName": "Ουκρανικά", + "urDisplayName": "Ουρντού", + "urINDisplayName": "Ουρντού (Ινδία)", + "urPKDisplayName": "Ουρντού (Πακιστάν)", + "uzDisplayName": "Ουζμπεκικά", + "viDisplayName": "Βιετναμέζικα", + "wuuDisplayName": "Γου", + "xhDisplayName": "Χόσα", + "yiDisplayName": "Γίντις", + "yoDisplayName": "Γιορούμπα", + "yuaDisplayName": "Γιουκατέκο", + "yueDisplayName": "Καντονέζικα", + "yueCNDisplayName": "Καντονέζικα (Κίνα)", + "yueHKDisplayName": "Καντονέζικα (Χονγκ Κονγκ)", + "zhDisplayName": "Κινέζικα", + "zhCNDisplayName": "Κινέζικα (Απλοποιημένα)", + "zhTWDisplayName": "Κινέζικα (Παραδοσιακά)", + "zuDisplayName": "Ζουλού", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12943,6 +11641,7 @@ "notStartedActivitiesTitle": "Ανοιχτές συνεδρίες ({num})", "inProgressActivitiesTitle": "Γίνεται τώρα ({num})", "completedActivitiesTitle": "Ολοκληρώθηκε ({num})", + "pickDifferentActivity": "Επιλέξτε μια διαφορετική δραστηριότητα", "inOngoingActivity": "Έχετε μια τρέχουσα δραστηριότητα!", "@notStartedActivitiesTitle": { "type": "String", @@ -12968,10 +11667,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Η γλώσσα στόχου σας δεν ταιριάζει με αυτό το μήνυμα. Θέλετε να ενημερώσετε τη γλώσσα στόχου σας;", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Αυτοί είναι όλοι σε αυτό το μάθημα. Κάντε κλικ στο avatar οποιουδήποτε χρήστη και \"ξεκινήστε συνομιλία\" για να στείλετε ένα DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Αυτή η λέξη λεξιλογίου θα αφαιρεθεί μόνιμα από την ανάλυσή σας", + "woman": "Γυναίκα", + "man": "Άνδρας", + "otherGender": "Άλλο", + "unselectedGender": "Επιλέξτε μια επιλογή φύλου", + "gender": "Φύλο", + "chatParticipantTooltip": "Αυτοί είναι όλοι σε αυτή τη συνομιλία. Κάντε κλικ στο avatar οποιουδήποτε χρήστη και \"ξεκινήστε συνομιλία\" για να στείλετε ένα DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Τα εργαλεία μάθησης είναι απενεργοποιημένα για μηνύματα που δεν είναι στη γλώσσα στόχου σας.", + "vocabEmoji": "Εικόνισμα λεξιλογίου", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Αίτημα αναγέννησης", + "optionalRegenerateReason": "(Προαιρετικό) Λόγος", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Έχετε ορίσει το emoji για {lemma}! Θα χρησιμοποιήσουμε αυτό το emoji για να εκπροσωπήσουμε τη λέξη σε πρακτικές δραστηριότητες στο εξής.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Περιμένοντας την ολοκλήρωση της σύνδεσης", + "ssoDialogDesc": "Ανοίξαμε μια νέα καρτέλα ώστε να μπορέσετε να συνδεθείτε με ασφάλεια.", + "ssoDialogHelpText": "🤔 Αν δεν είδατε τη νέα καρτέλα, παρακαλώ ελέγξτε τον αποκλειστή αναδυόμενων παραθύρων σας.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Απενεργοποίηση εργαλείων γλώσσας", + "disableLanguageToolsDesc": "Θα θέλατε να απενεργοποιήσετε την αυτόματη βοήθεια γλώσσας;", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Η άδεια απορρίφθηκε. Ενεργοποιήστε τις άδειες εγγραφής για να καταγράψετε ηχητικά μηνύματα.", + "genericWebRecordingError": "Κάτι πήγε στραβά. Συνιστούμε να χρησιμοποιείτε τον περιηγητή Chrome κατά την εγγραφή μηνυμάτων.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Για την καλύτερη εμπειρία χρήσης αυτής της εφαρμογής, παρακαλώ επεκτείνετε το μέγεθος της οθόνης σας.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Δραστηριότητες για Ξεκλείδωμα Επόμενου Θέματος", "activitiesToUnlockTopicDesc": "Ορίστε τον αριθμό των δραστηριοτήτων για να ξεκλειδώσετε το επόμενο θέμα του μαθήματος", "@activitiesToUnlockTopicTitle": { @@ -12981,5 +11798,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Διόρθωση πρακτικής ορισμού λεξιλογίου", + "constructUseIncLMDesc": "Λάθος πρακτική ορισμού λεξιλογίου", + "constructUseCorLADesc": "Διόρθωση πρακτικής ήχου λεξιλογίου", + "constructUseIncLADesc": "Λάθος πρακτική ήχου λεξιλογίου", + "constructUseBonus": "Μπόνους κατά τη διάρκεια της πρακτικής λεξιλογίου", + "practiceVocab": "Πρακτική λεξιλογίου", + "selectMeaning": "Επιλέξτε την έννοια", + "selectAudio": "Επιλέξτε τον αντίστοιχο ήχο", + "congratulations": "Συγχαρητήρια!", + "anotherRound": "Μια ακόμη γύρος", + "noActivityRequest": "Δεν υπάρχει τρέχουσα αίτηση δραστηριότητας.", + "quit": "Έξοδος", + "congratulationsYouveCompletedPractice": "Συγχαρητήρια! Έχετε ολοκληρώσει την πρακτική συνεδρία.", + "mustHave10Words": "Πρέπει να έχετε τουλάχιστον 10 λέξεις λεξιλογίου για να τις εξασκήσετε. Δοκιμάστε να μιλήσετε με έναν φίλο ή με τον Pangea Bot για να ανακαλύψετε περισσότερα!", + "botSettings": "Ρυθμίσεις Bot", + "activitySettingsOverrideWarning": "Η γλώσσα και το επίπεδο γλώσσας καθορίζονται από το σχέδιο δραστηριότητας", + "voice": "Φωνή", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 62f6a6fea..7cdbd28e1 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -149,7 +149,7 @@ } } }, - "anyoneCanJoin": "Anyone can join", + "anyoneCanJoin": "Anyone can join! However, admin can kick and ban whoever misbehaves. Those who are banned may not return!", "@anyoneCanJoin": { "type": "String", "placeholders": {} @@ -3241,12 +3241,6 @@ "commandHint_logoutall": "Logout all active devices", "displayNavigationRail": "Show navigation rail on mobile", "customReaction": "Custom reaction", - "accountInformation": "Account information", - "addGroupDescription": "Add a chat description", - "addNewFriend": "Add new friend", - "alreadyHaveAnAccount": "Already have an account?", - "createNewGroup": "Create a new chat", - "editChatPermissions": "Edit chat permissions", "ignore": "Block", "ignoredUsers": "Blocked users", "writeAMessageLangCodes": "Type in {l1} or {l2}...", @@ -3262,16 +3256,10 @@ } }, "requests": "Requests", - "allCorrect": "That's how I would say it! Nice!", - "newWayAllGood": "That's not how I would have said it but it looks good!", - "othersAreBetter": "Hm, there might be a better way to say that.", "holdForInfo": "Click and hold for word info.", "greenFeedback": "That's what I would put!", "yellowFeedback": "Hm, you can try that and see if it works! To use this word, just click it again.", "redFeedback": "I don't think that's right...", - "oneday": "Last 24 hours", - "oneweek": "Last 7 days", - "onemonth": "Past month", "gaTooltip": "L2 use with grammar assistance", "taTooltip": "L2 use with translation assistance", "unTooltip": "Other", @@ -3281,44 +3269,23 @@ "interactiveTranslatorAllowed": "Student Choice", "interactiveTranslatorRequired": "Required", "notYetSet": "Not yet set", - "myLearning": "My Analytics", "waTooltip": "L2 use without assistance", - "changeDateRange": "Change date range", - "classDescription": "Description", - "addStudents": "Invite users by link or code", - "copyClassLink": "Copy invite link", - "copyClassCode": "Copy invite code", - "inviteStudentByUserName": "Invite users by username", "languageSettings": "Language Settings", "interactiveTranslator": "Translation assistance", - "shareVideo": "Share Video", - "shareVideoDesc": "Toggle this on to allow students to share videos in chats.", - "shareFiles": "Share Files", - "selectLanguageLevel": "Select language level", "noIdenticalLanguages": "Please choose different base and target languages", - "iWantALanguagePartnerFrom": "Is from:", - "worldWide": "Worldwide", - "noResults": "No results! Try broadening your search.", "searchBy": "Search by country and languages", - "iWantAConversationPartner": "I want a conversation partner who", - "iWantALanguagePartnerWhoSpeaks": "Speaks:", - "iWantALanguagePartnerWhoIsLearning": "Is learning:", "joinWithClassCode": "Join course", - "joinWithClassCodeHint": "Enter invite code", - "languageLevelPreA1": "True Beginner (Pre A1)", - "languageLevelA1": "Beginner (A1)", - "languageLevelA2": "Elementary (A2)", - "languageLevelB1": "Intermediate (B1)", - "languageLevelB2": "Upper Intermediate (B2)", - "languageLevelC1": "Advanced (C1)", - "languageLevelC2": "Mastery (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice High (A2)", + "languageLevelB1": "Intermediate Mid (B1)", + "languageLevelB2": "Advanced Low (B2)", + "languageLevelC1": "Advanced Mid (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Change the name", "changeTheNameOfTheChat": "Change the name of the chat", - "askPangeaBot": "Ask Pangea Bot for a contextual definition.", "sorryNoResults": "Sorry, no results.", "ignoreInThisText": "Ignore", - "helpMeTranslate": "Yes!", - "needsItShortMessage": "Out of target", "needsItMessage": "Wait, that's not {targetLanguage}! Do you need help translating?", "@needsItMessage": { "type": "String", @@ -3328,19 +3295,9 @@ } } }, - "needsIgcMessage": "This message has a grammar error.", - "tokenTranslationTitle": "A word is in your base language.", - "spanTranslationDesc": "See possible translations below.", - "spanTranslationTitle": "Some words are in your base language.", - "l1SpanAndGrammarTitle": "Outside target language", - "l1SpanAndGrammarDesc": "This could in your base language or it could be a grammar error.", - "otherTitle": "You have an error.", - "otherDesc": "See possible corrections below.", "countryInformation": "My country", - "myLanguages": "My base and target languages", "targetLanguage": "Target Language", "sourceLanguage": "Base language", - "languagesISpeak": "Languages I speak", "updateLanguage": "My languages", "whatLanguageYouWantToLearn": "What language do you want to learn?", "whatIsYourBaseLanguage": "What is your base language?", @@ -3355,13 +3312,8 @@ "errorDisableLanguageAssistanceUserDesc": "Click here to update translation assistance and grammar assistance settings", "errorDisableITClassDesc": "Translation assistance is turned off for the course that this chat is in.", "errorDisableIGCClassDesc": "Grammar assistance is turned off for the course that this chat is in.", - "itIsDisabled": "Interactive Translation is disabled", - "igcIsDisabled": "Interactive Grammar Checking is disabled", - "goToLearningSettings": "Go to Learning Settings", "error405Title": "Languages not set", "error405Desc": "Please set your languages in Main Menu > Learning Settings.", - "loginOrSignup": "Sign in with", - "iAgreeToThe": "I agree to the ", "termsAndConditions": "Terms and Conditions", "andCertifyIAmAtLeast13YearsOfAge": " and certify I am at least 16 years of age.", "error502504Title": "Wow, there are a lot of students online!", @@ -3369,40 +3321,21 @@ "error404Title": "Translation error!", "error404Desc": "Pangea Bot isn't sure how to translate that...", "errorPleaseRefresh": "We're looking into it! Please reload and try again.", - "toggleIT": "Interactive Translation", - "toggleIGC": "Interactive Grammar Checking", - "toggleToolSettingsDescription": "Here you can toggle your individual language tool settings.", "connectedToStaging": "Connected to Staging", "learningSettings": "Learning settings", - "sendVoiceNotes": "Send Voice Notes", - "sendVoiceNotesDesc": "Toggle this on to allow students to send voice notes in chats.", - "chatTopic": "Chat topic", - "chatTopicDesc": "Set a chat topic", - "inviteStudentByUserNameDesc": "If your student already has an account, you can search for them.", "participants": "Participants", - "almostPerfect": "That seems right! Here's what I would have said.", - "prettyGood": "Pretty good! Here's what I would have said.", - "letMeThink": "Hmm, let's see how you did!", "clickMessageTitle": "Need help?", "clickMessageBody": "Click a message for language tools like translation, play back and more!", - "understandingMessagesTitle": "Definitions and translations!", - "understandingMessagesBody": "Click underlined words for definitions. Translate with message options (upper right).", "allDone": "All done!", "vocab": "Vocab", "low": "We have evidence the user does not understand these words.", "medium": "These words have been used. It is unclear if the words are fully understood or not.", "high": "We have evidence the user understands these words.", - "unknownProficiency": "These words have not been used in Pangea Chat.", - "changeView": "Switch views.", - "clearAll": "Clear all words?", - "generateVocabulary": "Generate vocabulary from title and description", - "generatePrompts": "Generate prompts", "subscribe": "Subscribe", "getAccess": "Subscribe now!", "subscriptionDesc": "Messaging is free! Subscribe to unlock interactive translation, grammar checking and learning analytics.", "subscriptionManagement": "Subscription Management", "currentSubscription": "Current Subscription", - "changeSubscription": "Change your subscription", "cancelSubscription": "Cancel your subscription", "selectYourPlan": "Select Your Plan", "subsciptionPlatformTooltip": "Please login to your original device to manage your subscription plan", @@ -3411,20 +3344,6 @@ "paymentHistory": "Payment History", "emptyChatDownloadWarning": "Cannot download empty chat", "update": "Update", - "updateDesc": "You can now update this app from {localVersion} to {storeVersion}", - "@updateDesc": { - "type": "String", - "placeholders": { - "storeVersion": { - "type": "String" - }, - "localVersion": { - "type": "String" - } - } - }, - "maybeLater": "Maybe Later", - "mainMenu": "Main Menu", "toggleImmersionMode": "Immersion Mode", "toggleImmersionModeDesc": "When enabled, all messages are displayed in your target language. This setting is most useful in language exchanges.", "itToggleDescription": "This language learning tool will identify words in your base language and help you translate them to your target language. Though rare, the AI can make translation errors.", @@ -3439,13 +3358,6 @@ "definitionsToolDescription": "When enabled, words underlined in blue can be clicked for definitions. Click messages to access definitions.", "translationsToolDescrption": "When enabled, click a message and the translation icon to see a message in your base language.", "welcomeBack": "Welcome back! If you were part of the 2023-2024 pilot, please contact us for your special pilot subscription. If you are a teacher who has (or whose institution has) purchased licenses for your class, contact us for your teacher subscription.", - "kickAllStudents": "Kick All Students", - "kickAllStudentsConfirmation": "Are you sure you want to kick all students?", - "inviteAllStudents": "Invite All Students", - "inviteAllStudentsConfirmation": "Are you sure you want to invite all students?", - "inviteUsersFromPangea": "Add admins", - "redeemPromoCode": "Redeem Promo Code", - "enterPromoCode": "Enter Promo Code", "downloadTxtFile": "Download Text File", "downloadCSVFile": "Download CSV File", "promotionalSubscriptionDesc": "You currently have a lifetime promotional subscription. Message support@pangea.chat for help changing your subscription.", @@ -3459,199 +3371,7 @@ }, "oneWeekTrial": "One Week Trial", "downloadXLSXFile": "Download Excel File", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanian", - "amDisplayName": "Amharic", - "arDisplayName": "Arabic", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armenian", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basque", - "beDisplayName": "Belarusian", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnian", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgarian", - "myDisplayName": "Burmese", - "caDisplayName": "Catalan, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Chechen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinese", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corsican", - "crDisplayName": "Cree", - "hrDisplayName": "Croatian", - "csDisplayName": "Czech", - "daDisplayName": "Danish", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Dutch", - "enDisplayName": "English", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonian", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijian", - "fiDisplayName": "Finnish", - "frDisplayName": "French", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galician", - "kaDisplayName": "Georgian", - "deDisplayName": "German", - "elDisplayName": "Greek, Modern", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Haitian Creole", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrew (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hungarian", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesian", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irish", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Icelandic", - "itDisplayName": "Italian", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japanese", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, Greenlandic", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korean", - "kuDisplayName": "Kurdish", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxembourgish, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Lao", - "ltDisplayName": "Lithuanian", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latvian", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedonian", - "mgDisplayName": "Malagasy", - "msDisplayName": "Malay", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltese", - "miDisplayName": "Māori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolian", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norwegian Bokmål", - "ndDisplayName": "North Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norwegian Nynorsk", - "noDisplayName": "Norwegian", - "iiDisplayName": "Nuosu", - "nrDisplayName": "South Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persian", - "plDisplayName": "Polish", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portuguese", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romanian, Moldavian, Moldovan", - "ruDisplayName": "Russian", - "saDisplayName": "Sanskrit (Saṁskṛta)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Northern Sami", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbian", - "gdDisplayName": "Scottish Gaelic, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovak", - "slDisplayName": "Slovene", - "soDisplayName": "Somali", - "stDisplayName": "Southern Sotho", - "esDisplayName": "Spanish", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Swedish", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetan Standard, Tibetan, Central", - "tkDisplayName": "Turkmen", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga Islands)", - "trDisplayName": "Turkish", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uighur, Uyghur", - "ukDisplayName": "Ukrainian", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamese", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "Western Frisian", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Unknown", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multi", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrew", - "jwDisplayName": "Javanese", - "moDisplayName": "Moldavian", - "shDisplayName": "Serbo-Croatian", "wwCountryDisplayName": "World Wide", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Aland Islands", @@ -3899,9 +3619,7 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Pay", - "allPrivateChats": "Direct chats", - "unknownPrivateChat": "Unknown private chat", + "pay": "Checkout", "invitedToSpace": "{user} has invited you to join a course: {space}! Do you wish to accept?", "@invitedToSpace": { "placeholders": { @@ -3913,8 +3631,6 @@ } } }, - "declinedInvitation": "Declined invitation", - "acceptedInvitation": "Accepted invitation", "youreInvited": "📩 You're invited!", "invitedToChat": "{user} has invited you to join a chat: {name}! Do you wish to accept?", "@invitedToChat": { @@ -3931,34 +3647,15 @@ "yearlySubscription": "Yearly", "defaultSubscription": "Pangea Chat Subscription", "freeTrial": "Free Trial", - "grammarAnalytics": "Error Analytics", "total": "Total: ", "noDataFound": "No data found", - "promoSubscriptionExpirationDesc": "Your current subscription is promotional and expires on {expiration}. Message support@pangea.chat for help changing your subscription.", - "@promoSubscriptionExpirationDesc": { - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "emptyChatNameWarning": "Please enter a name for this chat", - "someErrorTitle": "Hm, something's not right", - "someErrorBody": "It could be an error or something in your base language.", "bestCorrectionFeedback": "That's correct!", "distractorFeedback": "That's not quite right.", "bestAnswerFeedback": "That's correct!", "definitionDefaultPrompt": "What does this word mean?", "practiceDefaultPrompt": "What is the best answer?", "correctionDefaultPrompt": "What is the best replacement?", - "itStartDefaultPrompt": "Do you want help translating?", - "lockedChatWarning": "🔒 This chat has been locked", - "lockChat": "Lock Chat", - "suggestToChat": "Suggest this chat", - "suggestToChatDesc": "Suggested chats will appear in chat lists", "acceptSelection": "Accept Correction", - "acceptSelectionAnyway": "Use this anyway", - "makingActivity": "Making activity", "why": "Why?", "definition": "Definition", "exampleSentence": "Example Sentence", @@ -3989,7 +3686,6 @@ } }, "noTeachersFound": "No teachers found to report to", - "viewArchive": "View Archive", "trialExpiration": "Your free trial expires on {expiration}", "@trialExpiration": { "placeholders": { @@ -4002,7 +3698,6 @@ "activateTrial": "Free 7-Day Trial", "successfullySubscribed": "You have successfully subscribed!", "clickToManageSubscription": "Click here to manage your subscription.", - "errorGettingAudio": "Error getting audio. Please refresh and try again.", "signUp": "Sign up", "pleaseChooseAtLeastChars": "Please choose at least {min} characters.", "@pleaseChooseAtLeastChars": { @@ -4016,99 +3711,29 @@ "noEmailWarning": "Please enter a valid email address. Otherwise you won't be able to reset your password. If you don't want to, tap again on the button to continue.", "pleaseEnterValidEmail": "Please enter a valid email address.", "pleaseChooseAUsername": "Please choose a username", - "chooseAUsername": "Choose a username", "define": "Define", "listen": "Listen", - "addConversationBot": "Enable Conversation Bot", - "addConversationBotDesc": "Add a bot to this chat", - "convoBotSettingsDescription": "Edit conversation topic and difficulty", - "enterAConversationTopic": "Enter a conversation topic", - "conversationTopic": "Conversation topic", - "enableModeration": "Enable moderation", - "enableModerationDesc": "Enable automatic moderation to review messages before they are sent", - "conversationLanguageLevel": "What is the language level of this conversation?", - "showDefinition": "Show Definition", - "subscriptionPopupTitle": "This sentence could have a grammar mistake...", - "subscriptionPopupDesc": "Subscribe today to unlock translation and grammar correction!", - "seeOptions": "See options", - "continuedWithoutSubscription": "Continue without subscribing", "trialPeriodExpired": "Your trial period has expired", - "selectToDefine": "Click any word to see its definition!", "translations": "translations", "messageAudio": "message audio", "definitions": "definitions", "subscribedToUnlockTools": "Subscribe to unlock interactive translation and grammar checking, audio playback, personalized practice activities, and learning analytics!", "translationTooltip": "Translate", - "audioTooltip": "Play Audio", "speechToTextTooltip": "Transcript", - "certifyAge": "I certify that I am over {age} years of age", - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "kickBotWarning": "Kicking Pangea Bot will remove the conversation bot from this chat.", - "joinToView": "Join this room to view details", "refresh": "Refresh", - "autoPlayTitle": "Auto Play Messages", - "autoPlayDesc": "When enabled, the text-to-speech audio of messages will play automatically when selected.", "messageAnalytics": "Message Analytics", "words": "Words", "score": "Score", "accuracy": "Accuracy", "points": "Points", "noPaymentInfo": "No payment info necessary!", - "conversationBotModeSelectDescription": "Chat activity", - "conversationBotModeSelectOption_discussion": "Discussion", - "conversationBotModeSelectOption_custom": "Custom", - "conversationBotModeSelectOption_conversation": "Conversation", - "conversationBotModeSelectOption_textAdventure": "Text Adventure", - "conversationBotModeSelectOption_storyGame": "Story Game", - "conversationBotDiscussionZone_title": "Discussion Settings", - "conversationBotDiscussionZone_discussionTopicLabel": "Discussion Topic", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Set discussion topic", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Discussion Keywords", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Set discussion keywords", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Comma separated list of keywords to guide the discussion", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Send discussion prompt on a schedule", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hours between discussion prompts", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responds on ⏩ reaction", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaction to send discussion prompt", - "conversationBotCustomZone_title": "Custom Settings", - "conversationBotCustomZone_customSystemPromptLabel": "System prompt", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Set custom system prompt", - "conversationBotCustomZone_customSystemPromptEmptyError": "Missing custom system prompt", - "botConfig": "Bot and activity settings", - "botConfigNoPermissionTitle": "No permission", - "botConfigNoPermissionMessage": "Contact room admin to change bot configuration", - "addConversationBotDialogTitleInvite": "Confirm inviting conversation bot", - "addConversationBotButtonInvite": "Invite", - "addConversationBotDialogInviteConfirmation": "Invite", - "addConversationBotButtonTitleRemove": "Confirm removing conversation bot", - "addConversationBotButtonRemove": "Remove", - "addConversationBotDialogRemoveConfirmation": "Remove", - "conversationBotConfigConfirmChange": "Confirm", - "conversationBotStatus": "Invite bot", - "conversationBotTextAdventureZone_title": "Text Adventure", - "conversationBotTextAdventureZone_instructionLabel": "Game Master Instructions", - "conversationBotTextAdventureZone_instructionPlaceholder": "Set game master instructions", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Missing game master instructions", - "studentAnalyticsNotAvailable": "Student data not currently available", - "roomDataMissing": "Some data may be missing from rooms in which you are not a member.", "updatePhoneOS": "You may need to update your device's OS version.", "wordsPerMinute": "Words per minute", "autoIGCToolName": "Run Pangea writing assistance automatically", "autoIGCToolDescription": "Automatically run Pangea Chat grammar and translation writing assistance before sending my message.", - "runGrammarCorrection": "Check message", - "grammarCorrectionFailed": "Issues to address", - "grammarCorrectionComplete": "Looks good!", "chatCapacity": "Chat capacity", "roomFull": "This room is already at capacity.", - "topicNotSet": "The topic has not been set.", - "chatCapacityNotSet": "This chat has no capacity limit.", "chatCapacityHasBeenChanged": "Chat capacity changed", "chatCapacitySetTooLow": "Chat capacity must be at least {count}.", "@chatCapacitySetTooLow": { @@ -4120,16 +3745,11 @@ } }, "chatCapacityExplanation": "Chat capacity limits the number of members allowed in a chat.", - "chatExceedsCapacity": "This chat exceeds its capacity.", "tooManyRequest": "Too many request, please try again later.", "enterNumber": "Please enter a whole number value.", "buildTranslation": "Build your translation from the choices above", - "nonexistentSelection": "Selection no longer exists.", - "changeAnalyticsLanguage": "Change Analytics Language", "practice": "Practice", "noLanguagesSet": "No languages set", - "noActivitiesFound": "That's enough on this for now! Come back later for more.", - "hintTitle": "Hint:", "speechToTextBody": "For voice messages, you can see a transcript as well as the speaker's Words Per Minute score.", "versionNotFound": "Version Not Found", "fetchingVersion": "Fetching version...", @@ -4149,18 +3769,6 @@ } } }, - "languageButtonLabel": "Language: {currentLanguage}", - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "interactiveTranslatorAutoPlaySliderHeader": "Autoplay translation", - "interactiveTranslatorAutoPlayDesc": "Launches the interactive translator without asking.", - "changeAnalyticsView": "Change Analytics View", "l1TranslationBody": "Messages in your base language will not be translated.", "deleteSubscriptionWarningTitle": "You have an active subscription", "deleteSubscriptionWarningBody": "Deleting your account will not automatically cancel your subscription.", @@ -4168,9 +3776,7 @@ "error520Title": "Please try again.", "error520Desc": "Sorry, we could not understand your message...", "wordsUsed": "Words Used", - "errorTypes": "Error Types", "level": "Level", - "canceledSend": "Canceled send", "morphsUsed": "Morphs Used", "translationChoicesBody": "Click and hold an option for a hint.", "grammar": "Grammar", @@ -4180,7 +3786,6 @@ "reportContentIssueTitle": "Report content issue", "feedback": "Optional feedback", "reportContentIssueDescription": "Uh oh! AI can faciliate personalized learning experiences but... also hallucinates. Please provide any feedback you have and we'll try again.", - "changeContent": "Uh oh! AI can faciliate personalized learning experiences but... also hallucinates. What should it be?", "l2SupportNa": "Not Available", "l2SupportAlpha": "Alpha", "l2SupportBeta": "Beta", @@ -4411,7 +4016,6 @@ "grammarCopySPC": "Specificity", "grammarCopyPARTTYPE": "Partitive Type", "grammarCopyINTREL": "Interrogative-Relative", - "grammarCopyNUMFORMpsor": "Possessor's Number", "grammarCopyUNKNOWN": "Unknown", "grammarCopyNUMBERPSOR": "Possessor's Number", "grammarCopyPOSS": "Possessive", @@ -4457,13 +4061,6 @@ "grammarCopyVOICEdir": "Direct", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Reciprocal", - "enterPrompt": "Please enter a system prompt", - "selectBotLanguage": "Select bot language", - "chooseVoice": "Choose a voice", - "enterLanguageLevel": "Please enter a language level", - "enterDiscussionTopic": "Please enter a discussion topic", - "selectBotChatMode": "Select chat mode", - "messageNotInTargetLang": "Message not in target language", "other": "Other", "levelShort": "LVL {level}", "@levelShort": { @@ -4474,19 +4071,12 @@ } } }, - "botModeValidation": "Please select a chat mode", "clickBestOption": "Choose the best options to translate your message! Click and hold options for a hint.", "completeActivitiesToUnlock": "Complete at least one activity to unlock the translation!", - "botSettingsSubtitle": "Invite bot to moderate chat activity", - "invitePeople": "Invite users", "noCapacityLimit": "No capacity limit", "downloadGroupText": "Download group text", "notificationsOn": "Notifications on", "notificationsOff": "Notifications off", - "chatCanBeFoundViaSearch": "Chat can be found via search", - "requireCodeToJoin": "Require code to join", - "canFindInSearch": "Can find in search", - "addChatToSpace": "Add chat", "createChatAndInviteUsers": "Create chat and invite users", "updatedNewSpaceDescription": "Courses allow you to consolidate your chats and build private or public communities.", "joinWithCode": "Join with code", @@ -4533,39 +4123,19 @@ } } }, - "signInWithUsername": "Sign in with username and password", - "registrationEmailMessage": "Please verify your email with a link sent there. In some cases, the email takes up to 5 minutes to arrive. Please also check your spam folder.", "enableTTSToolName": "Enabled text-to-speech", "enableTTSToolDescription": "Allow the app to generate text-to-speech output for portions of text in your target language.", - "couldNotFindTTS": "We couldn't find a text-to-speech engine for your current target language. ", - "ttsInstructionsHyperlink": "Click here to view instructions for downloading a new voice on your device.", - "createAnAccount": "Create an account", - "signIn": "Sign in", - "signUpWithEmail": "Sign up with Email", - "signUpWithGoogle": "Sign up with Google", - "signUpWithApple": "Sign up with Apple", "yourUsername": "Your username", "yourEmail": "Your email", - "pleaseEnterAnEmail": "Please enter an email address", - "signInWithGoogle": "Sign in with Google", - "signInWithApple": "Sign in with Apple", - "chooseYourAvatar": "Choose your avatar", "iWantToLearn": "I want to learn", - "letsStart": "Let's start", - "pleaseAgreeToTOS": "Please agree to the Terms and Conditions", "pleaseEnterEmail": "Please enter a valid email address.", - "pleaseSelectALanguage": "Please select a language", "myBaseLanguage": "My base language", - "clickWordsInstructions": "🕵️ Click any word for details. 🧐", - "chooseBestDefinition": "What does this word mean?", "meaningSectionHeader": "Meaning:", "formSectionHeader": "Forms used in chats:", - "noEmojiSelectedTooltip": "No emoji selected", "writingExercisesTooltip": "Writing", "listeningExercisesTooltip": "Listening", "readingExercisesTooltip": "Reading", "meaningNotFound": "Meaning could not be found.", - "formsNotFound": "Forms could not be found.", "chooseBaseForm": "Choose the base form", "notTheCodeError": "Sorry, that's not the code!", "totalXP": "Total XP", @@ -4638,25 +4208,6 @@ }, "chooseLemmaMeaningInstructionsBody": "Match meanings with the words in the message!", "doubleClickToEdit": "Double-click to edit.", - "removeFeature": "Remove {feature}", - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "chooseCorrectLabel": "Choose the correct label.", - "levelPopupTitle": "Congratulations on reaching\nLevel {level}", - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "activityPlannerTitle": "Activity Planner", "topicLabel": "Topic", "topicPlaceholder": "Choose a topic...", @@ -4664,7 +4215,6 @@ "modePlaceholder": "Choose a mode...", "learningObjectiveLabel": "Learning Objective", "learningObjectivePlaceholder": "Choose a learning objective...", - "mediaLabel": "Media learners should share", "languageOfInstructionsLabel": "Language of activity instructions", "targetLanguageLabel": "Target language", "cefrLevelLabel": "CEFR level", @@ -4679,19 +4229,8 @@ "instructions": "Instructions", "numberOfLearners": "Number of learners", "mustBeInteger": "Must be an integer e.g. 1, 2, 3, ...", - "noLemmasFound": "There's no vocabulary with more than {xp} XP. Keep practicing!", - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "constructUsePvmDesc": "Produced in voice message", - "lockedMorphFeature": "Waiting to be unlocked", "leaveSpaceDescription": "By leaving the course, you will leave all of the chats within it. Other users will see that you have left the course.", - "whatIsLemma": "What is the lemma?", "constructUseCorMmDesc": "Correct message meaning", "constructUseIncMmDesc": "Incorrect message meaning", "constructUseIgnMmDesc": "Ignored message meaning", @@ -4706,9 +4245,7 @@ } } }, - "slightlyOffensive": "Slightly offensive", "clickOnEmailLink": "Please click on the link in the email and then proceed.\n\nCheck your spam folder if the email hasn't arrived.", - "whoIsAllowedToJoinThisChat": "Who is allowed to join this chat", "dontForgetPassword": "Don't forget your password!", "enableAutocorrectToolName": "Enable device autocorrect", "enableAutocorrectDescription": "If your device supports the language you're learning, you can enable device autocorrect to fix common errors as you type.", @@ -4718,13 +4255,12 @@ "tooLargeToSend": "This message is too large to send", "exitWithoutSaving": "Are you sure you want to leave without saving?", "enableAutocorrectPopupTitle": "Add your target language keyboard by going to:", - "enableAutocorrectPopupSteps": " \u2022 Settings\n \u2022 General\n \u2022 Keyboard\n \u2022 Keyboards\n \u2022 Add New Keyboard", + "enableAutocorrectPopupSteps": " • Settings\n • General\n • Keyboard\n • Keyboards\n • Add New Keyboard", "enableAutocorrectPopupDescription": "Once the language is selected, you can click the small globe icon on the bottom left of your keyboard to activate the newly installed keyboard.", "downloadGboardTitle": "Download Gboard from the Google Play Store to enable autocorrect and other keyboard features:", - "downloadGboardSteps": " \u2022 Download Gboard\n \u2022 Open app\n \u2022 Languages\n \u2022 Add keyboard\n \u2022 Select Language\n \u2022 Select keyboard type\n \u2022 Done", + "downloadGboardSteps": " • Download Gboard\n • Open app\n • Languages\n • Add keyboard\n • Select Language\n • Select keyboard type\n • Done", "downloadGboardDescription": "Once the language is selected, you can click the small globe icon on the bottom left of your keyboard to activate the newly installed keyboard.", "enableAutocorrectWarning": "Warning! Requires adding your target language keyboard", - "tooLargeToSend": "This message is too large to send", "displayName": "Display name", "leaveRoomDescription": "You're about to leave this chat. Other users will see that you have left the chat.", "confirmUserId": "Please confirm your Pangea Chat username in order to delete your account.", @@ -4753,29 +4289,15 @@ "autocorrectNotAvailable": "Unfortunately your platform is not currently supported for this feature. Stay tuned for further development!", "pleaseUpdateApp": "Please update the app to continue.", "chooseEmojiInstructionsBody": "Match emojis with the words they best represent. Don't worry! No points off for disagreeing. 😅", - "pickAnEmojiFor": "Pick an emoji for {lemma}", - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "analyticsVocabListBody": "This is all your vocabulary! As you earn XP for each word, they'll go from seedling to full bloom. Click on any word to see more details.", "morphAnalyticsListBody": "These are all the grammar concepts in the language you're learning! You'll unlock them as you encounter them while chatting. Click for details.", "knockSpaceSuccess": "You have requested to join this course! An admin will respond to your request when they receive it 😀", - "joinByCode": "Join by code", "chooseWordAudioInstructionsBody": "Listen to the complete message. Then match the audios with the words.", "chooseMorphsInstructionsBody": "Click the puzzle pieces for grammar questions!", - "inviteAndLaunch": "Launch and invite", - "createOwnChat": "Create your own chat", "pleaseEnterInt": "Please enter a number", "home": "Home", "join": "Join", "readingAssistanceOverviewBody": "Click the buttons below for mini-games on matching emojis, audios, word meanings, and grammar concepts. Or click on any word for details.", - "learnByTexting": "Learn by texting", - "levelSummaryTrigger": "View summary", "levelSummaryPopupTitle": "Level {level} Summary", "@levelSummaryPopupTitle": { "type": "String", @@ -4785,34 +4307,16 @@ } } }, - "referFriends": "Refer friends", - "referFriendDialogTitle": "Invite a friend to your conversation", - "referFriendDialogDesc": "Do you have a friend who is excited to learn a new language with you? Then copy and send this invitation link to join and start chatting with you today.", - "youUnlocked": "You've unlocked", "resetInstructionTooltipsTitle": "Reset instruction tooltips", "resetInstructionTooltipsDesc": "Click to show instruction tooltips like for a brand new user.", "selectForGrammar": "Select a grammar icon for activities and details.", - "newChatActivityTitle": "Add a fun activity?", - "newChatActivityDesc": "Choose one of the activities below to add to your chat or skip this step and create an activity later.", - "exploreMore": "Explore more", "randomize": "Randomize", "clear": "Clear", "makeYourOwnActivity": "Create your own activity", "featuredActivities": "Featured", - "goToChat": "Go to chat", "save": "Save", - "selectActivity": "Select activity", - "newChatActivityDesc": "Make every group chat an adventure with Activity Planner! Set captivating topics and objectives for the group, and bring conversations to life with stunning images. Spark imaginative discussions and keep the fun flowing effortlessly!", - "exploreMore": "Explore more", - "wordFocusListeningMultipleChoice": "Which audio matches the word?", "startChat": "Start a chat", "translationProblem": "Translation problem", - "perfectTranslation": "Perfect translation!", - "greatJobTranslation": "Great job with this translation!", - "goodJobTranslation": "Good work on this translation.", - "makingProgress": "You're making progress!", - "keepPracticing": "Keep practicing!", - "niceJob": "Nice job!", "askToJoin": "Ask to join", "emptyChatWarningTitle": "Chat is empty", "emptyChatWarningDesc": "You haven't invited anyone to your chat. Go to Chat settings to invite your contacts or the Bot. You can also do this later.", @@ -4831,15 +4335,6 @@ "languageLevelC2Desc": "I can understand virtually everything heard or read and express myself fluently and precisely.", "newVocab": "New vocab", "newGrammar": "New grammar concepts", - "congratulationsOnReaching": "You've reached Level {level}!", - "@congratulationsOnReaching": { - "placeholders": { - "level": { - "type": "int" - } - } - }, - "seeDetails": "See Details", "choosePracticeMode": "Click on one of the buttons above to start a practice activity", "ban": "Ban", "unban": "Unban", @@ -4860,15 +4355,6 @@ } }, "leaderboard": "Leaderboard", - "welcomeUser": "Welcome {user}", - "@welcomeUser": { - "placeholders": { - "user": { - "type": "String" - } - } - }, - "joinSpaceOnboardingDesc": "Do you have an invite code or link to a public course?", "skipForNow": "Skip for now", "permissions": "Permissions", "spaceChildPermission": "Who can add new chats to this course", @@ -4876,12 +4362,8 @@ "defaultOption": "Default", "deleteChatDesc": "Are you sure you want to delete this chat? It will be deleted for all participants and all messages within the chat will no longer be available for practice or learning analytics.", "deleteSpaceDesc": "The course and any selected chats will be deleted for all participants and all messages within the chat will no longer be available for practice or learning analytics. This action cannot be undone.", - "chatWithActivities": "Chat with activities", "launch": "Launch", - "launchActivityToChats": "Launch activity to chats", "searchChats": "Search chats", - "selectChats": "Select chats", - "selectChatToStart": "Complete! Select a chat to start", "maxFifty": "Max 50", "configureSpace": "Configure course", "pinMessages": "Pin messages", @@ -4895,33 +4377,19 @@ "announcements": "Announcements", "activities": "Activities", "access": "Access", - "botSettings": "Bot settings", "activitySuggestionTimeoutMessage": "We are working hard to generate more activities for you, please check back in a minute", - "accessSettingsWarning": "Oops! It looks like you don't have permission to set the Access rules of this room. You should check these to make sure they're what you need and talk to a room admin if you need to change them", "howSpaceCanBeFound": "How this course can be found", "private": "Private", "cannotBeFoundInSearch": "Cannot be found in search", "public": "Public", "visibleToCommunity": "Visible to the broader Pangea Chat community via \"Find a course\"", "howSpaceCanBeJoined": "How this course can be joined", - "restricted": "Restricted", "canBeFoundVia": "Can be found via:", - "canBeFoundViaInvitation": "\u2022 invitation", - "canBeFoundViaCodeOrLink": "\u2022 code or link", - "canBeFoundViaKnock": "\u2022 request to join and admin approval", - "anyoneCanJoin": "Anyone can join! However, admin can kick and ban whoever misbehaves. Those who are banned may not return!", + "canBeFoundViaInvitation": "• invitation", + "canBeFoundViaCodeOrLink": "• code or link", + "canBeFoundViaKnock": "• request to join and admin approval", "youHaveLeveledUp": "You have leveled up!", "sendActivities": "Send activities", - "getStarted": "Get Started", - "getStartedBotChatDesc": "Chatting with AI is a great place to start and Pangea reading, writing, listening and speaking tools make it easy!", - "getStartedCommunitiesDesc": "Learning with a community is where Pangea Chat shines!\nYou can join your class, find a course, or even make your own!", - "getStartedFriendsDesc": "Do you have a friend that wants to learn with you?", - "getStartedBotChatComplete": "Well-done! You're chatting with the bot!", - "getStartedCommunitiesComplete": "Great, you have joined a course!", - "getStartedComplete": "You've completed this section!\nKeep exploring our amazing features by chatting with friends!", - "getStartedFriendsComplete": "Woohoo! You've got friends! 😉", - "getStartedBotChatButton": "Start chatting!", - "getStartedFriendsButton": "Chat with a friend", "groupChat": "Group Chat", "directMessage": "Direct Message", "newDirectMessage": "New direct message", @@ -4932,21 +4400,19 @@ "aUserIsKnocking": "1 user is requesting to join your course", "usersAreKnocking": "{users} users are requesting to join your course", "@usersAreKnocking": { - "type": "int", - "placeholders": { - "users": { - "type": "int" - } + "type": "int", + "placeholders": { + "users": { + "type": "int" } + } }, "failedToFetchTranscription": "Failed to fetch transcription", "deleteEmptySpaceDesc": "The course will be deleted for all participants. This action cannot be undone.", - "customReaction": "Custom reaction", "regenerate": "Regenerate", "mySavedActivities": "My Saved Activities", "noSavedActivities": "No saved activities", "saveActivity": "Save this activity", - "yourSavedActivities": "Saved Activities", "failedToPlayVideo": "Failed to play video", "done": "Done", "inThisSpace": "In this course", @@ -5020,8 +4486,6 @@ }, "pending": "Pending", "inactive": "Inactive", - "unjoinedActivityMessage": "Do you want to participate? Choose an open role!\nOr hang out and watch the show!", - "fullActivityMessage": "Feel free to watch the show! While there aren't any open roles to participate, you can view the chat!", "confirmRole": "Confirm role", "openRoleLabel": "OPEN", "joinedTheActivity": "👋 {username} joined as {role}", @@ -5045,15 +4509,12 @@ } } }, - "endActivityTitle": "I'm done", - "endActivityDesc": "Did you complete the objectives?\nThis is your confirmation that you're stepping back from texting. But don’t worry, the fun continues in the chat! Feel free to hang out and enjoy the show until everyone clicks 'Done'.", "archiveToAnalytics": "Add to my Completed Activities", "activitySummaryError": "Activity summaries unavailable", "requestSummaries": "Request summaries", - "loadingActivitySummary": "Loading activity summary...", "generatingNewActivities": "You're the first user of this language pair! Please give us a minute, we're preparing activities just for you.", - "requestAccessTitle": "Request to analytics view access?", - "requestAccessDesc": "Would you like to request access to view participant analytics?\n\nIf participants agree, admins of this course will be able to view their:\n • total vocabulary\n • total grammar concepts\n • total activity sessions completed\n • the specific grammar concepts used, correctly and incorrectly\n\nThey will not be able to view their:\n • messages in chats outside the course\n • vocabulary list", + "requestAccessTitle": "Request analytics access?", + "requestAccessDesc": "Would you like to request access to view participant analytics?\n\nIf participants agree, you will be able to view their:\n • total vocabulary\n • total grammar concepts\n • total activity sessions completed\n • the specific grammar concepts used, correctly and incorrectly\n\nYou will not be able to view their:\n • messages in chats outside the course\n • vocabulary list", "requestAccess": "Request access ({count})", "@requestAccess": { "type": "String", @@ -5066,17 +4527,18 @@ "analyticsInactiveTitle": "Requests to inactive users couldn’t be sent", "analyticsInactiveDesc": "Inactive users who haven't logged in since this feature was introduced won't see your request.\n\nThe Request button will appear once they return. You can resend the request later by clicking the Request button under their name when it's available.", "accessRequestedTitle": "Analytics Access Request", - "accessRequestedDesc": "The administrators of “{space}” are requesting to view your learning analytics.\n\nIf you agree, admins of this course will be able to view your:\n • total vocabulary\n • total grammar concepts\n • total activity sessions completed\n • the specific grammar concepts used, correctly and incorrectly\n\nThey will not be able to view your:\n • messages in chats outside the course\n • vocabulary list", + "accessRequestedDesc": "Requesting admin(s): {admin} \n\nAdmins from “{space}” are requesting to view your learning analytics.\n\nIf you agree, They will be able to view your:\n • total vocabulary\n • total grammar concepts\n • total activity sessions completed\n • the specific grammar concepts used, correctly and incorrectly\n\nThey will not be able to view your:\n • messages in chats outside the course\n • vocabulary list", "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "allowAccess": "Allow Access", - "denyAccess": "Deny Access", "adminRequestedAccess": "Admins asked to view your analytics.", "lastUpdated": "Updated\n{time}", "@lastUpdated": { @@ -5089,9 +4551,7 @@ }, "activityFinishedMessage": "All Finished!", "endForAll": "End for all", - "newCourse": "New Course", - "newCourseSubtitle": "Which course plan plan would you like to use?", - "failedToLoadCourses": "Failed to load courses", + "newCourse": "New course", "numModules": "{num} modules", "@numModules": { "type": "int", @@ -5101,15 +4561,6 @@ } } }, - "numActivityPlans": "{num} activity plans", - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "coursePlan": "Course Plan", "editCourseLater": "You can edit template title, descriptions, and course image later.", "newCourseAccess": "By default, courses are private and require admin approval to join. You can edit these settings at any time.", @@ -5123,7 +4574,6 @@ "accessDesc": "You can make your course open to the world! Or, make your course private and secure.", "createGroupChatDesc": "Whereas activity sessions start and end, group chats will stay open for routine communication.", "deleteDesc": "Only admins can delete a course. This is a destructive action which removes all users and deletes all selected chats within the course. Proceed with caution.", - "failedToLoadCourseInfo": "Failed to load course information", "noCourseFound": "Oh, this course needs a plan!\n\nCourse plans are a sequence of topics and conversation activities.", "additionalParticipants": "+ {num} others", "@additionalParticipants": { @@ -5134,15 +4584,10 @@ } } }, - "activityNotFoundForCourse": "This activity was not found within the course", - "courseChats": "Course Chats", - "myActivitySessions": "My Activity Sessions", "directMessages": "Direct Messages", "whatNow": "What now?", "chooseNextActivity": "Choose your next activity!", - "seeInstructions": "See Instructions", - "hideInstructions": "Hide Instructions", - "letsGo": "Let’s go!", + "letsGo": "Let's go", "chooseRole": "Choose a role!", "chooseRoleToParticipate": "Choose a role to participate!", "waitingToFillRole": "Waiting to fill {num} roles...", @@ -5156,14 +4601,9 @@ }, "pingParticipants": "Ping course participants", "playWithBot": "Play with Pangea Bot", - "inviteFriendsToActivity": "Invite friends to activity", - "inviteFriendsToActivityCourse": "Invite friends to activity and course", "waitNotDone": "Wait I’m not done!", "waitingForOthersToFinish": "Waiting for the rest to finish up...", - "saveToCompletedActivities": "Save to completed activities", "generatingSummary": "Analyzing chat and generating results", - "instructionsLanguage": "Instructions language", - "activityCompletedDesc": "Your completed activity was added to analytics where you can review and practice the language you used.", "pingParticipantsNotification": "{user} is looking for users to join the activity session in {room}", "@pingParticipantsNotification": { "type": "String", @@ -5180,38 +4620,12 @@ "courses": "Courses", "courseName": "Course name", "createNewCourse": "New course", - "newCourse": "New course", - "publicCourses": "Public courses", "goToCourse": "Go to course: {course}", "@goToCourse": { "type": "String", "course": {} }, "activityComplete": "This activity has been completed. The activity summary should be available below.", - "haventChattedMuch": "It looks like you haven't chatted much, try using some more vocab words! If you feel like you've completed your objective, you can end the activity below.", - "haveChatted": "It looks like you've been chatting for a while! If you feel like you've completed your objective, wrap up to finish the activity and we'll generate you a summary in the chat!", - "userDoneAndWaiting": "{num1}/{num2} participants have wrapped up. Wait for everyone to finish, and we'll generate you a summary in the chat! \n\nIf you'd like to rejoin the conversation, click the continue button in the chat.", - "@userDoneAndWaiting": { - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "othersDoneAndWaiting": "{num1}/{num2} are done. Have you completed your objective?", - "@othersDoneAndWaiting": { - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "startNewSession": "Start new session", "joinOpenSession": "Join open session", "less": "less", @@ -5221,7 +4635,6 @@ "openToJoin": "Open to join", "results": "Results", "activityDone": "Activity Done!", - "moreLabel": "more", "promoCodeInfo": "Promo codes can be entered on the next page", "editsComingSoon": "The ability to edit cities and activities is coming soon.", "editing": "Editing", @@ -5244,36 +4657,26 @@ "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", "chooseLanguage": "Choose a target language.", - "letsGo": "Let's go", "startOwn": "Start my own", "joinCourseDesc": "Each course has 8-10 sequenced topics with a range of task-based language learning activities.", "courseCodeHint": "Course code", - "anyLevel": "Any Level", "signupOption": "How do you want to sign up?", "withApple": "With Apple", "withGoogle": "With Google", "withEmail": "With Email", "createAccount": "Create account", - "noCoursesFound": "No courses found", "loginWithEmail": "Login with email", "usernameOrEmail": "Username or email", "email": "Email", "forgotPassword": "Forgot password?", - "writingAnalyticsDesc": "Send messages to practice writing.", "endActivity": "End activity", "allLanguages": "All languages", - "allCefrLevels": "All CEFR levels", - "chatListTooltip": "Here you’ll find your direct messages! Click on any user’s avatar and “start conversation” to send a DM.", "directMessageBotTitle": "Direct message Pangea Bot", "feedbackTitle": "Activity Feedback", - "feedbackDesc": "How should the activity be improved? If you can provide some details, we’ll make the change!", "feedbackRespDesc": "Check back tomorrow for activity updates.", "feedbackHint": "Your feedback", "feedbackButton": "Submit feedback", @@ -5282,12 +4685,11 @@ "playWithAI": "Play with AI for now", "courseStartDesc": "Pangea Bot is ready to go anytime!\n\n...but learning is better with friends!", "activityDropdownDesc": "When you’re done with this activity, click below", - "activityAnalyticsListBody": "These are your completed activities! After finishing activities, you can view them here.", "languageMismatchTitle": "Language mismatch", + "emptyChatSearch": "No DMs or chats found. Make sure your search is spelled correctly.", "languageMismatchDesc": "Your target language doesn't match the language of this activity. Update your target language?", "reportWordIssueTooltip": "Report word information issue", "tokenInfoFeedbackDialogTitle": "Word Information Feedback", - "tokenInfoFeedbackDialogDesc": "AI makes mistakes. Please describe any issues you found with the information above.", "noPublicCoursesFound": "No public courses found. Would you like to create one?", "noCourseTemplatesFound": "We couldn't find any courses for your target language. You can chat with Pangea Bot in the meantime, and check back later for more courses.", "botActivityJoinFailMessage": "Pangea Bot is taking a while to respond. Please try again later, or invite a friend.", @@ -5302,12 +4704,259 @@ "placeholders": {} }, "addCourse": "Add a course", - "joinCourseWithCode": "Join course with code", "joinPublicCourse": "Join public course", "vocabLevelsDesc": "This is where vocab words will go once you’ve leveled them up!", + "activityAnalyticsTooltipBody": "These are your saved activities for review and practice.", + "numSavedActivities": "Number of saved activities", + "saveActivityTitle": "Save activity", + "saveActivityDesc": "Good job! Save this activity for later review and practice", + "levelInfoTooltip": "Here you can see all the points you’ve earned and how!", + "alreadyInCourseWithID": "You are already in a course with this plan. Do you want to create a course with the same plan, or go to the existing course?", + "goToExistingCourse": "Go to existing course", + "emojiView": "Emoji view", + "feedbackDialogDesc": "I make mistakes too! Anything to help me improve?", + "contactHasBeenInvitedToTheCourse": "Contact has been invited to the course", + "inviteFriends": "Invite friends", + "failedToLoadFeedback": "Failed to load feedback.", + "activityStatsButtonTooltip": "Activity info", + "allow": "Allow", + "deny": "Deny", + "enabledRenewal": "Enable Subscription Renewal", + "subscriptionEndsOn": "Subscription Ends On", + "subscriptionRenewsOn": "Subscription Renews On", + "waitForSubscriptionChanges": "Changes to your subscription may take a moment to reflect in the app.", + "subscribeReadingAssistance": "Subscribe to unlock message tools", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Arabic", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijani", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinese", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Belarusian", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgarian", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bangla", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnian", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Central Kurdish", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsican", + "crhDisplayName": "Crimean Turkish", + "crsDisplayName": "Seselwa Creole French", + "csDisplayName": "Czech", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Welsh", + "daDisplayName": "Danish", + "deDisplayName": "German", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "English", + "enAUDisplayName": "English (Australia)", + "enGBDisplayName": "English (UK)", + "enINDisplayName": "English (India)", + "enUSDisplayName": "English (US)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spanish", + "esESDisplayName": "Spanish (Spain)", + "esMXDisplayName": "Spanish (Mexico)", + "euDisplayName": "Basque", + "faDisplayName": "Persian", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnish", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroese", + "frDisplayName": "French", + "frCADisplayName": "French (Canada)", + "frFRDisplayName": "French (France)", + "fyDisplayName": "Western Frisian", + "gaDisplayName": "Irish", + "gaaDisplayName": "Ga", + "gdDisplayName": "Scottish Gaelic", + "glDisplayName": "Galician", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiian", + "heDisplayName": "Hebrew", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croatian", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitian Creole", + "huDisplayName": "Hungarian", + "hyDisplayName": "Armenian", + "idDisplayName": "Indonesian", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Icelandic", + "itDisplayName": "Italian", + "jaDisplayName": "Japanese", + "jvDisplayName": "Javanese", + "kaDisplayName": "Georgian", + "kkDisplayName": "Kazakh", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Korean", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Democratic Republic of Congo)", + "kuDisplayName": "Kurdish", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgish", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgish", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lithuanian", + "ltgDisplayName": "Latgalian", + "luoDisplayName": "Luo (Kenya and Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvian", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolian", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabic)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norwegian (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Dutch", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Norwegian", + "nrDisplayName": "South Ndebele", + "nsoDisplayName": "Northern Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polish", + "psDisplayName": "Pashto", + "ptDisplayName": "Portuguese", + "ptBRDisplayName": "Portuguese (Brazil)", + "ptPTDisplayName": "Portuguese (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romanian", + "roMDDisplayName": "Moldovan", + "romDisplayName": "Romany", + "ruDisplayName": "Russian", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilian", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovak", + "slDisplayName": "Slovenian", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanian", + "srDisplayName": "Serbian", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Southern Sotho", + "suDisplayName": "Sundanese", + "svDisplayName": "Swedish", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajik", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turkish", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uyghur", + "ukDisplayName": "Ukrainian", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamese", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonese", + "yueCNDisplayName": "Cantonese (China)", + "yueHKDisplayName": "Cantonese (Hong Kong)", + "zhDisplayName": "Chinese", + "zhCNDisplayName": "Chinese (Simplified)", + "zhTWDisplayName": "Chinese (Traditional)", + "zuDisplayName": "Zulu", + "unreadPlus": "99+", "highlightVocabTooltip": "Highlight target vocab words below by sending them or practicing with them in the chat", "teacherModeTitle": "Teacher Mode", "teacherModeDesc": "Toggle to unlock all topics and activities. Course admin only.", + "noSavedActivitiesYet": "Activities will appear here once they are completed and saved.", + "practiceActivityCompleted": "Practice activity completed", + "changeCourse": "Change course", + "changeCourseDesc": "Here you can change this course's course plan.", + "introChatTitle": "Create Introductions Chat", + "introChatDesc": "Anyone in the space can post.", + "announcementsChatTitle": "Announcements Chat", + "announcementsChatDesc": "Only space admin can post.", "notStartedActivitiesTitle": "Open sessions ({num})", "@notStartedActivitiesTitle": { "type": "String", @@ -5335,6 +4984,51 @@ } } }, + "pickDifferentActivity": "Pick a different activity", + "messageLanguageMismatchMessage": "Your target language doesn't match this message. Update your target language?", + "blockLemmaConfirmation": "This vocab word will be permanently removed from your analytics", + "woman": "Woman", + "man": "Man", + "otherGender": "Other", + "unselectedGender": "Select a gender option", + "gender": "Gender", + "modeDisabled": "Learning tools are disabled for messages that aren't in your target language.", + "courseParticipantTooltip": "This is everybody in this course. Click on any user’s avatar and “start conversation” to send a DM.", + "chatParticipantTooltip": "This is everybody in this chat. Click on any user’s avatar and “start conversation” to send a DM.", + "inOngoingActivity": "You have an ongoing activity!", + "vocabEmoji": "Vocab emoji", + "requestRegeneration": "Request regeneration", + "optionalRegenerateReason": "(Optional) Reason", + "emojiSelectedSnackbar": "You’ve set the emoji for {lemma}! We’ll use this emoji to represent the word in practice activities going forward.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "constructUseCorLMDesc": "Correct vocab definition practice", + "constructUseIncLMDesc": "Incorrect vocab definition practice", + "constructUseCorLADesc": "Correct vocab audio practice", + "constructUseIncLADesc": "Incorrect vocab audio practice", + "constructUseBonus": "Bonus during vocab practice", + "practiceVocab": "Practice vocabulary", + "selectMeaning": "Select the meaning", + "selectAudio": "Select the matching audio", + "congratulations": "Congratulations!", + "anotherRound": "Another round", + "ssoDialogTitle": "Waiting for sign in to complete", + "ssoDialogDesc": "We opened a new tab so you can sign in securely.", + "ssoDialogHelpText": "🤔 If you didn't see the new tab, please check your popup blocker.", + "disableLanguageToolsTitle": "Disable language tools", + "disableLanguageToolsDesc": "Would you like to disable automatic language assistance?", + "recordingPermissionDenied": "Permission denied. Enable recording permissions to record audio messages.", + "genericWebRecordingError": "Something went wrong. We recommend using the Chrome browser when recording messages.", + "screenSizeWarning": "For the best experience using this application, please expand your screen size.", + "noActivityRequest": "No current activity request.", + "quit": "Quit", + "congratulationsYouveCompletedPractice": "Congratulations! You've completed the practice session.", "noSavedActivitiesYet": "Activities will appear here once they are completed and saved.", "practiceActivityCompleted": "Practice activity completed", "changeCourse": "Change course", @@ -5345,5 +5039,9 @@ "announcementsChatDesc": "Only space admin can post.", "inOngoingActivity": "You have an ongoing activity!", "activitiesToUnlockTopicTitle": "Activities to Unlock Next Topic", - "activitiesToUnlockTopicDesc": "Set the number of activities to unlock the next course topic" + "activitiesToUnlockTopicDesc": "Set the number of activities to unlock the next course topic", + "mustHave10Words" : "You must have at least 10 vocab words to practice them. Try talking to a friend or Pangea Bot to discover more!", + "botSettings": "Bot Settings", + "activitySettingsOverrideWarning": "Language and language level determined by activity plan", + "voice": "Voice" } diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index 0aa337550..3776e3eb4 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:41.310107", + "@@last_modified": "2026-01-07 14:28:53.013525", "about": "Prio", "@about": { "type": "String", @@ -2504,26 +2504,14 @@ "commandHint_logoutall": "Elsaluti de ĉiuj aktivaj aparatoj", "displayNavigationRail": "Montri navigan reliefon sur poŝtelefono", "customReaction": "Propra reagado", - "accountInformation": "Konto-informoj", - "addGroupDescription": "Aldoni priskribon de la babilo", - "addNewFriend": "Aldoni novan amikon", - "alreadyHaveAnAccount": "Ĉu vi jam havas konton?", - "createNewGroup": "Krei novan babilon", - "editChatPermissions": "Redakti babilajn permesojn", "writeAMessageLangCodes": "Tajpu en {l1} aŭ {l2}...", "requests": "Petoj", - "allCorrect": "Tiel mi dirus ĝin! Bone!", - "newWayAllGood": "Tio ne estas kiel mi dirus ĝin, sed ĝi aspektas bone!", - "othersAreBetter": "Ho, eble estas pli bona maniero diri tion.", "holdForInfo": "Klaku kaj teni por vorto-informoj.", "greenFeedback": "Tio estas, kion mi metus!", "yellowFeedback": "Ho, vi povas provi tion kaj vidi ĉu ĝi funkcias! Por uzi ĉi tiun vorton, simple denove klaku ĝin.", "redFeedback": "Mi ne pensas, ke tio estas ĝusta...", "itInstructionsTitle": "Mi povas helpi vin traduki!", "itInstructionsBody": "Vi povas klaki kaj teni elektojn por vorto-informoj.", - "oneday": "Lastaj 24 horoj", - "oneweek": "Lastaj 7 tagoj", - "onemonth": "Pasinta monato", "gaTooltip": "L2 uzi kun gramatika helpo", "taTooltip": "L2 uzi kun tradukada helpo", "unTooltip": "Alia", @@ -2533,58 +2521,27 @@ "interactiveTranslatorAllowed": "Elektado de la studento", "interactiveTranslatorRequired": "Postulata", "notYetSet": "Ankoraŭ ne agordita", - "myLearning": "Miaj Analizoj", "waTooltip": "Uzo sen helpo", - "changeDateRange": "Ŝanĝi datintervalon", - "classDescription": "Priskribo", - "addStudents": "Inviti uzantojn per ligilo aŭ kodo", - "copyClassLink": "Kopii invitan ligilon", - "copyClassCode": "Kopii invitan kodon", - "inviteStudentByUserName": "Inviti uzantojn per uzantnomo", "languageSettings": "Lingvaj Agordoj", "interactiveTranslator": "Tradukada subteno", - "shareVideo": "Kunhavigi Video", - "shareVideoDesc": "Ŝaltu ĉi tion por ebligi studentojn kunhavigi videojn en babilejoj.", - "shareFiles": "Kunhavigi Dosierojn", - "selectLanguageLevel": "Elekti lingvan nivelon", "noIdenticalLanguages": "Bonvolu elekti malsamajn bazajn kaj celajn lingvojn", - "iWantALanguagePartnerFrom": "Estas de:", - "worldWide": "Tra la Tuta Mondo", - "noResults": "Neniuj rezultoj! Provu vastigi vian serĉon.", "searchBy": "Serĉi laŭ lando kaj lingvoj", - "iWantAConversationPartner": "Mi volas konversacioparton kiu", - "iWantALanguagePartnerWhoSpeaks": "Parolas:", - "iWantALanguagePartnerWhoIsLearning": "Ŝatas:", "joinWithClassCode": "Aliĝi al kurso", - "joinWithClassCodeHint": "Enmetu invitan kodon", - "languageLevelPreA1": "Verŝa Komencanto (Pre A1)", - "languageLevelA1": "Komencanto (A1)", - "languageLevelA2": "Elementa (A2)", - "languageLevelB1": "Meznivelulo (B1)", - "languageLevelB2": "Supermeznivelulo (B2)", - "languageLevelC1": "Progresinta (C1)", - "languageLevelC2": "Mastro (C2)", + "languageLevelPreA1": "Novice Malalta (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novica Alta (A2)", + "languageLevelB1": "Mezgrada Meza (B1)", + "languageLevelB2": "Avancita Malalta (B2)", + "languageLevelC1": "Avancita Meza (C1)", + "languageLevelC2": "Supera (C2)", "changeTheNameOfTheClass": "Ŝanĝi la nomon", "changeTheNameOfTheChat": "Ŝanĝi la nomon de la babilejo", - "askPangeaBot": "Demandi al Pangea Bot por kunteksta difino.", "sorryNoResults": "Pardonu, neniuj rezultoj.", "ignoreInThisText": "Ignori", - "helpMeTranslate": "Jes!", - "needsItShortMessage": "Elĉerpiĝinta", "needsItMessage": "Atendu, tio ne estas {targetLanguage}! Ĉu vi bezonas helpon por traduki?", - "needsIgcMessage": "Ĉi tiu mesaĝo havas gramatikan eraron.", - "tokenTranslationTitle": "Vorto estas en via baza lingvo.", - "spanTranslationDesc": "Vidu eblajn tradukojn sube.", - "spanTranslationTitle": "Kelkaj vortoj estas en via baza lingvo.", - "l1SpanAndGrammarTitle": "Ekstere la cel-lingvo", - "l1SpanAndGrammarDesc": "Tio povus esti en via baza lingvo aŭ ĝi povus esti gramatika eraro.", - "otherTitle": "Vi havas eraron.", - "otherDesc": "Vidu eblajn korektadojn sube.", "countryInformation": "Mia lando", - "myLanguages": "Miaj bazaj kaj celaj lingvoj", "targetLanguage": "Cel-lingvo", "sourceLanguage": "Baza lingvo", - "languagesISpeak": "Lingvoj kiujn mi parolas", "updateLanguage": "Miaj lingvoj", "whatLanguageYouWantToLearn": "Kiu lingvo vi volas lerni?", "whatIsYourBaseLanguage": "Kio estas via baza lingvo?", @@ -2599,13 +2556,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klaku ĉi tie por ĝisdatigi traduk- kaj gramatikajn helpagordojn", "errorDisableITClassDesc": "Tradukhelpado estas malŝaltita por la kurso en kiu ĉi tiu babilejo estas.", "errorDisableIGCClassDesc": "Gramatika helpo estas malŝaltita por la kurso en kiu ĉi tiu babilejo estas.", - "itIsDisabled": "Interaga Tradukado estas malŝaltita", - "igcIsDisabled": "Interaga Gramatika Kontrolo estas malŝaltita", - "goToLearningSettings": "Iru al Lernagordoj", "error405Title": "Lingvoj ne agorditaj", "error405Desc": "Bonvolu agordi viajn lingvojn en Ĉefa menuo > Lernagordoj.", - "loginOrSignup": "Ensaluti per", - "iAgreeToThe": "Mi konsentas pri la ", "termsAndConditions": "Kondicxoj kaj Kondicxoj", "andCertifyIAmAtLeast13YearsOfAge": " kaj atestigas ke mi estas almenaŭ 16 jarojn aĝa.", "error502504Title": "Vau, estas multaj studentoj enrete!", @@ -2613,40 +2565,21 @@ "error404Title": "Traduk-eraro!", "error404Desc": "Pangea-boto ne certas kiel traduki tion...", "errorPleaseRefresh": "Ni esploras ĝin! Bonvolu reŝarĝi kaj provi denove.", - "toggleIT": "Interaga Tradukado", - "toggleIGC": "Interaga Gramatika Kontrolo", - "toggleToolSettingsDescription": "Ĉi tie vi povas ŝalti viajn individuajn lingvajn ilarajn agordojn.", "connectedToStaging": "Konektita al Testa Medio", "learningSettings": "Lernaj agordoj", - "sendVoiceNotes": "Sendu Voĉajn Notojn", - "sendVoiceNotesDesc": "Ŝaltu ĉi tion por permesi studentojn sendi voĉajn notojn en babilejoj.", - "chatTopic": "Babileja temo", - "chatTopicDesc": "Agordu babilejan temon", - "inviteStudentByUserNameDesc": "Se via studento jam havas konton, vi povas serĉi ilin.", "participants": "Partoprenantoj", - "almostPerfect": "Tio ŝajnas ĝusta! Jen kion mi dirus.", - "prettyGood": "Preskaŭ bone! Jen kion mi dirus.", - "letMeThink": "Hmm, vidu kiel vi faris!", "clickMessageTitle": "Bezoni helpon?", "clickMessageBody": "Klaku mesaĝon por lingvaj iloj kiel traduko, riprodono kaj pli!", - "understandingMessagesTitle": "Difinoj kaj tradukoj!", - "understandingMessagesBody": "Klaku substrekitajn vortojn por difinoj. Traduku kun mesaĝaj opcioj (supre dekstre).", "allDone": "Ĉio estas farita!", "vocab": "Vortprovizo", "low": "Ni havas indicojn ke la uzanto ne komprenas ĉi tiujn vortojn.", "medium": "Tiuj vortoj estis uzataj. Ne estas klare ĉu la vortoj estas plene komprenataj aŭ ne.", "high": "Ni havas indicojn ke la uzanto komprenas ĉi tiujn vortojn.", - "unknownProficiency": "Tiuj vortoj ne estis uzataj en Pangea Chat.", - "changeView": "Ŝanĝi vidojn.", - "clearAll": "Ĉiuj vortoj forigi?", - "generateVocabulary": "Generi vortprovizon el titolo kaj priskribo", - "generatePrompts": "Generi proponojn", "subscribe": "Aboni", "getAccess": "Aboni nun!", "subscriptionDesc": "Mesaĝado estas senpaga! Aboni por malŝlosi interagan tradukadon, gramatikkontrolon kaj lernanalizojn.", "subscriptionManagement": "Abonmanaĝero", "currentSubscription": "Aktuala Abono", - "changeSubscription": "Ŝanĝi vian abonon", "cancelSubscription": "Nuligi vian abonon", "selectYourPlan": "Elekti Vian Planon", "subsciptionPlatformTooltip": "Bonvolu ensaluti al via originala aparato por administri vian abonplanon", @@ -2655,9 +2588,6 @@ "paymentHistory": "Pago-Historio", "emptyChatDownloadWarning": "Ne povas elŝuti malplenan babiladon", "update": "Ĝisdatigi", - "updateDesc": "Nun vi povas ĝisdati ĉi tiun aplikaĵon de {localVersion} al {storeVersion}", - "maybeLater": "Eble Poste", - "mainMenu": "Ĉefa Menuo", "toggleImmersionMode": "Malkovri Modo", "toggleImmersionModeDesc": "Kiam ebligita, ĉiuj mesaĝoj estas montrataj en via cellingvo. Ĉi tiu agordo estas plej utila en lingva interŝanĝo.", "itToggleDescription": "Ĉi tiu lingvolernilo identigos vortojn en via baza lingvo kaj helpos vin traduki ilin al via cellingvo. Kvankam malofta, la AI povas fari traduk-erarojn.", @@ -2672,212 +2602,13 @@ "definitionsToolDescription": "Kiam ebligita, vortoj substrekitaj en bluo povas esti klaketaj por difinoj. Klaku mesaĝojn por akiri difinojn.", "translationsToolDescrption": "Kiam ebligita, klaku mesaĝon kaj la traduk-ikonon por vidi mesaĝon en via baza lingvo.", "welcomeBack": "Bonvenon reen! Se vi partoprenis la pilotprogramon 2023-2024, bonvolu kontakti nin por via speciala piloto-abono. Se vi estas instruisto kiu aĉetis (aŭ via institucio aĉetis) permesilojn por via klaso, kontakti nin por via instruista abono.", - "kickAllStudents": "Ekzilu Ĉiujn Lernantojn", - "kickAllStudentsConfirmation": "Ĉu vi certas, ke vi volas ekzili ĉiujn lernantojn?", - "inviteAllStudents": "Invitu ĉiujn studentojn", - "inviteAllStudentsConfirmation": "Ĉu vi certas, ke vi volas inviti ĉiujn studentojn?", - "inviteUsersFromPangea": "Aldoni administrantojn", - "redeemPromoCode": "Rekompenci Promokodonon", - "enterPromoCode": "Enmeti Promokodonon", "downloadTxtFile": "Elŝuti Tekstan Dosieron", "downloadCSVFile": "Elŝuti CSV-Dosieron", "promotionalSubscriptionDesc": "Vi nuntempe havas vivdaŭran promocian abonadon. Sendu mesaĝon al support@pangea.chat por helpo pri ŝanĝo de via abonado.", "originalSubscriptionPlatform": "Abono aĉetita tra {purchasePlatform}", "oneWeekTrial": "Unu-semajna Provo", "downloadXLSXFile": "Elŝuti Excel-Dosieron", - "abDisplayName": "Abĥazaj", - "aaDisplayName": "Afaroj", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albana", - "amDisplayName": "Amara", - "arDisplayName": "Araba", - "anDisplayName": "Aragona", - "hyDisplayName": "Armena", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Bazka", - "beDisplayName": "Belorusa", - "bnDisplayName": "Bengala", - "bhDisplayName": "Bihara", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnia", - "brDisplayName": "Bretona", - "bgDisplayName": "Bulgara", - "myDisplayName": "Birma", - "caDisplayName": "Kataluna, Valenca", - "chDisplayName": "Chamorro", - "ceDisplayName": "Ĉeĉena", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Laŭtanda", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Kornika", - "coDisplayName": "Korsika", - "crDisplayName": "Kree", - "hrDisplayName": "Kroata", - "csDisplayName": "Ĉeĥa", - "daDisplayName": "Dana", - "dvDisplayName": "Divehi; Dhivehi; Maldiva;", - "nlDisplayName": "Nederlanda", - "enDisplayName": "Angla", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estona", - "eeDisplayName": "Evea", - "foDisplayName": "Faerisa", - "fjDisplayName": "Fiĝiana", - "fiDisplayName": "Finna", - "frDisplayName": "Franca", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicia", - "kaDisplayName": "Gorĝeva", - "deDisplayName": "germana", - "elDisplayName": "greka, moderna", - "gnDisplayName": "Gvaraní", - "guDisplayName": "Gujarata", - "htDisplayName": "Haita, haitia kreola", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrea (moderna)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hinda", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hungara", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonezia", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlanda", - "igDisplayName": "Ibo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islanda", - "itDisplayName": "Itala", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japana", - "jvDisplayName": "Javana", - "klDisplayName": "Kalaallisut, Gronlanda", - "knDisplayName": "Kanada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmira", - "kkDisplayName": "Kazaha", - "kmDisplayName": "Kmera", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgiza, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korea", - "kuDisplayName": "Kurda", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latina", - "lbDisplayName": "Luksemburga, Letzeburga", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosa", - "ltDisplayName": "Litova", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latva", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedona", - "mgDisplayName": "Malagasy", - "msDisplayName": "Malaja", - "mlDisplayName": "Malajala", - "mtDisplayName": "Malta", - "miDisplayName": "Maori", - "mrDisplayName": "Marata (Marāṭhī)", - "mhDisplayName": "Marŝalese", - "mnDisplayName": "Mongola", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norsk Bokmål", - "ndDisplayName": "Nord-Ndebele", - "neDisplayName": "Nepala", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norvega Nynorsk", - "noDisplayName": "Norvega", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Suda Ndebele", - "ocDisplayName": "Okcitana", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Malnova Eklezia Slava, Eklezia Slava, Eklezia Slava, Malnova Bulgara, Malnova Slava", - "omDisplayName": "Oromo", - "orDisplayName": "Oria", - "osDisplayName": "Oseta, Oseta", - "paDisplayName": "Panjaba, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persa", - "plDisplayName": "Pollanda", - "psDisplayName": "Paŝto, Pushto", - "ptDisplayName": "Portugala", - "quDisplayName": "Ketchua", - "rmDisplayName": "Rumantsch", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumania, Moldava, Moldava", - "ruDisplayName": "Rusa", - "saDisplayName": "Sanskrito (Saṃskṛta)", - "scDisplayName": "Sardigna", - "sdDisplayName": "Sindhi", - "seDisplayName": "Norda Sami", - "smDisplayName": "Samoa", - "sgDisplayName": "Sango", - "srDisplayName": "Serba", - "gdDisplayName": "Skota Gàidhlig, Gàidhlig", - "snDisplayName": "Shona", - "siDisplayName": "Singala, Sinhaléza", - "skDisplayName": "Slovaka", - "slDisplayName": "Slovena", - "soDisplayName": "Somala", - "stDisplayName": "Suda Sotho", - "esDisplayName": "Hispana", - "suDisplayName": "Sundanesa", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Sveda", - "taDisplayName": "Tamila", - "teDisplayName": "Telugua", - "tgDisplayName": "Tajika", - "thDisplayName": "Taja", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibeta Normala, Tibeta, Centra", - "tkDisplayName": "Turkmena", - "tlDisplayName": "Tagaloga", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga Insuloj)", - "trDisplayName": "Turka", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataro", - "twDisplayName": "Tvia", - "tyDisplayName": "Tahitiana", - "ugDisplayName": "Uighura, Uighura", - "ukDisplayName": "Ukraina", - "urDisplayName": "Urdua", - "uzDisplayName": "Uzbekio", - "veDisplayName": "Venda", - "viDisplayName": "Vjetnama", - "voDisplayName": "Volapuko", - "waDisplayName": "Valona", - "cyDisplayName": "Welsa", - "woDisplayName": "Wolof", - "fyDisplayName": "Okcidenta Frisiana", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidaĥa", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Nekonata", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havaja", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multnacia", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebree", - "jwDisplayName": "Javane", - "moDisplayName": "Moldova", - "shDisplayName": "Serbo-Kroata", "wwCountryDisplayName": "Tra Laŭ Tutmondi", "afCountryDisplayName": "Afganujo", "axCountryDisplayName": "Alandaj Insuloj", @@ -3125,41 +2856,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambio", "zwCountryDisplayName": "Zimbabvo", - "pay": "Pagu", - "allPrivateChats": "Privataj konversacioj", - "unknownPrivateChat": "Nekonata privata konversacio", + "pay": "Checkout", "invitedToSpace": "{user} invitis vin aliĝi al kurso: {space}! Ĉu vi volas akcepti?", - "declinedInvitation": "Nekonfirmita invito", - "acceptedInvitation": "Akceptita invito", "youreInvited": "📩 Vi estas invitita!", "invitedToChat": "{user} invitis vin aliĝi al konversacio: {name}! Ĉu vi volas akcepti?", "monthlySubscription": "Monata", "yearlySubscription": "Jare", "defaultSubscription": "Pangea Babileco Abono", "freeTrial": "Libera Provo", - "grammarAnalytics": "Erara Analitiko", "total": "Entute: ", "noDataFound": "Neniu datumoj trovita", - "promoSubscriptionExpirationDesc": "Via nuna abono estas promocia kaj validas ĝis {expiration}. Sendu mesaĝon al support@pangea.chat por helpo ŝanĝi vian abonon.", - "emptyChatNameWarning": "Bonvolu enmeti nomon por ĉi tiu babilejo", "blurMeansTranslateTitle": "Kial la mesaĝo estas malklara?", "blurMeansTranslateBody": "Dum la Moduso de Enprofundiĝo estas aktivigita, mesaĝoj senditaj en via baza lingvo estos malklaraj dum Pangea Bot tradukas ilin al via cel-lingvo. La Moduso de Enprofundiĝo povas esti ŝaltita aŭ malŝaltita en individuaj kaj kurso-agordoj.", - "someErrorTitle": "Hm, io ne ĝojas", - "someErrorBody": "Eble estas eraro aŭ io en via baza lingvo.", "bestCorrectionFeedback": "Tio estas ĝusta!", "distractorFeedback": "Tio ne estas tute ĝusta.", "bestAnswerFeedback": "Tio estas ĝusta!", "definitionDefaultPrompt": "Kion signifas ĉi tiu vorto?", "practiceDefaultPrompt": "Kio estas la plej bona respondo?", "correctionDefaultPrompt": "Kio estas la plej bona anstataŭaĵo?", - "itStartDefaultPrompt": "Ĉu vi volas helpon pri tradukado?", - "lockedChatWarning": "🔒 Ĉi tiu babilejo estas ŝlosita", - "lockChat": "Malfermu Babilon", - "suggestToChat": "Sugesti ĉi tiun babilejon", - "suggestToChatDesc": "Sugestitaj babilejoj aperos en la listoj de babilejoj", "acceptSelection": "Akceptu la korekton", - "acceptSelectionAnyway": "Uzu ĉi tion ĉiuokaze", - "makingActivity": "Farado de agado", "why": "Kial?", "definition": "Difino", "exampleSentence": "Ekzempla Frazo", @@ -3167,128 +2882,55 @@ "reportMessageTitle": "{reportingUserId} raportis mesaĝon de {reportedUserId} en la babilejo {roomName}", "reportMessageBody": "Mesaĝo: {reportedMessage}\nKialo: {reason}", "noTeachersFound": "Neniu instruisto trovita por raporti", - "viewArchive": "Vidi Arkivon", "trialExpiration": "Via senpaga provtempo finiĝos je {expiration}", "freeTrialDesc": "Novaj uzantoj ricevas semajnan senpagan provon de Pangea Chat", "activateTrial": "Aktivigu Senpagan 7-tagan Provon", "successfullySubscribed": "Vi sukcese aboniĝis!", "clickToManageSubscription": "Klaku ĉi tie por administri vian abonon.", - "errorGettingAudio": "Eraro dum akirado de sono. Bonvolu refreŝigi kaj provi denove.", "signUp": "Registriĝi", "pleaseChooseAtLeastChars": "Bonvolu elekti almenaŭ {min} signojn.", "noEmailWarning": "Bonvolu enmeti validan retadresaĵon. Alie vi ne povos restarigi vian pasvorton. Se vi ne volas, denove tapu la butonon por daŭrigi.", "pleaseEnterValidEmail": "Bonvolu enmeti validan retadresaĵon.", "pleaseChooseAUsername": "Bonvolu elekti uzantnomon", - "chooseAUsername": "Elekti uzantnomon", "define": "Difini", "listen": "Aŭskulti", - "addConversationBot": "Aktivigi Konversacia Boto", - "addConversationBotDesc": "Aldoni boton al ĉi tiu babilejo", - "convoBotSettingsDescription": "Redakti konversacia temon kaj malfacilecon", - "enterAConversationTopic": "Enmetu konversacian temon", - "conversationTopic": "Konversacia temo", - "enableModeration": "Aktivigi moderadon", - "enableModerationDesc": "Aktivigi aŭtomatan moderadon por revizii mesaĝojn antaŭ ol ili estas senditaj", - "conversationLanguageLevel": "Kio estas la lingva nivelo de ĉi tiu konversacio?", - "showDefinition": "Montri Difinon", - "subscriptionPopupTitle": "Ĉi tiu frazo eble enhavas gramatikan eraron...", - "subscriptionPopupDesc": "Aboni hodiaŭ por malŝlosi tradukadon kaj gramatikan korekton!", - "seeOptions": "Vidi opciojn", - "continuedWithoutSubscription": "Daŭrigi sen abono", "trialPeriodExpired": "Via provperiodo eksvalidiĝis", - "selectToDefine": "Klaku ajnan vorton por vidi ĝian difinon!", "translations": "tradukoj", "messageAudio": "mesaĝa sono", "definitions": "difinoj", "subscribedToUnlockTools": "Abonu por malŝlosi interagan tradukadon kaj gramatikan kontrolon, sonan ludon, personigitajn praktikajn agadojn kaj lernan analitikadon!", "translationTooltip": "Traduki", - "audioTooltip": "Ludi Sonon", "speechToTextTooltip": "Transskribo", - "certifyAge": "Mi certigas, ke mi estas pli ol {age} jarojn aĝa", "kickBotWarning": "Forigi Pangea-boton forigos la konversaci-boton de ĉi tiu babilejo.", - "joinToView": "Aliĝu al ĉi tiu ĉambro por vidi detalojn", "refresh": "Refreŝigi", - "autoPlayTitle": "Aŭtomata Ludado de Mesaĝoj", - "autoPlayDesc": "Kiam ebligita, la teksto-al-parolado de mesaĝoj aŭtomate ludos kiam elektita.", "messageAnalytics": "Mesaĝa Analitiko", "words": "Vortoj", "score": "Poentaro", "accuracy": "Precizeco", "points": "Punktoj", "noPaymentInfo": "Ne necesas paginformoj!", - "conversationBotModeSelectDescription": "Babilado de agado", - "conversationBotModeSelectOption_discussion": "Diskuto", - "conversationBotModeSelectOption_custom": "Propra", - "conversationBotModeSelectOption_conversation": "Babilo", - "conversationBotModeSelectOption_textAdventure": "Teksta Aventuro", - "conversationBotModeSelectOption_storyGame": "Rakonta Ludo", - "conversationBotDiscussionZone_title": "Agadaj Agordoj", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskuta Temoj", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Agordi diskutan temon", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskutaj Ŝlosilvortoj", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Agordi diskutajn ŝlosilvortojn", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Vojnomo apartigita per komo por gvidi la diskuton", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Sendi diskutan peton laŭ horaro", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horo inter diskutaj petoj", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Respondi je ⏩ reago", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reago por sendi diskutan peton", - "conversationBotCustomZone_title": "Propraj Agordoj", - "conversationBotCustomZone_customSystemPromptLabel": "Sistemaj petoj", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Agordi personan sisteman instrukcion", - "conversationBotCustomZone_customSystemPromptEmptyError": "Manĝas personan sisteman instrukcion", - "botConfig": "Agordoj de roboto kaj agadoj", - "botConfigNoPermissionTitle": "Sen permeso", - "botConfigNoPermissionMessage": "Kontaktu la administranton de la ĉambro por ŝanĝi la agordojn de la roboto", - "addConversationBotDialogTitleInvite": "Konfirmu inviton de konversacia roboto", - "addConversationBotButtonInvite": "Inviti", - "addConversationBotDialogInviteConfirmation": "Inviti", - "addConversationBotButtonTitleRemove": "Konfirmu forigon de konversacia roboto", - "addConversationBotButtonRemove": "Forigi", - "addConversationBotDialogRemoveConfirmation": "Forigi", - "conversationBotConfigConfirmChange": "Konfirmu", - "conversationBotStatus": "Inviti roboto", - "conversationBotTextAdventureZone_title": "Teksta Aventuro", - "conversationBotTextAdventureZone_instructionLabel": "Instrukcioj de la Ludestro", - "conversationBotTextAdventureZone_instructionPlaceholder": "Agordi instrukciojn de la ludestro", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Manĝas instrukciojn de la ludestro", - "studentAnalyticsNotAvailable": "Studentaj datumoj nun ne haveblas", - "roomDataMissing": "Iuj datumoj eble mankas en ĉambroj, kie vi ne estas membro.", "updatePhoneOS": "Eble vi bezonas ĝisdatigi la version de la operaciumo de via aparato.", "wordsPerMinute": "Vortoj po minuto", "autoIGCToolName": "Kurigu Pangea verkhelpilo aŭtomate", "autoIGCToolDescription": "Aŭtomate funkciigu Pangea Chat gramatikon kaj tradukadon por helpi vin verki antaŭ ol sendi vian mesaĝon.", - "runGrammarCorrection": "Kontrolu mesaĝon", - "grammarCorrectionFailed": "Problemoj por korekti", - "grammarCorrectionComplete": "Ŝajnas bone!", "tooltipInstructionsTitle": "Ne certas kio tio faras?", "tooltipInstructionsMobileBody": "Premu kaj teni objektojn por vidi ilustraĵojn.", "tooltipInstructionsBrowserBody": "Hovru super objektoj por vidi ilustraĵojn.", "chatCapacity": "Kapacito de babilejo", "roomFull": "Ĉi tiu ĉambro jam estas plena.", - "topicNotSet": "La temo ne estas agordita.", - "chatCapacityNotSet": "Ĉi tiu babilejo ne havas kapacitan limon.", "chatCapacityHasBeenChanged": "Kapacito de babilejo ŝanĝita", "chatCapacitySetTooLow": "Kapacito de babilejo devas esti almenaŭ {count}.", "chatCapacityExplanation": "Kapacito de babilejo limigas la nombron de membroj en babilejo.", - "chatExceedsCapacity": "Ĉi tiu babilejo superas ĝian kapaciton.", "tooManyRequest": "Tro da petoj, bonvolu provi denove pli poste.", "enterNumber": "Bonvolu enmeti tutan nombrvaloron.", "buildTranslation": "Kreu vian tradukon el la supraj elektoj", - "nonexistentSelection": "La elekto ne plu ekzistas.", - "changeAnalyticsLanguage": "Ŝanĝi Analitikajn Lingvojn", "practice": "Praktiko", "noLanguagesSet": "Neniu lingvo agordita", - "noActivitiesFound": "Tio sufiĉas por nun! Revenu poste por pli da aferoj.", - "hintTitle": "Sugesto:", "speechToTextBody": "Por voĉmesaĝoj, vi povas vidi transskribon same kiel la vortrapideco de la parolanto.", "versionNotFound": "Versio Ne Trovebla", "fetchingVersion": "Ŝarĝante versionon...", "versionFetchError": "Eraro dum akirado de versio", "versionText": "Versio: {version}+{buildNumber}", - "languageButtonLabel": "Lingvo: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Aŭtomata traduko", - "interactiveTranslatorAutoPlayDesc": "Lanĉas la interagan tradukilon sen demandado.", - "changeAnalyticsView": "Ŝanĝi Analitikajn Vidojn", "l1TranslationBody": "Mesaĝoj en via baza lingvo ne estos tradukitaj.", "deleteSubscriptionWarningTitle": "Vi havas aktivan abonon", "deleteSubscriptionWarningBody": "Forigi vian konton ne nuligos vian abonon aŭtomate.", @@ -3296,9 +2938,7 @@ "error520Title": "Bonvolu provi denove.", "error520Desc": "Pardonu, ni ne povis kompreni vian mesaĝon...", "wordsUsed": "Vortoj Uziĝis", - "errorTypes": "Eraraj Tipoj", "level": "Nivelo", - "canceledSend": "Nuligita sendado", "morphsUsed": "Morfemoj Uziĝis", "translationChoicesBody": "Klaku kaj teni opcion por konsilo.", "grammar": "Gramatiko", @@ -3308,7 +2948,6 @@ "reportContentIssueTitle": "Raporti enhavon problemon", "feedback": "Nedeviga reagoj", "reportContentIssueDescription": "Ho ve! AI povas faciligi personigitajn lernajn spertojn sed... ankaŭ halucinas. Bonvolu doni ajnan reagojn kaj ni provos denove.", - "changeContent": "Ho ve! AI povas faciligi personigitajn lernajn spertojn sed... ankaŭ halucinas. Kio ĝi devus esti?", "clickTheWordAgainToDeselect": "Klaku la elektitan vorton por malselekti ĝin.", "l2SupportNa": "Ne disponebla", "l2SupportAlpha": "Alfa", @@ -3542,7 +3181,6 @@ "grammarCopySPC": "Specifeeco", "grammarCopyPARTTYPE": "Partitiva Tipo", "grammarCopyINTREL": "Interrogativa-Rilata", - "grammarCopyNUMFORMpsor": "Posedanto-Nombro", "grammarCopyUNKNOWN": "Nekonata", "grammarCopyNUMBERPSOR": "Posedanto-Nombro", "grammarCopyPOSS": "Posseca", @@ -3588,28 +3226,14 @@ "grammarCopyVOICEdir": "Rekte", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Reciproka", - "enterPrompt": "Bonvolu enmeti sisteman petonon", - "selectBotLanguage": "Elektu la lingvon de la roboto", - "chooseVoice": "Elektu voĉon", - "enterLanguageLevel": "Bonvolu enmeti lingvonsignon", - "enterDiscussionTopic": "Bonvolu enmeti diskuttemon", - "selectBotChatMode": "Elektu babilan reĝimon", - "messageNotInTargetLang": "Mesaĝo ne en la celo-lingvo", "other": "Alia", "levelShort": "NIV {level}", - "botModeValidation": "Bonvolu elekti bota reĝimon", "clickBestOption": "Elektu la plej bonajn opciojn por traduki vian mesaĝon!", "completeActivitiesToUnlock": "Plenumigu almenaŭ unu agadon por malŝlosi la tradukon!", - "botSettingsSubtitle": "Invitu boton por moderigi babiladon", - "invitePeople": "Inviti uzantojn", "noCapacityLimit": "Sen kapacita limigo", "downloadGroupText": "Elŝuti grupan tekston", "notificationsOn": "Sciigoj aktivigitaj", "notificationsOff": "Sciigoj malaktivigitaj", - "chatCanBeFoundViaSearch": "Babilejo povas esti trovita per serĉo", - "requireCodeToJoin": "Postuli kodon por aliĝi", - "canFindInSearch": "Povas trovi en serĉo", - "addChatToSpace": "Aldoni babiladon", "createChatAndInviteUsers": "Krei babiladon kaj inviti uzantojn", "updatedNewSpaceDescription": "Kursoj ebligas vin koncizi viajn babilejojn kaj konstruigi private aŭ publika komunumo.", "joinWithCode": "Aliĝi kun kodo", @@ -3645,39 +3269,19 @@ "constructUseCollected": " Kolektita en babilejo", "constructUseNanDesc": " Ne aplikebla", "xpIntoLevel": "{currentXP} / {maxXP} PTS", - "signInWithUsername": "Ensaluti kun uzantnomo kaj pasvorto", - "registrationEmailMessage": "Bonvolu konfirmi vian retpoŝton per ligilo sendita tien. En iuj kazoj, la retpoŝto alvenas ĝis 5 minutojn poste. Bonvolu ankaŭ kontroli vian spam-dosieron.", "enableTTSToolName": "Ebligita teksto-al-parolado", "enableTTSToolDescription": "Permesi al la aplikaĵo generi teksto-al-paroladon por partoj de teksto en via cellingvo.", - "couldNotFindTTS": "Ni ne povis trovi teksto-al-paroladan motoron por via nuna cellingvo.", - "ttsInstructionsHyperlink": "Klaku ĉi tie por vidi instrukciojn por elŝuti novan voĉon sur via aparato.", - "createAnAccount": "Krei konton", - "signIn": "Ensaluti", - "signUpWithEmail": "Registri per retpoŝto", - "signUpWithGoogle": "Registru per Google", - "signUpWithApple": "Registru per Apple", "yourUsername": "Via uznomo", "yourEmail": "Via retpoŝto", - "pleaseEnterAnEmail": "Bonvolu enmeti retpoŝtadreson", - "signInWithGoogle": "Ensaluti per Google", - "signInWithApple": "Ensaluti per Apple", - "chooseYourAvatar": "Elektu vian avataron", "iWantToLearn": "Mi volas lerni", - "letsStart": "Ni komencu", - "pleaseAgreeToTOS": "Bonvolu konsenti al la Kondiĉoj kaj Terminoj", "pleaseEnterEmail": "Bonvolu enmeti validan retpoŝtadreson.", - "pleaseSelectALanguage": "Bonvolu elekti lingvon", "myBaseLanguage": "Mia baza lingvo", - "clickWordsInstructions": "🧻 Klaku iun vorton por detaloj. 🤐", - "chooseBestDefinition": "Kion signifas ĉi tiu vorto?", "meaningSectionHeader": "Signifo:", "formSectionHeader": "Formoj uzataj en babilejoj:", - "noEmojiSelectedTooltip": "Neniu emoji elektita", "writingExercisesTooltip": "Verkado", "listeningExercisesTooltip": "Aŭskultado", "readingExercisesTooltip": "Legado", "meaningNotFound": "Signifo ne povis esti trovita.", - "formsNotFound": "Formoj ne povis esti trovita.", "chooseBaseForm": "Elekti bazan formon", "notTheCodeError": "Pardonu, tio ne estas la kodo!", "totalXP": "Entuta XP", @@ -3717,9 +3321,6 @@ "pickAnEmoji": "Kiu estas via plej ŝatata emoji por '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Harmonii signifojn kun la vortoj en la mesaĝo!", "doubleClickToEdit": "Duoble-klaku por redakti.", - "removeFeature": "Forigi {feature}", - "chooseCorrectLabel": "Elektu la ĝustan etikedo.", - "levelPopupTitle": "Gratulon pro atingado de\nNivelo {level}", "activityPlannerTitle": "Agadplaniĝilo", "topicLabel": "Temo", "topicPlaceholder": "Elektu temon...", @@ -3727,7 +3328,6 @@ "modePlaceholder": "Elektu modon...", "learningObjectiveLabel": "Lernocelo", "learningObjectivePlaceholder": "Elektu lernocelon...", - "mediaLabel": "Mediaĵoj, kiujn lernantoj devus kundividi", "languageOfInstructionsLabel": "Lingvo de instrukcioj por agado", "targetLanguageLabel": "Cel-lingvo", "cefrLevelLabel": "CEFR-nivelo", @@ -3742,20 +3342,15 @@ "instructions": "Instrukcioj", "numberOfLearners": "Nombro de lernantoj", "mustBeInteger": "Devas esti entjero, ekzemple 1, 2, 3, ...", - "noLemmasFound": "Ne estas vortoj kun pli ol {xp} Ponto. Daŭre praktiku!", "constructUsePvmDesc": "Produktita en voĉmesaĝo", - "lockedMorphFeature": "Atendas esti malŝlosita", "leaveSpaceDescription": "Per forlaso de la kurso, vi forlasos ĉiujn babilejojn ene de ĝi. Aliaj uzantoj vidos ke vi forlasis la kurson.", - "whatIsLemma": "Kio estas la lemo?", "constructUseCorMmDesc": "Korekta mesaĝa signifo", "constructUseIncMmDesc": "Malĝusta mesaĝa signifo", "constructUseIgnMmDesc": "Ignorita mesaĝa signifo", "clickForMeaningActivity": "Klaku ĉi tie por Signifa Defio", "meaning": "Signifo", "chatWith": "Grupoj kun {displayname}", - "slightlyOffensive": "Iom ofenda", "clickOnEmailLink": "Bonvolu klaki la ligilon en la retpoŝto kaj poste daŭrigu.\n\nKontrolu vian spam-dosierujon se la retpoŝto ne alvenis.", - "whoIsAllowedToJoinThisChat": "Kiu rajtas aliĝi al ĉi tiu babilejo", "dontForgetPassword": "Ne forgesu vian pasvorton!", "enableAutocorrectToolName": "Ŝalti aŭtomatan korektadon de aparato", "enableAutocorrectDescription": "Se via aparato subtenas la lingvon kiun vi lernas, vi povas ŝalti aŭtomatan korektadon por ripari komunajn erarojn dum vi tajpas.", @@ -3783,48 +3378,26 @@ "autocorrectNotAvailable": "Bedaŭrinde via platformo ne estas nun subtenata por ĉi tiu trajto. Restu kunlaboranta por plua evoluo!", "pleaseUpdateApp": "Bonvolu ĝisdatigi la aplikaĵon por daŭrigi.", "chooseEmojiInstructionsBody": "Kompareu emojiojn kun la vortoj kiujn ili plej bone reprezentas. Ne zorgu! Neniuj poentoj forlasas pro malkonsento. 😅", - "pickAnEmojiFor": "Elektu emojion por {lemma}", "analyticsVocabListBody": "Ĉi tio estas via vortaro! Kiam vi akiras XP por ĉiu vorto, ili iros de semeto al plena florado. Klaku sur ajna vorto por vidi pli da detaloj.", "morphAnalyticsListBody": "Ĉi tiuj estas ĉiuj gramatikaj konceptoj en la lingvo, kiun vi lernas! Vi malŝlosos ilin kiam vi renkontos ilin dum babilego. Klaku por detaloj.", "knockSpaceSuccess": "Vi petis aliĝi al ĉi tiu kurso! Administranto respondos al via peto kiam ili ricevos ĝin 😄", - "joinByCode": "Aliĝi per kodo", "chooseWordAudioInstructionsBody": "Aŭskultu la plenan mesaĝon. Poste egaligu la aŭdiojn kun la vortoj.", "chooseMorphsInstructionsBody": "Klaku la pecetojn de puzlo por gramatikaj demandoj!", - "inviteAndLaunch": "Inviti kaj lanĉi", - "createOwnChat": "Kreu vian propran babilejon", "pleaseEnterInt": "Bonvolu enmeti nombron", "home": "Hejm", "join": "Aliĝi", "readingAssistanceOverviewBody": "Klaku la butonojn sube por mini-ludoj pri kongruantaj emojioj, sonoj, vortsignifoj, kaj gramatikaj konceptoj. Aŭ klaku ajnan vorton por detaloj.", - "learnByTexting": "Lerni per mesaĝado", - "levelSummaryTrigger": "Vidi resumon", "levelSummaryPopupTitle": "Resumo de nivelo {level}", - "referFriends": "Referu amikojn", - "referFriendDialogTitle": "Invitu amikon al via konversacio", - "referFriendDialogDesc": "Ĉu vi havas amikon, kiu estas ekscitita lerni novan lingvon kun vi? Kopiu kaj sendu ĉi tiun invitan ligilon por aliĝi kaj komenci babili kun vi hodiaŭ.", - "youUnlocked": "Vi malŝlosis", "resetInstructionTooltipsTitle": "Restarigi instrukciajn ilustraĵojn", "resetInstructionTooltipsDesc": "Klaku por montri instrukciajn ilustraĵojn kiel por tute nova uzanto.", "selectForGrammar": "Elektu gramatikan ikonon por agadoj kaj detaloj.", - "newChatActivityTitle": "Aŭtu amuzan agadon?", - "newChatActivityDesc": "Farigu ĉiun grupan babilejon aventuro kun Activity Planner! Agordu allogajn temojn kaj celojn por la grupo, kaj alportu konversaciojn al vivo per mirindaj bildoj. Ekbruligu imagivajn diskutojn kaj konservu la amuzon fluanta senpenace!", - "exploreMore": "Eksploru pli", "randomize": "Hazardigi", "clear": "Forigi", "makeYourOwnActivity": "Kreu vian propran agadon", "featuredActivities": "Elstaraj", - "goToChat": "Iri al babilejo", "save": "Konservi", - "selectActivity": "Elekti aktivecon", - "wordFocusListeningMultipleChoice": "Kiu sono kongruas al la vorto?", "startChat": "Komenci konversacion", "translationProblem": "Tradukproblemo", - "perfectTranslation": "Perfekta traduko!", - "greatJobTranslation": "Bone farita kun ĉi tiu traduko!", - "goodJobTranslation": "Bona laboro pri ĉi tiu traduko.", - "makingProgress": "Vi faras progreson!", - "keepPracticing": "Daŭrigu praktiki!", - "niceJob": "Bone farita!", "askToJoin": "Petu aliĝi", "emptyChatWarningTitle": "La konversacio estas malplena", "emptyChatWarningDesc": "Vi ne invitis iun al via konversacio. Iru al Agordoj de Konversacio por inviti viajn kontaktojn aŭ la Boton. Vi ankaŭ povas fari tion poste.", @@ -3843,8 +3416,6 @@ "languageLevelC2Desc": "Mi povas kompreni preskaŭ ĉion, kio estas aŭdita aŭ legis, kaj esprimi min flue kaj precize.", "newVocab": "Nova vortprovizo", "newGrammar": "Novaj gramatikaj konceptoj", - "congratulationsOnReaching": "Vi atingis nivelon {level}!", - "seeDetails": "Vidu Detalojn", "choosePracticeMode": "Klaku unu el la supraj butonoj por komenci praktikan agadon", "ban": "Bani", "unban": "Malbani", @@ -3858,8 +3429,6 @@ "timesUsedWithAssistance": "Fojo uzata kun helpo", "shareInviteCode": "Dividu invitkodon: {code}", "leaderboard": "Gvidtabla", - "welcomeUser": "Bonvenon {user}", - "joinSpaceOnboardingDesc": "Ĉu vi havas invitkodon aŭ ligilon al publika kurso?", "skipForNow": "Preterpasi por nun", "permissions": "Permesoj", "spaceChildPermission": "Kiu povas aldoni novajn babilejojn al ĉi tiu kurso", @@ -3867,12 +3436,8 @@ "defaultOption": "Defaŭlta", "deleteChatDesc": "Ĉu vi certas ke vi volas forigi ĉi tiun babilejon? Ĝi estos forigita por ĉiuj partoprenantoj kaj ĉiuj mesaĝoj ene de la babilejo ne plu estos haveblaj por praktiko aŭ lernado-analizoj.", "deleteSpaceDesc": "La kurso kaj ĉiuj elektitaj babilejoj estos forigitaj por ĉiuj partoprenantoj kaj ĉiuj mesaĝoj ene de la babilejo ne plu estos haveblaj por praktiko aŭ lernado-analizoj. Ĉi tiu ago ne povas esti malkonata.", - "chatWithActivities": "Babilejo kun agadoj", "launch": "Lanĉi", - "launchActivityToChats": "Lanĉi agadon al babilejoj", "searchChats": "Serĉi babilejojn", - "selectChats": "Elekti babilejojn", - "selectChatToStart": "Komplete! Elektu babilejon por komenci", "maxFifty": "Maks. 50", "configureSpace": "Agordi kurson", "pinMessages": "Streki mesaĝojn", @@ -3886,9 +3451,7 @@ "announcements": "Anoncoj", "activities": "Aktivecoj", "access": "Aksesoj", - "botSettings": "Bot-agordoj", "activitySuggestionTimeoutMessage": "Ni laboras forte por generi pli da aktivecoj por vi, bonvolu reveni post momento", - "accessSettingsWarning": "Ho ve! Ŝajnas ke vi ne havas permeson agordi la Aksesajn regulojn de ĉi tiu ĉambro. Vi devus kontroli ĉi tiujn por certigi ke ili estas laŭ viaj bezonoj kaj paroli kun ĉambroadministranto se vi bezonas ŝanĝi ilin", "howSpaceCanBeFound": "Kiel ĉi tiu kurso povas esti trovita", "private": "Private", "cannotBeFoundInSearch": "Ne povas esti trovita en serĉo", @@ -3901,16 +3464,6 @@ "canBeFoundViaKnock": "• peto aliĝi kaj administranto aprobas", "youHaveLeveledUp": "Vi progresis al pli alta nivelo!", "sendActivities": "Sendu agadojn", - "getStarted": "Komencu", - "getStartedBotChatDesc": "Babileco kun AI estas bonega loko por komenci, kaj Pangea legi, verki, aŭskulti kaj paroli iloj faciligas ĝin!", - "getStartedCommunitiesDesc": "Lerni kun komunumo estas kie Pangea Chat brilas!\nVi povas aliĝi al via klaso, trovi kurson, aŭ eĉ krei vian propran!", - "getStartedFriendsDesc": "Ĉu vi havas amikon, kiu volas lerni kun vi?", - "getStartedBotChatComplete": "Bone farite! Vi babilas kun la roboto!", - "getStartedCommunitiesComplete": "Bonege, vi aliĝis al kurso!", - "getStartedComplete": "Vi kompletigis ĉi tiun sekcion!\nDaŭre esploru niajn mirindajn trajtojn babilante kun amikoj!", - "getStartedFriendsComplete": "Hoho! Vi havas amikojn! 😉", - "getStartedBotChatButton": "Komencu babili!", - "getStartedFriendsButton": "Babili kun amiko", "groupChat": "Grupbabileco", "directMessage": "Rekta mesaĝo", "newDirectMessage": "Nova rekta mesaĝo", @@ -3926,7 +3479,6 @@ "mySavedActivities": "Miaj konservitaj agadoj", "noSavedActivities": "Neniuj konservitaj agadoj", "saveActivity": "Konservi ĉi tiun agadon", - "yourSavedActivities": "Konservitaj agadoj", "failedToPlayVideo": "Malsukcesis ludi la videon", "done": "Fino", "inThisSpace": "En ĉi tiu kurso", @@ -3965,37 +3517,27 @@ "maximumActivityParticipants": "Ĉiu Ago povas havi maksimume {count} partoprenanton(j)n.", "pending": "Atendanta", "inactive": "Nekonata", - "unjoinedActivityMessage": "Ĉu vi volas partopreni? Elektu malfermitan rolon!\nAŭ restu kaj spektu la spektaklon!", - "fullActivityMessage": "Sentu vin libera spekti la spektaklon! Dum ne estas malfermita rolo por partopreno, vi povas vidi la babiladon!", "confirmRole": "Konfirmu rolon", "openRoleLabel": "Malfermita", "joinedTheActivity": "👋 {username} aliĝis kiel {role}", "finishedTheActivity": "🎯 {username} finis ĉi tiun agadon", - "endActivityTitle": "Mi finas", - "endActivityDesc": "Ĉu vi plenumis la celojn?\nĈi tio estas via konfirmo, ke vi retiriĝas de la babilejo. Sed ne zorgu, la amuzado daŭras en la babilado! Restu kaj ĝuu la spektaklon ĝis ĉiuj klakas 'Fini'.", "archiveToAnalytics": "Aldoni al miaj Finitaj Agadoj", "activitySummaryError": "Aktivitatresumoj ne disponeblas", "requestSummaries": "Petaj resumoj", - "loadingActivitySummary": "Ŝarĝante aktivitatresumon...", "generatingNewActivities": "Vi estas la unua uzanto de ĉi tiu lingvoparo! Bonvolu atendi momenton, ni pretigas aktivadojn ĝuste por vi.", - "requestAccessTitle": "Ĉu vi volas peti aliron al analitiko?", + "requestAccessTitle": "Petu aliron al analitiko?", "requestAccessDesc": "Ĉu vi ŝatus peti aliron por vidi partoprenantajn analitikojn?\n\nSe partoprenantoj konsentas, administrantoj de ĉi tiu kurso povos vidi iliajn:\n • totalan vortprovizon\n • totalajn gramatikajn konceptojn\n • totalajn kompletigitajn aktivadsesiojn\n • specifajn gramatikajn konceptojn uzitajn, ĝuste kaj erare\n\nIli ne povos vidi iliajn:\n • mesaĝojn en babiladoj ekster la kurso\n • vortprovizoliston", "requestAccess": "Petu aliron ({count})", "analyticsInactiveTitle": "Petoj al neaktivaj uzantoj ne povis esti senditaj", "analyticsInactiveDesc": "Neaktivaj uzantoj kiuj ne ensalutis ekde kiam ĉi tiu funkcio estis enkondukita, ne vidos vian peton.\n\nLa butono Peti aperos kiam ili revenos. Vi povas resendigi la peton poste klakante la butonon Peti sub ilia nomo kiam ĝi estos disponebla.", "accessRequestedTitle": "Petado pri Analitika Alirpermeso", - "accessRequestedDesc": "La administrantoj de “{space}” petas vidi viajn lernanalitikojn.\n\nSe vi konsentas, administrantoj de ĉi tiu kurso povos vidi viajn:\n • totalan vortprovizon\n • totalajn gramatikajn konceptojn\n • totalajn kompletigitajn aktivadsesiojn\n • specifajn gramatikajn konceptojn uzitajn, ĝuste kaj erare\n\nIli ne povos vidi viajn:\n • mesaĝojn en babiladoj ekster la kurso\n • vortprovizoliston", - "allowAccess": "Permesi Aliron", - "denyAccess": "Neniigi Aliron", + "accessRequestedDesc": "Petante admin(oj): {admin} \n\nAdminoj el “{space}” petas vidi viajn lernan analitiko.\n\nSe vi konsentas, Ili povos vidi viajn:\n • totalan vortaron\n • totalajn gramatikajn konceptojn\n • totalan aktivan sesiojn kompletigitajn\n • la specifajn gramatikajn konceptojn uzitajn, ĝuste kaj malĝuste\n\nIli ne povos vidi viajn:\n • mesaĝojn en konversacioj ekster la kurso\n • vortaron", "adminRequestedAccess": "Administrantoj petis vidi viajn analitikojn.", "lastUpdated": "Ĝisdatigita\n{time}", "activityFinishedMessage": "Ĉio Finita!", "endForAll": "Fini por ĉiuj", "newCourse": "Nova kurso", - "newCourseSubtitle": "Kiu kurso-plano vi ŝatus uzi?", - "failedToLoadCourses": "Malsukcesis ŝarĝi kursojn", "numModules": "{num} moduloj", - "numActivityPlans": "{num} agadoj", "coursePlan": "Kurso Plano", "editCourseLater": "Vi povas redakti la titolon, priskribojn, kaj bildon de la kurso poste.", "newCourseAccess": "Ĝis nun, kursoj estas private kaj postulas administran aprobon por aliĝi. Vi povas ŝanĝi ĉi tiujn agordojn iam ajn.", @@ -4009,17 +3551,11 @@ "accessDesc": "Vi povas fari vian kurson malfermita al la mondo! Aŭ, fari vian kurson private kaj sekura.", "createGroupChatDesc": "Dum agado-sesioj komenciĝas kaj finiĝas, grupaj babilejoj restos malfermita por regula komunikado.", "deleteDesc": "Nur administrantoj povas forigi kurson. Ĉi tio estas detrua ago kiu forigas ĉiujn uzantojn kaj forigas ĉiujn elektitajn babilejojn ene de la kurso. Estu singarda.", - "failedToLoadCourseInfo": "Malsukcesis ŝarĝi kurso-informojn", "noCourseFound": "Ho, ĉi tiu kurso bezonas planon!\n\nKursoj estas sekvenco de temoj kaj konversaciaj agadoj.", "additionalParticipants": "+ {num} aliaj", - "activityNotFoundForCourse": "Ĉi tiu agado ne estis trovita ene de la kurso", - "courseChats": "Kurso-Babilejoj", - "myActivitySessions": "Miaj Agad-Sesioj", "directMessages": "Rektaj Mesaĝoj", "whatNow": "Kio nun?", "chooseNextActivity": "Elektu vian sekvan agadon!", - "seeInstructions": "Vidi Instrukciojn", - "hideInstructions": "Kaŝi Instrukciojn", "letsGo": "Ni ekiru", "chooseRole": "Elektu rolon!", "chooseRoleToParticipate": "Elektu rolon por partopreni!", @@ -4029,23 +3565,15 @@ "inviteFriends": "Inviti amikojn", "waitNotDone": "Atendu, mi ne finis!", "waitingForOthersToFinish": "Atendas la aliajn finiĝi...", - "saveToCompletedActivities": "Konservi al plenumitaj agadoj", "generatingSummary": "Analizante babiladon kaj generante rezultojn", - "instructionsLanguage": "Instrukcia lingvo", "findCourse": "Trovu kurson", - "activityCompletedDesc": "Via plenumita agado estis aldonita al analizoj kie vi povas revizii kaj praktiki la uzitan lingvon.", "pingParticipantsNotification": "{user} serĉas uzantojn por aliĝi al la aktivec-sesio en {room}", "course": "Kurso", "courses": "Kursoj", "courseName": "Nomo de la kurso", "createNewCourse": "Nova kurso", - "publicCourses": "Publikaj kursoj", "goToCourse": "Iri al kurso: {course}", "activityComplete": "Ĉi tiu aktiveco estas finita. La resumo de la aktiveco devus esti havebla sube.", - "haventChattedMuch": "Ŝajnas ke vi ne babilis multe, provu uzi pli da vortoj! Se vi sentas ke vi atingis vian celon, vi povas fini la aktivecon sube.", - "haveChatted": "Ŝajnas ke vi babilis dum iom da tempo! Se vi sentas ke vi atingis vian celon, fini la aktivecon kaj ni generos resumon en la babilejo!", - "userDoneAndWaiting": "{num1}/{num2} partoprenantoj finintaj. Atendu ke ĉiuj finu, kaj ni generos resumon en la babilejo! \n\nSe vi volas reiri al la konversacio, klaku la daŭrigi butonon en la babilejo.", - "othersDoneAndWaiting": "{num1}/{num2} finintaj. Ĉu vi atingis vian celon?", "startNewSession": "Komenci novan sesion", "joinOpenSession": "Aliĝi al malfermita sesio", "less": "malpli", @@ -4055,7 +3583,6 @@ "openToJoin": "Malferma por aliĝi", "results": "Rezultoj", "activityDone": "Aktivado farita!", - "moreLabel": "pli", "promoCodeInfo": "Kodo por promocioj povas esti enigitaj en la sekva paĝo", "editsComingSoon": "La kapablo redakti urbojn kaj aktivecojn baldaŭ venos.", "editing": "Redaktado", @@ -4071,13 +3598,10 @@ "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", - "chooseLanguage": "Elektu lingvon.", + "chooseLanguage": "Elektu celan lingvon.", "planTrip": "Planadu vian vojaĝon", "howAreYouTraveling": "Kiel vi vojaĝas?", "unlockPrivateTrip": "Malŝlosu privatecan vojaĝon", @@ -4090,25 +3614,20 @@ "courseCode": "Kio estas la sekreta pasvorto?", "courseCodeHint": "Vojaĝa kodo aŭ ligilo", "unlockMyTrip": "Malŝlosu mian vojaĝon", - "anyLevel": "Ajna nivelo", "signupOption": "Kiel vi volas aliĝi?", "withApple": "Kun Apple", "withGoogle": "Kun Google", "withEmail": "Kun retpoŝto", "createAccount": "Krei konton", - "noCoursesFound": "Neniuj kursoj trovita", "loginWithEmail": "Ensaluti kun retpoŝto", "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", - "allCefrLevels": "Ĉiuj CEFR-niveloj", "chatListTooltip": "Ĉi tie vi trovos viajn rektajn mesaĝojn! Klaku sur ajna uzantoprofilo kaj “komencu konversacion” por sendi DM.", "directMessageBotTitle": "Rekta mesaĝo Pangea Bot", "feedbackTitle": "Aktiveca Recenzo", - "feedbackDesc": "Kiel la aktiveco povus esti plibonigita? Se vi povas doni iujn detalojn, ni faros la ŝanĝon!", "feedbackHint": "Via recenzo", "feedbackButton": "Sendu recenzon", "directMessageBotDesc": "Paroli kun homoj estas pli amuza, sed... AI ĉiam estas preta!", @@ -6094,30 +5613,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6133,18 +5628,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6169,18 +5652,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6217,38 +5688,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6257,62 +5700,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6349,10 +5748,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6361,14 +5756,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6377,46 +5764,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6425,10 +5776,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6485,18 +5832,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6505,14 +5840,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6541,18 +5868,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6561,42 +5876,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6605,14 +5888,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6633,26 +5908,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6673,10 +5928,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6709,25 +5960,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6784,34 +6016,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6840,778 +6044,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8604,14 +7040,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8623,14 +7051,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8662,10 +7082,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8674,18 +7090,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8694,14 +7098,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8726,38 +7122,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8803,10 +7171,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8831,10 +7195,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8859,10 +7219,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8871,66 +7227,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8951,42 +7251,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9011,154 +7287,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9175,18 +7303,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9207,14 +7323,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9231,10 +7339,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9247,14 +7351,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9263,14 +7359,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9298,26 +7386,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9346,18 +7414,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9394,10 +7454,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10330,10 +8386,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10514,34 +8566,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10554,10 +8578,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10566,14 +8586,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10590,22 +8602,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10753,14 +8749,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10769,34 +8757,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10805,54 +8765,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10861,10 +8785,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10881,10 +8801,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11056,26 +8972,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11104,10 +9000,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11164,30 +9056,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11216,18 +9092,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11344,14 +9212,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11364,10 +9224,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11376,14 +9232,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11400,14 +9248,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11416,22 +9256,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11444,18 +9268,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11472,22 +9284,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11496,30 +9296,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11592,18 +9368,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11660,18 +9424,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11700,30 +9452,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11776,18 +9512,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11836,46 +9564,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11940,10 +9628,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12115,14 +9799,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12150,14 +9826,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12170,10 +9838,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12209,19 +9873,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12246,14 +9905,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12262,14 +9913,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12322,10 +9965,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12338,18 +9977,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12362,14 +9989,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12410,26 +10029,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12457,10 +10064,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12471,36 +10074,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12537,10 +10110,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12605,18 +10174,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12681,10 +10238,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12705,10 +10258,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12725,10 +10274,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12737,10 +10282,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12753,10 +10294,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12781,16 +10318,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invitu amikojn al agado", - "inviteFriendsToActivityCourse": "Invitu amikojn al agado kaj kurso", "feedbackRespDesc": "Kontrolu denove morgaŭ por agadaj ĝisdatigoj.", "activityDropdownDesc": "Kiam vi finis ĉi tiun agadon, klaku sube", - "activityAnalyticsListBody": "Jen viaj kompletigitaj agadoj! Post fini agadojn, vi povas vidi ilin ĉi tie.", "languageMismatchTitle": "Lingva manko", "languageMismatchDesc": "Via celolingvo ne kongruas kun la lingvo de ĉi tiu agado. Ĉu vi volas ĝisdatigi vian celolingvon?", "reportWordIssueTooltip": "Raporti pri problemo kun vorto", "tokenInfoFeedbackDialogTitle": "Raporto pri Vortinformo", - "tokenInfoFeedbackDialogDesc": "AI faras erarojn. Bonvolu priskribi ajnajn problemojn, kiujn vi trovis kun la supre montrita informo.", "noPublicCoursesFound": "Neniuj publikaj kursoj trovitaj. Ĉu vi ŝatus krei unu?", "noCourseTemplatesFound": "Ni ne povis trovi kursojn por via celolingvo. Dumtempe vi povas babili kun Pangea Bot, kaj reveni poste por pli da kursoj.", "botActivityJoinFailMessage": "Pangea Boto ne respondas baldaŭe. Bonvolu provi denove poste, aŭ inviti amikon.", @@ -12798,14 +10331,6 @@ "leaveDesc": "Forlasu ĉi tiun spacon kaj ĉiujn babiladojn ene de ĝi", "selectAll": "Elekti ĉiujn", "deselectAll": "Malselekti ĉiujn", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12814,10 +10339,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12834,10 +10355,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12871,7 +10388,6 @@ "newMessageInPangeaChat": "🗨️ Nova mesaĝo en Pangea Babilejo", "shareCourse": "Dividi kurson", "addCourse": "Aldoni kurson", - "joinCourseWithCode": "Aliĝi al kurso kun kodo", "joinPublicCourse": "Aliĝi al publika kurso", "vocabLevelsDesc": "Jen kie vortoj de vortprovizo iros post kiam vi ilin plibonigos!", "highlightVocabTooltip": "Emfazu la celvortojn sube per sendado aŭ praktikado kun ili en la babilejo", @@ -12895,10 +10411,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12907,7 +10419,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Neniuj DMs aŭ konversacioj trovitaj. Certiĝu, ke via serĉo estas ĝuste literumita.", + "activityAnalyticsTooltipBody": "Jen viaj konservitaj aktivecoj por revizio kaj praktiko.", + "numSavedActivities": "Nombro de konservitaj aktivecoj", + "saveActivityTitle": "Konservi aktivecon", + "saveActivityDesc": "Bonega laboro! Konservu ĉi tiun aktivecon por posta revizio kaj praktiko", + "levelInfoTooltip": "Ĉi tie vi povas vidi ĉiujn punktojn, kiujn vi gajnis kaj kiel!", + "alreadyInCourseWithID": "Vi jam estas en kurso kun ĉi tiu plano. Ĉu vi volas krei kurson kun la sama plano, aŭ iri al la ekzistanta kurso?", + "goToExistingCourse": "Iru al ekzistanta kurso", + "emojiView": "Emoji vido", + "feedbackDialogDesc": "Mi ankaŭ faras erarojn! Ĉu io por helpi min plibonigi?", + "contactHasBeenInvitedToTheCourse": "Kontakto estis invitita al la kurso", + "activityStatsButtonTooltip": "Aktiveco informo", + "allow": "Permesi", + "deny": "Malpermesi", + "enabledRenewal": "Ebligi Abonrenovigon", + "subscriptionEndsOn": "Abono Finiĝas Je", + "subscriptionRenewsOn": "Abono Renovigas Je", + "waitForSubscriptionChanges": "Ŝanĝoj al via abono povas preni momenton por reflekti en la aplikaĵo.", + "subscribeReadingAssistance": "Aboni por malŝlosi mesaĝajn ilojn", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikansa", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhara", + "arDisplayName": "Araba", + "asDisplayName": "Asama", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijana", + "baDisplayName": "Baŝkir", + "banDisplayName": "Balinese", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Belorusa", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgara", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengala", + "bnBDDisplayName": "Bengala (Bangladeŝo)", + "bnINDisplayName": "Bengala (Hindio)", + "brDisplayName": "Bretona", + "bsDisplayName": "Bosna", + "btsDisplayName": "Bataka Simalungun", + "btxDisplayName": "Bataka Karo", + "buaDisplayName": "Buriata", + "caDisplayName": "Kataluna", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centra Kurda", + "cnhDisplayName": "Hakha Ĉina", + "coDisplayName": "Korsika", + "crhDisplayName": "Krimea Turka", + "crsDisplayName": "Seselwa Kreola Franca", + "csDisplayName": "Ĉeĥa", + "cvDisplayName": "Ĉuvaŝa", + "cyDisplayName": "Kimra", + "daDisplayName": "Dana", + "deDisplayName": "Germana", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Angla", + "enAUDisplayName": "Angla (Aŭstralio)", + "enGBDisplayName": "Angla (UK)", + "enINDisplayName": "Angla (Hindio)", + "enUSDisplayName": "Angla (Usono)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Hispana", + "esESDisplayName": "Hispana (Hispanio)", + "esMXDisplayName": "Hispana (Meksiko)", + "euDisplayName": "Baskia", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finna", + "filDisplayName": "Filipina", + "fjDisplayName": "Fijia", + "foDisplayName": "Farao", + "frDisplayName": "Franca", + "frCADisplayName": "Franca (Kanado)", + "frFRDisplayName": "Franca (Francio)", + "fyDisplayName": "Okcidenta Frisiana", + "gaDisplayName": "Irlanda", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skota Gaelika", + "glDisplayName": "Galicia", + "gnDisplayName": "Guaranio", + "gomDisplayName": "Goa Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havaja", + "heDisplayName": "Hebrea", + "hiDisplayName": "Hinda", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Ĉhattisgarhi", + "hrDisplayName": "Kroata", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitia Kreola", + "huDisplayName": "Hungara", + "hyDisplayName": "Armena", + "idDisplayName": "Indonezia", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islanda", + "itDisplayName": "Itala", + "jaDisplayName": "Japana", + "jvDisplayName": "Javanesa", + "kaDisplayName": "Georgi", + "kkDisplayName": "Kazaka", + "kmDisplayName": "Khmera", + "knDisplayName": "Kannada", + "koDisplayName": "Korea", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kaŝmira", + "ktuDisplayName": "Kituba (Demokratia Respubliko de Kongo)", + "kuDisplayName": "Kurde", + "kyDisplayName": "Kirgiza", + "laDisplayName": "Latina", + "lbDisplayName": "Luksemburgia", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgia", + "lijDisplayName": "Liguria", + "lmoDisplayName": "Lombarda", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litova", + "ltgDisplayName": "Latgalia", + "luoDisplayName": "Luo (Kenjo kaj Tanzanio)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latva", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasa", + "miDisplayName": "Maoria", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedona", + "mlDisplayName": "Malajalam", + "mnDisplayName": "Mongola", + "mniDisplayName": "Manipura", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaja", + "msArabDisplayName": "Malaja (Arabia)", + "msMYDisplayName": "Malaja (Malazio)", + "mtDisplayName": "Maltan", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burma", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvega (Bokmål)", + "neDisplayName": "Nepala", + "newDisplayName": "Newari", + "nlDisplayName": "Hollanda", + "nlBEDisplayName": "Flandra", + "noDisplayName": "Norvega", + "nrDisplayName": "Sud-Ndebele", + "nsoDisplayName": "Nord-Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitana", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Pollanda", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugala", + "ptBRDisplayName": "Portugala (Brazilo)", + "ptPTDisplayName": "Portugala (Portugal)", + "quDisplayName": "Kecua", + "rajDisplayName": "Rajasthana", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumania", + "roMDDisplayName": "Moldavia", + "romDisplayName": "Romana", + "ruDisplayName": "Ruslanda", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrito", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilia", + "sdDisplayName": "Sindhio", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovaka", + "slDisplayName": "Slovena", + "smDisplayName": "Samoa", + "snDisplayName": "Shona", + "soDisplayName": "Somala", + "sqDisplayName": "Albania", + "srDisplayName": "Serba", + "srMEDisplayName": "Montenegrina", + "ssDisplayName": "Swati", + "stDisplayName": "Suda Sotho", + "suDisplayName": "Sundana", + "svDisplayName": "Sveda", + "swDisplayName": "Svahila", + "szlDisplayName": "Silezia", + "taDisplayName": "Tamila", + "teDisplayName": "Telugua", + "tetDisplayName": "Tetuma", + "tgDisplayName": "Tadžika", + "thDisplayName": "Taja", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Turkmena", + "tlDisplayName": "Tagaloga", + "tnDisplayName": "Tswana", + "trDisplayName": "Turka", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Ujgura", + "ukDisplayName": "Ukraina", + "urDisplayName": "Urdua", + "urINDisplayName": "Urdua (Hindio)", + "urPKDisplayName": "Urdua (Pakistano)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vjetnama", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jida", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Yukateka", + "yueDisplayName": "Kantonano", + "yueCNDisplayName": "Kantonano (Ĉinio)", + "yueHKDisplayName": "Kantonano (Honkongo)", + "zhDisplayName": "Ĉina", + "zhCNDisplayName": "Ĉina (Simpligita)", + "zhTWDisplayName": "Ĉina (Tradicia)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12974,6 +11672,7 @@ "notStartedActivitiesTitle": "Malfermitaj sesioj ({num})", "inProgressActivitiesTitle": "Okazas nun ({num})", "completedActivitiesTitle": "Finiĝis ({num})", + "pickDifferentActivity": "Elektu alian aktivon", "inOngoingActivity": "Vi havas daŭrantan aktivon!", "@notStartedActivitiesTitle": { "type": "String", @@ -12999,10 +11698,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Via celolingvo ne kongruas kun ĉi tiu mesaĝo. Ĉu ĝisdatigi vian celolingvon?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ĉi tio estas ĉiuj en ĉi tiu kurso. Klaku sur la avatareto de iu ajn uzanto kaj \"komencu konversacion\" por sendi DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ĉi tiu vortaro vorto estos permanente forigita el viaj analizoj", + "woman": "Virino", + "man": "Viro", + "otherGender": "Alia", + "unselectedGender": "Elektu genran opcion", + "gender": "Genro", + "chatParticipantTooltip": "Ĉi tio estas ĉiuj en ĉi tiu konversacio. Klaku sur la avataro de iu ajn kaj \"komenci konversacion\" por sendi DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Lerniloj estas malaktivigitaj por mesaĝoj, kiuj ne estas en via cellingvo.", + "vocabEmoji": "Vocab emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Petu regeneradon", + "optionalRegenerateReason": "(Opcie) Kialo", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Vi havas metitan la emoji por {lemma}! Ni uzos ĉi tiun emoji por reprezenti la vorton en praktikaj aktivadoj en la estonteco.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Atendante, ke ensaluto finiĝu", + "ssoDialogDesc": "Ni malfermis novan langeton por ke vi povu ensaluti sekure.", + "ssoDialogHelpText": "🤔 Se vi ne vidis la novan langeton, bonvolu kontroli vian popup-blokilon.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Malaktivigi lingvo-ilojn", + "disableLanguageToolsDesc": "Ĉu vi ŝatus malaktivigi aŭtomatan lingvohelpon?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permeso malakceptita. Aktivigu la registradpermesojn por registri aŭdmesaĝojn.", + "genericWebRecordingError": "Io misfunkciis. Ni rekomendas uzi la Chrome-brauzilon kiam vi registras mesaĝojn.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Por la plej bona sperto uzante ĉi tiun aplikaĵon, bonvolu vastigi vian ekranan grandecon.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivecoj por Malŝlosi Sekvan Temon", "activitiesToUnlockTopicDesc": "Agordu la nombron de aktivecoj por malŝlosi la sekvan kurson", "@activitiesToUnlockTopicTitle": { @@ -13012,5 +11829,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Ĝusta vortaro difino praktiko", + "constructUseIncLMDesc": "Malĝusta vortaro difino praktiko", + "constructUseCorLADesc": "Ĝusta vortaro aŭdio praktiko", + "constructUseIncLADesc": "Malĝusta vortaro aŭdio praktiko", + "constructUseBonus": "Bonus dum vortaro praktiko", + "practiceVocab": "Praktiku vortaron", + "selectMeaning": "Elektu la signifon", + "selectAudio": "Elektu la kongruan aŭdion", + "congratulations": "Gratulon!", + "anotherRound": "Alia rundo", + "noActivityRequest": "Neniu aktuala aktivitecpeticio.", + "quit": "Eliri", + "congratulationsYouveCompletedPractice": "Gratulojn! Vi kompletigis la praktikadon.", + "mustHave10Words": "Vi devas havi almenaŭ 10 vortojn por praktiki ilin. Provu paroli kun amiko aŭ Pangea Bot por malkovri pli!", + "botSettings": "Botaj Agordoj", + "activitySettingsOverrideWarning": "Lingvo kaj lingvonivelo determinita de la aktiviteca plano", + "voice": "Voĉo", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 210f5d2d5..b170a1e28 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,6 +1,6 @@ { "@@locale": "es", - "@@last_modified": "2026-01-06 13:00:57.006469", + "@@last_modified": "2026-01-07 14:23:22.356161", "about": "Acerca de", "@about": { "type": "String", @@ -3387,9 +3387,6 @@ "@youHaveKnocked": {}, "approve": "Aprobar", "@approve": {}, - "accountInformation": "Información de la cuenta", - "addGroupDescription": "Agregar una descripción al grupo", - "alreadyHaveAnAccount": "¿Ya tiene una cuenta?", "archivedRoom": "", "askSSSSCache": "Ingrese su contraseña de almacenamiento segura (SSSS) o la clave de recuperación para almacenar en caché las claves.", "askSSSSVerify": "", @@ -3399,16 +3396,14 @@ "changesHaveBeenSaved": "Los cambios se han guardado", "changeTheServer": "Cambiar el servidor", "changeWallpaper": "Cambiar el fondo de pantalla", - "chooseAUsername": "Elija un nombre de usuario", "connectionAttemptFailed": "Falló el intento de conexión", "contentViewer": "Visor de contenido", "couldNotSetAvatar": "No se pudo establecer la imagen de perfil", "couldNotSetDisplayname": "No se pudo establecer el nombre visible", "createAccountNow": "Crear cuenta ahora", - "createNewGroup": "Crear nuevo chat", "crossSigningDisabled": "La confirmación cruzada está deshabilitada", "crossSigningEnabled": "La confirmación cruzada está habilitada", - "deny": "Rechazar", + "deny": "Denegar", "deviceVerifyDescription": "El cifrado solo es seguro cuando se han verificado todos los dispositivos.", "discardPicture": "Descartar imagen", "donate": "Donar", @@ -3555,7 +3550,6 @@ }, "zoomIn": "Acercar zoom", "zoomOut": "Alejar zoom", - "addNewFriend": "Agregar nuevo amigo", "audioPlayerPause": "", "audioPlayerPlay": "Encender", "userNotVerified": "El usuario no está verificado", @@ -3585,7 +3579,6 @@ "dontAskAgain": "Cancelar y no volver a preguntar", "discoverGroups": "Descubrir grupos", "yourChatsAreBeingSynced": "Sus chats se están sincronizando…", - "editChatPermissions": "Editar permisos de chat", "friends": "Amigos", "createNewChatExplaination": "Simplemente escanee el código QR o comparta su enlace de invitación si no están uno al lado del otro.", "shareYourInviteLink": "Compartir tu enlace de invitación", @@ -3619,13 +3612,13 @@ "addDescription": "Añadir descripción", "pleaseEnterSecurityKeyDescription": "Para desbloquear el respaldo de tu chat, por favor ingresa tu clave de seguridad que ha sido generada en una sesión previa. Tu clave de seguridad NO es tu contraseña.", "updateLanguage": "Cambiar mis idiomas", - "languageLevelPreA1": "Principiante absoluto (Pre A1)", - "languageLevelA1": "Principiante elemental (A1)", - "languageLevelA2": "Principiante básico (A2)", - "languageLevelB1": "Intermedio (B1)", - "languageLevelB2": "Intermedio alto (B2)", - "languageLevelC1": "Avanzado (C1)", - "languageLevelC2": "Maestría (C2)", + "languageLevelPreA1": "Novato Bajo (Pre A1)", + "languageLevelA1": "Novato Medio (A1)", + "languageLevelA2": "Principiante Alto (A2)", + "languageLevelB1": "Intermedio Medio (B1)", + "languageLevelB2": "Avanzado Bajo (B2)", + "languageLevelC1": "Avanzado Medio (C1)", + "languageLevelC2": "Superior (C2)", "reportAnIssue": "Ayuda", "whatLanguageYouWantToLearn": "¿Qué idioma quiere aprender?", "whatIsYourBaseLanguage": "¿Cuál es su idioma base? \n\n Actualmente, la traducción interactiva solo está disponible cuando su idioma base es inglés y español. La asistencia gramatical está disponible para todos los idiomas base.", @@ -3634,11 +3627,8 @@ "createGroupChats": "Crear Chats Grupales", "shareStories": "Subir historias", "shareStoriesDesc": "Active esta opción para permitir que los estudiantes suban historias.", - "shareVideo": "Enviar videos", - "shareVideoDesc": "Active esta opción para permitir que los estudiantes compartan videos en los chats.", "sharePhotos": "Enviar fotos", "sharePhotosDesc": "Active esta opción para permitir que los estudiantes compartan fotos en los chats.", - "shareFiles": "Enviar archivos", "shareFilesDesc": "Active esta opción para permitir que los estudiantes compartan archivos en los chats.", "shareLocationDesc": "Active esta opción para permitir que los estudiantes compartan su ubicación en los chats.", "enterCityName": "Escriba ciudad, estado", @@ -3658,70 +3648,45 @@ "editSchool": "Editar escuela", "selectClassRoomDominantLanguage": "¿Cuál es el idioma base de su clase? \n\nEl idioma base de la clase se utilizará para organizar los intercambios de clases (¡Próximamente!). Los idiomas base también los establece el individuo, lo que determina la funcionalidad de las herramienta de aprendizaje. Actualmente, la asistencia de traducción solo está disponibles cuando el idioma base de la persona está configurado en español o inglés. La asistencia gramatical está disponible para todos los idiomas base.", "selectTargetLanguage": "¿Cuál es el idioma que enseña en su clase? \n\nEsto se usa para determinar la funcionalidad de las herramientas de aprendizaje para su clase, incluida la asistencia gramatical, la asistencia de traducción, tarjetas emergentes de definiciones de palabras y Seguimiento de clase. Para todos los chats de su clase, esta configuración anulará cualquier configuración en conflicto a nivel individual.", - "selectLanguageLevel": "Seleccione nivel de lengua", - "addStudents": "Agregar estudiantes", "requestToEnroll": "Solicitar inscripción", "targetLanguage": "Idioma a aprender", "sourceLanguage": "Idioma base", "numberOfStudents": "Número de estudiantes", "ratings": "Calificaciones", - "myLanguages": "Mi idioma base y idioma a aprender", "saveChanges": "Guardar", "createPrivateChat": "Crear un chat privado", "findALanguagePartner": "Encuentre un compañero de conversación", "generalSettings": "Ajustes generales", "suggestToClass": "Sugiera el chat a", "classWelcomeChat": "Chat de bienvenida", - "iWantAConversationPartner": "Quiero un compañero de conversación quién", "yourBirthdayPlease": "Pangea Chat está al servicio de escuelas y otras comunidades de aprendizaje que atienden a estudiantes de 13 años en adelante alrededor del mundo. Para proteger a nuestra población menor de edad, les pedimos a todos nuestros usuarios que verifiquen su edad antes de unirse a nuestra comunidad. Para poder encontrar clases, chats y nuevos amigos en Pangea Chat, debe verificar que tiene 18 años o más de edad.", "invalidDob": "Fecha de nacimiento inválida", "enterYourDob": "Introduzca su fecha de nacimiento", - "getStarted": "Comience", "mustBe13": "Los usuarios deben tener 13 años o más de edad.", - "inviteStudentByUserName": "Invitar a estudiantes por usuario", "spaceAnalyticsDesc": "Información detallada sobre la participación de los estudiantes y el uso del idioma", - "chatTopic": "Tema del chat", - "chatTopicDesc": "Establecer un tema para el chat", - "inviteStudentByUserNameDesc": "Si su estudiante ya tiene una cuenta, puede buscarlo.", "inviteWithEmail": "Invitar por correo", "changeTheNameOfTheClass": "Cambiar el nombre", "changeTheNameOfTheChat": "Cambiar el nombre del chat", "accountSettings": "Ajustes de cuenta", - "toggleIT": "Asistencia de Traducción", "interactiveTranslatorNotAllowed": "Deshabilitado", "interactiveTranslatorAllowed": "Elección del estudiante", "interactiveTranslatorRequired": "Requerido", "interactiveTranslatorRequiredDesc": "Los estudiantes no pueden desactivar la asistencia de traducción. Pueden optar por no aceptar las sugerencias de traducción. Esta restricción no se aplica a Class Admin o chats directos.", "interactiveTranslatorSliderHeader": "Asistencia de traducción", "interactiveTranslator": "Asistencia de traducción", - "interactiveTranslatorAutoPlaySliderHeader": "Traducción de reproducción automática", "interactiveTranslatorAutoPlay": "Traductora interactiva de reproducción automática", - "interactiveTranslatorAutoPlayDesc": "Inicia el traductor interactivo sin preguntar.", "grammarAssistance": "Asistencia gramatical", "withoutAssistance": "Sin apoyo", - "oneday": "Las últimas 24 horas", - "oneweek": "Los últimos 7 días", - "onemonth": "El último mes", "sixmonth": "Los últimos 6 meses", "oneyear": "El último año", "noDataForPeriod": "No se encontraron mensajes para este período", "errorPleaseRefresh": "¡Algo salió mal! El error ha sido registrado y lo estamos investigando. Mientras tanto, actualice la página y vuelva a intentarlo. Si el error persiste, háganoslo saber en support@pangea.chat.", - "loginOrSignup": "Iniciar / Registrarse", "noIdenticalLanguages": "Por favor, elija diferentes idiomas base e idiomas de aprender.", "moderateOffensive": "Moderadamente ofensivo", "searchBy": "Buscar por país e idiomas", - "languagesISpeak": "Idiomas que hablo", - "iWantALanguagePartnerFrom": "Es de:", - "iWantALanguagePartnerWhoSpeaks": "Habla:", - "iWantALanguagePartnerWhoIsLearning": "Está aprendiendo:", - "noResults": "¡No hay resultados! Intente ampliar su búsqueda.", - "worldWide": "En todo el mundo", "ignoreInThisText": "Ignorar para este mensaje.", "youGotSomeIssuesToResolve": "Parece que hay algunos errores de lengua en su mensaje.", - "sendVoiceNotes": "Enviar notas de voz", - "sendVoiceNotesDesc": "Active esta opción para permitir que los estudiantes envíen notas de voz en los chats.", "translationSeemsFinished": "La traducción parece estar terminada.", - "needsItShortMessage": "¡Pruebe la traducción interactiva!", "needsIGCShortMessage": "¡Pruebe el corrector gramatical interactivo!", "needsItMessage": "Espera, ¡ese no es {targetLanguage}! ¿Necesitas ayuda para traducir?", "@needsItMessage": { @@ -3732,9 +3697,6 @@ } } }, - "needsIgcMessage": "Este mensaje tiene un error gramatical.", - "tokenTranslationTitle": "Una palabra está en su idioma base.", - "helpMeTranslate": "¡Sí!", "setToPublicSettingsTitle": "¿Quiere encontrar un compañero de conversación?", "setToPublicSettingsDesc": "Antes de que pueda buscar un compañero de conversación, debe configurar la visibilidad de su perfil como pública.", "publicProfileTitle": "Perfil público", @@ -3789,10 +3751,6 @@ "nounInflDesc": "Vea las correcciones sugeridas a continuación.", "nounNumTitle": "Tiene un error con el sustantivo.", "nounNumDesc": "Esto puede estar relacionado con el uso incorrecto de un sustantivo contable o incontable.", - "otherTitle": "Tiene un error de gramática.", - "otherDesc": "Vea las correcciones sugeridas a continuación.", - "spanTranslationTitle": "Algunas palabras están en su idioma base.", - "spanTranslationDesc": "Vea posibles traducciones abajo.", "error601602Title": "La asistencia de traducción está deshabilitada.", "error601Desc": "Para activar herramientas de aprendizaje, vaya a Ajustes de cuenta > Ajustes de aprendizaje y active asistencia de traducción.", "error405Title": "Idiomas no seleccionados.", @@ -3817,35 +3775,20 @@ "chatItemTooltip": "Use clic largo para ver opciones.", "toggleLanguages": "Cambie el idioma de los mensajes seleccionados.", "holdForInfo": "Use clic largo para ver información de la palabra.", - "askPangeaBot": "Pídale al Pangea Bot una definición contextual.", "deleteGroup": "Eliminar chat grupal", "areYouSureDeleteGroup": "¿Está seguro que quiere eliminar este chat grupal?", "cannotBeReversed": "Esta acción no se puede revertir.", "timeOfLastMessage": "Hora del último mensaje enviado", "totalMessages": "Mensajes totales enviados", - "changeDateRange": "Cambiar rango de fechas", - "l1SpanAndGrammarTitle": "Fuera del idioma de destino", - "l1SpanAndGrammarDesc": "Esto podría estar en su idioma base o podría ser un error gramatical.", - "allCorrect": "¡Así es como lo diría yo! ¡Muy bien!", - "newWayAllGood": "Yo no lo habría dicho así, ¡pero está bien!", - "othersAreBetter": "Hm, creo que deberías decirlo de esta manera.", "greenFeedback": "¡Eso es lo que yo diría!", "yellowFeedback": "Hm, ¡probablemente pueda hacer que eso funcione! Para usar esta palabra, simplemente haga clic en ella nuevamente.", "redFeedback": "No creo que sea correcto, ¡pero puede intentarlo!", "customInputFeedbackChoice": "Lo escribiste. ¡Bien!", - "almostPerfect": "¡Eso parece correcto! Esto es lo que yo hubiera dicho.", - "prettyGood": "¡Bastante bien! Esto es lo que yo hubiera dicho.", - "letMeThink": "Hmm, ¡vamos a ver cómo le fue!", - "understandingMessagesTitle": "¡Definiciones y traducciones!", - "understandingMessagesBody": "Haga clic en las palabras subrayadas para ver las definiciones. Traduzca con 'opciones de mensajes' (arriba a la derecha).", "allDone": "¡Listo!", "vocab": "Vocabulario", "low": "Tenemos evidencia de que el usuario no entiende estas palabras.", "medium": "Esta palabra ha sido utilizada. No está claro si la palabra se entiende completamente o no.", "high": "Tenemos evidencia de que el usuario entiende estas palabras.", - "unknownProficiency": "Esta palabra no se ha utilizado en Pangea Chat.", - "generateVocabulary": "Generar vocabulario basado en el título y la descripción", - "generatePrompts": "Generar preguntas basado en el título y la descripción", "toggleImmersionMode": "Modo de inmersión", "toggleImmersionModeDesc": "Cuando está habilitado, todos los mensajes se muestran en su idioma de destino. Esta configuración es más útil en intercambios de idiomas.", "subscribe": "Subscríbase", @@ -3853,7 +3796,6 @@ "subscriptionDesc": "¡Enviar y recibir mensajes es gratis! Suscríbase para aceder a la traducción interactiva, la revisión gramatical y el análisis de aprendizaje.", "subscriptionManagement": "Manejar subscripción", "currentSubscription": "Subscripción actual", - "changeSubscription": "Cambiar su subscripción", "cancelSubscription": "Cancelar su subscripción", "selectYourPlan": "Escoja su plan", "subsciptionPlatformTooltip": "Inicie sesión en su dispositivo original para administrar su plan de suscripción.", @@ -3861,20 +3803,6 @@ "paymentHistory": "Historial de pago", "emptyChatDownloadWarning": "No se puede descargar el chat vacío", "update": "Actualizar", - "updateDesc": "Ahora puede actualizar esta aplicación de {localVersion} a {storeVersion}", - "@updateDesc": { - "type": "String", - "placeholders": { - "storeVersion": { - "type": "String" - }, - "localVersion": { - "type": "String" - } - } - }, - "maybeLater": "Quizás más tarde", - "mainMenu": "Menú Principal", "bubbleSize": "Tamaño de burbuja", "gaTooltip": "Uso de L2 con asistencia gramatical", "taTooltip": "Uso de L2 con asistencia de traducción", @@ -3887,17 +3815,10 @@ "errorDisableITUserDesc": "Haga clic aquí para actualizar la configuración de asistencia de traducción.", "errorDisableIGCUserDesc": "Haga clic aquí para actualizar la configuración de asistencia gramatical.", "errorDisableLanguageAssistanceUserDesc": "Haga clic aquí para actualizar la asistencia de traducción y de gramática.", - "itIsDisabled": "La asistencia de traducción está deshabilitada.", - "igcIsDisabled": "La asistencia gramatical está deshabilitada.", - "goToLearningSettings": "Vaya a Ajustes de aprendizaje.", "learningSettings": "Ajustes de aprendizaje", - "clearAll": "¿Borrar todas las palabras?", "endToEndEncryption": "", - "letsStart": "", "enterInviteLinkOrMatrixId": "", "updateNow": "Comenzar actualización en segundo plano.", - "toggleIGC": "Asistencia Gramatical", - "iAgreeToThe": "Acepto los ", "termsAndConditions": "Términos y condiciones", "andCertifyIAmAtLeast13YearsOfAge": " y certifico que tengo al menos 16 años.", "error502504Title": "¡Vaya! Hay muchos estudiantes conectados.", @@ -3958,214 +3879,16 @@ "sentMessage": "Mensaje enviado", "useType": "Tipo de Uso", "notAvailable": "No disponible", - "kickAllStudents": "Patear a todos los estudiantes", - "kickAllStudentsConfirmation": "¿Estás seguro de que quieres echar a todos los estudiantes?", - "inviteAllStudents": "Invitar a todos los estudiantes", - "inviteAllStudentsConfirmation": "¿Estás seguro de que quieres invitar a todos los estudiantes?", "taAndGaTooltip": "Uso de la L2 con ayuda de traducción y asistencia gramatical.", "oneToOneChatsWithinClass": "Chats privados dentro de la sala", "oneToOneChatsWithinClassDesc": "Si permite chats privados, los alumnos pueden iniciar y utilizar chats privados con otros participantes de la sala. De lo contrario, sólo podrán participar en chats de grupo.", "subscriptionManagementUnavailable": "Gestión de suscripciones no disponible", - "redeemPromoCode": "Canjear código promocional", - "enterPromoCode": "Introduzca el código promocional", "downloadTxtFile": "Descargar archivo de texto", "downloadCSVFile": "Descargar archivo CSV", "promotionalSubscriptionDesc": "Su suscripción actual es promocional. Envíe un mensaje a support@pangea.chat para cambiar su suscripción.", "originalSubscriptionPlatform": "Suscripción adquirida a través de", "oneWeekTrial": "Una semana de prueba", - "abDisplayName": "abkhaz", - "aaDisplayName": "afar", - "afDisplayName": "africaans", - "akDisplayName": "akan", - "sqDisplayName": "albanés", - "amDisplayName": "amárico", - "arDisplayName": "arábica", - "anDisplayName": "aragonese", - "hyDisplayName": "armenio", - "asDisplayName": "assamese", - "avDisplayName": "avaric", - "aeDisplayName": "avéstico", - "ayDisplayName": "aymara", - "azDisplayName": "azerbaiyano", - "bmDisplayName": "bambara", - "baDisplayName": "bashkir", - "euDisplayName": "vasco", - "beDisplayName": "bielorruso", - "bnDisplayName": "bengalí", - "bhDisplayName": "bihari", - "biDisplayName": "bislama", - "bsDisplayName": "bosnio", - "brDisplayName": "bretón", - "bgDisplayName": "búlgaro", - "myDisplayName": "birmano", - "caDisplayName": "catalán", - "chDisplayName": "chamorro", - "ceDisplayName": "chechen", - "nyDisplayName": "chichewa", - "zhDisplayName": "chino", - "cvDisplayName": "chuvasio", - "kwDisplayName": "de Cornualles", - "coDisplayName": "corso", - "crDisplayName": "cree", - "hrDisplayName": "croata", - "csDisplayName": "checo", - "daDisplayName": "danés", - "dvDisplayName": "divehi; dhivehi; maldivian;", - "nlDisplayName": "holandés", - "enDisplayName": "inglés", - "eoDisplayName": "esperanto", - "etDisplayName": "estonio", - "eeDisplayName": "ewe", - "foDisplayName": "feroés", - "fjDisplayName": "fijian", - "fiDisplayName": "finlandés", - "frDisplayName": "francés", - "ffDisplayName": "fula; fulah; pulaar; pular", - "glDisplayName": "gallego", - "kaDisplayName": "georgiano", - "deDisplayName": "alemán", - "elDisplayName": "griego", - "gnDisplayName": "guaraní", - "guDisplayName": "guyaratí", - "htDisplayName": "haitiano", - "haDisplayName": "hausa", - "heDisplayName": "hebreo (moderno)", - "hzDisplayName": "herero", - "hiDisplayName": "hindi", - "hoDisplayName": "hiri motu", - "huDisplayName": "húngaro", - "iaDisplayName": "interlingua", - "idDisplayName": "indonesio", - "ieDisplayName": "interlingüismo", - "gaDisplayName": "irlandesa", - "igDisplayName": "igbo", - "ikDisplayName": "inupiaq", - "ioDisplayName": "ido", - "isDisplayName": "islandés", - "itDisplayName": "italiano", - "iuDisplayName": "inuktitut", - "jaDisplayName": "japonés", - "jvDisplayName": "javanés", - "klDisplayName": "kalaallisut, greenlandic", - "knDisplayName": "kannada", - "krDisplayName": "kanuri", - "ksDisplayName": "kashmiri", - "kkDisplayName": "kazajo", - "kmDisplayName": "jemer", - "kiDisplayName": "kikuyú", - "rwDisplayName": "kinyarwanda", - "kyDisplayName": "kirguís", - "kvDisplayName": "komi", - "kgDisplayName": "kongo", - "koDisplayName": "coreano", - "kuDisplayName": "kurdo", - "kjDisplayName": "kwanyama, kuanyama", - "laDisplayName": "latín", - "lbDisplayName": "luxemburgués", - "lgDisplayName": "luganda", - "liDisplayName": "limburgués", - "lnDisplayName": "lingala", - "loDisplayName": "laosiano", - "ltDisplayName": "lituano", - "luDisplayName": "luba-katanga", - "lvDisplayName": "letón", - "gvDisplayName": "manx", - "mkDisplayName": "macedónio", - "mgDisplayName": "madagascarí", - "msDisplayName": "malayo", - "mlDisplayName": "malayalam", - "mtDisplayName": "maltés", - "miDisplayName": "maorí", - "mrDisplayName": "marathi (maräthi)", - "mhDisplayName": "marshalés", - "mnDisplayName": "mongol", - "naDisplayName": "nauru", - "nvDisplayName": "navajo, navaho", - "nbDisplayName": "norwegian bokmål", - "ndDisplayName": "north ndebele", - "neDisplayName": "nepalí", - "ngDisplayName": "ndonga", - "nnDisplayName": "norwegian nynorsk", - "noDisplayName": "noruego", - "iiDisplayName": "nuosu", - "nrDisplayName": "ndebele del sur", - "ocDisplayName": "occitan", - "ojDisplayName": "ojibwe, ojibwa", - "cuDisplayName": "antiguo eslavo eclesiástico", - "omDisplayName": "oromo", - "orDisplayName": "oriya", - "osDisplayName": "ossetian, ossetic", - "paDisplayName": "panyabí", - "piDisplayName": "pāli", - "faDisplayName": "persa", - "plDisplayName": "polaco", - "psDisplayName": "pastún", - "ptDisplayName": "portugués", - "quDisplayName": "quechua", - "rmDisplayName": "romansh", - "rnDisplayName": "kirundi", - "roDisplayName": "rumano", - "ruDisplayName": "ruso", - "saDisplayName": "sanskrit (saṁskṛta)", - "scDisplayName": "sardo", - "sdDisplayName": "sindhi", - "seDisplayName": "sami del norte", - "smDisplayName": "samoano", - "sgDisplayName": "sango", - "srDisplayName": "serbio", - "gdDisplayName": "gaélico escocés", - "snDisplayName": "shona", - "siDisplayName": "cingalés", - "skDisplayName": "eslovaco", - "slDisplayName": "esloveno", - "soDisplayName": "somalí", - "stDisplayName": "sotho del sur", - "esDisplayName": "español", - "suDisplayName": "sundanés", - "swDisplayName": "swahili", - "ssDisplayName": "swati", - "svDisplayName": "sueco", - "taDisplayName": "tamil", - "teDisplayName": "telugu", - "tgDisplayName": "tayiko", - "thDisplayName": "tailandés", - "tiDisplayName": "tigrinya", - "boDisplayName": "estándar tibetano", - "tkDisplayName": "turkmeno", - "tlDisplayName": "tagalo", - "tnDisplayName": "tswana", - "toDisplayName": "tonga (Islas Tonga)", - "trDisplayName": "turco", - "tsDisplayName": "tsonga", - "ttDisplayName": "tártaro", - "twDisplayName": "twi", - "tyDisplayName": "tahitian", - "ugDisplayName": "uigur", - "ukDisplayName": "ucranio", - "urDisplayName": "urdu", - "uzDisplayName": "uzbeco", - "veDisplayName": "venda", - "viDisplayName": "vietnamita", - "voDisplayName": "volapük", - "waDisplayName": "walloon", - "cyDisplayName": "galés", - "woDisplayName": "wolof", - "fyDisplayName": "frisón occidental", - "xhDisplayName": "xhosa", - "yiDisplayName": "yídish", - "yoDisplayName": "yoruba", - "zaDisplayName": "zhuang, chuang", "unkDisplayName": "unknown", - "zuDisplayName": "zulú", - "hawDisplayName": "hawaiano", - "hmnDisplayName": "hmong", - "multiDisplayName": "multi", - "cebDisplayName": "cebuano", - "dzDisplayName": "dzongkha", - "iwDisplayName": "hebreo", - "jwDisplayName": "javanés", - "moDisplayName": "moldavian", - "shDisplayName": "serbo-croatian", "wwCountryDisplayName": "Mundial", "afCountryDisplayName": "Afganistán", "axCountryDisplayName": "Islas Åland", @@ -4414,8 +4137,6 @@ "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabue", "downloadXLSXFile": "Descargar archivo Excel", - "unknownPrivateChat": "Chat Privado Desconocido", - "allPrivateChats": "Chats privado", "classes": "Clases", "deleteSpace": "Borrar espacio", "areYouSureDeleteClass": "¿Seguro que quieres borrar este espacio?", @@ -4426,60 +4147,33 @@ "multiLingualClass": "Clase multilingüe", "allClasses": "Todas las clases", "allChatsAndClasses": "Todos los chats y espacios", - "classDescription": "Descripción del espacio", "classDescriptionDesc": "Establecer una descripción", - "copyClassLink": "Copiar enlace de invitación", - "copyClassCode": "Copiar código de invitación", "createGroupChatsDesc": "Active esta opción para permitir a los estudiantes crear chats de grupo dentro del espacio de clase/intercambio.", - "joinWithClassCodeHint": "Introduzca el código de invitación", "welcomeToYourNewClass": "Bienvenido 🙂", "welcomeToClass": "Bienvenido! 🙂\n- ¡Prueba a unirte a un chat!\n- ¡Diviértete chateando!", "unableToFindClassCode": "No se puede encontrar el código.", - "toggleToolSettingsDescription": "Aquí puedes cambiar la configuración individual de la herramienta de idioma. Para los chats dentro de un espacio, la configuración del espacio tendrá prioridad y puede anular esta configuración.", "classRoster": "Participantes", "welcomeBack": "¡Bienvenido de nuevo! Si formó parte del piloto 2023-2024, póngase en contacto con nosotros para obtener su suscripción especial de piloto. Si es usted un profesor que ha adquirido (o cuya institución ha adquirido) licencias para su clase, póngase en contacto con nosotros para obtener su suscripción de profesor.", - "pay": "Pagar", - "inviteUsersFromPangea": "Añadir profesores", + "pay": "Finalizar compra", "addToClass": "Añadir intercambio a la clase", - "myLearning": "Mis análisis", "addToClassDesc": "Añadir un intercambio a una clase hará que el intercambio aparezca dentro de la clase para los estudiantes y les dará acceso a todos los chats dentro del intercambio.", - "declinedInvitation": "Invitación rechazada", - "acceptedInvitation": "Invitación aceptada", "youreInvited": "📩 ¡Estás invitado!", - "changeView": "Cambia de vista.", "invitedToChat": "{user} te ha invitado a unirte a un chat: ¡{name}! ¿Deseas aceptar?", "total": "Total: ", "noDataFound": "No se han encontrado datos", - "promoSubscriptionExpirationDesc": "Su suscripción actual es promocional y expira el {expiration}. Envíe un mensaje a support@pangea.chat para cambiar su suscripción.", - "@promoSubscriptionExpirationDesc": { - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "emptyChatNameWarning": "Introduzca un nombre para este chat", "monthlySubscription": "Mensualmente", "yearlySubscription": "Anualmente", "defaultSubscription": "Suscripción al chat de Pangea", "freeTrial": "Prueba gratuita", - "lockedChatWarning": "🔒 Este chat ha sido bloqueado", - "lockChat": "Chat de bloqueo", - "grammarAnalytics": "Análisis de errores", - "someErrorTitle": "Hm, algo no está bien", - "someErrorBody": "Podría ser un error o algo en tu lenguaje base.", "bestCorrectionFeedback": "¡Correcto!", "distractorFeedback": "Eso no es del todo correcto.", "bestAnswerFeedback": "¡Correcto!", "definitionDefaultPrompt": "¿Qué significa esta palabra?", "practiceDefaultPrompt": "¿Cuál es la mejor respuesta?", "correctionDefaultPrompt": "¿Cuál es el mejor reemplazo?", - "itStartDefaultPrompt": "¿Quiere ayuda para traducir?", "suggestTo": "Sugerir a {spaceName}", "suggestChatDesc": "Los chats sugeridos aparecerán en la lista de chats de {spaceName}.", "acceptSelection": "Aceptar corrección", - "acceptSelectionAnyway": "Use esto de todos modos", - "makingActivity": "Actividad de fabricación", "why": "¿Por qué?", "definition": "Definición", "exampleSentence": "Ejemplo de frase", @@ -4522,7 +4216,6 @@ } }, "noTeachersFound": "No se han encontrado profesores a los que informar", - "viewArchive": "Ver archivo", "trialExpiration": "Su prueba gratuita caduca el {expiration}.", "@trialExpiration": { "placeholders": { @@ -4534,49 +4227,20 @@ "freeTrialDesc": "Los nuevos usuarios reciben una semana de prueba gratuita de Pangea Chat", "successfullySubscribed": "Se ha suscrito correctamente.", "clickToManageSubscription": "Haga clic aquí para gestionar su suscripción.", - "addConversationBot": "Añadir bot de conversación", - "addConversationBotDesc": "Añadir un bot de conversación para enviar mensajes automáticos a este chat", "convoBotSettingsTitle": "Configuración del bot de conversación", - "convoBotSettingsDescription": "Editar tema de conversación y dificultad", - "enterAConversationTopic": "Introducir un tema de conversación", - "conversationTopic": "Tema de conversación", - "enableModeration": "Activar la moderación", - "enableModerationDesc": "Activar la moderación automática para revisar los mensajes antes de enviarlos", - "conversationLanguageLevel": "¿Cuál es el nivel lingüístico de esta conversación?", - "errorGettingAudio": "Error al recibir audio. Por favor, actualice e inténtelo de nuevo.", "define": "Defina", "listen": "Listas", - "showDefinition": "Mostrar definición", - "subscriptionPopupTitle": "Esta frase podría tener un error gramatical...", - "subscriptionPopupDesc": "Suscríbase hoy mismo para desbloquear la traducción y la corrección gramatical.", - "seeOptions": "Ver opciones", - "continuedWithoutSubscription": "Continuar sin suscribirse", "trialPeriodExpired": "Su periodo de prueba ha expirado", "translations": "traducciónes", "messageAudio": "mensaje de audio", "definitions": "definiciones", "clickMessageTitle": "¿Necesitas ayuda?", "translationTooltip": "Traducir", - "audioTooltip": "Reproducir audio", "speechToTextTooltip": "Transcripción", "yourBirthdayPleaseShort": "Seleccione su grupo de edad", - "certifyAge": "Certifico que soy mayor de {age} años", - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, - "selectToDefine": "Clic una palabra para definirla", "kickBotWarning": "Patear Pangea Bot eliminará el bot de conversación de este chat.", "activateTrial": "Activar prueba gratuita", "refresh": "Actualizar", - "joinToView": "Únete a esta sala para ver los detalles", - "autoPlayTitle": "Reproducción automática de mensajes", - "autoPlayDesc": "Cuando está activado, el audio de texto a voz de los mensajes se reproducirá automáticamente cuando se seleccione.", - "noActivitiesFound": "¡Ya has practicado por ahora! Vuelve más tarde para ver más.", "messageAnalytics": "Análisis de mensajes", "words": "Palabras", "score": "Puntuación", @@ -4585,33 +4249,10 @@ "noPaymentInfo": "No se necesitan datos de pago.", "updatePhoneOS": "Puede que necesites actualizar la versión del sistema operativo de tu dispositivo.", "wordsPerMinute": "Palabras por minuto", - "conversationBotModeSelectDescription": "Modo bot", - "conversationBotModeSelectOption_discussion": "Debate", - "conversationBotModeSelectOption_custom": "A medida", - "conversationBotModeSelectOption_conversation": "Conversación", - "conversationBotModeSelectOption_textAdventure": "Aventura textual", - "conversationBotDiscussionZone_title": "Configuración del debate", - "conversationBotDiscussionZone_discussionTopicLabel": "Tema de debate", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Establecer tema de debate", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Palabras clave del debate", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Establecer palabras clave de debate", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista de palabras clave separadas por comas para orientar el debate", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar mensajes de debate según un calendario", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre temas de debate", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responde a la reacción de ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reacción al envío del aviso de debate", - "studentAnalyticsNotAvailable": "Datos de los estudiantes no disponibles actualmente", - "roomDataMissing": "Es posible que falten algunos datos de las salas de las que no es miembro.", - "suggestToChat": "Sugerir este chat", - "suggestToChatDesc": "Los chats sugeridos aparecerán en las listas de chats", "roomFull": "Esta sala ya está al límite de su capacidad.", - "topicNotSet": "El tema no se ha fijado.", "enterNumber": "Introduzca un valor numérico entero.", "autoIGCToolName": "Ejecutar automáticamente la asistencia lingüística", "autoIGCToolDescription": "Ejecutar automáticamente la asistencia lingüística después de escribir mensajes", - "runGrammarCorrection": "Comprobar mensaje", - "grammarCorrectionFailed": "Cuestiones a tratar", - "grammarCorrectionComplete": "¡Se ve bien!", "buildTranslation": "Construye tu traducción a partir de las opciones anteriores", "languageSettings": "Ajustes de idioma", "selectSpaceDominantLanguage": "¿Cuál es la lengua más común de los miembros del espacio?", @@ -4619,8 +4260,6 @@ "whatIsYourSpaceLanguageLevel": "¿Cuál es el nivel lingüístico medio del espacio?", "welcomeToPangea18Plus": "Bienvenido al chat de Pangea 🙂 .\n¿Qué es lo siguiente?\n¡Crea o únete a un espacio!\n¡O busca un compañero de conversación!", "welcomeToPangeaMinor": "Bienvenido al chat de Pangea 🙂 .\n¿Qué es lo siguiente?\n¡Únete a un espacio!\nPide a tu profesor un código de invitación.", - "nonexistentSelection": "La selección ya no existe.", - "changeAnalyticsLanguage": "Cambiar el lenguaje analítico", "versionNotFound": "Versión no encontrada", "fetchingVersion": "Obteniendo versión...", "versionFetchError": "Error al obtener la versión", @@ -4644,37 +4283,9 @@ "enterASpacepName": "Ingresa un nombre", "clickMessageBody": "Haz clic en un mensaje para herramientas de idioma como traducción, reproducción y más!", "subscribedToUnlockTools": "¡Suscríbete para desbloquear la traducción interactiva y la verificación gramatical, la reproducción de audio, las actividades de práctica personalizadas y la analítica de aprendizaje!", - "conversationBotModeSelectOption_storyGame": "Juego de Historia", - "conversationBotCustomZone_title": "Configuraciones Personalizadas", - "conversationBotCustomZone_customSystemPromptLabel": "Mensaje del sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Establecer mensaje del sistema personalizado", - "conversationBotCustomZone_customSystemPromptEmptyError": "Falta mensaje del sistema personalizado", - "addConversationBotDialogTitleInvite": "Confirmar la invitación del bot de conversación", - "addConversationBotButtonInvite": "Invitar", - "addConversationBotDialogInviteConfirmation": "Invitar", - "addConversationBotButtonTitleRemove": "Confirmar la eliminación del bot de conversación", - "addConversationBotButtonRemove": "Eliminar", - "addConversationBotDialogRemoveConfirmation": "Eliminar", - "conversationBotConfigConfirmChange": "Confirmar", - "conversationBotStatus": "Estado del Bot", - "conversationBotTextAdventureZone_title": "Aventura de Texto", - "conversationBotTextAdventureZone_instructionLabel": "Instrucciones del Maestro del Juego", - "conversationBotTextAdventureZone_instructionPlaceholder": "Establecer instrucciones del maestro del juego", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Faltan instrucciones del maestro del juego", "practice": "Práctica", "noLanguagesSet": "No hay idiomas configurados", - "hintTitle": "Sugerencia:", "speechToTextBody": "Para los mensajes de voz, puedes ver una transcripción y la puntuación de palabras por minuto del orador.", - "languageButtonLabel": "Idioma: {currentLanguage}", - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "changeAnalyticsView": "Cambiar Vista de Análisis", "l1TranslationBody": "Los mensajes en tu idioma base no serán traducidos.", "deleteSubscriptionWarningTitle": "YTienes una suscripción activa", "deleteSubscriptionWarningBody": "Eliminar tu cuenta no cancelará automáticamente tu suscripción.", @@ -4682,9 +4293,7 @@ "error520Title": "Por favor, intenta de nuevo.", "error520Desc": "Lo sentimos, no pudimos entender tu mensaje...", "wordsUsed": "Palabras Usadas", - "errorTypes": "Tipos de Error", "level": "Nivel", - "canceledSend": "Envío cancelado", "morphsUsed": "Morphs Usados", "translationChoicesBody": "Haz clic y mantén presionada una opción para una pista.", "grammar": "Gramática", @@ -4824,16 +4433,6 @@ "grammarCopyDefinite": "Definitividad", "grammarCopyNumForm": "Forma numérica", "grammarCopyUnknown": "Desconocido", - "enterPrompt": "Introduzca un mensaje del sistema", - "selectBotLanguage": "Selecciona el idioma del bot", - "chooseVoice": "Elige una voz", - "enterLanguageLevel": "Introduzca un nivel de idioma", - "enterDiscussionTopic": "Introduzca un tema de debate", - "selectBotChatMode": "Selecciona el modo de chat", - "messageNotInTargetLang": "El mensaje no está en la lengua de llegada", - "chatCapacityNotSet": "Este chat no tiene límite de capacidad.", - "chatExceedsCapacity": "Este chat supera su capacidad.", - "botConfig": "Configuración de bots y actividades", "grammarCopyPOSsconj": "Conjunción subordinante", "grammarCopyPOSnum": "Número", "grammarCopyPOSverb": "Verbo", @@ -5055,7 +4654,6 @@ "grammarCopySPC": "Especificidad", "grammarCopyPARTTYPE": "Tipo Partitivo", "grammarCopyINTREL": "Interrogativo-Relativo", - "grammarCopyNUMFORMpsor": "Número del poseedor", "grammarCopyUNKNOWN": "Desconocido", "grammarCopyNUMBERPSOR": "Número del poseedor", "grammarCopyPOSS": "Posesivo", @@ -5101,9 +4699,6 @@ "grammarCopyVOICEinv": "Inversa", "grammarCopyVOICErcp": "Reciprocal", "other": "Otros", - "botModeValidation": "Seleccione un modo de chat", - "botSettingsSubtitle": "Invitar a un bot a moderar la actividad del chat", - "invitePeople": "Invitar a usuarios", "noCapacityLimit": "Sin límite de capacidad", "downloadGroupText": "Descargar texto del grupo", "enableAutocorrectWarning": "¡Atención! Es necesario añadir el teclado del idioma de destino", @@ -5119,9 +4714,6 @@ } } }, - "botConfigNoPermissionTitle": "Sin permiso", - "botConfigNoPermissionMessage": "Contacta al administrador de la sala para cambiar la configuración del bot", - "changeContent": "¡Oh no! La IA puede facilitar experiencias de aprendizaje personalizadas pero... también alucina. ¿Qué debería ser?", "grammarCopyVERBFORMaux": "Auxiliar", "levelShort": "NIV {level}", "@levelShort": { @@ -5134,10 +4726,6 @@ }, "notificationsOn": "Notificaciones activadas", "notificationsOff": "Notificaciones desactivadas", - "chatCanBeFoundViaSearch": "El chat se puede encontrar a través de la búsqueda", - "requireCodeToJoin": "Requiere código para unirse", - "canFindInSearch": "Se puede encontrar en la búsqueda", - "addChatToSpace": "Agregar chat", "createChatAndInviteUsers": "Crear chat e invitar usuarios", "joinWithCode": "Unirse con código", "enterCodeToJoin": "Ingrese el código para unirse", @@ -5179,38 +4767,19 @@ } } }, - "signInWithUsername": "Iniciar sesión con nombre de usuario y contraseña", - "registrationEmailMessage": "Por favor verifica tu correo electrónico con un enlace enviado allí. En algunos casos, el correo puede tardar hasta 5 minutos en llegar. También verifica tu carpeta de spam.", "enableTTSToolName": "Texto a voz habilitado", "enableTTSToolDescription": "Permitir que la aplicación genere salida de texto a voz para partes del texto en tu idioma objetivo.", - "couldNotFindTTS": "No pudimos encontrar un motor de texto a voz para tu idioma objetivo actual.", - "ttsInstructionsHyperlink": "Haz clic aquí para ver las instrucciones para descargar una nueva voz en tu dispositivo.", - "createAnAccount": "Crear una cuenta", - "signIn": "Iniciar sesión", - "signUpWithEmail": "Regístrate con Email", - "signUpWithGoogle": "Regístrate con Google", - "signUpWithApple": "Regístrate con Apple", "yourUsername": "Tu nombre de usuario", "yourEmail": "Tu correo electrónico", - "pleaseEnterAnEmail": "Por favor, introduce una dirección de correo electrónico", - "signInWithGoogle": "Iniciar sesión con Google", - "signInWithApple": "Iniciar sesión con Apple", - "chooseYourAvatar": "Elige tu avatar", "iWantToLearn": "Quiero aprender", - "pleaseAgreeToTOS": "Por favor, acepta los Términos y Condiciones", "pleaseEnterEmail": "Por favor, introduce una dirección de correo electrónico válida.", - "pleaseSelectALanguage": "Por favor, selecciona un idioma", "myBaseLanguage": "Mi idioma base", - "clickWordsInstructions": "Haz clic en una palabra o en los botones de abajo para aprender más", - "chooseBestDefinition": "¿Qué significa esta palabra?", "meaningSectionHeader": "Significado:", "formSectionHeader": "Formas utilizadas en los chats:", - "noEmojiSelectedTooltip": "No se ha seleccionado ningún emoji", "writingExercisesTooltip": "Actividades de escritura", "listeningExercisesTooltip": "Actividades de escucha", "readingExercisesTooltip": "Actividades de lectura", "meaningNotFound": "No se pudo encontrar el significado.", - "formsNotFound": "No se pudieron encontrar las formas.", "chooseBaseForm": "Elige la forma base", "notTheCodeError": "¡Lo siento, ese no es el código!", "totalXP": "XP total", @@ -5284,32 +4853,12 @@ } }, "doubleClickToEdit": "Haz doble clic para editar.", - "removeFeature": "Eliminar {feature}", - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "chooseCorrectLabel": "Elige la etiqueta correcta.", - "levelPopupTitle": "¡Felicidades por alcanzar\nel Nivel {level}!", - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "activityPlannerTitle": "Planificador de Actividades", "topicLabel": "Tema", "topicPlaceholder": "Elige un tema...", "modePlaceholder": "Elige un modo...", "learningObjectiveLabel": "Objetivo de Aprendizaje", "learningObjectivePlaceholder": "Elige un objetivo de aprendizaje...", - "mediaLabel": "Medios que los aprendices deben compartir", "languageOfInstructionsLabel": "Idioma de las instrucciones de la actividad", "targetLanguageLabel": "Idioma objetivo", "cefrLevelLabel": "Nivel CEFR", @@ -5323,18 +4872,7 @@ "instructions": "Instrucciones", "numberOfLearners": "Número de aprendices", "mustBeInteger": "Debe ser un número entero, por ejemplo, 1, 2, 3, ...", - "noLemmasFound": "No hay vocabulario con más de {xp} XP. ¡Sigue practicando!", - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "constructUsePvmDesc": "Producido en mensaje de voz", - "lockedMorphFeature": "Esperando ser desbloqueado", - "whatIsLemma": "¿Qué es el lema?", "constructUseCorMmDesc": "Significado correcto del mensaje", "constructUseIncMmDesc": "Significado incorrecto del mensaje", "constructUseIgnMmDesc": "Significado del mensaje ignorado", @@ -5349,9 +4887,7 @@ } } }, - "slightlyOffensive": "Ligeramente ofensivo", "clickOnEmailLink": "Por favor, haz clic en el enlace del correo electrónico y luego procede. En raras ocasiones, el correo electrónico puede ser enviado a spam o tardar hasta 5 minutos en llegar.", - "whoIsAllowedToJoinThisChat": "Quién está permitido unirse a este chat", "dontForgetPassword": "¡No olvides tu contraseña!", "enableAutocorrectToolName": "Habilitar autocorrección del dispositivo", "enableAutocorrectDescription": "Si tu dispositivo soporta el idioma que estás aprendiendo, puedes habilitar la autocorrección del dispositivo para corregir errores comunes mientras escribes.", @@ -5397,46 +4933,24 @@ "chooseLemmaMeaningInstructionsBody": "¡Empareja significados con las palabras en el mensaje!", "pleaseUpdateApp": "Por favor, actualiza la aplicación para continuar.", "chooseEmojiInstructionsBody": "Empareja emojis con las palabras que mejor representan. ¡No te preocupes! No se restan puntos por no estar de acuerdo. 😅", - "pickAnEmojiFor": "Elige un emoji para ${lemma}", "analyticsVocabListBody": "¡Este es todo tu vocabulario! A medida que ganes XP por cada palabra, pasarán de plántula a plena floración. Haz clic en cualquier palabra para ver más detalles.", "morphAnalyticsListBody": "¡Estos son todos los conceptos gramaticales en el idioma que estás aprendiendo! Los desbloquearás a medida que los encuentres mientras chateas. Haz clic para más detalles.", - "joinByCode": "Unirse por código", "chooseWordAudioInstructionsBody": "Escucha el mensaje completo. Luego empareja los audios con las palabras.", "chooseMorphsInstructionsBody": "¡Haz clic en las piezas del rompecabezas para preguntas gramaticales!", - "inviteAndLaunch": "Lanzar e invitar", - "createOwnChat": "Crea tu propio chat", "pleaseEnterInt": "Por favor, introduce un número", "home": "Inicio", "join": "Unirse", "readingAssistanceOverviewBody": "Haz clic en los botones de abajo para mini-juegos sobre emparejar emojis, audios, significados de palabras y conceptos gramaticales. O haz clic en cualquier palabra para más detalles.", - "learnByTexting": "Aprende enviando mensajes", - "levelSummaryTrigger": "Ver resumen", "levelSummaryPopupTitle": "Resumen del nivel {level}", - "referFriends": "Recomendar amigos", - "referFriendDialogTitle": "Invita a un amigo a tu conversación", - "referFriendDialogDesc": "¿Tienes un amigo que está emocionado por aprender un nuevo idioma contigo? Entonces copia y envía este enlace de invitación para unirse y comenzar a chatear contigo hoy.", - "youUnlocked": "Has desbloqueado", "resetInstructionTooltipsTitle": "Restablecer las descripciones emergentes de instrucciones", "resetInstructionTooltipsDesc": "Haz clic para mostrar las descripciones emergentes de instrucciones como si fueras un usuario nuevo.", "selectForGrammar": "Selecciona un ícono de gramática para actividades y detalles.", - "newChatActivityTitle": "¿Agregar una actividad divertida?", - "newChatActivityDesc": "¡Haz que cada chat grupal sea una aventura con el Planificador de Actividades! Establece temas y objetivos cautivadores para el grupo, y da vida a las conversaciones con imágenes impresionantes. ¡Inicia discusiones imaginativas y mantén la diversión fluyendo sin esfuerzo!", - "exploreMore": "Explorar más", "randomize": "Aleatorizar", "clear": "Limpiar", "featuredActivities": "Destacadas", - "goToChat": "Ir al chat", "save": "Guardar", - "selectActivity": "Seleccionar actividad", - "wordFocusListeningMultipleChoice": "¿Qué audio coincide con la palabra?", "startChat": "Iniciar un chat", "translationProblem": "Problema de traducción", - "perfectTranslation": "¡Traducción perfecta!", - "greatJobTranslation": "¡Gran trabajo con esta traducción!", - "goodJobTranslation": "Buen trabajo en esta traducción.", - "makingProgress": "¡Estás progresando!", - "keepPracticing": "¡Sigue practicando!", - "niceJob": "¡Buen trabajo!", "askToJoin": "Pedir unirse", "emptyChatWarningTitle": "El chat está vacío", "emptyChatWarningDesc": "No has invitado a nadie a tu chat. Ve a la configuración del chat para invitar a tus contactos o al Bot. También puedes hacer esto más tarde.", @@ -5454,8 +4968,6 @@ "languageLevelC2Desc": "Puedo entender prácticamente todo lo que escucho o leo y expresarme con fluidez y precisión.", "newVocab": "Nuevo vocabulario", "newGrammar": "Nuevos conceptos gramaticales", - "congratulationsOnReaching": "¡Has alcanzado el Nivel {level}!", - "seeDetails": "Ver Detalles", "choosePracticeMode": "Haz clic en uno de los botones de arriba para comenzar una actividad de práctica", "ban": "Prohibir", "unban": "Desbloquear", @@ -5469,17 +4981,12 @@ "timesUsedWithAssistance": "Veces utilizado con asistencia", "shareInviteCode": "Compartir código de invitación: {code}", "leaderboard": "Tabla de clasificación", - "welcomeUser": "Bienvenido {user}", "skipForNow": "Saltar por ahora", "permissions": "Permisos", "addEnvironmentOverride": "Agregar anulación de entorno", "defaultOption": "Predeterminado", - "chatWithActivities": "Charlar con actividades", "launch": "Lanzar", - "launchActivityToChats": "Lanzar actividad a los chats", "searchChats": "Buscar chats", - "selectChats": "Seleccionar chats", - "selectChatToStart": "¡Completado! Selecciona un chat para comenzar", "pinMessages": "Fijar mensajes", "setJoinRules": "Establecer reglas de unión", "changeGeneralSettings": "Cambiar configuraciones generales", @@ -5512,14 +5019,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -5528,10 +5027,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -5540,14 +5035,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -5564,14 +5051,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -5580,22 +5059,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -5608,18 +5071,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -5636,22 +5087,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@createActivity": { "type": "String", "placeholders": {} @@ -5664,30 +5103,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -5756,18 +5171,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -5824,14 +5227,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -5848,10 +5243,6 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@findYourPeople": { "type": "String", "placeholders": {} @@ -5860,22 +5251,10 @@ "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@pinMessages": { "type": "String", "placeholders": {} @@ -5921,9 +5300,7 @@ "activities": "Actividades", "access": "Acceso", "addSubspace": "Agregar subespacio", - "botSettings": "Configuración del bot", "activitySuggestionTimeoutMessage": "Estamos trabajando arduamente para generar actividades para ti, por favor vuelve en un minuto", - "accessSettingsWarning": "¡Ups! Parece que no tienes permiso para configurar las reglas de acceso de esta sala. Debes revisarlas para asegurarte de que sean lo que necesitas y hablar con un administrador de la sala si necesitas cambiarlas", "howSpaceCanBeFound": "Cómo se puede encontrar este espacio", "private": "Privado", "cannotBeFoundInSearch": "No se puede encontrar en la búsqueda", @@ -5937,15 +5314,6 @@ "createYourSpace": "Crea tu espacio", "youHaveLeveledUp": "¡Has subido de nivel!", "sendActivities": "Enviar actividades", - "getStartedBotChatDesc": "¡Chatear con IA es un excelente lugar para comenzar y las herramientas de lectura, escritura, escucha y habla de Pangea facilitan todo!", - "getStartedCommunitiesDesc": "¡Aprender con una comunidad es donde brilla Pangea Chat!\nPuedes unirte a tu clase, encontrar una escuela o incluso crear la tuya propia.", - "getStartedFriendsDesc": "¿Tienes un amigo que quiere aprender contigo?", - "getStartedBotChatComplete": "¡Bien hecho! Estás chateando con el bot!", - "getStartedCommunitiesComplete": "¡Genial, te has unido a un espacio!", - "getStartedComplete": "¡Has completado esta sección!\nSigue explorando nuestras increíbles funciones chateando con amigos.", - "getStartedFriendsComplete": "¡Woohoo! ¡Tienes amigos! 😉", - "getStartedBotChatButton": "¡Comienza a chatear!", - "getStartedFriendsButton": "Chatear con un amigo", "groupChat": "Chat grupal", "directMessage": "Mensaje directo", "newDirectMessage": "Nuevo mensaje directo", @@ -5961,7 +5329,6 @@ "mySavedActivities": "Mis actividades guardadas", "noSavedActivities": "No hay actividades guardadas", "saveActivity": "Guardar esta actividad", - "yourSavedActivities": "Actividades guardadas", "failedToPlayVideo": "Error al reproducir el video", "done": "Hecho", "inThisSpace": "En este espacio", @@ -6043,18 +5410,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -6107,42 +5466,6 @@ "type": "String", "placeholders": {} }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -6207,10 +5530,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -6331,7 +5650,6 @@ "noSpaceDescriptionYet": "Aún no se ha creado una descripción del curso.", "knockSpaceSuccess": "¡Has solicitado unirte a este curso! Un administrador responderá a tu solicitud cuando la reciba 😀", "enterSpaceCode": "Ingresa el código del curso", - "joinSpaceOnboardingDesc": "¿Tienes un código o enlace de invitación a un curso público?", "spaceChildPermission": "Quién puede agregar nuevos chats a este curso", "configureSpace": "Configurar curso", "changeTheNameOfTheSpace": "Cambiar el nombre del curso", @@ -6348,37 +5666,27 @@ "maximumActivityParticipants": "Cada actividad puede tener un máximo de {count} participante(s).", "pending": "Pendiente", "inactive": "Inactivo", - "unjoinedActivityMessage": "¿Quieres participar? ¡Elige un rol abierto!\n¡O simplemente pasa el rato y mira el espectáculo!", - "fullActivityMessage": "¡Siéntete libre de ver el espectáculo! Aunque no hay roles abiertos para participar, puedes ver el chat.", "confirmRole": "Confirmar rol", "openRoleLabel": "ABIERTO", "joinedTheActivity": "👋 {username} se unió como {role}", "finishedTheActivity": "🎯 {username} finalizó esta actividad", - "endActivityTitle": "He terminado", - "endActivityDesc": "¿Completaste los objetivos?\nEsta es tu confirmación de que te estás retirando de los mensajes. ¡Pero no te preocupes, la diversión continúa en el chat! Siéntete libre de pasar el rato y disfrutar del espectáculo hasta que todos hagan clic en 'He terminado'.", "archiveToAnalytics": "Agregar a mis actividades completadas", "activitySummaryError": "Resúmenes de actividades no disponibles", "requestSummaries": "Solicitar resúmenes", - "loadingActivitySummary": "Resumen de actividad en carga...", "generatingNewActivities": "¡Eres el primer usuario de este par de idiomas! Por favor, danos un minuto, estamos preparando actividades solo para ti.", - "requestAccessTitle": "¿Solicitar acceso a vista de análisis?", + "requestAccessTitle": "¿Solicitar acceso a la analítica?", "requestAccessDesc": "¿Te gustaría solicitar acceso para ver análisis de participantes?\n\nSi los participantes están de acuerdo, los administradores de este curso podrán ver:\n • vocabulario total\n • conceptos gramaticales totales\n • sesiones de actividad completadas\n • los conceptos gramaticales específicos utilizados, correctamente e incorrectamente\n\nNo podrán ver:\n • mensajes en chats fuera del curso\n • lista de vocabulario", "requestAccess": "Solicitar acceso ({count})", "analyticsInactiveTitle": "Las solicitudes a usuarios inactivos no pudieron ser enviadas", "analyticsInactiveDesc": "Los usuarios inactivos que no han iniciado sesión desde que se introdujo esta función no verán tu solicitud.\n\nEl botón de Solicitar aparecerá una vez que regresen. Puedes reenviar la solicitud más tarde haciendo clic en el botón Solicitar bajo su nombre cuando esté disponible.", "accessRequestedTitle": "Solicitud de acceso a análisis", - "accessRequestedDesc": "Los administradores de “{space}” están solicitando ver tus análisis de aprendizaje.\n\nSi estás de acuerdo, los administradores de este curso podrán ver:\n • vocabulario total\n • conceptos gramaticales totales\n • sesiones de actividad completadas\n • los conceptos gramaticales específicos utilizados, correctamente e incorrectamente\n\nNo podrán ver:\n • mensajes en chats fuera del curso\n • lista de vocabulario", - "allowAccess": "Permitir acceso", - "denyAccess": "Denegar acceso", + "accessRequestedDesc": "Solicitando admin(s): {admin} \n\nLos administradores de “{space}” están solicitando ver tu analítica de aprendizaje.\n\nSi estás de acuerdo, podrán ver tu:\n • vocabulario total\n • conceptos gramaticales totales\n • total de sesiones de actividad completadas\n • los conceptos gramaticales específicos utilizados, correctamente e incorrectamente\n\nNo podrán ver tu:\n • mensajes en chats fuera del curso\n • lista de vocabulario", "adminRequestedAccess": "Los administradores solicitaron ver tus análisis.", "lastUpdated": "Actualizado\n{time}", "activityFinishedMessage": "¡Todo terminado!", "endForAll": "Finalizar para todos", "newCourse": "Nuevo curso", - "newCourseSubtitle": "¿Qué plan de curso te gustaría usar?", - "failedToLoadCourses": "Error al cargar cursos", "numModules": "{num} módulos", - "numActivityPlans": "{num} planes de actividad", "coursePlan": "Plan de curso", "editCourseLater": "Puedes editar el título, las descripciones y la imagen del curso más tarde.", "newCourseAccess": "Por defecto, los cursos son privados y requieren aprobación del administrador para unirse. Puedes editar estos ajustes en cualquier momento.", @@ -6392,17 +5700,11 @@ "accessDesc": "¡Puedes hacer que tu curso sea abierto al mundo! O, hacer que tu curso sea privado y seguro.", "createGroupChatDesc": "Mientras que las sesiones de actividad comienzan y terminan, los chats grupales permanecerán abiertos para la comunicación rutinaria.", "deleteDesc": "Solo los administradores pueden eliminar un curso. Esta es una acción destructiva que elimina a todos los usuarios y elimina todos los chats seleccionados dentro del curso. Procede con precaución.", - "failedToLoadCourseInfo": "Error al cargar la información del curso", "noCourseFound": "¡Oh, este curso necesita un plan!\n\nLos planes de curso son una secuencia de temas y actividades de conversación.", "additionalParticipants": "+ {num} otros", - "activityNotFoundForCourse": "No se encontró esta actividad dentro del curso", - "courseChats": "Chats del curso", - "myActivitySessions": "Mis sesiones de actividad", "directMessages": "Mensajes directos", "whatNow": "¿Y ahora?", "chooseNextActivity": "¡Elige tu próxima actividad!", - "seeInstructions": "Ver instrucciones", - "hideInstructions": "Ocultar instrucciones", "letsGo": "¡Vamos!", "chooseRole": "¡Elige un rol!", "chooseRoleToParticipate": "¡Elige un rol para participar!", @@ -6412,23 +5714,15 @@ "inviteFriends": "Invitar amigos", "waitNotDone": "¡Espera, no he terminado!", "waitingForOthersToFinish": "Esperando a que los demás terminen...", - "saveToCompletedActivities": "Guardar en actividades completadas", "generatingSummary": "Analizando el chat y generando resultados", - "instructionsLanguage": "Idioma de las instrucciones", "findCourse": "Buscar un curso", - "activityCompletedDesc": "Tu actividad completada se agregó a los análisis donde puedes revisar y practicar el idioma que usaste.", "pingParticipantsNotification": "{user} busca usuarios para unirse a la sesión de actividad en {room}", "course": "Curso", "courses": "Cursos", "courseName": "Nombre del curso", "createNewCourse": "Nuevo curso", - "publicCourses": "Cursos públicos", "goToCourse": "Ir al curso: {course}", "activityComplete": "Esta actividad ha sido completada. El resumen de la actividad debería estar disponible abajo.", - "haventChattedMuch": "Parece que no has chateado mucho, ¡intenta usar algunas palabras de vocabulario más! Si sientes que has cumplido tu objetivo, puedes terminar la actividad abajo.", - "haveChatted": "¡Parece que has estado chateando por un tiempo! Si sientes que has cumplido tu objetivo, termina para finalizar la actividad y te generaremos un resumen en el chat.", - "userDoneAndWaiting": "{num1}/{num2} participantes han terminado. Espera a que todos terminen, y te generaremos un resumen en el chat! \n\nSi quieres volver a unirte a la conversación, haz clic en el botón de continuar en el chat.", - "othersDoneAndWaiting": "{num1}/{num2} han terminado. ¿Has cumplido tu objetivo?", "startNewSession": "Iniciar nueva sesión", "joinOpenSession": "Unirse a sesión abierta", "less": "menos", @@ -6438,7 +5732,6 @@ "openToJoin": "Abierto para unirse", "results": "Resultados", "activityDone": "¡Actividad terminada!", - "moreLabel": "más", "promoCodeInfo": "Los códigos promocionales se pueden ingresar en la siguiente página", "editsComingSoon": "La capacidad de editar ciudades y actividades llegará pronto.", "editing": "Editando", @@ -6454,13 +5747,10 @@ "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", - "chooseLanguage": "Elige un idioma.", + "chooseLanguage": "Elige un idioma de destino.", "planTrip": "Planifica tu viaje", "howAreYouTraveling": "¿Cómo viajas?", "unlockPrivateTrip": "Desbloquear un viaje privado", @@ -6473,25 +5763,20 @@ "courseCode": "¿Cuál es la contraseña secreta?", "courseCodeHint": "Código o enlace del viaje", "unlockMyTrip": "Desbloquear mi viaje", - "anyLevel": "Cualquier nivel", "signupOption": "¿Cómo quieres registrarte?", "withApple": "Con Apple", "withGoogle": "Con Google", "withEmail": "Con correo electrónico", "createAccount": "Crear cuenta", - "noCoursesFound": "No se encontraron cursos", "loginWithEmail": "Iniciar sesión con correo electrónico", "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", - "allCefrLevels": "Todos los niveles CEFR", "chatListTooltip": "¡Aquí encontrarás tus mensajes directos! Haz clic en el avatar de cualquier usuario y \"iniciar conversación\" para enviar un mensaje directo.", "directMessageBotTitle": "Mensaje directo Pangea Bot", "feedbackTitle": "Retroalimentación de la actividad", - "feedbackDesc": "¿Cómo se puede mejorar la actividad? ¡Si puedes proporcionar algunos detalles, haremos el cambio!", "feedbackHint": "Tus comentarios", "feedbackButton": "Enviar comentarios", "directMessageBotDesc": "Hablar con humanos es más divertido pero... ¡la IA siempre está lista!", @@ -6553,10 +5838,6 @@ "type": "String", "placeholders": {} }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@spaceChildPermission": { "type": "String", "placeholders": {} @@ -6632,14 +5913,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -6667,14 +5940,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -6687,10 +5952,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -6726,19 +5987,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -6763,14 +6019,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -6779,14 +6027,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -6839,10 +6079,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -6855,18 +6091,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -6879,14 +6103,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -6927,26 +6143,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -6974,10 +6178,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -6988,36 +6188,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -7054,10 +6224,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -7122,18 +6288,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -7198,10 +6352,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -7222,10 +6372,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -7242,10 +6388,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -7254,10 +6396,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -7270,10 +6408,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -7298,16 +6432,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invitar a amigos a la actividad", - "inviteFriendsToActivityCourse": "Invitar a amigos a la actividad y al curso", "feedbackRespDesc": "Vuelve mañana para ver las actualizaciones de la actividad.", "activityDropdownDesc": "Cuando termines con esta actividad, haz clic abajo", - "activityAnalyticsListBody": "¡Estas son tus actividades completadas! Después de terminar las actividades, puedes verlas aquí.", "languageMismatchTitle": "Incompatibilidad de idioma", "languageMismatchDesc": "El idioma de destino no coincide con el idioma de esta actividad. ¿Quieres actualizar tu idioma de destino?", "reportWordIssueTooltip": "Reportar problema con la información de la palabra", "tokenInfoFeedbackDialogTitle": "Retroalimentación sobre la información de la palabra", - "tokenInfoFeedbackDialogDesc": "La IA comete errores. Por favor, describe cualquier problema que hayas encontrado con la información anterior.", "noPublicCoursesFound": "No se encontraron cursos públicos. ¿Te gustaría crear uno?", "noCourseTemplatesFound": "No pudimos encontrar cursos para tu idioma de destino. Mientras tanto, puedes chatear con Pangea Bot y volver más tarde para más cursos.", "botActivityJoinFailMessage": "Pangea Bot está tardando en responder. Por favor, intenta nuevamente más tarde, o invita a un amigo.", @@ -7315,14 +6445,6 @@ "leaveDesc": "Salir de este espacio y de todos los chats dentro de él", "selectAll": "Seleccionar todo", "deselectAll": "Deseleccionar todo", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -7331,10 +6453,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -7351,10 +6469,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -7389,10 +6503,8 @@ "newMessageInPangeaChat": "🗨️ Nuevo mensaje en Pangea Chat", "shareCourse": "Compartir curso", "addCourse": "Agregar un curso", - "joinCourseWithCode": "Unirse al curso con código", "joinPublicCourse": "Unirse a curso público", "vocabLevelsDesc": "¡Aquí es donde irán las palabras de vocabulario una vez que las hayas subido de nivel!", - "highlightVocabTooltip": "Resalta las palabras de vocabulario objetivo a continuación enviándolas o practicando con ellas en el chat", "@clickBestOption": { "type": "String", "placeholders": {} @@ -7417,10 +6529,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -7429,7 +6537,1220 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "@languageLevelPreA1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelA1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelA2": { + "type": "String", + "placeholders": {} + }, + "@languageLevelB1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelB2": { + "type": "String", + "placeholders": {} + }, + "@languageLevelC1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelC2": { + "type": "String", + "placeholders": {} + }, + "emptyChatSearch": "No se encontraron DMs ni chats. Asegúrate de que tu búsqueda esté escrita correctamente.", + "activityAnalyticsTooltipBody": "Estas son tus actividades guardadas para revisión y práctica.", + "numSavedActivities": "Número de actividades guardadas", + "saveActivityTitle": "Guardar actividad", + "saveActivityDesc": "¡Buen trabajo! Guarda esta actividad para revisión y práctica más adelante", + "levelInfoTooltip": "Aquí puedes ver todos los puntos que has ganado y cómo.", + "alreadyInCourseWithID": "Ya estás en un curso con este plan. ¿Quieres crear un curso con el mismo plan o ir al curso existente?", + "goToExistingCourse": "Ir al curso existente", + "emojiView": "Vista de emoji", + "feedbackDialogDesc": "¡Yo también cometo errores! ¿Algo que me ayude a mejorar?", + "contactHasBeenInvitedToTheCourse": "El contacto ha sido invitado al curso", + "activityStatsButtonTooltip": "Información de actividad", + "allow": "Permitir", + "enabledRenewal": "Habilitar renovación de suscripción", + "subscriptionEndsOn": "La suscripción termina el", + "subscriptionRenewsOn": "La suscripción se renueva el", + "waitForSubscriptionChanges": "Los cambios en su suscripción pueden tardar un momento en reflejarse en la aplicación.", + "subscribeReadingAssistance": "Suscríbase para desbloquear herramientas de mensajería", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikáans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amárico", + "arDisplayName": "Árabe", + "asDisplayName": "Asamés", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaiyano", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinés", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorruso", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Búlgaro", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalí", + "bnBDDisplayName": "Bengalí (Bangladesh)", + "bnINDisplayName": "Bengalí (India)", + "brDisplayName": "Bretón", + "bsDisplayName": "Bosnio", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriato", + "caDisplayName": "Catalán", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdo Central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corso", + "crhDisplayName": "Turco Crimeo", + "crsDisplayName": "Criollo Seselwa Francés", + "csDisplayName": "Checo", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Galés", + "daDisplayName": "Danés", + "deDisplayName": "Alemán", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglés", + "enAUDisplayName": "Inglés (Australia)", + "enGBDisplayName": "Inglés (Reino Unido)", + "enINDisplayName": "Inglés (India)", + "enUSDisplayName": "Inglés (EE. UU.)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Español", + "esESDisplayName": "Español (España)", + "esMXDisplayName": "Español (México)", + "euDisplayName": "Vasco", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandés", + "filDisplayName": "Filipino", + "fjDisplayName": "Fiyiano", + "foDisplayName": "Feroés", + "frDisplayName": "Francés", + "frCADisplayName": "Francés (Canadá)", + "frFRDisplayName": "Francés (Francia)", + "fyDisplayName": "Frisón Occidental", + "gaDisplayName": "Irlandés", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaélico Escocés", + "glDisplayName": "Gallego", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Konkani de Goa", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiano", + "heDisplayName": "Hebreo", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croata", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Criollo haitiano", + "huDisplayName": "Húngaro", + "hyDisplayName": "Armenio", + "idDisplayName": "Indonesio", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandés", + "itDisplayName": "Italiano", + "jaDisplayName": "Japonés", + "jvDisplayName": "Javanés", + "kaDisplayName": "Georgiano", + "kkDisplayName": "Kazajo", + "kmDisplayName": "Jemer", + "knDisplayName": "Canarés", + "koDisplayName": "Coreano", + "kokDisplayName": "Konkaní", + "kriDisplayName": "Krio", + "ksDisplayName": "Cachemir", + "ktuDisplayName": "Kituba (República Democrática del Congo)", + "kuDisplayName": "Kurdo", + "kyDisplayName": "Kirguís", + "laDisplayName": "Latín", + "lbDisplayName": "Luxemburgués", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgués", + "lijDisplayName": "Ligur", + "lmoDisplayName": "Lombardo", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituano", + "ltgDisplayName": "Latgalio", + "luoDisplayName": "Luo (Kenia y Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letón", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgache", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonio", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malayo", + "msArabDisplayName": "Malayo (Árabe)", + "msMYDisplayName": "Malayo (Malasia)", + "mtDisplayName": "Maltés", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmano", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Noruego (Bokmål)", + "neDisplayName": "Nepalí", + "newDisplayName": "Newari", + "nlDisplayName": "Neerlandés", + "nlBEDisplayName": "Flamenco", + "noDisplayName": "Noruego", + "nrDisplayName": "Ndebele del Sur", + "nsoDisplayName": "Sotho del Norte", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitano", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Panjabi", + "paArabDisplayName": "Panjabi (Shahmukhi)", + "paINDisplayName": "Panjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polaco", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugués", + "ptBRDisplayName": "Portugués (Brasil)", + "ptPTDisplayName": "Portugués (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumano", + "roMDDisplayName": "Moldavo", + "romDisplayName": "Romaní", + "ruDisplayName": "Ruso", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sánscrito", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliano", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Cinghalés", + "skDisplayName": "Eslovaco", + "slDisplayName": "Esloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somalí", + "sqDisplayName": "Albanés", + "srDisplayName": "Serbio", + "srMEDisplayName": "Montenegrino", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho del Sur", + "suDisplayName": "Sundanés", + "svDisplayName": "Sueco", + "swDisplayName": "Suajili", + "szlDisplayName": "Silesio", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tayiko", + "thDisplayName": "Tailandés", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turcomano", + "tlDisplayName": "Tagalo", + "tnDisplayName": "Tswana", + "trDisplayName": "Turco", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tártaro", + "ugDisplayName": "Uigur", + "ukDisplayName": "Ucraniano", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistán)", + "uzDisplayName": "Uzbeko", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yidis", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonés", + "yueCNDisplayName": "Cantonés (China)", + "yueHKDisplayName": "Cantonés (Hong Kong)", + "zhDisplayName": "Chino", + "zhCNDisplayName": "Chino (Simplificado)", + "zhTWDisplayName": "Chino (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -7494,6 +7815,7 @@ "placeholders": {} }, "notStartedActivitiesTitle": "Sesiones abiertas ({num})", + "pickDifferentActivity": "Elige una actividad diferente", "inProgressActivitiesTitle": "Sucedió ahora ({num})", "completedActivitiesTitle": "Hecho ({num})", "inOngoingActivity": "¡Tienes una actividad en curso!", @@ -7521,10 +7843,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "El idioma de destino no coincide con este mensaje. ¿Actualizar el idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Estos son todos en este curso. Haz clic en el avatar de cualquier usuario y \"iniciar conversación\" para enviar un DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Esta palabra de vocabulario será eliminada permanentemente de tus análisis", + "woman": "Mujer", + "man": "Hombre", + "otherGender": "Otro", + "unselectedGender": "Selecciona una opción de género", + "gender": "Género", + "chatParticipantTooltip": "Estas son todas las personas en este chat. Haz clic en el avatar de cualquier usuario y \"iniciar conversación\" para enviar un DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Las herramientas de aprendizaje están desactivadas para los mensajes que no están en tu idioma objetivo.", + "vocabEmoji": "Emoji de vocabulario", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Solicitar regeneración", + "optionalRegenerateReason": "(Opcional) Razón", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "¡Has establecido el emoji para {lemma}! Usaremos este emoji para representar la palabra en las actividades prácticas de ahora en adelante.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Esperando a que se complete el inicio de sesión", + "ssoDialogDesc": "Abrimos una nueva pestaña para que puedas iniciar sesión de forma segura.", + "ssoDialogHelpText": "🤔 Si no viste la nueva pestaña, por favor revisa tu bloqueador de ventanas emergentes.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desactivar herramientas de idioma", + "disableLanguageToolsDesc": "¿Te gustaría desactivar la asistencia automática de idioma?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permiso denegado. Habilita los permisos de grabación para grabar mensajes de audio.", + "genericWebRecordingError": "Algo salió mal. Recomendamos usar el navegador Chrome al grabar mensajes.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Para la mejor experiencia al usar esta aplicación, por favor amplía el tamaño de tu pantalla.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Actividades para Desbloquear el Siguiente Tema", "activitiesToUnlockTopicDesc": "Establecer el número de actividades para desbloquear el siguiente tema del curso", "@activitiesToUnlockTopicTitle": { @@ -7534,5 +7974,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Práctica de definición de vocabulario correcta", + "constructUseIncLMDesc": "Práctica de definición de vocabulario incorrecta", + "constructUseCorLADesc": "Práctica de audio de vocabulario correcta", + "constructUseIncLADesc": "Práctica de audio de vocabulario incorrecta", + "constructUseBonus": "Bonificación durante la práctica de vocabulario", + "practiceVocab": "Practicar vocabulario", + "selectMeaning": "Seleccionar el significado", + "selectAudio": "Seleccionar el audio correspondiente", + "congratulations": "¡Felicidades!", + "anotherRound": "Otra ronda", + "noActivityRequest": "No hay solicitudes de actividad actuales.", + "quit": "Salir", + "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", + "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", + "botSettings": "Configuración del Bot", + "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index f9bec4cee..5eb052ca0 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -1,6 +1,6 @@ { "@@locale": "et", - "@@last_modified": "2026-01-06 13:01:32.507692", + "@@last_modified": "2026-01-07 14:25:18.173924", "about": "Rakenduse teave", "@about": { "type": "String", @@ -3380,24 +3380,12 @@ "@commandHint_logout": {}, "displayNavigationRail": "Näita navigeerimisliistu mobiilis", "customReaction": "Kohandatud reaktsioon", - "accountInformation": "Konto teave", - "addGroupDescription": "Lisa vestluse kirjeldus", - "addNewFriend": "Lisa uus sõber", - "alreadyHaveAnAccount": "Kas teil on juba konto?", - "createNewGroup": "Loo uus vestlus", - "editChatPermissions": "Muuda vestluse õigusi", "writeAMessageLangCodes": "Kirjuta {l1} või {l2}...", "requests": "Päringud", - "allCorrect": "Nii ma ütleksin! Tubli!", - "newWayAllGood": "See ei ole nii, kuidas ma oleksin öelnud, aga näeb hea välja!", - "othersAreBetter": "Hm, võib-olla on parem viis seda öelda.", "holdForInfo": "Vajuta ja hoia sõna info saamiseks.", "greenFeedback": "See on see, mida ma paneksin!", "yellowFeedback": "Hm, võid proovida seda ja vaadata, kas see töötab! Selle sõna kasutamiseks klõpsa seda uuesti.", "redFeedback": "Ma arvan, et see ei ole õige...", - "oneday": "Viimased 24 tundi", - "oneweek": "Viimased 7 päeva", - "onemonth": "Eelmine kuu", "gaTooltip": "L2 kasutamine grammatika abiga", "taTooltip": "L2 kasutamine tõlke abiga", "unTooltip": "Muu", @@ -3408,60 +3396,29 @@ "interactiveTranslatorRequired": "Nõutud", "notYetSet": "Veel määramata", "multiLingualSpace": "Mitmekeelne ruum", - "myLearning": "Minu analüütika", "waTooltip": "L2 kasutamine ilma abita", - "changeDateRange": "Muuda kuupäevavahemikku", - "classDescription": "Kirjeldus", - "addStudents": "Kutsu kasutajaid lingi või koodiga", - "copyClassLink": "Kopeeri kutselink", "copyClassLinkDesc": "Selle lingi klõpsamine suunab kasutajad rakendusse, suunab nad konto loomiseks ning nad liituvad automaatselt selle ruumiga.", - "copyClassCode": "Kopeeri kutsekood", - "inviteStudentByUserName": "Kutsuge kasutajaid kasutajanime järgi", "languageSettings": "Keele seaded", "languageSettingsDesc": "Redigeeri ruumi keeli ja oskustaset.", "interactiveTranslator": "Tõlkeabi", - "shareVideo": "Jaga videot", - "shareVideoDesc": "Lülita see sisse, et võimaldada õpilastel jagada videoid vestlustes.", - "shareFiles": "Jaga faile", - "selectLanguageLevel": "Vali keele tase", "noIdenticalLanguages": "Palun vali erinevad baas- ja sihtkeeled", - "iWantALanguagePartnerFrom": "On pärit:", - "worldWide": "Maailma laial", - "noResults": "Tulemusi ei leitud! Laienda oma otsingut.", "searchBy": "Otsi riigi ja keelte järgi", - "iWantAConversationPartner": "Ma tahan vestluspartnerit, kes", - "iWantALanguagePartnerWhoSpeaks": "Räägib:", - "iWantALanguagePartnerWhoIsLearning": "Õpib:", "joinWithClassCode": "Liitu ruumiga", - "joinWithClassCodeHint": "Sisesta kutsekood", - "languageLevelPreA1": "Tõeline algaja (Pre A1)", - "languageLevelA1": "Algaja (A1)", - "languageLevelA2": "Algeline (A2)", - "languageLevelB1": "Keskmine (B1)", - "languageLevelB2": "Ülemine Keskastme (B2)", - "languageLevelC1": "Edasijõudnud (C1)", - "languageLevelC2": "Meisterlikkus (C2)", + "languageLevelPreA1": "Algaja Madal (Eel A1)", + "languageLevelA1": "Algaja Kesktase (A1)", + "languageLevelA2": "Algaja Kõrge (A2)", + "languageLevelB1": "Vahepealne Keskmine (B1)", + "languageLevelB2": "Edasijõudnud Madal (B2)", + "languageLevelC1": "Edasijõudnud Keskmine (C1)", + "languageLevelC2": "Üksikasjalik (C2)", "changeTheNameOfTheClass": "Muuda nime", "changeTheNameOfTheChat": "Muuda vestluse nime", - "askPangeaBot": "Küsi Pangea Botilt kontekstuaalset definitsiooni.", "sorryNoResults": "Vabandame, tulemusi ei leitud.", "ignoreInThisText": "Ignoreeri", - "helpMeTranslate": "Jah!", - "needsItShortMessage": "Väljas sihtmärk", "needsItMessage": "Oota, see ei ole {targetLanguage}! Kas vajad abi tõlkimisel?", - "needsIgcMessage": "Selles sõnumis on grammatikaviga.", - "tokenTranslationTitle": "Sõna on sinu baaskeeles.", - "spanTranslationDesc": "Vaata allpool võimalikke tõlkeid.", - "spanTranslationTitle": "Mõned sõnad on sinu baaskeeles.", - "l1SpanAndGrammarTitle": "Väljas sihtkeelest", - "l1SpanAndGrammarDesc": "See võib olla sinu baaskeeles või see võib olla grammatikaviga.", - "otherTitle": "Sul on viga.", - "otherDesc": "Vaadake allolevaid võimalikke parandusi.", "countryInformation": "Minu riik", - "myLanguages": "Minu baas- ja sihtkeeled", "targetLanguage": "Sihtkeel", "sourceLanguage": "Põhikeel", - "languagesISpeak": "Keeled, mida ma räägin", "updateLanguage": "Minu keeled", "whatLanguageYouWantToLearn": "Millist keelt soovite õppida?", "whatIsYourBaseLanguage": "Mis on teie põhikeel?", @@ -3477,13 +3434,8 @@ "errorDisableITClassDesc": "Tõlkeabi on välja lülitatud selle vestluse ruumi jaoks.", "errorDisableIGCClassDesc": "Grammatikaabi on välja lülitatud selle vestluse ruumi jaoks.", "errorDisableLanguageAssistanceClassDesc": "Tõlkeabi ja grammatikatugi on selle vestluse ruumis välja lülitatud.", - "itIsDisabled": "Interaktiivne tõlge on välja lülitatud", - "igcIsDisabled": "Interaktiivne grammatikakontroll on välja lülitatud", - "goToLearningSettings": "Mine õpeseadistustesse", "error405Title": "Keeled pole määratud", "error405Desc": "Palun seadistage oma keeled peamenüüs > Õpeseadistused.", - "loginOrSignup": "Logi sisse või registreeru", - "iAgreeToThe": "Ma nõustun ", "termsAndConditions": "Tingimuste ja nõuetega", "andCertifyIAmAtLeast13YearsOfAge": " ning kinnitan, et olen vähemalt 16 aastat vana.", "error502504Title": "Vau, veebis on palju õpilasi!", @@ -3492,41 +3444,22 @@ "error404Desc": "Pangea bot ei ole kindel, kuidas seda tõlkida...", "errorPleaseRefresh": "Uurime seda välja! Palun laadin uuesti ja proovi uuesti.", "findAClass": "Leia klass (varsti tulekul)", - "toggleIT": "Interaktiivne tõlge", - "toggleIGC": "Interaktiivne grammatikakontroll", - "toggleToolSettingsDescription": "Siin saate lülitada oma individuaalse keele tööriista seadeid.", "connectedToStaging": "Ühendatud etappserveriga", "learningSettings": "Õppeseaded", "classNameRequired": "Palun sisestage klassi nimi", - "sendVoiceNotes": "Saada häälmärkmeid", - "sendVoiceNotesDesc": "Lülita see sisse, et võimaldada õpilastel saata häälmärke vestlustes.", - "chatTopic": "Vestlusteema", - "chatTopicDesc": "Määra vestlusteema", - "inviteStudentByUserNameDesc": "Kui sinu õpilasel on juba konto, saad teda otsida.", "classRoster": "Osalejad", - "almostPerfect": "See näib õige! Siin on, mida ma oleksin öelnud.", - "prettyGood": "Väga hea! Siin on, mida ma oleksin öelnud.", - "letMeThink": "Hmm, vaatame, kuidas sul läks!", "clickMessageTitle": "Kas vajad abi?", "clickMessageBody": "Klõpsa sõnumil, et saada keele tööriistu nagu tõlge, taasesitus ja palju muud!", - "understandingMessagesTitle": "Definitsioonid ja tõlked!", - "understandingMessagesBody": "Klõpsa allajoonitud sõnadel, et näha definitsioone. Tõlgi sõnumi valikute abil (paremal ülal).", "allDone": "Kõik tehtud!", "vocab": "Sõnavara", "low": "On tõendeid, et kasutaja ei mõista neid sõnu.", "medium": "Need sõnad on kasutusel olnud. Ei ole selge, kas sõnad on täielikult mõistetud või mitte.", "high": "On tõendeid, et kasutaja mõistab neid sõnu.", - "unknownProficiency": "Need ei ole Pangea Chatis kasutatud sõnad.", - "changeView": "Vaate vahetamine.", - "clearAll": "Kas kustutada kõik sõnad?", - "generateVocabulary": "Loo sõnavara pealkirja ja kirjelduse põhjal", - "generatePrompts": "Loo juhised", "subscribe": "Telli", "getAccess": "Telli kohe!", "subscriptionDesc": "Sõnumside on tasuta! Telli, et avada interaktiivne tõlge, grammatika kontroll ja õppeanalüütika.", "subscriptionManagement": "Telli haldamine", "currentSubscription": "Praegune tellimus", - "changeSubscription": "Muuda oma tellimust", "cancelSubscription": "Tühista oma tellimus", "selectYourPlan": "Vali oma plaan", "subsciptionPlatformTooltip": "Palun logi sisse oma algse seadmega, et hallata oma tellimisplaani", @@ -3535,9 +3468,6 @@ "paymentHistory": "Makse ajalugu", "emptyChatDownloadWarning": "Tühi vestlus ei saa alla laadida", "update": "Uuenda", - "updateDesc": "Nüüd saad uuendada seda rakendust versioonilt {localVersion} versioonile {storeVersion}", - "maybeLater": "Võib-olla hiljem", - "mainMenu": "Peamenüü", "toggleImmersionMode": "Sukeldumise režiim", "toggleImmersionModeDesc": "Kui see on lubatud, kuvatakse kõik sõnumid teie sihtkeeles. See seade on kõige kasulikum keelevahetustes.", "itToggleDescription": "See keeleõppe tööriist tuvastab teie baaskeeles sõnad ja aitab teil neid tõlkida sihtkeelde. Kuigi harva, võib AI teha tõlkimisel vigu.", @@ -3556,14 +3486,7 @@ "translationsToolDescrption": "Kui see on lubatud, klõpsake sõnumil ja tõlkeikoonil, et näha sõnumit teie baaskeeles.", "welcomeBack": "Tere tulemast tagasi! Kui osalesite 2023-2024 pilootprogrammis, võtke meiega ühendust oma erilise pilootkuulutuse saamiseks. Kui olete õpetaja, kellel on (või kelle asutus on) ostnud litsentse oma klassile, võtke meiega ühendust oma õpetajapaketiks.", "createNewClass": "Uus klassiruum", - "kickAllStudents": "Viska kõik õpilased", - "kickAllStudentsConfirmation": "Kas olete kindel, et soovite kõik õpilased välja visata?", - "inviteAllStudents": "Kutsu kõik õpilased", - "inviteAllStudentsConfirmation": "Kas olete kindel, et soovite kõiki õpilasi kutsuda?", "inviteStudentsFromOtherClasses": "Kutsu õpilasi teistest ruumidest", - "inviteUsersFromPangea": "Lisa administraatorid", - "redeemPromoCode": "Tühista sooduskood", - "enterPromoCode": "Sisesta sooduskood", "downloadTxtFile": "Laadi alla tekstifail", "downloadCSVFile": "Laadi alla CSV-fail", "promotionalSubscriptionDesc": "Teil on praegu eluaegne kampaania tellimus. Abi saamiseks saatke sõnum aadressile support@pangea.chat.", @@ -3571,199 +3494,7 @@ "oneWeekTrial": "Ühe nädala prooviperiood", "creatingSpacePleaseWait": "Ruumi loomine. Palun oodake...", "downloadXLSXFile": "Laadi alla Exceli fail", - "abDisplayName": "Abhaas", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albaania", - "amDisplayName": "Amharike", - "arDisplayName": "Araabia", - "anDisplayName": "Aragoni", - "hyDisplayName": "Armeenia", - "asDisplayName": "Assami", - "avDisplayName": "Avarike", - "aeDisplayName": "Avesti", - "ayDisplayName": "Aymara", - "azDisplayName": "Aserbaidžaani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkiiri", - "euDisplayName": "Bask", - "beDisplayName": "Valgevene", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnia", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgaaria", - "myDisplayName": "Birma", - "caDisplayName": "Katalaani, Valencias", - "chDisplayName": "Chamorro", - "ceDisplayName": "Čečeenia", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Hiina", - "cvDisplayName": "Tšuvaši", - "kwDisplayName": "Kornish", - "coDisplayName": "Korsika", - "crDisplayName": "Cree", - "hrDisplayName": "Horvaadi", - "csDisplayName": "Tšehhi", - "daDisplayName": "Taani", - "dvDisplayName": "Divehi; Dhivehi; Maldiivide keel;", - "nlDisplayName": "Hollandi", - "enDisplayName": "Inglise", - "eoDisplayName": "Esperanto", - "etDisplayName": "Eesti", - "eeDisplayName": "Ewe", - "foDisplayName": "Fääri", - "fjDisplayName": "Fijian", - "fiDisplayName": "Soome", - "frDisplayName": "Prantsuse", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicia", - "kaDisplayName": "Gruusia", - "deDisplayName": "Saksa", - "elDisplayName": "Vene", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haiti Kreooli", - "haDisplayName": "Hausa", - "heDisplayName": "Heebrea (tänapäevane)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungari", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indoneesia", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Iiri", - "igDisplayName": "Ibo", - "ikDisplayName": "Inupiak", - "ioDisplayName": "Ido", - "isDisplayName": "Islandi", - "itDisplayName": "Itaalia", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Jaapani", - "jvDisplayName": "Java", - "klDisplayName": "Kalaallisut, Grönimaa", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kasahhi", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgiisi, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korea", - "kuDisplayName": "Kurdi", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Ladina", - "lbDisplayName": "Luksemburgi, Letzeburgesch", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburgi, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laose", - "ltDisplayName": "Leedu", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Läti", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedoonia", - "mgDisplayName": "Malagassi", - "msDisplayName": "Malai", - "mlDisplayName": "Malajalami", - "mtDisplayName": "Malta", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongoli", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norra Bokmål", - "ndDisplayName": "Põhja Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Noors Nynorsk", - "noDisplayName": "Norra", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Lõuna Ndebele", - "ocDisplayName": "Oksitaani", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Vana kirikukslavoonia, Kirik Slavi, Kirik Slavi, Vana bulgaaria, Vana slavoonia", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Osseti, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Pärsia", - "plDisplayName": "Poola", - "psDisplayName": "Paštu, Pushto", - "ptDisplayName": "Portugali", - "quDisplayName": "Quechua", - "rmDisplayName": "Romaani, Rätsh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumeenia, Moldova, Moldova", - "ruDisplayName": "Vene", - "saDisplayName": "Sanskriti (Sanskṛta)", - "scDisplayName": "Sardinia", - "sdDisplayName": "Sindhi", - "seDisplayName": "Põhja-Sami", - "smDisplayName": "Samoa", - "sgDisplayName": "Sango", - "srDisplayName": "Serbia", - "gdDisplayName": "Šoti gaeli, gaeli", - "snDisplayName": "Shona", - "siDisplayName": "Singali, Sinhalese", - "skDisplayName": "Slovaki", - "slDisplayName": "Sloveeni", - "soDisplayName": "Somali", - "stDisplayName": "Lõuna-Sotho", - "esDisplayName": "Hispaania", - "suDisplayName": "Sundane", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Rootsi", - "taDisplayName": "Tamili", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžiki", - "thDisplayName": "Tai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tiibeti standard, Tiibeti, Kesk", - "tkDisplayName": "Türkmen", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tsvana", - "toDisplayName": "Tonga (Tonga saared)", - "trDisplayName": "Türgi", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataari", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uiguuri, Uiguuri", - "ukDisplayName": "Ukraina", - "urDisplayName": "Urdu", - "uzDisplayName": "Usbeki", - "veDisplayName": "Venda", - "viDisplayName": "Vietnami", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Walesi", - "woDisplayName": "Wolof", - "fyDisplayName": "Lääne-Friesi", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Tundmatu", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havai", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Mitme", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Heebrea", - "jwDisplayName": "Javani", - "moDisplayName": "Moldova", - "shDisplayName": "Serbo-Kroatia", "wwCountryDisplayName": "Maailm", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Alandsaared", @@ -4011,14 +3742,10 @@ "yeCountryDisplayName": "Jeemen", "zmCountryDisplayName": "Sambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Maksa", - "allPrivateChats": "Otsevestlused", - "unknownPrivateChat": "Tundmatu privaatvestlus", + "pay": "Checkout", "copyClassCodeDesc": "Kasutajad, kes on juba rakenduses, saavad peamenüüst 'Liitu ruumiga'.", "addToSpaceDesc": "Vestluse lisamine ruumi muudab vestluse nähtavaks ruumis õpilastele ja annab neile juurdepääsu.", "invitedToSpace": "{user} on kutsunud teid liituma ruumi: {space}! Kas soovite vastu võtta?", - "declinedInvitation": "Kutsest keelduti", - "acceptedInvitation": "Kutse vastu võetud", "youreInvited": "📩 Teid on kutsutud!", "studentPermissionsDesc": "Seadke selle ruumi õigused. Need kehtivad ainult sellele ruumile. Nad ülekirjutavad üksikute kasutajate seaded.", "noEligibleSpaces": "Selleks ruumiks sobivaid ruume pole.", @@ -4029,32 +3756,20 @@ "yearlySubscription": "Aastane tellimus", "defaultSubscription": "Pangea vestluse tellimus", "freeTrial": "Tasuta prooviperiood", - "grammarAnalytics": "Vea analüütika", "total": "Kokku: ", "noDataFound": "Andmeid ei leitud", - "promoSubscriptionExpirationDesc": "Teie praegune tellimus on kampaania ja lõpeb {expiration}. Saate abi tellimuse muutmisel, kirjutades support@pangea.chat", - "emptyChatNameWarning": "Palun sisestage selle vestluse nimi", "emptyClassNameWarning": "Palun sisestage selle klassi nimi", "emptySpaceNameWarning": "Palun sisestage selle ruumi nimi", - "someErrorTitle": "Hmm, midagi on valesti", - "someErrorBody": "See võib olla viga või midagi teie baaskeeles.", "bestCorrectionFeedback": "See on õige!", "distractorFeedback": "See ei ole päris õige.", "bestAnswerFeedback": "See on õige!", "definitionDefaultPrompt": "Mida see sõna tähendab?", "practiceDefaultPrompt": "Mis on parim vastus?", "correctionDefaultPrompt": "Mis on parim asendus?", - "itStartDefaultPrompt": "Kas soovite tõlkimisel abi?", "languageLevelWarning": "Palun valige ruumi keele tase", - "lockedChatWarning": "🔒 See vestlus on lukustatud", "lockSpace": "Lukusta ruum", - "lockChat": "Lukusta vestlus", "archiveSpace": "Arhiveeri ruum", - "suggestToChat": "Soovita seda vestlust", - "suggestToChatDesc": "Soovitatud vestlused ilmuvad vestluste nimekirjades", "acceptSelection": "Nõustu parandusega", - "acceptSelectionAnyway": "Kasuta seda siiski", - "makingActivity": "Tegevuse tegemine", "why": "Miks?", "definition": "Määratlus", "exampleSentence": "Näidislause", @@ -4063,7 +3778,6 @@ "reportMessageBody": "Sõnum: {reportedMessage}\nPõhjus: {reason}", "noTeachersFound": "Õpetajaid ei leitud teatamiseks", "createClass": "Loo klass", - "viewArchive": "Vaata arhiivi", "trialExpiration": "Teie tasuta prooviperiood lõpeb {expiration}", "freeTrialDesc": "Uued kasutajad saavad ühe nädala tasuta Pangea Chat-i prooviperioodi", "activateTrial": "Tasuta 7-päevane proov", @@ -4071,7 +3785,6 @@ "successfullySubscribed": "Olete edukalt tellinud!", "clickToManageSubscription": "Klõpsake siin, et hallata oma tellimust.", "emptyInviteWarning": "Lisage see vestlus ruumi, et kutsuda teisi kasutajaid.", - "errorGettingAudio": "Viga heli saamisel. Palun värskendage lehte ja proovige uuesti.", "signUp": "Registreeru", "pleaseChooseAtLeastChars": "Palun valige vähemalt {min} tähemärki.", "noEmailWarning": "Palun sisestage kehtiv e-posti aadress. Vastasel juhul ei saa te oma parooli lähtestada. Kui te ei soovi seda teha, puudutage uuesti nuppu jätkamiseks.", @@ -4079,93 +3792,31 @@ "noAddToSpacePermissions": "Te ei saa seda vestlust sellesse ruumi lisada", "alreadyInSpace": "Vestlus on juba selles ruumis", "pleaseChooseAUsername": "Palun valige kasutajanimi", - "chooseAUsername": "Valige kasutajanimi", "define": "Määra", "listen": "Kuula", - "addConversationBot": "Luba vestluse robot", - "addConversationBotDesc": "Lisa sellele vestlusele robot", - "convoBotSettingsDescription": "Muuda vestluse teemat ja raskusastet", - "enterAConversationTopic": "Sisestage vestluse teema", - "conversationTopic": "Vestluse teema", - "enableModeration": "Luba modereerimine", - "enableModerationDesc": "Luba automaatne modereerimine, et üle vaadata sõnumeid enne nende saatmist", - "conversationLanguageLevel": "Mis on selle vestluse keele tase?", - "showDefinition": "Näita definitsiooni", - "subscriptionPopupTitle": "See lause võib sisaldada grammatikaviga...", - "subscriptionPopupDesc": "Telli täna, et avada tõlke ja grammatikakorrektuur!", - "seeOptions": "Vaata valikuid", - "continuedWithoutSubscription": "Jätka tellimuseta", "trialPeriodExpired": "Teie prooviperiood on lõppenud", - "selectToDefine": "Klõpsake mis tahes sõna, et näha selle definitsiooni!", "translations": "tõlked", "messageAudio": "sõnumi heli", "definitions": "definitsioonid", "subscribedToUnlockTools": "Telli, et avada interaktiivne tõlge ja grammatika kontroll, heli taasesitus, isikupärastatud harjutustegevused ja õppeanalüütika!", "translationTooltip": "Tõlgi", - "audioTooltip": "Mängi heli", "speechToTextTooltip": "Transkriptsioon", - "certifyAge": "Ma kinnitan, et olen üle {age} aasta vana", "kickBotWarning": "Pangea bot'i eemaldamine eemaldab vestluse bot'i sellest vestlusest.", - "joinToView": "Liitu selle ruumiga, et vaadata üksikasju", "refresh": "Värskenda", - "autoPlayTitle": "Automaatne mängimine sõnumitest", - "autoPlayDesc": "Kui see on lubatud, mängitakse automaatselt tekstist kõne heli, kui see on valitud.", "messageAnalytics": "Sõnumi analüütika", "words": "Sõnad", "score": "Hinne", "accuracy": "Täpsus", "points": "Punktid", "noPaymentInfo": "Makseteadet pole vaja!", - "conversationBotModeSelectDescription": "Vestlustegevus", - "conversationBotModeSelectOption_discussion": "Arutelu", - "conversationBotModeSelectOption_custom": "Kohandatud", - "conversationBotModeSelectOption_conversation": "Vestlus", - "conversationBotModeSelectOption_textAdventure": "Tekstiseiklus", - "conversationBotModeSelectOption_storyGame": "Lugumäng", - "conversationBotDiscussionZone_title": "Arutelu seaded", - "conversationBotDiscussionZone_discussionTopicLabel": "Arutelu teema", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Määra arutelu teema", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Arutelu märksõnad", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Määra arutelu märksõnad", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Koma eraldatud märksõnade loend arutelu juhendamiseks", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Saada arutelu juhend ajastatult", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Tunnid arutelu juhendite vahel", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Vastab reaktsioonile ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaktsioon arutelu juhendi saatmiseks", - "conversationBotCustomZone_title": "Kohandatud seaded", - "conversationBotCustomZone_customSystemPromptLabel": "Süsteemi juhend", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Määra kohandatud süsteemipõhjus", - "conversationBotCustomZone_customSystemPromptEmptyError": "Puudub kohandatud süsteemipõhjus", - "botConfig": "Boti ja tegevuse seaded", - "botConfigNoPermissionTitle": "Puudub luba", - "botConfigNoPermissionMessage": "Võtke ühendust ruumi administraatoriga, et muuta boti seadeid", - "addConversationBotDialogTitleInvite": "Kinnita vestlusboti kutsumine", - "addConversationBotButtonInvite": "Kutsu", - "addConversationBotDialogInviteConfirmation": "Kutsu", - "addConversationBotButtonTitleRemove": "Kinnita vestlusboti eemaldamine", - "addConversationBotButtonRemove": "Eemalda", - "addConversationBotDialogRemoveConfirmation": "Eemalda", - "conversationBotConfigConfirmChange": "Kinnita", - "conversationBotStatus": "Kutsu bot", - "conversationBotTextAdventureZone_title": "Tekstiseiklus", - "conversationBotTextAdventureZone_instructionLabel": "Mängujuhi juhised", - "conversationBotTextAdventureZone_instructionPlaceholder": "Määra mängujuhi juhised", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Puuduvad mängujuhi juhised", - "studentAnalyticsNotAvailable": "Õpilaste andmed ei ole praegu saadaval", - "roomDataMissing": "Mõned andmed võivad puududa ruumidest, milles te ei ole liige.", "updatePhoneOS": "Võib olla vajalik uuendada oma seadme operatsioonisüsteemi versiooni.", "wordsPerMinute": "Sõnad minutis", "autoIGCToolName": "Käivita Pangea kirjutamisabi automaatselt", "autoIGCToolDescription": "Käivita automaatselt Pangea vestluse grammatika- ja tõlkeabi enne sõnumi saatmist.", - "runGrammarCorrection": "Kontrolli sõnumit", - "grammarCorrectionFailed": "Vajadusel parandada", - "grammarCorrectionComplete": "Väga hea!", "addSpaceToSpaceDescription": "Vali ruum, mida lisada vanemaks", "chatCapacity": "Vestluse maht", "spaceCapacity": "Ruumimaht", "roomFull": "See tuba on juba täis.", - "topicNotSet": "Teema pole määratud.", - "chatCapacityNotSet": "Sellel vestlusel pole maht piirangut.", "spaceCapacityNotSet": "Sellel ruumil pole maht piirangut.", "chatCapacityHasBeenChanged": "Vestluse maht on muudetud", "spaceCapacityHasBeenChanged": "Ruumimaht on muudetud", @@ -4173,33 +3824,24 @@ "spaceCapacitySetTooLow": "Ruumimaht peab olema vähemalt {count}.", "chatCapacityExplanation": "Vestluse maht piirab vestluses lubatud liikmete arvu.", "spaceCapacityExplanation": "Ruumimaht piirab liikmete arvu ruumis.", - "chatExceedsCapacity": "See vestlus ületab oma mahutavust.", "spaceExceedsCapacity": "See ruum ületab oma mahutavust.", "tooManyRequest": "Liiga palju päringuid, proovige hiljem uuesti.", "enterNumber": "Palun sisestage täisarvuline väärtus.", "buildTranslation": "Loo oma tõlge ülaltoodud valikutest", - "nonexistentSelection": "Valik ei eksisteeri enam.", "cantAddSpaceChild": "Teil puudub luba selle ruumi lapse lisamiseks.", "roomAddedToSpace": "Tuba(t) on lisatud valitud ruumi.", "addChatToSpaceDesc": "Vestluse lisamine ruumi muudab vestluse nähtavaks ruumis õpilastele ja annab neile juurdepääsu.", "addSpaceToSpaceDesc": "Alaruumide lisamine ruumile muudab alaruumid nähtavaks peamise ruumi vestlusloendis.", "spaceAnalytics": "Ruumianalüütika", - "changeAnalyticsLanguage": "Võta analüütika keel", "suggestToSpace": "Soovita seda ruumi", "suggestToSpaceDesc": "Soovitatud alaruumid ilmuvad nende peamise ruumi vestlusloendis", "practice": "Praktika", "noLanguagesSet": "Keeli pole määratud", - "noActivitiesFound": "Piisavalt sellest praegu! Tule hiljem tagasi rohkemaks.", - "hintTitle": "Vihje:", "speechToTextBody": "Kõne sõnumite jaoks saate näha transkriptsiooni ning kõneleja sõnade minutis skoori.", "versionNotFound": "Versiooni ei leitud", "fetchingVersion": "Versiooni toimetamine...", "versionFetchError": "Viga versiooni toimetamisel", "versionText": "Versioon: {version}+{buildNumber}", - "languageButtonLabel": "Keel: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automaatne tõlkimise mängimine", - "interactiveTranslatorAutoPlayDesc": "Käivitage interaktiivne tõlkija ilma küsimata.", - "changeAnalyticsView": "Muuda analüütika vaadet", "l1TranslationBody": "Teie baaskeeles sõnumeid ei tõlgita.", "deleteSubscriptionWarningTitle": "Teil on aktiivne tellimus", "deleteSubscriptionWarningBody": "Konto kustutamine ei tühista automaatselt teie tellimust.", @@ -4209,9 +3851,7 @@ "error520Title": "Palun proovige uuesti.", "error520Desc": "Vabandame, me ei saanud teie sõnumit aru...", "wordsUsed": "Kasutatud sõnad", - "errorTypes": "Vigade tüübid", "level": "Tase", - "canceledSend": "Tühistatud saatmine", "morphsUsed": "Kasutatud morfid", "translationChoicesBody": "Vajuta ja hoia valikul, et saada vihje.", "grammar": "Grammatika", @@ -4221,7 +3861,6 @@ "reportContentIssueTitle": "Teata sisuprobleemist", "feedback": "Valikuline tagasiside", "reportContentIssueDescription": "Oh ei! Tehisintellekt võib pakkuda isikupärastatud õpikogemusi, kuid... ka hallutsineerib. Palun andke meile tagasisidet ja proovime uuesti.", - "changeContent": "Oh ei! Tehisintellekt võib pakkuda isikupärastatud õpikogemusi, kuid... ka hallutsineerib. Mis see peaks olema?", "l2SupportNa": "Pole saadaval", "l2SupportAlpha": "Alpha", "l2SupportBeta": "Beta", @@ -4452,7 +4091,6 @@ "grammarCopySPC": "Spetsifikatsioon", "grammarCopyPARTTYPE": "Osaline tüüp", "grammarCopyINTREL": "Küsimus-viit", - "grammarCopyNUMFORMpsor": "Omandaja arv", "grammarCopyUNKNOWN": "Tundmatu", "grammarCopyNUMBERPSOR": "Omandaja arv", "grammarCopyPOSS": "Omadussõna", @@ -4498,19 +4136,9 @@ "grammarCopyVOICEdir": "Otsene", "grammarCopyVOICEinv": "Vastupidine", "grammarCopyVOICErcp": "Vastastikune", - "enterPrompt": "Palun sisestage süsteemiprompt", - "selectBotLanguage": "Valige vestlusroboti keel", - "chooseVoice": "Valige hääl", - "enterLanguageLevel": "Palun sisestage keele tase", - "enterDiscussionTopic": "Palun sisestage arutelu teema", - "selectBotChatMode": "Valige vestlusrežiim", - "messageNotInTargetLang": "Sõnum ei ole sihtkeeles", "other": "Muu", "levelShort": "TASE {level}", - "botModeValidation": "Palun valige vestlusrežiim", "completeActivitiesToUnlock": "Lõpeta vähemalt üks tegevus, et lukustada tõlge!", - "botSettingsSubtitle": "Kutsuge bot modererima vestlustegevust", - "invitePeople": "Kutsuge kasutajaid", "noCapacityLimit": "Piirangut võimsusele ei ole", "downloadGroupText": "Laadige alla grupitekst", "spaceDescription": "Tühiku kirjeldus", @@ -4518,12 +4146,8 @@ "notificationsOn": "Teavitused sisse", "notificationsOff": "Teavitused välja", "spaceCanBeFoundViaSearch": "Tühikut saab otsinguga leida", - "chatCanBeFoundViaSearch": "Vestlust saab otsinguga leida", - "requireCodeToJoin": "Nõuab koodi liitumiseks", - "canFindInSearch": "Saab otsingus leida", "addSubspaceWarning": "Kui lisate selle, ei ilmu see avaliku otsingutulemustes ning see on nähtav kõigile vanema tühiku liikmetele.", "nestedSpaceError": "Tühikuid ei tohi lisada teiste tühikute alamkohana", - "addChatToSpace": "Lisa vestlus", "createChatAndInviteUsers": "Loo vestlus ja kutsu kasutajaid", "updatedNewSpaceDescription": "Tühikud võimaldavad teil koondada oma vestlused ning luua era- või avalikke kogukondi.", "joinWithCode": "Liitu koodiga", @@ -4559,39 +4183,19 @@ "constructUseCollected": "Kogutud vestluses", "constructUseNanDesc": "Ei kehti", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Logi sisse kasutajanime ja parooliga", - "registrationEmailMessage": "Palun kinnita oma e-posti aadress lingi abil, mis saadetakse sinna. Mõnel juhul võib e-kiri jõuda kuni 5 minutiga. Kontrollige ka rämpsposti kausta.", "enableTTSToolName": "Lülita sisse teksti kõneks", "enableTTSToolDescription": "Luba rakendusel genereerida teksti kõneks väljund teie sihtkeele osas.", - "couldNotFindTTS": "Me ei leidnud teie praeguse sihtkeele jaoks teksti kõneks mootorit.", - "ttsInstructionsHyperlink": "Klõpsake siin, et vaadata juhiseid uue hääle allalaadimiseks oma seadmesse.", - "createAnAccount": "Loo konto", - "signIn": "Logi sisse", - "signUpWithEmail": "Registreeru e-posti teel", - "signUpWithGoogle": "Registreeru Google'iga", - "signUpWithApple": "Registreeru Apple'iga", "yourUsername": "Sinu kasutajanimi", "yourEmail": "Sinu e-post", - "pleaseEnterAnEmail": "Palun sisesta e-posti aadress", - "signInWithGoogle": "Logi sisse Google'iga", - "signInWithApple": "Logi sisse Apple'iga", - "chooseYourAvatar": "Vali oma avatar", "iWantToLearn": "Ma tahan õppida", - "letsStart": "Alustame", - "pleaseAgreeToTOS": "Palun nõustu kasutustingimustega", "pleaseEnterEmail": "Palun sisesta kehtiv e-posti aadress.", - "pleaseSelectALanguage": "Palun vali keel", "myBaseLanguage": "Minu põhikeel", - "clickWordsInstructions": "🧻 Klõpsa ükskõik millisel sõnal detailide saamiseks. 🤐", - "chooseBestDefinition": "Mida see sõna tähendab?", "meaningSectionHeader": "Tähendus:", "formSectionHeader": "Kasutatavad vormid vestlustes:", - "noEmojiSelectedTooltip": "Emotikonit pole valitud", "writingExercisesTooltip": "Kirjutamine", "listeningExercisesTooltip": "Kuulamine", "readingExercisesTooltip": "Lugemine", "meaningNotFound": "Tähendust ei leitud.", - "formsNotFound": "Vorme ei leitud.", "chooseBaseForm": "Valige põhivorm", "notTheCodeError": "Vabandame, see ei ole kood!", "totalXP": "Kokku XP", @@ -4632,11 +4236,8 @@ "pickAnEmoji": "Mis on sinu lemmikemoji '{lemma}' jaoks?", "chooseLemmaMeaningInstructionsBody": "Sobita tähendused sõnadega sõnumis!", "doubleClickToEdit": "Kaksklõpsake redigeerimiseks.", - "removeFeature": "Eemalda {feature}", "notInClass": "Pole klassis!", "noClassCode": "Pole klassikoodi!", - "chooseCorrectLabel": "Valige õige silt.", - "levelPopupTitle": "Palju õnne, olete saavutanud\ntaseme {level}", "activityPlannerTitle": "Tegevuste planeerija", "topicLabel": "Teema", "topicPlaceholder": "Valige teema...", @@ -4644,7 +4245,6 @@ "modePlaceholder": "Valige režiim...", "learningObjectiveLabel": "Õppeeesmärk", "learningObjectivePlaceholder": "Valige õppeeesmärk...", - "mediaLabel": "Meedia, mida õpilased peaksid jagama", "languageOfInstructionsLabel": "Juhiste keel", "targetLanguageLabel": "Eesmärk keel", "cefrLevelLabel": "CEFR tase", @@ -4659,20 +4259,15 @@ "instructions": "Juhised", "numberOfLearners": "Õppijate arv", "mustBeInteger": "Peab olema täisarv, nt 1, 2, 3, ...", - "noLemmasFound": "Leitud sõnavara, mille XP on rohkem kui {xp}. Jätkake harjutamist!", "constructUsePvmDesc": "Toodetud häälsõnumina", - "lockedMorphFeature": "Ootab avamist", "leaveSpaceDescription": "Lahkudes ruumist, lahkute kõigist selles olevatest vestlustest. Teised kasutajad näevad, et olete ruumist lahkunud.", - "whatIsLemma": "Mis on lemma?", "constructUseCorMmDesc": "Õige sõnumi tähendus", "constructUseIncMmDesc": "Vale sõnumi tähendus", "constructUseIgnMmDesc": "Ignoreeritud sõnumi tähendus", "clickForMeaningActivity": "Klõpsake siin tähendusha Challenge", "meaning": "Tähendus", "chatWith": "Rühm koos {displayname}", - "slightlyOffensive": "Veidi solvav", "clickOnEmailLink": "Palun klõpsake e-kirjas olevat linki ja jätkake. Harvadel juhtudel võib e-kiri sattuda rämpsposti või jõuda kuni 5 minutiga.", - "whoIsAllowedToJoinThisChat": "Kes võib selle vestluse liituda", "dontForgetPassword": "Ärge unustage oma parooli!", "enableAutocorrectToolName": "Luba seadme automaatparandus", "enableAutocorrectDescription": "Kui teie seade toetab õpitavat keelt, saate lubada seadme automaatparanduse, et parandada tavalisi vigu kirjutamise ajal.", @@ -4700,50 +4295,28 @@ "autocorrectNotAvailable": "Kahjuks ei ole teie platvorm praegu selle funktsiooni jaoks toetatud. Jälgige edasisi arenguid!", "pleaseUpdateApp": "Palun uuendage rakendus, et jätkata.", "chooseEmojiInstructionsBody": "Sobita emotikonid nende sõnadega, mida nad kõige paremini esindavad. Ära muretse! Ei karistata, kui ei nõustu. 😅", - "pickAnEmojiFor": "Vali emotikon ${lemma} jaoks", "analyticsVocabListBody": "See on kogu teie sõnavara! Kui teenite iga sõna eest XP, kasvab see seemnest täies õies. Klõpsa mis tahes sõnal, et näha rohkem detaile.", "morphAnalyticsListBody": "Need on kõik grammatika kontseptsioonid keeles, mida õpid! Sa avad need, kui kohtad neid vestluse käigus. Klõpsa detailide jaoks.", "knockSpaceSuccess": "Oled esitanud taotluse selle ruumi liitumiseks! Admin vastab sinu taotlusele, kui ta selle saab 😀", - "joinByCode": "Liitu koodiga", "createASpace": "Loo ruum", "chooseWordAudioInstructionsBody": "Kuula kogu sõnumit. Seejärel sobita helid sõnadega, mida nad kõige paremini esindavad.", "chooseMorphsInstructionsBody": "Klikk puzzleosad grammatika küsimuste jaoks!", - "inviteAndLaunch": "Kutsu ja käivita", - "createOwnChat": "Loo oma vestlus", "pleaseEnterInt": "Palun sisesta number", "home": "Kodu", "join": "Liitu", "readingAssistanceOverviewBody": "Klikkige allolevatel nuppudel mini-mänge emotikonide, helisalvestiste, sõnade tähenduste ja grammatika kontseptsioonide sobitamiseks. Või klõpsake ükskõik millisel sõnal detailide saamiseks.", - "learnByTexting": "Õpi sõnumite kaudu", - "levelSummaryTrigger": "Vaata kokkuvõtet", "levelSummaryPopupTitle": "Tase {level} Kokkuvõte", - "referFriends": "Soovita sõpru", - "referFriendDialogTitle": "Kutsu sõber vestlusse", - "referFriendDialogDesc": "Kas sul on sõber, kes on põnevil uue keele õppimisest koos sinuga? Kopeeri ja saada see kutselink, et liituda ja alustada vestlust juba täna.", - "youUnlocked": "Sa oled avanud", "resetInstructionTooltipsTitle": "Lähtesta juhiste tööriistaribad", "resetInstructionTooltipsDesc": "Klikkige, et näidata juhiste tööriistaribasid nagu uuel kasutajal.", "selectForGrammar": "Vali grammatika ikoon tegevuste ja detailide jaoks.", - "newChatActivityTitle": "Lisa lõbus tegevus?", - "newChatActivityDesc": "Tee iga grupivestlus seikluslikuks tegevusplaaniga! Määra köitvad teemad ja eesmärgid ning too vestlused ellu vapustavate piltidega. Süütke loomingulisi arutelusid ja hoidke lõbu sujuvalt voolamas!", - "exploreMore": "Uuri rohkem", "randomize": "Juhuslikuks muutmine", "clear": "Puhasta", "makeYourOwnActivity": "Loo oma tegevus", "featuredActivities": "Esiletõstetud", - "goToChat": "Mine vestlusse", "save": "Salvesta", - "selectActivity": "Vali tegevus", - "wordFocusListeningMultipleChoice": "Milline heli sobib sõnaga?", "createActivity": "Loo tegevus", "startChat": "Alusta vestlust", "translationProblem": "Tõlke probleem", - "perfectTranslation": "Täiuslik tõlge!", - "greatJobTranslation": "Suurepärane töö selle tõlkega!", - "goodJobTranslation": "Hea töö selle tõlkega.", - "makingProgress": "Saad edusamme!", - "keepPracticing": "Jätka harjutamist!", - "niceJob": "Tubli töö!", "publicSpacesTitle": "Õppimiskogukonnad", "askToJoin": "Küsi liitumist", "emptyChatWarningTitle": "Vestlus on tühi", @@ -4763,8 +4336,6 @@ "languageLevelC2Desc": "Ma saan aru peaaegu kõigest, mida kuulen või loen, ning väljendan end sujuvalt ja täpselt.", "newVocab": "Uus sõnavara", "newGrammar": "Uued grammatikakontseptsioonid", - "congratulationsOnReaching": "Sa oled saavutanud taseme {level}!", - "seeDetails": "Vaata üksikasju", "choosePracticeMode": "Klõpsa ühel ülaltoodud nupust, et alustada harjutusülesannet", "userWouldLikeToChangeTheSpace": "{user} soovib liituda ruumiga.", "ban": "Keela", @@ -4780,8 +4351,6 @@ "goToSpaceButton": "Mine ruumi", "shareInviteCode": "Jaga kutsekood: {code}", "leaderboard": "Tabel", - "welcomeUser": "Tere tulemast, {user}", - "joinSpaceOnboardingDesc": "Kas teil on kutsekood või link õppimiskogukonda?", "skipForNow": "Jäta praegu vahele", "permissions": "Luba", "spaceChildPermission": "Kes saab lisada uusi vestlusi ja alamruume sellele ruumile", @@ -4789,13 +4358,9 @@ "defaultOption": "Vaikimisi", "deleteChatDesc": "Kas olete kindel, et soovite selle vestluse kustutada? See kustutatakse kõigilt osalejatelt ning kõik vestluse sõnumid ei ole enam saadaval harjutamiseks ega õppeanalüütikaks.", "deleteSpaceDesc": "Tüüp ja kõik valitud vestlused ja/või alamruumid kustutatakse kõigilt osalejatelt ning kõik vestluse sõnumid ei ole enam saadaval harjutamiseks ega õppeanalüütikaks. Seda toimingut ei saa tagasi võtta.", - "chatWithActivities": "Vestlus tegevustega", "findYourPeople": "Leia oma inimesed", "launch": "Käivita", - "launchActivityToChats": "Käivita tegevus vestlustesse", "searchChats": "Otsi vestlusi", - "selectChats": "Vali vestlused", - "selectChatToStart": "Valmis! Valige vestlus alustamiseks", "maxFifty": "Maksimum 50", "configureSpace": "Seadista ruum", "pinMessages": "Kinnita sõnumid", @@ -4810,9 +4375,7 @@ "activities": "Tegevused", "access": "Juhtimine", "addSubspace": "Lisa alamruum", - "botSettings": "Boti seaded", "activitySuggestionTimeoutMessage": "Töötame kõvasti, et genereerida tegevusi teile, palun kontrollige uuesti minut hiljem", - "accessSettingsWarning": "Ups! Tundub, et teil pole luba selle ruumi juurdepääsureeglite seadistamiseks. Peaksite need üle vaatama, et veenduda, et need vastavad teie vajadustele, ning pöörduma ruumi administraatori poole, kui soovite neid muuta", "howSpaceCanBeFound": "Kuidas seda ruumi leida", "private": "Privaatne", "cannotBeFoundInSearch": "Ei leia otsingus", @@ -4826,16 +4389,6 @@ "createYourSpace": "Loo oma ruum", "youHaveLeveledUp": "Sa oled tõusnud tasemele!", "sendActivities": "Saada tegevusi", - "getStarted": "Alusta", - "getStartedBotChatDesc": "Vestlus AI-ga on suurepärane koht alustamiseks ning Pangea lugemis-, kirjutamis-, kuulamis- ja rääkimisvahendid muudavad selle lihtsaks!", - "getStartedCommunitiesDesc": "Õppimine kogukonnaga on koht, kus Pangea Chat särab!\nSa saad liituda oma klassiga, leida kooli või isegi luua oma!", - "getStartedFriendsDesc": "Kas sul on sõber, kes tahab sinuga õppida?", - "getStartedBotChatComplete": "Hästi tehtud! Sa vestled botiga!", - "getStartedCommunitiesComplete": "Suurepärane, sa oled liitunud ruumiga!", - "getStartedComplete": "Sa oled selle osa lõpetanud!\nJätka meie suurepäraste funktsioonide avastamist, vesteldes sõpradega!", - "getStartedFriendsComplete": "Uuhuu! Sul on sõbrad! 😉", - "getStartedBotChatButton": "Alusta vestlust!", - "getStartedFriendsButton": "Vestle sõbraga", "groupChat": "Rühmavestlus", "directMessage": "Otse sõnum", "newDirectMessage": "Uus otse sõnum", @@ -4851,7 +4404,6 @@ "mySavedActivities": "Minu salvestatud tegevused", "noSavedActivities": "Ei ole salvestatud tegevusi", "saveActivity": "Salvesta see tegevus", - "yourSavedActivities": "Sinu salvestatud tegevused", "failedToPlayVideo": "Video mängimine ebaõnnestus", "done": "Valmis", "inThisSpace": "Selles ruumis", @@ -4885,30 +4437,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -4924,18 +4452,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -4952,18 +4468,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5004,42 +4508,14 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, "@copyClassLinkDesc": { "type": "String", "placeholders": {} }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5052,62 +4528,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5144,10 +4576,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5156,14 +4584,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5172,46 +4592,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5220,10 +4604,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5284,18 +4664,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5304,14 +4672,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5344,18 +4704,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5368,42 +4716,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@classRoster": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5412,14 +4728,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5440,26 +4748,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5480,10 +4768,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5516,25 +4800,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5607,38 +4872,10 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, "@inviteStudentsFromOtherClasses": { "type": "String", "placeholders": {} }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5671,778 +4908,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7435,14 +5904,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@copyClassCodeDesc": { "type": "String", "placeholders": {} @@ -7462,14 +5923,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7531,10 +5984,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7543,18 +5992,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@emptyClassNameWarning": { "type": "String", "placeholders": {} @@ -7563,14 +6000,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7595,50 +6024,22 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, "@languageLevelWarning": { "type": "String", "placeholders": {} }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, "@lockSpace": { "type": "String", "placeholders": {} }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, "@archiveSpace": { "type": "String", "placeholders": {} }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7688,10 +6089,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7724,10 +6121,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7760,10 +6153,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7772,66 +6161,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7852,42 +6185,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7912,154 +6221,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8076,18 +6237,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@addSpaceToSpaceDescription": { "type": "String", "placeholders": {} @@ -8104,14 +6253,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@spaceCapacityNotSet": { "type": "String", "placeholders": {} @@ -8148,10 +6289,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@spaceExceedsCapacity": { "type": "String", "placeholders": {} @@ -8168,10 +6305,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, "@cantAddSpaceChild": { "type": "String", "placeholders": {} @@ -8192,10 +6325,6 @@ "type": "String", "placeholders": {} }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@suggestToSpace": { "type": "String", "placeholders": {} @@ -8212,14 +6341,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8247,26 +6368,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8303,18 +6404,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8351,10 +6444,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@l2SupportNa": { "type": "String", "placeholders": {} @@ -9275,10 +7364,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9459,34 +7544,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9499,22 +7556,10 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@completeActivitiesToUnlock": { "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9543,18 +7588,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, "@addSubspaceWarning": { "type": "String", "placeholders": {} @@ -9563,10 +7596,6 @@ "type": "String", "placeholders": {} }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9714,14 +7743,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9730,34 +7751,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9766,54 +7759,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9822,10 +7779,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9842,10 +7795,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10021,14 +7970,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, "@notInClass": { "type": "String", "placeholders": {} @@ -10037,18 +7978,6 @@ "type": "String", "placeholders": {} }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10077,10 +8006,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10137,30 +8062,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10189,18 +8098,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10317,14 +8218,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10337,10 +8230,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@createASpace": { "type": "String", "placeholders": {} @@ -10353,14 +8242,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10377,14 +8258,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10393,22 +8266,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10421,18 +8278,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10449,22 +8294,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@createActivity": { "type": "String", "placeholders": {} @@ -10477,30 +8310,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@publicSpacesTitle": { "type": "String", "placeholders": {} @@ -10577,18 +8386,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10657,18 +8454,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10697,10 +8482,6 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@findYourPeople": { "type": "String", "placeholders": {} @@ -10709,22 +8490,10 @@ "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10781,18 +8550,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10845,46 +8606,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10949,10 +8670,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11075,37 +8792,27 @@ "maximumActivityParticipants": "Igal tegevusel võib osaleda maksimaalselt {count} osalejat.", "pending": "Ootel", "inactive": "Mitteaktiivne", - "unjoinedActivityMessage": "Kas soovid osaleda? Valige avatud roll!\nVõi veetke aega ja vaadake näitust!", - "fullActivityMessage": "Vabalt vaadake näitust! Kuna osaluseks avatud rolle ei ole, saate vaadata vestlust!", "confirmRole": "Kinnita roll", "openRoleLabel": "AVATUD", "joinedTheActivity": "👋 {username} liitus rolliga {role}", "finishedTheActivity": "🎯 {username} lõpetas selle tegevuse", - "endActivityTitle": "Olen valmis", - "endActivityDesc": "Kas sa said eesmärgid täidetud?\nSee on sinu kinnitus, et astud tagasi sõnumite saatmisest. Ära muretse, lõbu jätkub vestluses! Tundke end vabalt ja nautige näitamist, kuni kõik klõpsavad 'Valmis'.", "archiveToAnalytics": "Lisa minu lõpetatud tegevustesse", "activitySummaryError": "Tegevuste kokkuvõtteid pole saadaval", "requestSummaries": "Paluda kokkuvõtteid", - "loadingActivitySummary": "Laen tegevuse kokkuvõtet...", "generatingNewActivities": "Olete selle keelepaari esimene kasutaja! Palun andke meile hetk, valmistame teile tegevusi.", - "requestAccessTitle": "Soovid taotleda juurdepääsu analüütikatele vaadata?", + "requestAccessTitle": "Küsi analüütika ligipääsu?", "requestAccessDesc": "Kas soovite taotleda juurdepääsu osalejate analüütikate vaatamiseks?\n\nKui osalejad nõustuvad, saavad selle kursuse administraatorid näha nende:\n • kogu sõnavara\n • kogu grammatikakontseptsioone\n • kogu tehtud tegevussessioone\n • kasutatud, õigesti ja valesti grammatikakontseptsioone\n\nNad ei näe:\n • sõnumeid väljaspool kursust vestlustes\n • sõnavara nimekirja", "requestAccess": "Taotle juurdepääsu ({count})", "analyticsInactiveTitle": "Päringuid mitteaktiivsete kasutajate jaoks ei saadetud", "analyticsInactiveDesc": "Mitteaktiivsed kasutajad, kes pole sellest funktsioonist alates sisse loginud, ei näe teie taotlust.\n\nPäringu nupp ilmub, kui nad naasevad. Saate taotluse uuesti saata, klõpsates nupul 'Päring' nende nime all, kui see on saadaval.", "accessRequestedTitle": "Juurdepääsu analüütikatele taotlus", - "accessRequestedDesc": "Kursuse “{space}” administraatorid taotlevad teie õppimise analüütikate vaatamist.\n\nKui nõustute, saavad selle kursuse administraatorid näha teie:\n • kogu sõnavara\n • kogu grammatikakontseptsioone\n • kogu tehtud tegevussessioone\n • kasutatud, õigesti ja valesti grammatikakontseptsioone\n\nNad ei näe:\n • sõnumeid väljaspool kursust vestlustes\n • sõnavara nimekirja", - "allowAccess": "Luba juurdepääs", - "denyAccess": "Keela juurdepääs", + "accessRequestedDesc": "Küsimine admin(ide)lt: {admin} \n\n„{space}” adminid küsivad, et näha teie õppeanalüüse.\n\nKui nõustute, saavad nad vaadata teie:\n • kogusõnavara\n • kogugrammatika mõisted\n • lõpetatud tegevuste seansid\n • spetsiifilised grammatika mõisted, mida on kasutatud, õigesti ja valesti\n\nNad ei saa vaadata teie:\n • sõnumeid kursusest väljaspool vestlustes\n • sõnavara loendit", "adminRequestedAccess": "Administraatorid palusid näha teie analüütikat.", "lastUpdated": "Uuendatud\n{time}", "activityFinishedMessage": "Kõik valmis!", "endForAll": "Lõpeta kõigile", "newCourse": "Uus kursus", - "newCourseSubtitle": "Millist kursuseplaani soovite kasutada?", - "failedToLoadCourses": "Kursuste laadimine nurjus", "numModules": "{num} moodulit", - "numActivityPlans": "{num} tegevusplaani", "coursePlan": "Kursuse plaan", "editCourseLater": "Saate hiljem redigeerida mallide pealkirju, kirjelduid ja kursuse pilti.", "newCourseAccess": "Vaikimisi on kursused privaatsed ning nõuavad administraatori kinnitust, et liituda. Saate neid seadeid igal ajal muuta.", @@ -11119,17 +8826,11 @@ "accessDesc": "Saate teha oma kursuse avatud maailmale! Või muuda oma kursus privaatseks ja turvaliseks.", "createGroupChatDesc": "Kuna tegevussessioonid algavad ja lõpevad, jäävad grupivestlused avatuks regulaarseks suhtlemiseks.", "deleteDesc": "Ainult administraatorid saavad kursust kustutada. See on hävitav tegevus, mis eemaldab kõik kasutajad ja kustutab kõik valitud vestlused kursuse sees. Olge ettevaatlik.", - "failedToLoadCourseInfo": "Kursuse teabe laadimine nurjus", "noCourseFound": "Oh, sellele kursusele on vaja plaani!\n\nKursuse plaanid on teemade ja vestlusaktiviteetide jada.", "additionalParticipants": "+ {num} teist", - "activityNotFoundForCourse": "Seda tegevust ei leitud kursuse raames", - "courseChats": "Kursuse vestlused", - "myActivitySessions": "Minu tegevusessioonid", "directMessages": "Otsevestlused", "whatNow": "Mis nüüd?", "chooseNextActivity": "Valige oma järgmine tegevus!", - "seeInstructions": "Vaata juhiseid", - "hideInstructions": "Peida juhised", "letsGo": "Lähme", "chooseRole": "Valige roll!", "chooseRoleToParticipate": "Valige osalemiseks roll!", @@ -11139,23 +8840,15 @@ "inviteFriends": "Kutsu sõpru", "waitNotDone": "Oota, ma ei ole veel valmis!", "waitingForOthersToFinish": "Ootan, kuni teised lõpetavad...", - "saveToCompletedActivities": "Salvesta lõpetatud tegevustesse", "generatingSummary": "Vestluse analüüs ja tulemuste genereerimine", - "instructionsLanguage": "Juhiste keel", "findCourse": "Leia kursus", - "activityCompletedDesc": "Teie lõpetatud tegevus lisati analüütikasse, kus saate vaadata ja harjutada kasutatud keelt.", "pingParticipantsNotification": "{user} otsib kasutajaid tegevusnõupidamisse {room}", "course": "Kursus", "courses": "Kursused", "courseName": "Kursuse nimi", "createNewCourse": "Uus kursus", - "publicCourses": "Avalikud kursused", "goToCourse": "Mine kursusele: {course}", "activityComplete": "See tegevus on lõpetatud. Tegevuse kokkuvõte peaks olema allpool saadaval.", - "haventChattedMuch": "Tundub, et te pole palju vestelnud, proovige kasutada veel sõnavara sõnu! Kui tunnete, et olete oma eesmärgi saavutanud, saate tegevuse all lõpetada.", - "haveChatted": "Tundub, et olete juba mõnda aega vestelnud! Kui tunnete, et olete oma eesmärgi saavutanud, lõpetage tegevus ja me koostame teile kokkuvõtte vestluses!", - "userDoneAndWaiting": "{num1}/{num2} osalejat on lõpetanud. Oodake, kuni kõik lõpetavad, ja me koostame teile kokkuvõtte vestluses! \n\nKui soovite vestlusse uuesti liituda, klõpsake vestluses jätkamise nuppu.", - "othersDoneAndWaiting": "{num1}/{num2} on lõpetanud. Kas olete oma eesmärgi saavutanud?", "startNewSession": "Alusta uut sessiooni", "joinOpenSession": "Liitu avatud sessiooniga", "less": "vähem", @@ -11165,7 +8858,6 @@ "openToJoin": "Avatud liitumiseks", "results": "Tulemused", "activityDone": "Tegevus tehtud!", - "moreLabel": "veel", "promoCodeInfo": "Sooduskoodid saab sisestada järgmisele lehele", "editsComingSoon": "Linnade ja tegevuste redigeerimise võimalus tuleb varsti.", "editing": "Redigeerimine", @@ -11181,13 +8873,10 @@ "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", - "chooseLanguage": "Vali keel.", + "chooseLanguage": "Vali sihtkeel.", "planTrip": "Planeeri oma reis", "howAreYouTraveling": "Kuidas sa reisid?", "unlockPrivateTrip": "Ava privaatne reis", @@ -11200,25 +8889,20 @@ "courseCode": "Mis on salajane parool?", "courseCodeHint": "Reisi kood või link", "unlockMyTrip": "Ava minu reis", - "anyLevel": "Iga tase", "signupOption": "Kuidas soovite registreeruda?", "withApple": "Apple'iga", "withGoogle": "Google'iga", "withEmail": "E-posti teel", "createAccount": "Loo konto", - "noCoursesFound": "Kursuseid ei leitud", "loginWithEmail": "Logi sisse e-posti teel", "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", - "allCefrLevels": "Kõik CEFR tasemed", "chatListTooltip": "Siin leiad oma otsevestlused! Klõpsa mis tahes kasutaja avataril ja vali „Alusta vestlust“, et saata otsevestlus.", "directMessageBotTitle": "Otsevestlus Pangea botiga", "feedbackTitle": "Tegevuse tagasiside", - "feedbackDesc": "Kuidas tegevust saaks parandada? Kui saate anda mõned detailid, teeme muudatuse!", "feedbackHint": "Teie tagasiside", "feedbackButton": "Esita tagasiside", "directMessageBotDesc": "Inimeste rääkimine on lõbusam, kuid... tehisintellekt on alati valmis!", @@ -11292,14 +8976,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11327,14 +9003,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11347,10 +9015,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11386,19 +9050,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11423,14 +9082,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11439,14 +9090,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11499,10 +9142,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11515,18 +9154,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11539,14 +9166,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11587,26 +9206,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11634,10 +9241,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11648,36 +9251,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11714,10 +9287,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11782,18 +9351,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11858,10 +9415,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11882,10 +9435,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11902,10 +9451,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11914,10 +9459,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11930,10 +9471,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11958,16 +9495,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Kutsu sõpru tegevusse", - "inviteFriendsToActivityCourse": "Kutsu sõpru tegevusse ja kursusele", "feedbackRespDesc": "Kontrollige hommikul uuesti tegevuse uuenduste jaoks.", "activityDropdownDesc": "Kui olete selle tegevusega valmis, klõpsake allpool", - "activityAnalyticsListBody": "Need on teie lõpetatud tegevused! Pärast tegevuste lõpetamist saate neid siin vaadata.", "languageMismatchTitle": "Keele sobimatus", "languageMismatchDesc": "Teie sihtkeel ei vasta selle tegevuse keelele. Kas soovite oma sihtkeelt uuendada?", "reportWordIssueTooltip": "Teata sõna teabega seotud probleemist", "tokenInfoFeedbackDialogTitle": "Sõnateabe tagasiside", - "tokenInfoFeedbackDialogDesc": "Tehisintellekt teeb vigu. Palun kirjeldage kõiki probleeme, mida olete teabe kohta leidnud.", "noPublicCoursesFound": "Avalikke kursusi ei leitud. Kas soovite luua ühe?", "noCourseTemplatesFound": "Me ei leidnud teie sihtkeele jaoks ühtegi kursust. Samal ajal saate vestelda Pangea botiga ja hiljem tagasi tulla rohkemate kursuste jaoks.", "botActivityJoinFailMessage": "Pangea bot võtab vastamiseks aega. Palun proovige hiljem uuesti või kutsuge sõber.", @@ -11975,14 +9508,6 @@ "leaveDesc": "Lahkuge sellest ruumist ja kõigist selles olevatest vestlustest", "selectAll": "Vali kõik", "deselectAll": "Tühista valik", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11991,10 +9516,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12011,10 +9532,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12049,7 +9566,6 @@ "newMessageInPangeaChat": "🗨️ Uus sõnum Pangea vestluses", "shareCourse": "Jaga kursust", "addCourse": "Lisa kursus", - "joinCourseWithCode": "Liitu kursusega koodiga", "joinPublicCourse": "Liitu avaliku kursusega", "vocabLevelsDesc": "Siia lähevad sõnad, kui oled need tasemele tõstnud!", "highlightVocabTooltip": "Tõsta esile sihtvokaabuli sõnad allpool, saates neid või harjutades nendega vestluses.", @@ -12077,10 +9593,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12089,7 +9601,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "DM-e või vestlusi ei leitud. Veenduge, et teie otsing on õigesti kirjutatud.", + "activityAnalyticsTooltipBody": "Need on teie salvestatud tegevused ülevaatamiseks ja harjutamiseks.", + "numSavedActivities": "Salvestatud tegevuste arv", + "saveActivityTitle": "Salvesta tegevus", + "saveActivityDesc": "Hea töö! Salvesta see tegevus hilisemaks ülevaatamiseks ja harjutamiseks", + "levelInfoTooltip": "Siit näete kõiki punkte, mida olete teeninud ja kuidas!", + "alreadyInCourseWithID": "Te olete juba selles plaanis kursuses. Kas soovite luua kursuse sama plaaniga või minna olemasolevasse kursusesse?", + "goToExistingCourse": "Mine olemasolevasse kursusesse", + "emojiView": "Emotikonide vaade", + "feedbackDialogDesc": "Mina teen ka vigu! Kas on midagi, mis aitaks mul paremaks saada?", + "contactHasBeenInvitedToTheCourse": "Kontakt on kutsutud kursusele", + "activityStatsButtonTooltip": "Tegevuse info", + "allow": "Luba", + "deny": "Keela", + "enabledRenewal": "Luba tellimuse uuendamine", + "subscriptionEndsOn": "Tellimus lõppeb", + "subscriptionRenewsOn": "Tellimus uuendatakse", + "waitForSubscriptionChanges": "Teie tellimuse muudatused võivad rakenduses kajastuda mõne hetke pärast.", + "subscribeReadingAssistance": "Tellige, et avada sõnumite tööriistad", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaani", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhara", + "arDisplayName": "Araabia", + "asDisplayName": "Assami", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Aserbaidžaani", + "baDisplayName": "Baškiiri", + "banDisplayName": "Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Valgevene", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgaaria", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikoli", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Bretoni", + "bsDisplayName": "Bosniakeelne", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Kataloani", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kesk-Kurdi", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsika", + "crhDisplayName": "Krimmi türgi", + "crsDisplayName": "Seselwa kreoolne prantsuse", + "csDisplayName": "Tšehhi", + "cvDisplayName": "Tšuvaš", + "cyDisplayName": "Welsh", + "daDisplayName": "Taani", + "deDisplayName": "Saksa", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglise", + "enAUDisplayName": "Inglise (Austraalia)", + "enGBDisplayName": "Inglise (Ühendkuningriik)", + "enINDisplayName": "Inglise (India)", + "enUSDisplayName": "Inglise (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Hispaania", + "esESDisplayName": "Hispaania (Hispaania)", + "esMXDisplayName": "Hispaania (Mehhiko)", + "euDisplayName": "Baskisch", + "faDisplayName": "Persia", + "ffDisplayName": "Fulah", + "fiDisplayName": "Soome", + "filDisplayName": "Filipiinlane", + "fjDisplayName": "Fidži", + "foDisplayName": "Fääri", + "frDisplayName": "Prantsuse", + "frCADisplayName": "Prantsuse (Kanada)", + "frFRDisplayName": "Prantsuse (Prantsusmaa)", + "fyDisplayName": "Läänefrisi", + "gaDisplayName": "Iiri", + "gaaDisplayName": "Ga", + "gdDisplayName": "Šoti gaeli", + "glDisplayName": "Galeegi", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goa Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havai", + "heDisplayName": "Hebrangi", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Horvaadi", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haiti kreool", + "huDisplayName": "Ungari", + "hyDisplayName": "Armeenia", + "idDisplayName": "Indoneesia", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandi", + "itDisplayName": "Itaalia", + "jaDisplayName": "Jaapani", + "jvDisplayName": "Javani", + "kaDisplayName": "Gruusia", + "kkDisplayName": "Kazaški", + "kmDisplayName": "Khmeeri", + "knDisplayName": "Kannada", + "koDisplayName": "Korea", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Kongo Demokraatlik Vabariik)", + "kuDisplayName": "Kurdish", + "kyDisplayName": "Kirgisi", + "laDisplayName": "Ladina", + "lbDisplayName": "Luksemburgi", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgi", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombardi", + "lnDisplayName": "Lingala", + "loDisplayName": "Laos", + "ltDisplayName": "Leedu", + "ltgDisplayName": "Latgali", + "luoDisplayName": "Luo (Keenia ja Tansaania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Läti", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagassi", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedoonia", + "mlDisplayName": "Malajalam", + "mnDisplayName": "Mongoolia", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malai", + "msArabDisplayName": "Malai (araabia)", + "msMYDisplayName": "Malai (Malaisia)", + "mtDisplayName": "Malta keel", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birma keel", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norra (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Hollandi keel", + "nlBEDisplayName": "Flaami keel", + "noDisplayName": "Norra keel", + "nrDisplayName": "Lõuna Ndebele", + "nsoDisplayName": "Põhja Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Oktsitaania", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poola", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugali", + "ptBRDisplayName": "Portugali (Brasiilia)", + "ptPTDisplayName": "Portugali (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumeenia", + "roMDDisplayName": "Moldova", + "romDisplayName": "Romani", + "ruDisplayName": "Vene", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskriti", + "satDisplayName": "Santali", + "scnDisplayName": "Sitsiilia", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shani", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovaki", + "slDisplayName": "Sloveeni", + "smDisplayName": "Samoa", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albaania", + "srDisplayName": "Serbia", + "srMEDisplayName": "Montenegrina", + "ssDisplayName": "Swati", + "stDisplayName": "Lõuna-Sotho", + "suDisplayName": "Sundani", + "svDisplayName": "Rootsi", + "swDisplayName": "Swaheli", + "szlDisplayName": "Sileesia", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadžiki", + "thDisplayName": "Tai", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Türgi", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Türgi", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uiguuri", + "ukDisplayName": "Ukraina", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Usbeki", + "viDisplayName": "Vietnami", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonikeel", + "yueCNDisplayName": "Kantonikeel (Hiina)", + "yueHKDisplayName": "Kantonikeel (Hongkong)", + "zhDisplayName": "Hiina", + "zhCNDisplayName": "Hiina (Lihtsustatud)", + "zhTWDisplayName": "Hiina (Traditsiooniline)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12156,6 +10854,7 @@ "notStartedActivitiesTitle": "Avatud seansid ({num})", "inProgressActivitiesTitle": "Toimub praegu ({num})", "completedActivitiesTitle": "Tehtud ({num})", + "pickDifferentActivity": "Vali teine tegevus", "inOngoingActivity": "Teil on käimasolev tegevus!", "@notStartedActivitiesTitle": { "type": "String", @@ -12181,10 +10880,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Teie sihtkeel ei ühti selle sõnumiga. Kas soovite oma sihtkeelt uuendada?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "See on kõik, kes on selles kursuses. Klõpsake mis tahes kasutaja avatari ja valige \"alusta vestlust\", et saata DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "See sõnavara sõna eemaldatakse teie analüüsist püsivalt", + "woman": "Naine", + "man": "Mees", + "otherGender": "Muu", + "unselectedGender": "Valige soo valik", + "gender": "Sugu", + "chatParticipantTooltip": "See on kõik, kes on selles vestluses. Klõpsake mis tahes kasutaja avatarile ja valige \"alusta vestlust\", et saata DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Õppimise tööriistad on keelatud sõnumite jaoks, mis ei ole teie sihtkeeles.", + "vocabEmoji": "Sõnavara emojid", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Küsi regeneratsiooni", + "optionalRegenerateReason": "(Valikuline) Põhjus", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Oled seadnud emotikoni {lemma} jaoks! Kasutame seda emotikoni sõna esindamiseks praktika tegevustes edaspidi.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Ootame sisselogimise lõpetamist", + "ssoDialogDesc": "Avasime uue vahekaart, et saaksite turvaliselt sisse logida.", + "ssoDialogHelpText": "🤔 Kui te ei näinud uut vahekaarti, kontrollige palun oma hüpikakna blokeerijat.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Keela keele tööriistad", + "disableLanguageToolsDesc": "Kas soovite automaatset keeleabi keelata?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Luba keelatud. Aktiveeri salvestamise õigused, et salvestada helisõnumeid.", + "genericWebRecordingError": "Midagi läks valesti. Soovitame sõnumite salvestamiseks kasutada Chrome'i brauserit.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Parima kogemuse saamiseks selle rakenduse kasutamisel palun suurendage oma ekraani suurust.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Tegevused järgmise teema avamiseks", "activitiesToUnlockTopicDesc": "Määrake tegevuste arv järgmise kursuse teema avamiseks", "@activitiesToUnlockTopicTitle": { @@ -12194,5 +11011,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Õige sõnavara määratlemise harjutus", + "constructUseIncLMDesc": "Vale sõnavara määratlemise harjutus", + "constructUseCorLADesc": "Õige sõnavara heliharjutus", + "constructUseIncLADesc": "Vale sõnavara heliharjutus", + "constructUseBonus": "Boonus sõnavara harjutamise ajal", + "practiceVocab": "Harjuta sõnavara", + "selectMeaning": "Vali tähendus", + "selectAudio": "Vali sobiv heli", + "congratulations": "Palju õnne!", + "anotherRound": "Veel üks voor", + "noActivityRequest": "Praegu ei ole aktiivsuse taotlust.", + "quit": "Välju", + "congratulationsYouveCompletedPractice": "Palju õnne! Olete lõpetanud harjut seansi.", + "mustHave10Words": "Te peate omama vähemalt 10 sõnavara sõna, et neid harjutada. Proovige rääkida sõbraga või Pangea Botiga, et rohkem avastada!", + "botSettings": "Boti seaded", + "activitySettingsOverrideWarning": "Keele ja keele taseme määrab tegevusplaan", + "voice": "Hääl", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 0ef828f31..80f3ffc6e 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -1,6 +1,6 @@ { "@@locale": "eu", - "@@last_modified": "2026-01-06 13:01:29.144037", + "@@last_modified": "2026-01-07 14:25:02.696896", "about": "Honi buruz", "@about": { "type": "String", @@ -3378,26 +3378,14 @@ "commandHint_logoutall": "Saioa itxi gailu aktibo guztietan", "displayNavigationRail": "Erakutsi nabigazio errail txikian", "customReaction": "Erreakzio pertsonalizatua", - "accountInformation": "Kontuaren informazioa", - "addGroupDescription": "Gehitu txatearen deskribapena", - "addNewFriend": "Gehitu lagun berri bat", - "alreadyHaveAnAccount": "Dagoeneko kontu bat duzu?", - "createNewGroup": "Sortu txate berri bat", - "editChatPermissions": "Editatu txatearen baimenak", "writeAMessageLangCodes": "Idatzi {l1} edo {l2}...", "requests": "Eskariak", - "allCorrect": "Horrela esango nuke! Polita!", - "newWayAllGood": "Horrela esango nuke ez, baina ondo iruditzen zait!", - "othersAreBetter": "Hm, agian hobeto esateko modua egon daiteke.", "holdForInfo": "Klikatu eta eutsi hitzaren informazioarentzat.", "greenFeedback": "Horrela jarriko nuke!", "yellowFeedback": "Hm, saiatu eta ikusi ea funtzionatzen duen! Hitz hau erabiltzeko, klik berriro.", "redFeedback": "Ez nago ziur hori denik...", "itInstructionsTitle": "Lagundu dezaket itzultzen!", "itInstructionsBody": "Klik eta eutsi aukera hitzaren informazioaren bila.", - "oneday": "Azken 24 ordu", - "oneweek": "Azken 7 egun", - "onemonth": "Aurreko hilabetea", "gaTooltip": "L2 gramatika laguntzarekin erabiltzeko", "taTooltip": "L2 itzulpen laguntzarekin erabiltzeko", "unTooltip": "Beste", @@ -3407,58 +3395,27 @@ "interactiveTranslatorAllowed": "Ikaslearen Aukera", "interactiveTranslatorRequired": "Beharrezkoa", "notYetSet": "Oraindik ez ezarri", - "myLearning": "Nire Analisia", "waTooltip": "Laguntzarik gabe erabiltzeko", - "changeDateRange": "Data tartea aldatu", - "classDescription": "Deskribapena", - "addStudents": "Erabiltzaileak gonbidatu esteka edo kode bidez", - "copyClassLink": "Kopiatu gonbidapen esteka", - "copyClassCode": "Kopiatu gonbidapen kodea", - "inviteStudentByUserName": "Erabiltzaile izenarekin ikasleak gonbidatu", "languageSettings": "Hizkuntza ezarpenak", "interactiveTranslator": "Itzulpen laguntza", - "shareVideo": "Banatu bideoa", - "shareVideoDesc": "Gaitu hau ikasleek chatetan bideoklipak partekatzeko aukera izan dezaten.", - "shareFiles": "Banatu fitxategiak", - "selectLanguageLevel": "Hizkuntza maila hautatu", "noIdenticalLanguages": "Mesedez, aukeratu hizkuntza oinarria eta helburua desberdinak izan daitezen", - "iWantALanguagePartnerFrom": "Hau da:", - "worldWide": "Munduan zehar", - "noResults": "Ez da emaitzarik! Saiatu bilaketa zabalduz.", "searchBy": "Bilatu herrialde eta hizkuntzen arabera", - "iWantAConversationPartner": "Nahi dut elkarrizketa partner bat", - "iWantALanguagePartnerWhoSpeaks": "Hizketan:", - "iWantALanguagePartnerWhoIsLearning": "Ikasten:", "joinWithClassCode": "Batu ikastaroan", - "joinWithClassCodeHint": "Sartu gonbidapen kodea", - "languageLevelPreA1": "Hasiberri Benetakoa (Pre A1)", - "languageLevelA1": "Hasiberri (A1)", - "languageLevelA2": "Oinarrizkoa (A2)", - "languageLevelB1": "Erdakorra (B1)", - "languageLevelB2": "Goren Erdakorra (B2)", - "languageLevelC1": "Aurreratua (C1)", - "languageLevelC2": "Maisu (C2)", + "languageLevelPreA1": "Hasiberri Baxua (Pre A1)", + "languageLevelA1": "Hasiberri Erdi (A1)", + "languageLevelA2": "Hasiberri Altua (A2)", + "languageLevelB1": "Ertain Ertaina (B1)", + "languageLevelB2": "Aurreratu Baxua (B2)", + "languageLevelC1": "Aurreratu Ertaina (C1)", + "languageLevelC2": "Goren (C2)", "changeTheNameOfTheClass": "Aldatu izena", "changeTheNameOfTheChat": "Aldatu txateatzen denaren izena", - "askPangeaBot": "Galdetu Pangea Bot-i testuinguruko definizio bat.", "sorryNoResults": "Barkatu, ez dago emaitzarik.", "ignoreInThisText": "Ez zaitez kontuan hartu", - "helpMeTranslate": "Bai!", - "needsItShortMessage": "Helburutik kanpo", "needsItMessage": "Itxaron, hori ez da {targetLanguage}! Laguntza behar duzu itzultzen?", - "needsIgcMessage": "Mezu honek gramatika errorea dauka.", - "tokenTranslationTitle": "Hitz bat zure oinarrizko hizkuntzan dago.", - "spanTranslationDesc": "Ikusi behean posible itzulpenak.", - "spanTranslationTitle": "Hitz batzuk zure oinarrizko hizkuntzan daude.", - "l1SpanAndGrammarTitle": "Helburuko hizkuntza kanpoan", - "l1SpanAndGrammarDesc": "Honek zure oinarrizko hizkuntzan egon daiteke edo gramatika errorea izan daiteke.", - "otherTitle": "Errorea duzu.", - "otherDesc": "Ikusi behean zuzenketa posibleak.", "countryInformation": "Nire herria", - "myLanguages": "Nire hizkuntza oinarrizko eta helburuak", "targetLanguage": "Helburu Hizkuntza", "sourceLanguage": "Oinarrizko hizkuntza", - "languagesISpeak": "Nire hizkuntzak hitz egiten ditut", "updateLanguage": "Nire hizkuntzak", "whatLanguageYouWantToLearn": "Zein hizkuntza ikasi nahi duzu?", "whatIsYourBaseLanguage": "Zein da zure oinarrizko hizkuntza?", @@ -3473,13 +3430,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klikatu hemen itzulpen laguntza eta gramatika laguntza ezarpenak eguneratzeko", "errorDisableITClassDesc": "Itzulpen laguntza desgaituta dago ikastaro honetan dagoen chat-entzat.", "errorDisableIGCClassDesc": "Gramatika laguntza desgaituta dago ikastaro honetan dagoen chat-entzat.", - "itIsDisabled": "Interaktiboa Itzulpena desgaituta dago", - "igcIsDisabled": "Interaktiboko Gramatika Egiaztapena desgaituta dago", - "goToLearningSettings": "Joan Ikaskuntza Ezarpenetara", "error405Title": "Hizkuntzak ez daude ezarrita", "error405Desc": "Mesedez, ezarri zure hizkuntzak Nagusien Menuko > Ikaskuntza Ezarpenetan.", - "loginOrSignup": "Saioa hasi edo erregistratu", - "iAgreeToThe": "Ados nago ", "termsAndConditions": " Baldintzak eta Baldintzak", "andCertifyIAmAtLeast13YearsOfAge": " eta ziurtatzen dut gutxienez 16 urte ditudala.", "error502504Title": "Wow, ikasle asko daude linean!", @@ -3487,40 +3439,21 @@ "error404Title": "Itzulpen errorea!", "error404Desc": "Pangea Botak ez du ziur nola itzuli hori...", "errorPleaseRefresh": "Begiratzen ari gara! Mesedez, kargatu berriro eta saiatu berriro.", - "toggleIT": "Interaktiboko Itzulpena", - "toggleIGC": "Interaktiboko Gramatika Egiaztapena", - "toggleToolSettingsDescription": "Hemen zure hizkuntza tresna ezarpen pertsonalizatuak alda ditzakezu.", "connectedToStaging": "Konektatuta Staging-era", "learningSettings": "Ikaskuntza ezarpenak", - "sendVoiceNotes": "Bidali Ahots Notak", - "sendVoiceNotesDesc": "Gaitu hau ikasleei chatetan ahots notak bidaltzeko aukera emateko.", - "chatTopic": "Gaia eztabaida", - "chatTopicDesc": "Ezarri eztabaida gaia", - "inviteStudentByUserNameDesc": "Zure ikasleak kontu bat badu, bilatu dezakezu haiekin.", "participants": "Parte-hartzaileak", - "almostPerfect": "Hori zuzena dirudi! Hona hemen nik esango niokeena.", - "prettyGood": "Oso ondo! Hona hemen nik esango niokeena.", - "letMeThink": "Hmmm, ikus dezagun nola egin duzun!", "clickMessageTitle": "Laguntza behar duzu?", "clickMessageBody": "Klikatu mezua hizkuntza tresnak, itzulpenak, erreprodukzioa eta gehiago lortzeko!", - "understandingMessagesTitle": "Definizioak eta itzulpenak!", - "understandingMessagesBody": "Klikatu azpimarratutako hitzak definizioak ikusteko. Itzuli mezua aukerak erabiliz (goiko eskuinean).", "allDone": "Bukatu da!", "vocab": "Hiztegia", "low": "Ezagutza frogatzen dugu erabiltzaileak hitz hauek ez dituela ulertzen.", "medium": "Hitz hauek erabili dira. Ez da argi erabiltzaileak hitzak guztiz ulertzen dituen edo ez.", "high": "Ezagutza frogatzen dugu erabiltzaileak hitz hauek ulertzen dituela.", - "unknownProficiency": "Hitz hauek ez dira erabili Pangea Chat-en.", - "changeView": "Aldatu ikuspegiak.", - "clearAll": "Garbitu hitz guztiak?", - "generateVocabulary": "Sortu hiztegia izenburu eta deskribapenetik", - "generatePrompts": "Sortu iradokizunak", "subscribe": "harpidetu", "getAccess": "Harpidetu orain!", "subscriptionDesc": "Mezularitza doakoa da! Harpidetu elkarreragingo itzulpena, gramatika egiaztapena eta ikasketa analitikak askatzeko.", "subscriptionManagement": "Harpidetza Kudeaketa", "currentSubscription": "Uneko Harpidetza", - "changeSubscription": "Aldatu zure harpidetza", "cancelSubscription": "Ezeztatu zure harpidetza", "selectYourPlan": "Aukeratu Zure Plana", "subsciptionPlatformTooltip": "Mesedez, saioa hasi zure gailu originalean zure harpidetza planaren kudeaketa egiteko", @@ -3529,9 +3462,6 @@ "paymentHistory": "Ordainketa Historia", "emptyChatDownloadWarning": "Ezin da hutsik dagoen chat-a deskargatu", "update": "Eguneratu", - "updateDesc": "Orain, eguneratu dezakezu aplikazio hau {localVersion}tik {storeVersion}ra", - "maybeLater": "Agian geroago", - "mainMenu": "Menu Nagusia", "toggleImmersionMode": "Inguraketa Modua", "toggleImmersionModeDesc": "Gaituta dagoenean, mezu guztiak zure hizkuntza helburuan erakusten dira. Ezarpen hau erabilgarria da hizkuntza trukeetan.", "itToggleDescription": "Hizkuntza ikaskuntza tresna honek zure hizkuntza oinarrian hitzak identifikatuko ditu eta helburu hizkuntzara itzultzen lagunduko dizu. Nahiz eta oso gutxitan, AI-k akatsak egin ditzake itzulpenetan.", @@ -3546,212 +3476,13 @@ "definitionsToolDescription": "Gaituta dagoenean, urdinez azpimarratutako hitzak klik egin daitezke definizioak ikusteko. Klik egin mezuei definizioak ikusteko.", "translationsToolDescrption": "Gaituta dagoenean, klik egin mezua eta itzulpen ikona ikusteko zure hizkuntza oinarrian mezua.", "welcomeBack": "Ongi etorri berriro! 2023-2024ko pilotuaren parte bazina, jarri gurekin harremanetan zure pilotu espezifikoaren harpidetza lortzeko. Zure klasearentzat lizentziak erosi dituen irakaslea bazara (edo zure erakundeak erosi baditu), jarri gurekin harremanetan irakaslearen harpidetza lortzeko.", - "kickAllStudents": "Bota Ikasle Guztiak", - "kickAllStudentsConfirmation": "Ziur zaude ikasle guztiak bota nahi dituzula?", - "inviteAllStudents": "Deitu Ikasle Guztiak", - "inviteAllStudentsConfirmation": "Ziur zaude ikasle guztiak gonbidatu nahi dituzula?", - "inviteUsersFromPangea": "Gehitu administratzaileak", - "redeemPromoCode": "Erabili Promozio Kodea", - "enterPromoCode": "Sartu Promozio Kodea", "downloadTxtFile": "Deskargatu Testu Fitxategia", "downloadCSVFile": "Deskargatu CSV Fitxategia", "promotionalSubscriptionDesc": "Une honetan promozio-eskubide bizia duzu. Laguntza lortzeko, mezua bidali support@pangea.chat helbidera zure harpidetza aldatzeko.", "originalSubscriptionPlatform": "Harpidetza {purchasePlatform} bidez erosi da", "oneWeekTrial": "Astebete Probako", "downloadXLSXFile": "Deskargatu Excel Fitxategia", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albaniar", - "amDisplayName": "Amharar", - "arDisplayName": "Arabiar", - "anDisplayName": "Aragoniar", - "hyDisplayName": "Armeniar", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Basko", - "euDisplayName": "Euskaraz", - "beDisplayName": "Belarusa", - "bnDisplayName": "Bengalera", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniera", - "brDisplayName": "Bretoiera", - "bgDisplayName": "Bulgariera", - "myDisplayName": "Birmaniera", - "caDisplayName": "Katalana, Valenciana", - "chDisplayName": "Chamorro", - "ceDisplayName": "Txetxenera", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Txinera", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Kornikoa", - "coDisplayName": "Korsikarra", - "crDisplayName": "Cree", - "hrDisplayName": "Kroaztarra", - "csDisplayName": "Txekiar", - "daDisplayName": "Danés", - "dvDisplayName": "Divehi; Dhivehi; Maldiviar;", - "nlDisplayName": "Holandés", - "enDisplayName": "Ingelesa", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estoniar", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijiar", - "fiDisplayName": "Finlandiar", - "frDisplayName": "Frantses", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galiziar", - "kaDisplayName": "Gergiar", - "deDisplayName": "Alemana", - "elDisplayName": "Greziera, Modernoa", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitiar, Haitiar Kreolera", - "haDisplayName": "Hausara", - "heDisplayName": "Hebrew (garaikoz)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hungariera", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesieraz", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandaraz", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandieraz", - "itDisplayName": "Italieraz", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonieraz", - "jvDisplayName": "Javanesieraz", - "klDisplayName": "Kalaallisut, Groenlandieraz", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": " Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korear", - "kuDisplayName": "Kurdish", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latina", - "lbDisplayName": "Luxembourgish, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiar", - "ltDisplayName": "Lituaniar", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letonieraz", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedoniaraz", - "mgDisplayName": "Malagasy", - "msDisplayName": "Malaiaraz", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltez", - "miDisplayName": "Maori", - "mrDisplayName": "Maratzeraz (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongoliaraz", - "naDisplayName": "Nauruaraz", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norvegieraz Bokmål", - "ndDisplayName": "Ipar Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norvegieraz Nynorsk", - "noDisplayName": "Norvegieraz", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Hego Ndebele", - "ocDisplayName": "Okzitaniera", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Eliza Zaharreko Zahar Gorria, Eliza Zaharreko, Eliza Zaharreko Zahar Gorria, Old Bulgarian, Old Slavonic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persiera", - "plDisplayName": "Poloniera", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugesa", - "quDisplayName": "Kechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Errumaniera, Moldaviarra, Moldovarra", - "ruDisplayName": "Errusiera", - "saDisplayName": "Sanskrit (Saṃskṛta)", - "scDisplayName": "Sardiniera", - "sdDisplayName": "Sindhi", - "seDisplayName": "Ipar Northern Sami", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbiar", - "gdDisplayName": "Galego Eskoziarra, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Eslovako", - "slDisplayName": "Esloveno", - "soDisplayName": "Somali", - "stDisplayName": "Soto Hegoaldeko", - "esDisplayName": "Gaztelania", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Suediar", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Tailanda", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetako, Tibetakoa, Erdialdeko Tibetakoa", - "tkDisplayName": "Turkmena", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga uharteak)", - "trDisplayName": "Turkiera", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatarra", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiera", - "ugDisplayName": "Uighur, Uighur", - "ukDisplayName": "Ukrainiera", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbekera", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamera", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Galesa", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisian Mendebaleko", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Ezezaguna", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiiarra", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Anitz", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebreeraz", - "jwDisplayName": "Javanes", - "moDisplayName": "Moldaviarra", - "shDisplayName": "Serbo-Kroaziarra", "wwCountryDisplayName": "Munduan zehar", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Aland uharteak", @@ -3999,41 +3730,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Ordaindu", - "allPrivateChats": "Pribatutasun txat guztiak", - "unknownPrivateChat": "Pribatutasun txalungorik eza", + "pay": "Checkout", "invitedToSpace": "{user}k gonbidatu zaitu ikastaro batean parte hartzera: {space}! Onartu nahi duzu?", - "declinedInvitation": "Gonbidapena ukatu da", - "acceptedInvitation": "Gonbidapena onartu da", "youreInvited": "📩 Gonbidatua zara!", "invitedToChat": "{user}k gonbidatu zaitu chat batean parte hartzera: {name}! Onartu nahi duzu?", "monthlySubscription": "Hilero", "yearlySubscription": "Urtero", "defaultSubscription": "Pangea Chat Harpidetza", "freeTrial": "Aukerazko Probaldia", - "grammarAnalytics": "Hitzarmenaren Analisia", "total": "Guztira: ", "noDataFound": "Ez da datu aurkitu", - "promoSubscriptionExpirationDesc": "Zure harpidetza promozionala da eta {expiration} data amaitzen da. Laguntza lortzeko, bidali mezu bat support@pangea.chat helbidera zure harpidetza aldatzeko.", - "emptyChatNameWarning": "Mesedez, sartu izen bat this chat", "blurMeansTranslateTitle": "Zergatik da mezuak lausotuta?", "blurMeansTranslateBody": "Immersion modua aktibatuta dagoenean, zure hizkuntza oinarrizko mezuak lausotuta geratzen dira Pangea Bot-ek zure helburu hizkuntzara itzultzen dituen bitartean. Immersion modua pertsonalizazio eta ikastaroaren ezarpenetan aktiba daiteke.", - "someErrorTitle": "Hmmm, zerbait ez da ondo", - "someErrorBody": "Errore bat izan daiteke edo zure hizkuntza oinarrizkoan zerbait oker dago.", "bestCorrectionFeedback": "Hori zuzena da!", "distractorFeedback": "Hori ez da oso zuzena.", "bestAnswerFeedback": "Hori zuzena da!", "definitionDefaultPrompt": "Zer esan nahi du hitz horrek?", "practiceDefaultPrompt": "Zer da erantzun onena?", "correctionDefaultPrompt": "Zer da ordezko onena?", - "itStartDefaultPrompt": "Zer laguntza nahi duzu itzultzen?", - "lockedChatWarning": "🔒 Chat hau blokeatuta dago", - "lockChat": "Blokeatu Chat", - "suggestToChat": "Iradoki chat hau", - "suggestToChatDesc": "Iradokitako chat-ak chat zerrendetan agertuko dira", "acceptSelection": "Onartu Zuzendaritza", - "acceptSelectionAnyway": "Erabili hori edozer", - "makingActivity": "Jarduera sortzen", "why": "Zergatik?", "definition": "Definizioa", "exampleSentence": "Adibidearen Zatia", @@ -4041,128 +3756,55 @@ "reportMessageTitle": "{reportingUserId} erabiltzaileak {roomName} txataren mezua salatu du {reportedUserId} erabiltzailearen izenean", "reportMessageBody": "Mezua: {reportedMessage}\nArrazoia: {reason}", "noTeachersFound": "Ez da irakaslerik aurkitu salatzeko", - "viewArchive": "Artxiboa Ikusi", "trialExpiration": "Zure proba-aldia {expiration} data amaitzen da", "freeTrialDesc": "Erabiltzaile berriek Pangea Chat-en aste bateko proba-aldia doan jasotzen dute", "activateTrial": "Proba Doakoa 7 Egun", "successfullySubscribed": "Zure harpidetza arrakastaz egin duzu!", "clickToManageSubscription": "Hemen klik egin zure harpidetza kudeatzeko.", - "errorGettingAudio": "Errorea audioa lortzean. Mesedez, freskatu orria eta saiatu berriro.", "signUp": "Erregistratu", "pleaseChooseAtLeastChars": "Mesedez, aukeratu gutxienez {min} karaktere.", "noEmailWarning": "Mesedez, sartu baliozko email helbide bat. Bestela, ezin izango duzu zure pasahitza berrezarri. Ez baduzu nahi, sakatu berriro botoian jarraitzeko.", "pleaseEnterValidEmail": "Mesedez, sartu baliozko email helbide bat.", "pleaseChooseAUsername": "Mesedez, aukeratu erabiltzaile-izena", - "chooseAUsername": "Aukeratu erabiltzaile-izena", "define": "Definiatu", "listen": "Entzun", - "addConversationBot": "Gehitu Elkarrizketa Bot-a", - "addConversationBotDesc": "Gehitu bot bat elkarrizketa honetan", - "convoBotSettingsDescription": "Editatu elkarrizketa gaia eta zailtasuna", - "enterAConversationTopic": "Sartu elkarrizketa gaia", - "conversationTopic": "Elkarrizketa gaia", - "enableModeration": "Gaitu moderazioa", - "enableModerationDesc": "Gaitu moderazio automatikoa mezak bidali aurretik berrikusteko", - "conversationLanguageLevel": "Zein da elkarrizketa honetako hizkuntzaren maila?", - "showDefinition": "Erakutsi Definizioa", - "subscriptionPopupTitle": "Esaldia hau gramatika akats bat izan dezake...", - "subscriptionPopupDesc": "Hautatu gaur egun itzulpen eta gramatika zuzenketa irekitzeko!", - "seeOptions": "Ikusi aukerak", - "continuedWithoutSubscription": "Jarraitu harpidetu gabe", "trialPeriodExpired": "Zure proba epea amaitu da", - "selectToDefine": "Klikatu edozein hitz bere definizioa ikusteko!", "translations": "itzulpenak", "messageAudio": "mezua audioa", "definitions": "definizioak", "subscribedToUnlockTools": "Harpidetu interactiveko itzulpen eta gramatika egiaztapenak, audio jolasak, praktika jarduera pertsonalizatuak eta ikasketa analitikak irekitzeko!", "translationTooltip": "Itzuli", - "audioTooltip": "Jolastu Audioa", "speechToTextTooltip": "Transkribatu", - "certifyAge": "Ziurtatzen dut {age} urtetik gorakoa naizela", "kickBotWarning": "Pangea Bot botaren kenduak, elkarrizketa bot-a ezabatuko da this chat-etik.", - "joinToView": "Sartu gelan xehetasunak ikusteko", "refresh": "Berrabiatu", - "autoPlayTitle": "Auto Jolas Mezua", - "autoPlayDesc": "Gaituta dagoenean, mezuren testu-ahots audioa automatikoki jokatuko da hautatuta dagoenean.", "messageAnalytics": "Mezua Analisia", "words": "Hitzak", "score": "Puntuazioa", "accuracy": "Zehatza", "points": "Puntuak", "noPaymentInfo": "Ez dago ordainketa informaziorik behar!", - "conversationBotModeSelectDescription": "Elkarrizketa jarduera", - "conversationBotModeSelectOption_discussion": "Eztabaida", - "conversationBotModeSelectOption_custom": "Pertsonalizatua", - "conversationBotModeSelectOption_conversation": "Elkarrizketa", - "conversationBotModeSelectOption_textAdventure": "Abentura Testua", - "conversationBotModeSelectOption_storyGame": "Joko Istorioa", - "conversationBotDiscussionZone_title": "Eztabaida Ezarpenak", - "conversationBotDiscussionZone_discussionTopicLabel": "Eztabaidaren Gaia", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Ezarri eztabaidaren gaia", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Eztabaidaren Gako-hitzak", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Ezarri eztabaidaren gako-hitzak", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Gako-hitzen zerrenda, eztabaida gidatzeko, koma erabiliz", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Bidali eztabaidaren deia ordutegi batean", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Orduen arteko tarteak eztabaidaren deien artean", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Erantzun reaction-ean", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Eztabaidaren deia bidaltzeko reaction", - "conversationBotCustomZone_title": "Ezarpen Pertsonalizatuak", - "conversationBotCustomZone_customSystemPromptLabel": "Sistema deia", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Ezarri sistema deia pertsonalizatua", - "conversationBotCustomZone_customSystemPromptEmptyError": "Sistema deia pertsonalizatua falta da", - "botConfig": "Bot eta jarduera ezarpenak", - "botConfigNoPermissionTitle": "Baimena ez", - "botConfigNoPermissionMessage": "Jarri kontaktuan gelako administratzailearekin botaren konfigurazioa aldatzeko", - "addConversationBotDialogTitleInvite": "Berretsi elkarrizketa bot-a gonbidatzea", - "addConversationBotButtonInvite": "Deitu", - "addConversationBotDialogInviteConfirmation": "Deitu", - "addConversationBotButtonTitleRemove": "Egiaztatu elkarrizketa bot-a ezabatzeko", - "addConversationBotButtonRemove": "Ezabatu", - "addConversationBotDialogRemoveConfirmation": "Ezabatu", - "conversationBotConfigConfirmChange": "Egiaztatu", - "conversationBotStatus": "Deitu bot-a", - "conversationBotTextAdventureZone_title": "Testu Abentura", - "conversationBotTextAdventureZone_instructionLabel": "Joko Maisuaren Argibideak", - "conversationBotTextAdventureZone_instructionPlaceholder": "Ezarri jokoa maisuaren argibideak", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Joko maisuaren argibideak falta dira", - "studentAnalyticsNotAvailable": "Ikasleen datuak une honetan ez daude eskuragarri", - "roomDataMissing": "Datu batzuk falta daitezke geluetan, non ez zaren kidea.", "updatePhoneOS": "Baliteke zure gailuaren OS bertsioa eguneratu behar izatea.", "wordsPerMinute": "Hitz minutuko", "autoIGCToolName": "Exekutatu Pangea idazketa laguntza automatikoki", "autoIGCToolDescription": "Exekutatu automatikoki Pangea Txataren gramatika eta itzulpen idazketa laguntza mezu bat bidali aurretik.", - "runGrammarCorrection": "Egiaztatu mezua", - "grammarCorrectionFailed": "Arazoak konpondu behar dira", - "grammarCorrectionComplete": "Ongi iruditzen!", "tooltipInstructionsTitle": "Ez da ziur zer den hori?", "tooltipInstructionsMobileBody": "Elementuak sakatu eta eutsi tresna-txartelak ikusteko.", "tooltipInstructionsBrowserBody": "Elementuak gainean mugitu eta ikusi tresna-txartelak.", "chatCapacity": "Txat-ahalmena", "roomFull": "Gela hau jada bete da.", - "topicNotSet": "Gaia ez da ezarri.", - "chatCapacityNotSet": "Gauza hau ez du mugarik.", "chatCapacityHasBeenChanged": "Txat-ahalmena aldatu da", "chatCapacitySetTooLow": "Txat-ahalmena gutxienez {count} izan behar da.", "chatCapacityExplanation": "Txat-ahalmena chat batean onartzen diren kide kopurua mugatzen du.", - "chatExceedsCapacity": "Gauza honek bere ahalmena gainditzen du.", "tooManyRequest": "Eskari gehiegi, mesedez saiatu berriro beranduago.", "enterNumber": "Mesedez, sartu zenbaki osoa balio bat.", "buildTranslation": "Eraiki zure itzulpena goiko aukeraketatik", - "nonexistentSelection": "Aukeraketa ez da existitzen gehiago.", - "changeAnalyticsLanguage": "Aldatu Analytics Hizkuntza", "practice": "Praktika", "noLanguagesSet": "Ez dago hizkuntzarik ezarrita", - "noActivitiesFound": "Gogoratu hau orain arte! Itzuli geroago gehiago lortzeko.", - "hintTitle": "Aipu:", "speechToTextBody": "Ahots mezuetarako, testu transkripzioa ikusi dezakezu baita hizlariaren Minutu bakoitzeko Hitzen puntuazioa ere.", "versionNotFound": "Bertsiorik ez", "fetchingVersion": "Bertsioa jasotzen...", "versionFetchError": "Errorea bertsioa jasotzean", "versionText": "Bertsioa: {version}+{buildNumber}", - "languageButtonLabel": "Hizkuntza: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Itzultzaile autojokoa", - "interactiveTranslatorAutoPlayDesc": "Hitz joko interaktiboa abiarazten du galdetu gabe.", - "changeAnalyticsView": "Aldatu Analitiken Ikuspegia", "l1TranslationBody": "Zure hizkuntza oinarrian dauden mezuak ez dira itzuliak izango.", "deleteSubscriptionWarningTitle": "Harpidetza aktibo duzu", "deleteSubscriptionWarningBody": "Zure kontua ezabatzeak ez du automatikoki zure harpidetza bertan behera utziko.", @@ -4170,9 +3812,7 @@ "error520Title": "Saiatu berriro.", "error520Desc": "Barkatu, zure mezua ezin izan dugu ulertu...", "wordsUsed": "Erabilitako Hitzak", - "errorTypes": "Errore Mota", "level": "Maila", - "canceledSend": "Bidalketa bertan behera utzi da", "morphsUsed": "Morfemak Erabilitakoak", "translationChoicesBody": "Klikatu eta eutsi aukera baten gako bat iradokizun bat lortzeko.", "grammar": "Gramatika", @@ -4182,7 +3822,6 @@ "reportContentIssueTitle": "Ertzaileen edukia salatzea", "feedback": "Aukerazko iritzia", "reportContentIssueDescription": "Aupa! AI-k ikasketa pertsonalizatuak erraz ditzake baina... haluzinatzen ere. Mesedez, eman iritzia edozein dela ere, eta berriro saiatuko gara.", - "changeContent": "Aupa! AI-k ikasketa pertsonalizatuak erraz ditzake baina... haluzinatzen ere. Zer izan behar du?", "clickTheWordAgainToDeselect": "Klikatu hautatutako hitza desaktibatzeko.", "l2SupportNa": "Ez dago erabilgarri", "l2SupportAlpha": "Alpha", @@ -4416,7 +4055,6 @@ "grammarCopySPC": "Espezifikazioa", "grammarCopyPARTTYPE": "Atalaren Mota", "grammarCopyINTREL": "Galdera-Relatiboa", - "grammarCopyNUMFORMpsor": "Jabeeraren Zenbakia", "grammarCopyUNKNOWN": "Ezezaguna", "grammarCopyNUMBERPSOR": "Jabeeraren Zenbakia", "grammarCopyPOSS": "Jabetza", @@ -4462,28 +4100,14 @@ "grammarCopyVOICEdir": "Bidezkoa", "grammarCopyVOICEinv": "Alderantzizkoa", "grammarCopyVOICErcp": "Elkarrekiko", - "enterPrompt": "Mesedez, sartu sistema mezu bat", - "selectBotLanguage": "Hautatu botaren hizkuntza", - "chooseVoice": "Hautatu ahotsa", - "enterLanguageLevel": "Mesedez, sartu hizkuntza maila", - "enterDiscussionTopic": "Mesedez, sartu eztabaida gaia", - "selectBotChatMode": "Hautatu txateatzeko modua", - "messageNotInTargetLang": "Mezuak ez du hizkuntza helburuan", "other": "Beste", "levelShort": "LGA {level}", - "botModeValidation": "Mesedez, hautatu txateatzeko modua", "clickBestOption": "Hautatu zure mezua itzultzeko aukera onenak!", "completeActivitiesToUnlock": "Osatu gutxienez jarduera bat itzultzeko!", - "botSettingsSubtitle": "Gonbidatu bot-a elkarrizketa jarduera moderatzeko", - "invitePeople": "Gonbidatu erabiltzaileak", "noCapacityLimit": "Ez dago gaitasun mugarik", "downloadGroupText": "Deskargatu talde testua", "notificationsOn": "Jakinarazpenak aktibo", "notificationsOff": "Jakinarazpenak desaktibatu", - "chatCanBeFoundViaSearch": "Elkarrizketa bilatzailean aurki daiteke", - "requireCodeToJoin": "Kodea eskatu parte hartzeko", - "canFindInSearch": "Bilaketaren bidez aurki daiteke", - "addChatToSpace": "Gehitu elkarrizketa espazioan", "createChatAndInviteUsers": "Sortu elkarrizketa eta gonbidatu erabiltzaileak", "updatedNewSpaceDescription": "Ikastaroek zure elkarrizketak bateratzeko eta komunitate pribatu edo publikoa eraikitzeko aukera ematen dute.", "joinWithCode": "Batu kodearekin", @@ -4519,39 +4143,19 @@ "constructUseCollected": "Bilduta chat-en", "constructUseNanDesc": "Ez da aplikagarria", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Hautatu erabiltzaile-izena eta pasahitza", - "registrationEmailMessage": "Mesedez, egiaztatu zure emaila bertara bidalitako estekan. Kasu batzuetan, emailak 5 minutuz iristen dira. Mesedez, egiaztatu zure spam karpeta ere.", "enableTTSToolName": "Testu-hizketara gaituta", "enableTTSToolDescription": "Aldatu aplikazioak testu-hizketara irteera sortzeko zure hizkuntzako testu zatietarako.", - "couldNotFindTTS": "Ez dugu aurkitu zure hizkuntzarako testu-hizketarako motorik.", - "ttsInstructionsHyperlink": "Klikatu hemen zure gailuan ahots berri bat deskargatzeko argibideak ikusteko.", - "createAnAccount": "Sortu kontu bat", - "signIn": "Hartu saioa", - "signUpWithEmail": "Erregistratu email bidez", - "signUpWithGoogle": "Erregistratu Google-rekin", - "signUpWithApple": "Erregistratu Apple-rekin", "yourUsername": "Zure erabiltzaile-izena", "yourEmail": "Zure emaila", - "pleaseEnterAnEmail": "Mesedez, sartu email helbide bat", - "signInWithGoogle": "Hartu saioa Google-rekin", - "signInWithApple": "Saioa hasi Apple-rekin", - "chooseYourAvatar": "Aukeratu zure avatarra", "iWantToLearn": "Nahi dut ikasi", - "letsStart": "Hasi dezagun", - "pleaseAgreeToTOS": "Mesedez, adostu Baldintzak eta Baldintzak", "pleaseEnterEmail": "Mesedez, sartu baliozko posta helbide bat.", - "pleaseSelectALanguage": "Mesedez, aukeratu hizkuntza bat", "myBaseLanguage": "Nire hizkuntza oinarria", - "clickWordsInstructions": "🧻 Klikatu edozein hitz xehetasunak ikusteko. 🤐", - "chooseBestDefinition": "Zein da hitz honek esan nahi duena?", "meaningSectionHeader": "Pentsamendua:", "formSectionHeader": "Chatetan erabiltzen diren formak:", - "noEmojiSelectedTooltip": "Ez da emoji aukeratu", "writingExercisesTooltip": "Idazketa", "listeningExercisesTooltip": "Entzumena", "readingExercisesTooltip": "Irakurketa", "meaningNotFound": "Ez da pentsamendua aurkitu.", - "formsNotFound": "Ez da formarik aurkitu.", "chooseBaseForm": "Aukeratu oinarrizko forma", "notTheCodeError": "Barkatu, hori ez da kodea!", "totalXP": "Guztira XP", @@ -4591,9 +4195,6 @@ "pickAnEmoji": "Zein da zure emoji gogokoena '{lemma}'-rako?", "chooseLemmaMeaningInstructionsBody": "Baliokideen esanahiak hitzekin parekatu mezua irakurtzen!", "doubleClickToEdit": "Egin klik bikoitza editatzeko.", - "removeFeature": "Kendu {feature}", - "chooseCorrectLabel": "Aukeratu etiketa zuzena.", - "levelPopupTitle": "Zorionak mailara iristeagatik\nMaila {level}", "activityPlannerTitle": "Jarduera Antolatzailea", "topicLabel": "Gaia", "topicPlaceholder": "Aukeratu gaia...", @@ -4601,7 +4202,6 @@ "modePlaceholder": "Aukeratu modua...", "learningObjectiveLabel": "Ikaskuntza Helburua", "learningObjectivePlaceholder": "Aukeratu ikaskuntza helburua...", - "mediaLabel": "Ikasleek partekatu beharreko media", "languageOfInstructionsLabel": "Jarduera argibideen hizkuntza", "targetLanguageLabel": "Helburu hizkuntza", "cefrLevelLabel": "CEFR maila", @@ -4616,20 +4216,15 @@ "instructions": "Argibideak", "numberOfLearners": "Ikasleen kopurua", "mustBeInteger": "Zenbaki osoa izan behar da, adibidez 1, 2, 3, ...", - "noLemmasFound": "Ez dago {xp} XP baino gehiago duten hiztegiik. Jarraitu praktikatzen!", "constructUsePvmDesc": "Ahots mezu batean sortua", - "lockedMorphFeature": "Askatzeko zain", "leaveSpaceDescription": "Ikastaroa utziz, chat guztiak utziko dituzu bertan. Beste erabiltzaileek ikusi ahal izango dute ikastaroa utzi duzula.", - "whatIsLemma": "Zer da lemma?", "constructUseCorMmDesc": "Mezuaren esanahia zuzena", "constructUseIncMmDesc": "Mezuaren esanahia okerra", "constructUseIgnMmDesc": "Mezuaren esanahia baztertua", "clickForMeaningActivity": "Klikatu hemen Adierazpen Erronka bat egiteko", "meaning": "Euskarrian", "chatWith": "{displayname} taldearekin", - "slightlyOffensive": "Apur bat ofendigarria", "clickOnEmailLink": "Mesedez, klikatu email-eko estekan eta jarraitu.\n\nEgiaztatu zure spam karpeta, emaila iritsi ez bada.", - "whoIsAllowedToJoinThisChat": "Nork da baimenduta chat honetan parte hartzeko", "dontForgetPassword": "Ez ahaztu zure pasahitza!", "enableAutocorrectToolName": "Gaitu gailuaren automatikorrektorea", "enableAutocorrectDescription": "Zure gailuak ikasten ari zaren hizkuntzaren laguntza badu, automatikorrektorea gaituta egon daiteke akats ohikoak zuzentzeko idazten duzunean.", @@ -4657,48 +4252,26 @@ "autocorrectNotAvailable": "Zoritxarrez, zure plataforma ez da oraindik ezagutzen ez duen ezaugarria. Egon adi aurrerago garapenean!", "pleaseUpdateApp": "Mesedez, eguneratu aplikazioa jarraitzeko.", "chooseEmojiInstructionsBody": "Baliokideak hitzak ondoen ordezkatzen dituzten emojiak parekatu. Ez kezkatu! Ez dago puntuazioaren zatiketarik adostasunik ez badago ere. 😅", - "pickAnEmojiFor": "Hautatu emoji bat {lemma}tzat", "analyticsVocabListBody": "Hau da zure hiztegia guztia! Hitzez XP lortzen duzun heinean, hazten joango dira hazia eta loratzen. Klikatu edozein hitz gehiago ikusteko.", "morphAnalyticsListBody": "Hau da ikasten ari zaren hizkuntzako gramatika kontzeptu guztiak! Zure aurrean agertzen direnean zabalduko dituzu. Klikatu xehetasunak ikusteko.", "knockSpaceSuccess": "Eskatu duzu ikastaro honetan parte hartzeko! Administratzaile batek erantzungo dizu eskaera jaso duenean 😃", - "joinByCode": "Baliokide bidez parte hartu", "chooseWordAudioInstructionsBody": "Entzun mezua osorik. Ondoren, parekatu audioak hitzekin.", "chooseMorphsInstructionsBody": "Klikatu puzzle piezak gramatika galderak egiteko!", - "inviteAndLaunch": "Deitu eta abiarazi", - "createOwnChat": "Sortu zure chat propioa", "pleaseEnterInt": "Mesedez, sartu zenbaki bat", "home": "Hasiera", "join": "Parte hartu", "readingAssistanceOverviewBody": "Klikatu beheko botoiak emojiak, audioak, hitzen esanahia eta gramatika kontzeptuak parekatzeko mini-jokoak egiteko. Edo klikatu edozein hitz xehetasunak ikusteko.", - "learnByTexting": "Ikasi mezuak bidaliz", - "levelSummaryTrigger": "Ikusi laburpena", "levelSummaryPopupTitle": "Maila {level} Laburpena", - "referFriends": "Adiskideei erreferentzia egin", - "referFriendDialogTitle": "Gonbidatu bat zure elkarrizketara", - "referFriendDialogDesc": "Zurekin hizkuntza berria ikasi nahi duen lagun bat al duzu? Orduan, kopiatu eta bidali gonbidapen esteka hau elkarrizketa hasteko eta zurekin hitz egiteko gaurtik aurrera.", - "youUnlocked": "Zureganatu duzu", "resetInstructionTooltipsTitle": "Berrezarri argibide-txertaketak", "resetInstructionTooltipsDesc": "Klik egin argibide-txertaketak erakusteko, erabiltzaile berri baten moduan.", "selectForGrammar": "Hizkuntzaren ikono bat aukeratu jardueretarako eta xehetasunei.", - "newChatActivityTitle": "Gertaera dibertigarri bat gehitu nahi duzu?", - "newChatActivityDesc": "Egin taldeko elkarrizketa abentura batekin Jarduera Plangilearekin! Ezarri taldearentzat gai erakargarriak eta helburuak, eta ekarri elkarrizketak bizitzera irudi ikusgarriak erabiliz. piztu irudimeneko eztabaidak eta mantendu dibertsioa errazki!", - "exploreMore": "Bilatu gehiago", "randomize": "Ausazkoa", "clear": "Garbitu", "makeYourOwnActivity": "Sortu zure jarduera propioa", "featuredActivities": "Nabarmendutakoak", - "goToChat": "Joan elkarrizketara", "save": "Gorde", - "selectActivity": "Hartu jarduera", - "wordFocusListeningMultipleChoice": "Zeinek hitza egokitzen zaio audioak?", "startChat": "Hasi elkarrizketa", "translationProblem": "Itzulpen arazoa", - "perfectTranslation": "Itzulpen perfektua!", - "greatJobTranslation": "Lan bikaina itzulpen honekin!", - "goodJobTranslation": "Lan ona egin duzu itzulpen honetan.", - "makingProgress": "Aurrera egiten ari zara!", - "keepPracticing": "Jarraitu praktikatzen!", - "niceJob": "Lan ona!", "askToJoin": "Galdetu bat egiteko", "emptyChatWarningTitle": "Chat hutsa da", "emptyChatWarningDesc": "Inor ez du gonbidatu zure chat-era. Joan chat ezarpenetara kontaktuak edo Bot gonbidatzeko. Hau geroago ere egin dezakezu.", @@ -4717,8 +4290,6 @@ "languageLevelC2Desc": "Edo guztia ia entzuten edo irakurtzen dut eta modu fluido eta zehatzean adierazi dezaket.", "newVocab": "Hiztegi berria", "newGrammar": "Gramatika kontzeptu berriak", - "congratulationsOnReaching": "Lerroa lortu duzu {level}!", - "seeDetails": "Ikusi xehetasunak", "choosePracticeMode": "Klik egin goiko botoietako batean praktika jarduera bat hasteko", "ban": "Zigorra ezarri", "unban": "Zigorra kendu", @@ -4732,8 +4303,6 @@ "timesUsedWithAssistance": "Laguntzarekin erabiltzeko aldizkakotasuna", "shareInviteCode": "Partekatu gonbidapen kodea: {code}", "leaderboard": "Liderra taula", - "welcomeUser": "Ongietorri {user}", - "joinSpaceOnboardingDesc": "Gonbidapen kode edo esteka bat duzu publiko baten ikastaroan sartzeko?", "skipForNow": "Utzi une honetan", "permissions": "Baimenak", "spaceChildPermission": "Nork gehitu dezake ikastaro honetan txate berriak", @@ -4741,12 +4310,8 @@ "defaultOption": "Lehentasuna", "deleteChatDesc": "Ziur zaude txat hau ezabatu nahi duzula? Parte-hartzaile guztientzat ezabatuko da eta txataren mezu guztiak ez dira gehiago erabiliko praktikan edo ikasketa analitiketan.", "deleteSpaceDesc": "Ikastaroa eta aukeratutako txat guztiak ezabatuko dira parte-hartzaile guztientzat eta txataren mezu guztiak ez dira gehiago erabiliko praktikan edo ikasketa analitiketan. Ekintza hau ezin da desegin.", - "chatWithActivities": "Aktibitateekin txateatu", "launch": "Abiarazi", - "launchActivityToChats": "Abiarazi aktibitatea txateetara", "searchChats": "Bilatu txateak", - "selectChats": "Hautatu txateak", - "selectChatToStart": "Amaitu! Aukeratu txat bat hasteko", "maxFifty": "Gehienez 50", "configureSpace": "Konfiguratu ikastaroa", "pinMessages": "Pin mezuak", @@ -4760,9 +4325,7 @@ "announcements": "Albisteak", "activities": "Jarduerak", "access": "Sarrera", - "botSettings": "Botaren ezarpenak", "activitySuggestionTimeoutMessage": "Lan handia egiten ari gara zuretzat jarduera gehiago sortzeko, mesedez, egiaztatu minutu batean", - "accessSettingsWarning": "Ups! Badirudi ez duzula baimenik zure gelako Sarbide arauak ezartzeko. Kontrolatu beharko zenituzke hauek behar duzuna dela ziurtatzeko eta gelako administratzailearekin hitz egin behar baduzu aldatzeko", "howSpaceCanBeFound": "Nola aurki daiteke ikastaro hau", "private": "Pribatua", "cannotBeFoundInSearch": "Ez da bilaketetan aurki daiteke", @@ -4775,16 +4338,6 @@ "canBeFoundViaKnock": "• eskatu elkartzeko eta administratzailearen onespena", "youHaveLeveledUp": "Maila igo duzu!", "sendActivities": "Bidali ekintzak", - "getStarted": "Hasi", - "getStartedBotChatDesc": "AI-rekin txateatzea hasi eta Pangea irakurketa, idazketa, entzuteko eta hitz egiteko tresnak errazago egiten dute!", - "getStartedCommunitiesDesc": "Komunitate batekin ikastea da Pangea Chat distiratzen duena!\nZure klasean parte hartu dezakezu, ikastaro bat aurkitu edo zure propioa egin!", - "getStartedFriendsDesc": "Zure lagun bat zurekin ikasi nahi du?", - "getStartedBotChatComplete": "Primeran! Botarekin hitz egiten ari zara!", - "getStartedCommunitiesComplete": "Ongi da! Ikastaro batean sartu zara!", - "getStartedComplete": "Atala osatu duzu!\nJarraitu gure ezagutzaz betetako ezaugarriak lagunekin hitz egiten jarraituz!", - "getStartedFriendsComplete": "Woohoo! Zure lagunak dituzu! 😉", - "getStartedBotChatButton": "Hasi hitz egiten!", - "getStartedFriendsButton": "Hitz egin lagun batekin", "groupChat": "Talde txateoa", "directMessage": "Mezu zuzena", "newDirectMessage": "Mezu zuzena berria", @@ -4800,7 +4353,6 @@ "mySavedActivities": "Nire gordeak diren jarduerak", "noSavedActivities": "Ez dago gordetako jarduerarik", "saveActivity": "Gorde jarduera hau", - "yourSavedActivities": "Gordetako Jarduerak", "failedToPlayVideo": "Ezin izan da bideoa jokatu", "done": "Eginda", "inThisSpace": "Ikastaro honetan", @@ -4839,37 +4391,27 @@ "maximumActivityParticipants": "Jarduera bakoitzak {count} parte-hartzaile maximoa izan dezake.", "pending": "Zain", "inactive": "Erlaxia", - "unjoinedActivityMessage": "Parte hartu nahi duzu? Aukeratu rola irekia!\n edo geratu eta ikusi ikuskizuna!", - "fullActivityMessage": "Sentitu zaitez ikuskizuna ikusten! Parte hartzeko rola irekirik ez dagoen bitartean, txataren ikusteko aukera izango duzu!", "confirmRole": "Berretsi rola", "openRoleLabel": "IREKIA", "joinedTheActivity": "👋 {username} {role} bezala batu da", "finishedTheActivity": "🎯 {username} jarduera hau amaitu du", - "endActivityTitle": "Tôi đã xong", - "endActivityDesc": "Helburuak bete dituzu?\nHau da zure baieztapena testuetik atzera egiten ari zarela. Baina ez kezkatu, dibertsioa chat-ean jarraitzen du! Geratu eta ikuskizuna disfrutatu, denek 'Done' sakatu arte.", "archiveToAnalytics": "Gehitu nire Jarduera Amaituenen zerrendara", "activitySummaryError": "Jarduera laburpenak ez daude eskuragarri", "requestSummaries": "Eskatu laburpenak", - "loadingActivitySummary": "Jarduera laburpena kargatzen...", "generatingNewActivities": "Lehen erabiltzailea zara hizkuntza bikote honetan! Mesedez, minutu bat eman, jarduerak prestatzen ari gara zuretzat.", - "requestAccessTitle": "Eskatu analytics ikusteko sarbidea?", + "requestAccessTitle": "Eskaera analitika sarbidea?", "requestAccessDesc": "Zerbait nahi al duzu parte-hartzailearen analytics ikusteko sarbidea eskatu?\n\nParte-hartzaileek ados badaude, ikastaroaren administratzaileek haien:\n • hizkuntza-berritasun osoa\n • gramatika kontzeptu guztiak\n • jarduera saio guztiak amaituak\n • erabiltzen diren gramatika kontzeptu zehatzak, zuzen eta oker\n\nIkusi ahal izango dute haien:\n • mezua ikastaroaren kanpoan dauden txatetan\n • hiztegi zerrenda", "requestAccess": "Eskatu sarbidea ({count})", "analyticsInactiveTitle": "Ezingo da eskaerarik bidali erabiltzaile inactiveentzat", "analyticsInactiveDesc": "Ez aktibo diren erabiltzaileek, ez baitute sartu funtzio hau sartu denetik, ez dute zure eskaeraren berri izango.\n\nEskatzeko botoia agertuko da berriro itzultzen direnean. Geroago berriro bidali dezakezu eskaera botoia sakatuz haien izenaren azpian, eskuragarri dagoenean.", "accessRequestedTitle": "Analytics Sarbide Eskaera", - "accessRequestedDesc": "“{space}” administratzaileek zure ikasketa analitikak ikusi nahi dituzte.\n\nAdos bazaude, ikastaroaren administratzaileek zurea ikusi ahal izango dute:\n • hiztegi osoa\n • gramatika kontzeptu osoa\n • jarduera saioak guztira\n • erabiltzen diren gramatika kontzeptu zehatzak, zuzen eta oker\n\nZurea ikusi ahal izango ez dute:\n • ikastaroaren kanpoko chat-eko mezuak\n • hiztegi zerrenda", - "allowAccess": "Baimendu Sarbidea", - "denyAccess": "Galarazi Sarbidea", + "accessRequestedDesc": "Eskaerak egiten ari diren admin(ak): {admin} \n\n„{space}“-ko adminak zure ikaskuntza analitikak ikusteko eskaera egiten ari dira.\n\nOnartzen baduzu, hauek zure:\n • hiztegi osoa\n • gramatika kontzeptu osoak\n • amaitutako jarduera saio guztien kopurua\n • erabilitako gramatika kontzeptu zehatzak, ondo eta oker\n\nEz dute ikusi ahal izango zure:\n • ikastaroaren kanpoko txatetan mezuak\n • hiztegi zerrenda", "adminRequestedAccess": "Administratzaileek zure analitikak ikusi nahi dituzte.", "lastUpdated": "Eguneratua\n{time}", "activityFinishedMessage": "Bukatu da guztia!", "endForAll": "Amaitu guztientzat", "newCourse": "Ikastaro berria", - "newCourseSubtitle": "Zein ikastaro plan erabili nahi duzu?", - "failedToLoadCourses": "Ezin izan da ikastaroak kargatu", "numModules": "{num} modulua", - "numActivityPlans": "{num} jarduera plan", "coursePlan": "Ikastaro Plana", "editCourseLater": "Eman dezakezu geroago txantiloiaren izena, deskribapenak eta ikastaroaren irudia editatzeko.", "newCourseAccess": "Lehenetsiz, ikastaroak pribatutasunekoak dira eta administratzailearen onespena behar dute parte hartzeko. Edozein momentutan aldatu ditzakezu ezarpen hauek.", @@ -4883,17 +4425,11 @@ "accessDesc": "Zure ikastaroa mundu osoari irekita egin dezakezu! Edo, ikastaroa pribatua eta segurua egin", "createGroupChatDesc": "Ekintza saioak hasten eta bukatzen diren bitartean, talde txat hauek komunikazio erregularrerako irekita egongo dira", "deleteDesc": "Administratzaileek bakarrik ezabatu dezakete ikastaroa. Hau ekintza suntsitzailea da, erabiltzaile guztiak ezabatzen ditu eta ikastaroaren barruan aukeratutako txat guztiak ezabatzen ditu. Kontuz ibili", - "failedToLoadCourseInfo": "Ezin izan da ikastaroaren informazioa kargatu", "noCourseFound": "Aizu, ikastaro honek plan bat behar du!\n\nIkastaroaren planak gaiak eta elkarrizketa jarduerak dira", "additionalParticipants": "+ {num} beste", - "activityNotFoundForCourse": "Jarduera hau ez da ikastaroaren barruan aurkitu", - "courseChats": "Ikastaroaren Txatak", - "myActivitySessions": "Nire Jarduera Saioak", "directMessages": "Mezularitza zuzena", "whatNow": "Zer orain?", "chooseNextActivity": "Hurrengo jarduera aukeratu!", - "seeInstructions": "Ikusi Argibideak", - "hideInstructions": "Ezkutatu Argibideak", "letsGo": "Goazen", "chooseRole": "Aukeratu rola!", "chooseRoleToParticipate": "Aukeratu parte hartu nahi duzun rola!", @@ -4903,23 +4439,15 @@ "inviteFriends": "Gonbidatu lagunak", "waitNotDone": "Itxaron, ez naiz bukatu!", "waitingForOthersToFinish": "Itxaron besteek amaitu arte...", - "saveToCompletedActivities": "Gorde jarduera osatuetara", "generatingSummary": "Txataren analisia eta emaitzak sortzen", - "instructionsLanguage": "Argibideen hizkuntza", "findCourse": "Bilatu ikastaroa", - "activityCompletedDesc": "Zure jarduera osatua analytics-en gehitu da, bertan hizkuntza erabili duzuna berrikusi eta praktika dezakezu.", "pingParticipantsNotification": "{user} erabiltzaileak bilatzen ari da {room} gelan jarduera saioan parte hartzeko erabiltzaileak", "course": "Ikastaroa", "courses": "Ikastaroak", "courseName": "Ikastaroaren izena", "createNewCourse": "Ikastaro berria", - "publicCourses": "Ikastaro publikoak", "goToCourse": "Joan ikastaro batera: {course}", "activityComplete": "Ekintza hau burutu da. Ekintza laburpena behean egon beharko litzateke.", - "haventChattedMuch": "Badirudi ez duzula asko hitz egin, saiatu gehiago hitz gako hitzak erabiltzen! Zure helburua bete duzula sentitzen baduzu, amaitu dezakezu behean ekintza.", - "haveChatted": "Badirudi denbora pixka bat hitz egin duzula! Zure helburua bete duzula sentitzen baduzu, ekintza amaitzeko itxi eta laburpena sortuko dizugu chat-ean!", - "userDoneAndWaiting": "{num1}/{num2} parte-hartzailek amaitu dute. Itxaron denek amaitu arte, eta chat-ean laburpena sortuko dizugu! \n\nBileran berriro parte hartu nahi baduzu, sakatu jarraitu botoia chat-ean.", - "othersDoneAndWaiting": "{num1}/{num2} amaitu dute. Zure helburua bete duzu?", "startNewSession": "Hasi saio berria", "joinOpenSession": "Batu irekita dagoen saiora", "less": "gutxiago", @@ -4929,7 +4457,6 @@ "openToJoin": "Batzeko aukera", "results": "Emaitzak", "activityDone": "Ekintza Amaituta!", - "moreLabel": "gehiago", "promoCodeInfo": "Promozio kodeak hurrengo orrian sartu daitezke", "editsComingSoon": "Hiriak eta ekintzak editatzeko aukera laster etorriko da.", "editing": "Editatzen", @@ -4945,13 +4472,10 @@ "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", - "chooseLanguage": "Hizkuntza aukeratu.", + "chooseLanguage": "Hautatu helburu hizkuntza bat.", "planTrip": "Planifikatu zure bidaiaren", "howAreYouTraveling": "Nola bidaiatzen ari zara?", "unlockPrivateTrip": "Galdetu bidaia pribatua", @@ -4964,25 +4488,20 @@ "courseCode": "Zer da pasahitz sekretua?", "courseCodeHint": "Bidaia kodea edo esteka", "unlockMyTrip": "Galdetu nire bidaia", - "anyLevel": "Nolako maila", "signupOption": "Nola nahi duzu erregistratu?", "withApple": "Apple-rekin", "withGoogle": "Google-rekin", "withEmail": "Email bidez", "createAccount": "Sortu kontua", - "noCoursesFound": "Ez da ikastaroa aurkitu", "loginWithEmail": "Saioa hasi email bidez", "usernameOrEmail": "Erabiltzaile-izena edo emaila", "email": "Emaila", "forgotPassword": "Aizu galdu?", - "writingAnalyticsDesc": "Bidali mezuak idazketa praktikatzen laguntzeko.", "endActivity": "Amaitu jarduera", "allLanguages": "Hizkuntza guztiak", - "allCefrLevels": "CEFR maila guztiak", "chatListTooltip": "Hemen zure mezu zuzenean aurkituko dituzu! Sakatu edozein erabiltzailearen avatarra eta “hasi elkarrizketa” mezu zuzena bidaltzeko.", "directMessageBotTitle": "Pangea Bot mezu zuzena", "feedbackTitle": "Jarduera Feedback", - "feedbackDesc": "Nola hobetu beharko litzateke jarduera? Xehetasun batzuk eman ditzakezun bada, aldaketa egingo dugu!", "feedbackHint": "Zure iritzia", "feedbackButton": "Bidali iritzia", "directMessageBotDesc": "Gizakiekin hitz egitea dibertigarria da baina... AI beti prest dago!", @@ -5005,30 +4524,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5044,18 +4539,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5080,18 +4563,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5128,38 +4599,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5168,62 +4611,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5260,10 +4659,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5272,14 +4667,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5288,46 +4675,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5336,10 +4687,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5396,18 +4743,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5416,14 +4751,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5452,18 +4779,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5472,42 +4787,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5516,14 +4799,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5544,26 +4819,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5584,10 +4839,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5620,25 +4871,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5695,34 +4927,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5751,778 +4955,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7515,14 +5951,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7534,14 +5962,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7573,10 +5993,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7585,18 +6001,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7605,14 +6009,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7637,38 +6033,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7714,10 +6082,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7742,10 +6106,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7770,10 +6130,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7782,66 +6138,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7862,42 +6162,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7922,154 +6198,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8086,18 +6214,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8118,14 +6234,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8142,10 +6250,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8158,14 +6262,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8174,14 +6270,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8209,26 +6297,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8257,18 +6325,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8305,10 +6365,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9241,10 +7297,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9425,34 +7477,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9465,10 +7489,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9477,14 +7497,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9501,22 +7513,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9664,14 +7660,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9680,34 +7668,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9716,54 +7676,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9772,10 +7696,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9792,10 +7712,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9967,26 +7883,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10015,10 +7911,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10075,30 +7967,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10127,18 +8003,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10255,14 +8123,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10275,10 +8135,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10287,14 +8143,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10311,14 +8159,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10327,22 +8167,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10355,18 +8179,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10383,22 +8195,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10407,30 +8207,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10503,18 +8279,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10571,18 +8335,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10611,30 +8363,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10687,18 +8423,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10747,46 +8475,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10851,10 +8539,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11026,14 +8710,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11061,14 +8737,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11081,10 +8749,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11120,19 +8784,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11157,14 +8816,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11173,14 +8824,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11233,10 +8876,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11249,18 +8888,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11273,14 +8900,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11321,26 +8940,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11368,10 +8975,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11382,36 +8985,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11448,10 +9021,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11516,18 +9085,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11592,10 +9149,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11616,10 +9169,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11636,10 +9185,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11648,10 +9193,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11664,10 +9205,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11692,16 +9229,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Deitu lagunak jarduerara", - "inviteFriendsToActivityCourse": "Deitu lagunak jarduera eta ikastaro batera", "feedbackRespDesc": "Egon etxeko egunean, eguneraketak ikusteko.", "activityDropdownDesc": "Jarduera honekin amaitu duzunean, klikatu behean", - "activityAnalyticsListBody": "Hona hemen zure jarduera osatuak! Jarduerak amaitu ondoren, hemen ikus ditzakezu.", "languageMismatchTitle": "Hizkuntza desberdintasuna", "languageMismatchDesc": "Zure helburu hizkuntza ez dator bat jarduera honen hizkuntzarekin. Eguneratu zure helburu hizkuntza nahi duzun moduan?", "reportWordIssueTooltip": "Txosten hitzaren informazio arazoa", "tokenInfoFeedbackDialogTitle": "Hitzaren Informazioaren Feedbacka", - "tokenInfoFeedbackDialogDesc": "AI-ak akatsak egiten ditu. Mesedez, deskribatu aurreko informazioarekin aurkitu dituzun arazoak.", "noPublicCoursesFound": "Ez da ikastaro publikorik aurkitu. Nahi al duzu bat sortu?", "noCourseTemplatesFound": "Ez dugu zure helburu hizkuntzarako ikastaroak aurkitu. Bitartean, Pangea Bot-ekin chat egin dezakezu, eta geroago ikastaro gehiago ikusteko itxaron.", "botActivityJoinFailMessage": "Pangea Bot-ek erantzun hartzeko denbora pixka bat behar du. Saiatu berriro geroago, edo deitu lagun bat.", @@ -11709,14 +9242,6 @@ "leaveDesc": "Irten espazio hau eta bertako chat guztiak", "selectAll": "Hautatu guztiak", "deselectAll": "Desmarkatu guztiak", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11725,10 +9250,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11745,10 +9266,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11782,7 +9299,6 @@ "newMessageInPangeaChat": "💬 Pangea Txat-ean mezu berria", "shareCourse": "Partekatu ikastaroa", "addCourse": "Gehitu ikastaroa", - "joinCourseWithCode": "Hasi ikastaroa kodearekin", "joinPublicCourse": "Hasi ikastaro publikoa", "vocabLevelsDesc": "Hemen daude hitz-berriak mailakatzen dituzunean!", "highlightVocabTooltip": "Azpian dauden helburu vocab hitzak nabarmentzeko, bidali edo txatean praktikatu.", @@ -11806,10 +9322,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11818,7 +9330,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Ez da DM edo txatirik aurkitu. Ziurtatu zure bilaketa ondo idatzita dagoela.", + "activityAnalyticsTooltipBody": "Hau zure gordeetako jarduerak dira berrikusteko eta praktikatzeko.", + "numSavedActivities": "Gordetako jardueren kopurua", + "saveActivityTitle": "Gorde jarduera", + "saveActivityDesc": "Oso ondo! Gorde jarduera hau etorkizuneko berrikusteko eta praktikatzeko", + "levelInfoTooltip": "Hemen irabazi dituzun puntu guztiak eta nola irabazi dituzun ikusi ditzakezu!", + "alreadyInCourseWithID": "Jalready ikastaro batean zaude plan honekin. Plan bera duen ikastaro bat sortu nahi al duzu, edo dagoen ikastaroan joan?", + "goToExistingCourse": "Joan dagoen ikastaroan", + "emojiView": "Emoji ikuskera", + "feedbackDialogDesc": "Akatsak egiten ditut ere! Nola hobetzen laguntzeko ezer?", + "contactHasBeenInvitedToTheCourse": "Kontaktua ikastaroan gonbidatu da", + "activityStatsButtonTooltip": "Jarduera informazioa", + "allow": "Baimendu", + "deny": "Ukatu", + "enabledRenewal": "Harpidetzaren Berritzea Aktibatu", + "subscriptionEndsOn": "Harpidetzak Amaitzen Da", + "subscriptionRenewsOn": "Harpidetzak Berritzen Da", + "waitForSubscriptionChanges": "Zure harpidetzako aldaketek momentu bat behar izan dezakete aplikazioan islatzeko.", + "subscribeReadingAssistance": "Mezu tresnak desblokeatzeko harpidetu", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikako", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharera", + "arDisplayName": "Arabiera", + "asDisplayName": "Assamiera", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijani", + "baDisplayName": "Bashkir", + "banDisplayName": "Balidarra", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorrusiera", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgariera", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Bretoia", + "bsDisplayName": "Bosniarra", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalana", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdiera Zentralean", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsikar", + "crhDisplayName": "Krimera Turkiarra", + "crsDisplayName": "Seselwa Kreole Frantsesa", + "csDisplayName": "Txekiera", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Gales", + "daDisplayName": "Danimarkako", + "deDisplayName": "Aleman", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Ingelesa", + "enAUDisplayName": "Ingelesa (Australia)", + "enGBDisplayName": "Ingelesa (Erresuma Batua)", + "enINDisplayName": "Ingelesa (India)", + "enUSDisplayName": "Ingelesa (AEB)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espainiera", + "esESDisplayName": "Espainiera (Espainia)", + "esMXDisplayName": "Espainiera (Mexiko)", + "euDisplayName": "Euskara", + "faDisplayName": "Persiera", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandiera", + "filDisplayName": "Filipinera", + "fjDisplayName": "Fijiarra", + "foDisplayName": "Faroese", + "frDisplayName": "Frantsesa", + "frCADisplayName": "Frantsesa (Kanada)", + "frFRDisplayName": "Frantsesa (Frantzia)", + "fyDisplayName": "Mendebaldeko Frisiera", + "gaDisplayName": "Irlandera", + "gaaDisplayName": "Ga", + "gdDisplayName": "Eskoziar Gaelic", + "glDisplayName": "Galiziera", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiiera", + "heDisplayName": "Hebreera", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroaziera", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitiko Kreolera", + "huDisplayName": "Hungariera", + "hyDisplayName": "Armeniera", + "idDisplayName": "Indonesiera", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandiako", + "itDisplayName": "Italianoa", + "jaDisplayName": "Japoniarra", + "jvDisplayName": "Javaniera", + "kaDisplayName": "Georgiera", + "kkDisplayName": "Kazako", + "kmDisplayName": "Khmerra", + "knDisplayName": "Kannadara", + "koDisplayName": "Korearra", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Kongoko Errepublika Demokratikoa)", + "kuDisplayName": "Kurdiera", + "kyDisplayName": "Kirgiziera", + "laDisplayName": "Latina", + "lbDisplayName": "Luxenburgoera", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgera", + "lijDisplayName": "Liguriera", + "lmoDisplayName": "Lombardiera", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituania", + "ltgDisplayName": "Latgaliera", + "luoDisplayName": "Luo (Kenya eta Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letonia", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Mazedoniera", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongoliera", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabiarra)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvegiako (Bokmål)", + "neDisplayName": "Nepalera", + "newDisplayName": "Newari", + "nlDisplayName": "Herbehereako", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Norvegiako", + "nrDisplayName": "Hego Ndebele", + "nsoDisplayName": "Ipar Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okzitaniera", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poloniera", + "psDisplayName": "Pashto", + "ptDisplayName": "Portuguese", + "ptBRDisplayName": "Portuguese (Brasil)", + "ptPTDisplayName": "Portuguese (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Errumaniera", + "roMDDisplayName": "Moldaviarra", + "romDisplayName": "Romani", + "ruDisplayName": "Errusiera", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Siziliarra", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Eslovako", + "slDisplayName": "Esloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albaniar", + "srDisplayName": "Serbio", + "srMEDisplayName": "Montenegrinera", + "ssDisplayName": "Swatiera", + "stDisplayName": "Hego Sotho", + "suDisplayName": "Sundanera", + "svDisplayName": "Suediarra", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesiara", + "taDisplayName": "Tamila", + "teDisplayName": "Telugua", + "tetDisplayName": "Tetuma", + "tgDisplayName": "Tajik", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turkiar", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uigurr", + "ukDisplayName": "Ukrainiera", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamiera", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonera", + "yueCNDisplayName": "Kantonera (Txina)", + "yueHKDisplayName": "Kantonera (Hong Kong)", + "zhDisplayName": "Txinera", + "zhCNDisplayName": "Txinera (Sinplifikatua)", + "zhTWDisplayName": "Txinera (Tradizionala)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11885,6 +10583,7 @@ "notStartedActivitiesTitle": "Ireki saioak ({num})", "inProgressActivitiesTitle": "Orain gertatzen ari da ({num})", "completedActivitiesTitle": "Eginda ({num})", + "pickDifferentActivity": "Aldatu jarduera bat", "inOngoingActivity": "Zure aktibitate bat martxan dago!", "@notStartedActivitiesTitle": { "type": "String", @@ -11910,10 +10609,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Zure helburu hizkuntza ez da mezu honekin bat etortzen. Eguneratu al dezakezu zure helburu hizkuntza?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Hau ikastaro honetan dauden guztiak dira. Egin klik edozein erabiltzaileen irudian eta \"hasieratu elkarrizketa\" DM bat bidaltzeko.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Hau vocab hitza zure analitiketatik behin betiko ezabatuko da", + "woman": "Emakumea", + "man": "Gizona", + "otherGender": "Bestea", + "unselectedGender": "Aukeratu genero aukera bat", + "gender": "Generoa", + "chatParticipantTooltip": "Hau da txat honetan dena. Egin klik edozein erabiltzaileen irudian eta \"hasieratu elkarrizketa\" DM bat bidaltzeko.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Ikaskuntza tresnak desgaituta daude zure helburu hizkuntzan ez dauden mezuetarako.", + "vocabEmoji": "Vocab emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Eskaera berritzea", + "optionalRegenerateReason": "(Aukerakoa) Arrazoia", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "{lemma} hitzaren emoji-a ezarri duzu! Etorkizuneko praktiketan hitz hori irudikatzeko emoji hau erabiliko dugu.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Saioa hasi arte itxaroten", + "ssoDialogDesc": "Segurtasunez saioa hasi dezazun, fitxa berri bat ireki dugu.", + "ssoDialogHelpText": "🤔 Fitxa berri hori ikusi ez baduzu, mesedez, begiratu zure pop-up blokeatzailea.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desaktibatu hizkuntza tresnak", + "disableLanguageToolsDesc": "Desaktibatu nahi al duzu hizkuntza laguntza automatikoa?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Baimena ukatu da. Aktibatu grabatzeko baimenak audio mezuak grabatzeko.", + "genericWebRecordingError": "Zerbait oker joan da. Mezuak grabatzerakoan Chrome nabigatzailea erabiltzea gomendatzen dugu.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Aplikazio hau erabiltzeko esperientzia onena izateko, mesedez, handitu zure pantailaren tamaina.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Hurrengo gaia irekitzeko jarduerak", "activitiesToUnlockTopicDesc": "Hurrengo ikastaro gaia irekitzeko jardueren kopurua ezarri", "@activitiesToUnlockTopicTitle": { @@ -11923,5 +10740,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Hitz-baliabideen definizio zuzena praktika", + "constructUseIncLMDesc": "Hitz-baliabideen definizio okerra praktika", + "constructUseCorLADesc": "Hitz-baliabideen audio zuzena praktika", + "constructUseIncLADesc": "Hitz-baliabideen audio okerra praktika", + "constructUseBonus": "Bonus hitz-baliabideen praktikaren bitartean", + "practiceVocab": "Praktikatu hiztegia", + "selectMeaning": "Aukeratu esanahia", + "selectAudio": "Aukeratu audio egokia", + "congratulations": "Zorionak!", + "anotherRound": "Beste txanda bat", + "noActivityRequest": "Ez dago egungo jarduera eskaerarik.", + "quit": "Irten", + "congratulationsYouveCompletedPractice": "Zorionak! Praktika saioa amaitu duzu.", + "mustHave10Words": "Gutxienez 10 hiztegi hitz izan behar dituzu praktikan jartzeko. Saiatu lagun batekin edo Pangea Bot-ekin hitz egiten gehiago ezagutzeko!", + "botSettings": "Botaren Ezarpenak", + "activitySettingsOverrideWarning": "Jarduera planak zehaztutako hizkuntza eta hizkuntza maila", + "voice": "Ahots", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index e89ff08a4..e82c668ba 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:30.390244", + "@@last_modified": "2026-01-07 14:28:12.371773", "repeatPassword": "تکرار رمزعبور", "@repeatPassword": {}, "about": "درباره", @@ -2798,26 +2798,14 @@ "commandHint_logoutall": "خروج از تمام دستگاه‌های فعال", "displayNavigationRail": "نمایش نوار ناوبری در موبایل", "customReaction": "واکنش سفارشی", - "accountInformation": "اطلاعات حساب کاربری", - "addGroupDescription": "افزودن توضیحات چت", - "addNewFriend": "افزودن دوست جدید", - "alreadyHaveAnAccount": "قبلاً حساب دارید؟", - "createNewGroup": "ایجاد چت جدید", - "editChatPermissions": "ویرایش مجوزهای چت", "writeAMessageLangCodes": "در {l1} یا {l2} تایپ کنید...", "requests": "درخواست‌ها", - "allCorrect": "همینطور است! عالی!", - "newWayAllGood": "اینطور نمی‌گفتم اما خوب به نظر می‌رسد!", - "othersAreBetter": "هوم، ممکن است راه بهتری برای گفتن آن وجود داشته باشد.", "holdForInfo": "برای اطلاعات کلمه نگه دارید.", "greenFeedback": "همین چیزی است که من می‌گذاشتم!", "yellowFeedback": "هوم، می‌تونی این رو امتحان کنی و ببینی کار می‌کنه! برای استفاده از این کلمه، فقط دوباره روی آن کلیک کن.", "redFeedback": "فکر نمی‌کنم این درست باشد...", "itInstructionsTitle": "می‌تونم در ترجمه بهت کمک کنم!", "itInstructionsBody": "می‌تونی گزینه‌ها رو نگه داری و اطلاعات کلمه رو ببینی.", - "oneday": "آخر ۲۴ ساعت", - "oneweek": "آخر ۷ روز", - "onemonth": "ماه گذشته", "gaTooltip": "استفاده از L2 با کمک گرامر", "taTooltip": "استفاده از L2 با کمک ترجمه", "unTooltip": "سایر", @@ -2827,58 +2815,27 @@ "interactiveTranslatorAllowed": "انتخاب دانش‌آموز", "interactiveTranslatorRequired": "الزامی", "notYetSet": "هنوز تنظیم نشده", - "myLearning": "تحلیل‌های من", "waTooltip": "استفاده از L2 بدون کمک", - "changeDateRange": "تغییر دامنه تاریخ", - "classDescription": "توضیحات", - "addStudents": "دعوت کاربران با لینک یا کد", - "copyClassLink": "کپی کردن لینک دعوت", - "copyClassCode": "کپی کردن کد دعوت", - "inviteStudentByUserName": "دعوت کاربران با نام کاربری", "languageSettings": "تنظیمات زبان", "interactiveTranslator": "کمک ترجمه", - "shareVideo": "اشتراک‌گذاری ویدیو", - "shareVideoDesc": "برای اجازه به دانش‌آموزان برای اشتراک‌گذاری ویدیو در چت‌ها، این گزینه را فعال کنید.", - "shareFiles": "اشتراک‌گذاری فایل‌ها", - "selectLanguageLevel": "انتخاب سطح زبان", "noIdenticalLanguages": "لطفاً زبان پایه و هدف را متفاوت انتخاب کنید", - "iWantALanguagePartnerFrom": "از:", - "worldWide": "در سراسر جهان", - "noResults": "نتیجه‌ای یافت نشد! سعی کنید جستجوی خود را گسترده‌تر کنید.", "searchBy": "جستجو بر اساس کشور و زبان‌ها", - "iWantAConversationPartner": "من یک هم‌صحبت می‌خواهم که", - "iWantALanguagePartnerWhoSpeaks": "صحبت می‌کند:", - "iWantALanguagePartnerWhoIsLearning": "در حال یادگیری:", "joinWithClassCode": "پیوستن به دوره", - "joinWithClassCodeHint": "کد دعوت را وارد کنید", - "languageLevelPreA1": "مبتدی مطلق (پیش A1)", - "languageLevelA1": "مبتدی (A1)", - "languageLevelA2": "مقدماتی (A2)", - "languageLevelB1": "متوسط (B1)", - "languageLevelB2": "متوسط رو به بالا (B2)", - "languageLevelC1": "پیشرفته (C1)", - "languageLevelC2": "استادی (C2)", + "languageLevelPreA1": "نوآموز پایین (پیش A1)", + "languageLevelA1": "نوآموز میانه (A1)", + "languageLevelA2": "مبتدی بالا (A2)", + "languageLevelB1": "متوسطه میانه (B1)", + "languageLevelB2": "پیشرفته پایین (B2)", + "languageLevelC1": "پیشرفته میانه (C1)", + "languageLevelC2": "عالی (C2)", "changeTheNameOfTheClass": "تغییر نام", "changeTheNameOfTheChat": "تغییر نام چت", - "askPangeaBot": "از ربات پانگئا برای تعریف متنی درخواست کنید.", "sorryNoResults": "متأسفیم، نتیجه‌ای یافت نشد.", "ignoreInThisText": "نادیده بگیرید", - "helpMeTranslate": "بله!", - "needsItShortMessage": "خارج از هدف", "needsItMessage": "صبر کنید، این {targetLanguage} نیست! آیا نیاز به کمک در ترجمه دارید؟", - "needsIgcMessage": "این پیام دارای خطای گرامری است.", - "tokenTranslationTitle": "یک کلمه در زبان پایه شما است.", - "spanTranslationDesc": "ترجمه‌های ممکن در زیر را ببینید.", - "spanTranslationTitle": "برخی کلمات در زبان پایه شما هستند.", - "l1SpanAndGrammarTitle": "خارج از زبان هدف", - "l1SpanAndGrammarDesc": "این می‌تواند در زبان پایه شما باشد یا یک خطای گرامری باشد.", - "otherTitle": "شما یک خطا دارید.", - "otherDesc": "تصحیحات ممکن را در زیر ببینید.", "countryInformation": "کشور من", - "myLanguages": "زبان‌های پایه و هدف من", "targetLanguage": "زبان هدف", "sourceLanguage": "زبان پایه", - "languagesISpeak": "زبان‌هایی که صحبت می‌کنم", "updateLanguage": "زبان‌های من", "whatLanguageYouWantToLearn": "چه زبانی می‌خواهید یاد بگیرید؟", "whatIsYourBaseLanguage": "زبان پایه شما چیست؟", @@ -2893,13 +2850,8 @@ "errorDisableLanguageAssistanceUserDesc": "برای به‌روزرسانی تنظیمات کمک ترجمه و کمک گرامر اینجا کلیک کنید", "errorDisableITClassDesc": "کمک ترجمه برای دوره‌ای که این چت در آن است غیرفعال شده است.", "errorDisableIGCClassDesc": "کمک گرامر برای دوره‌ای که این چت در آن است غیرفعال شده است.", - "itIsDisabled": "ترجمه تعاملی غیرفعال است", - "igcIsDisabled": "بررسی گرامر تعاملی غیرفعال است", - "goToLearningSettings": "برو به تنظیمات یادگیری", "error405Title": "زبان‌ها تنظیم نشده‌اند", "error405Desc": "لطفاً زبان‌های خود را در منوی اصلی > تنظیمات یادگیری تنظیم کنید.", - "loginOrSignup": "ورود با", - "iAgreeToThe": "من موافقت می‌کنم با ", "termsAndConditions": "شرایط و ضوابط", "andCertifyIAmAtLeast13YearsOfAge": " و گواهی می‌دهم که حداقل ۱۳ سال سن دارم.", "error502504Title": "وای، تعداد زیادی دانش‌آموز آنلاین هستند!", @@ -2907,40 +2859,21 @@ "error404Title": "خطای ترجمه!", "error404Desc": "ربات پنگئا مطمئن نیست چگونه آن را ترجمه کند...", "errorPleaseRefresh": "در حال بررسی مشکل هستیم! لطفاً صفحه را مجدداً بارگذاری کنید و دوباره تلاش کنید.", - "toggleIT": "ترجمه تعاملی", - "toggleIGC": "بررسی گرامر تعاملی", - "toggleToolSettingsDescription": "در اینجا می‌توانید تنظیمات ابزار زبان فردی خود را فعال یا غیرفعال کنید.", "connectedToStaging": "متصل به استیجینگ", "learningSettings": "تنظیمات یادگیری", - "sendVoiceNotes": "ارسال یادداشت صوتی", - "sendVoiceNotesDesc": "برای اجازه به دانش‌آموزان برای ارسال یادداشت صوتی در چت‌ها، این گزینه را فعال کنید.", - "chatTopic": "موضوع چت", - "chatTopicDesc": "یک موضوع برای چت تعیین کنید", - "inviteStudentByUserNameDesc": "اگر دانش‌آموز شما قبلاً حساب کاربری دارد، می‌توانید به دنبال او بگردید.", "participants": "شرکت‌کنندگان", - "almostPerfect": "به نظر درست است! این چیزی است که من می‌گفتم.", - "prettyGood": "خیلی خوب! این چیزی است که من می‌گفتم.", - "letMeThink": "هوم، بگذارید ببینم چطور انجام دادید!", "clickMessageTitle": "نیاز به کمک دارید؟", "clickMessageBody": "روی یک پیام کلیک کنید برای ابزارهای زبانی مانند ترجمه، پخش مجدد و موارد دیگر!", - "understandingMessagesTitle": "تعاریف و ترجمه‌ها!", - "understandingMessagesBody": "کلمات زیرخط‌دار را برای تعاریف کلیک کنید. با گزینه‌های پیام ترجمه کنید (بالا سمت راست).", "allDone": "همه چیز تمام شد!", "vocab": "واژگان", "low": "شواهدی داریم که نشان می‌دهد کاربر این کلمات را نمی‌فهمد.", "medium": "این کلمات استفاده شده‌اند. مشخص نیست که کاملاً درک شده‌اند یا نه.", "high": "شواهدی داریم که نشان می‌دهد کاربر این کلمات را می‌فهمد.", - "unknownProficiency": "این کلمات در چت پنگئا استفاده نشده‌اند.", - "changeView": "تغییر نماها.", - "clearAll": "همه کلمات را پاک کنید؟", - "generateVocabulary": "واژگان را از عنوان و توضیحات تولید کنید", - "generatePrompts": "تولید درخواست‌ها", "subscribe": "اشتراک", "getAccess": "همین حالا اشتراک بگیرید!", "subscriptionDesc": "پیام‌رسانی رایگان است! برای فعال‌سازی ترجمه تعاملی، بررسی گرامر و تحلیل‌های یادگیری، اشتراک بگیرید.", "subscriptionManagement": "مدیریت اشتراک", "currentSubscription": "اشتراک فعلی", - "changeSubscription": "تغییر اشتراک خود", "cancelSubscription": "لغو اشتراک خود", "selectYourPlan": "طرح خود را انتخاب کنید", "subsciptionPlatformTooltip": "لطفاً وارد حساب کاربری اصلی خود شوید تا طرح اشتراک خود را مدیریت کنید", @@ -2949,9 +2882,6 @@ "paymentHistory": "تاریخچه پرداخت", "emptyChatDownloadWarning": "امکان دانلود چت خالی وجود ندارد", "update": "به‌روزرسانی", - "updateDesc": "حالا می‌توانید این برنامه را از {localVersion} به {storeVersion} به‌روزرسانی کنید", - "maybeLater": "شاید بعداً", - "mainMenu": "منوی اصلی", "toggleImmersionMode": "حالت غوطه‌وری", "toggleImmersionModeDesc": "وقتی فعال باشد، تمام پیام‌ها به زبان هدف شما نمایش داده می‌شوند. این تنظیم در تبادل‌های زبانی بیشترین کاربرد را دارد.", "itToggleDescription": "این ابزار یادگیری زبان، کلمات در زبان پایه شما را شناسایی می‌کند و به شما در ترجمه آن‌ها به زبان هدف کمک می‌کند. هرچند نادر است، هوش مصنوعی ممکن است در ترجمه خطا کند.", @@ -2966,212 +2896,13 @@ "definitionsToolDescription": "وقتی فعال باشد، کلمات زیر خط آبی قابل کلیک برای مشاهده تعاریف هستند. برای دسترسی به تعاریف، پیام‌ها را کلیک کنید.", "translationsToolDescrption": "وقتی فعال باشد، با کلیک روی یک پیام و آیکون ترجمه، پیام را به زبان پایه خود ببینید.", "welcomeBack": "خوش آمدید! اگر بخشی از آزمایش ۲۰۲۳-۲۰۲۴ بودید، لطفاً برای اشتراک ویژه آزمایشی با ما تماس بگیرید. اگر معلم هستید و یا مؤسسه‌تان مجوزهای آموزشی خریداری کرده است، برای اشتراک معلم با ما تماس بگیرید.", - "kickAllStudents": "اخراج همه دانش‌آموزان", - "kickAllStudentsConfirmation": "آیا مطمئن هستید که می‌خواهید همه دانش‌آموزان را اخراج کنید؟", - "inviteAllStudents": "دعوت از همه دانش‌آموزان", - "inviteAllStudentsConfirmation": "آیا مطمئن هستید که می‌خواهید از همه دانش‌آموزان دعوت کنید؟", - "inviteUsersFromPangea": "افزودن مدیران", - "redeemPromoCode": "کد تخفیف را وارد کنید", - "enterPromoCode": "کد تخفیف را وارد کنید", "downloadTxtFile": "دانلود فایل متنی", "downloadCSVFile": "دانلود فایل CSV", "promotionalSubscriptionDesc": "در حال حاضر اشتراک تبلیغاتی دائمی دارید. برای کمک به تغییر اشتراک خود با support@pangea.chat تماس بگیرید.", "originalSubscriptionPlatform": "اشتراک از طریق {purchasePlatform} خریداری شده است", "oneWeekTrial": "آزمایش یک هفته‌ای", "downloadXLSXFile": "دانلود فایل اکسل", - "abDisplayName": "آبخازی", - "aaDisplayName": "آفار", - "afDisplayName": "آفریکانس", - "akDisplayName": "آکان", - "sqDisplayName": "آلبانیایی", - "amDisplayName": "امهری", - "arDisplayName": "عربی", - "anDisplayName": "آراگونی", - "hyDisplayName": "ارمنی", - "asDisplayName": "آسامی", - "avDisplayName": "آواریک", - "aeDisplayName": "اوستایی", - "ayDisplayName": "آیمارا", - "azDisplayName": "آذربایجانی", - "bmDisplayName": "بمبارا", - "baDisplayName": "باشکیری", - "euDisplayName": "باسکی", - "beDisplayName": "بلاروسی", - "bnDisplayName": "بنگالی", - "bhDisplayName": "بیهاری", - "biDisplayName": "بیسمالا", - "bsDisplayName": "بوسنیایی", - "brDisplayName": "برتون", - "bgDisplayName": "بلغاری", - "myDisplayName": "برمه‌ای", - "caDisplayName": "کاتالان، والنسیا", - "chDisplayName": "چامورو", - "ceDisplayName": "چچنی", - "nyDisplayName": "چیچوا، چوا، نانجا", - "zhDisplayName": "چینی", - "cvDisplayName": "چوواش", - "kwDisplayName": "کرنیش", - "coDisplayName": "کورسیکانی", - "crDisplayName": "کریک", - "hrDisplayName": "کرواتی", - "csDisplayName": "چکی", - "daDisplayName": "دانمارکی", - "dvDisplayName": "دیهی؛ دیهوی؛ مالدیوایی؛", - "nlDisplayName": "هلندی", - "enDisplayName": "انگلیسی", - "eoDisplayName": "اسپرانتو", - "etDisplayName": "استونیایی", - "eeDisplayName": "اوئه", - "foDisplayName": "فاروئی", - "fjDisplayName": "فیجیایی", - "fiDisplayName": "فنلاندی", - "frDisplayName": "فرانسوی", - "ffDisplayName": "فولا؛ فوله؛ پولار؛ پولار", - "glDisplayName": "گالیسیایی", - "kaDisplayName": "گرجی", - "deDisplayName": "آلمانی", - "elDisplayName": "یونانی، مدرن", - "gnDisplayName": "گوارانی", - "guDisplayName": "گجراتی", - "htDisplayName": "هائیتی، کریول هائیتی", - "haDisplayName": "هوسا", - "heDisplayName": "عبری (مدرن)", - "hzDisplayName": "هرو", - "hiDisplayName": "هندی", - "hoDisplayName": "هیری موتو", - "huDisplayName": "مجارستانی", - "iaDisplayName": "اینترلینگوا", - "idDisplayName": "اندونزیایی", - "ieDisplayName": "اینترلینگو", - "gaDisplayName": "ایرلندی", - "igDisplayName": "ایگبو", - "ikDisplayName": "اینوپیاک", - "ioDisplayName": "ایدو", - "isDisplayName": "ایسلندی", - "itDisplayName": "ایتالیایی", - "iuDisplayName": "اینوکتیتوت", - "jaDisplayName": "ژاپنی", - "jvDisplayName": "جاوه‌ای", - "klDisplayName": "کالالیسوت، گرینلندی", - "knDisplayName": "کانادایی", - "krDisplayName": "کانوری", - "ksDisplayName": "کشمیری", - "kkDisplayName": "قزاقی", - "kmDisplayName": "خمر", - "kiDisplayName": "کی‌کویو، گی‌کویو", - "rwDisplayName": "کینیاوراندایی", - "kyDisplayName": "قرقیزی، قرقیزی", - "kvDisplayName": "کومی", - "kgDisplayName": "کنگویی", - "koDisplayName": "کره‌ای", - "kuDisplayName": "کردی", - "kjDisplayName": "کوانیاما، کوانیاما", - "laDisplayName": "لاتین", - "lbDisplayName": "لوکزامبورگی، لتزبورگیش", - "lgDisplayName": "لونگادا", - "liDisplayName": "لیمبورگی، لیمبوربان، لیمبورگر", - "lnDisplayName": "لینگالا", - "loDisplayName": "لاو", - "ltDisplayName": "لیتوانیایی", - "luDisplayName": "لوبا-کاتانگا", - "lvDisplayName": "لاتویایی", - "gvDisplayName": "منکس", - "mkDisplayName": "مقدونی", - "mgDisplayName": "مالاگاسی", - "msDisplayName": "مالایی", - "mlDisplayName": "مالایالام", - "mtDisplayName": "مالتی", - "miDisplayName": "مائوری", - "mrDisplayName": "ماراثی (ماراثی)", - "mhDisplayName": "مارشالی", - "mnDisplayName": "مغولی", - "naDisplayName": "نائورو", - "nvDisplayName": "نائاو، نواهو", - "nbDisplayName": "نروژی بوکمال", - "ndDisplayName": "نورد ندیبل", - "neDisplayName": "نپالی", - "ngDisplayName": "ندونگا", - "nnDisplayName": "نروژی نینورستک", - "noDisplayName": "نروژی", - "iiDisplayName": "نوسو", - "nrDisplayName": "نبدله جنوبی", - "ocDisplayName": "اوکیتان", - "ojDisplayName": "اوژیب، اوجیبا", - "cuDisplayName": "قدیم‌السانس کلیسایی، اسلاوی کلیسایی، اسلاوی قدیم، بلغاری قدیم، اسلاوی قدیم", - "omDisplayName": "اورومو", - "orDisplayName": "اوریا", - "osDisplayName": "اوستیایی، اوستیایی", - "paDisplayName": "پنجابی، پنجابی", - "piDisplayName": "پالی", - "faDisplayName": "فارسی", - "plDisplayName": "لهستانی", - "psDisplayName": "پشتو، پشتو", - "ptDisplayName": "پرتغالی", - "quDisplayName": "کچوا", - "rmDisplayName": "رومانش", - "rnDisplayName": "کیریدی", - "roDisplayName": "رومانیایی، مولداویایی، مولداوی", - "ruDisplayName": "روسی", - "saDisplayName": "سانسکریت (ساستک)", - "scDisplayName": "ساردینیایی", - "sdDisplayName": "سندی", - "seDisplayName": "سامى شمالی", - "smDisplayName": "ساموآیی", - "sgDisplayName": "سانگو", - "srDisplayName": "صربی", - "gdDisplayName": "گیلیک اسکاتلندی، گیلیک", - "snDisplayName": "شونا", - "siDisplayName": "سینهالا، سینالی", - "skDisplayName": "اسلواکی", - "slDisplayName": "اسلوونیایی", - "soDisplayName": "سومالی", - "stDisplayName": "سوتو جنوبی", - "esDisplayName": "اسپانیایی", - "suDisplayName": "اندونزیایی", - "swDisplayName": "سواحیلی", - "ssDisplayName": "سواتی", - "svDisplayName": "سوئدی", - "taDisplayName": "تامیلی", - "teDisplayName": "تلگو", - "tgDisplayName": "تاجیکی", - "thDisplayName": "تایلندی", - "tiDisplayName": "تیگرینیایی", - "boDisplayName": "تبتی استاندارد، تبتی، مرکزی", - "tkDisplayName": "ترکمنی", - "tlDisplayName": "تاگالوگ", - "tnDisplayName": "تسونگا", - "toDisplayName": "تونگا (جزایر تونگا)", - "trDisplayName": "ترکی", - "tsDisplayName": "تسونگا", - "ttDisplayName": "تاتاری", - "twDisplayName": "توی", - "tyDisplayName": "تاهیتیایی", - "ugDisplayName": "اوغوری، اویغوری", - "ukDisplayName": "اوکراینی", - "urDisplayName": "اردو", - "uzDisplayName": "ازبکی", - "veDisplayName": "وندا", - "viDisplayName": "ویتنامی", - "voDisplayName": "ولاپوک", - "waDisplayName": "والونی", - "cyDisplayName": "ولزی", - "woDisplayName": "ولوف", - "fyDisplayName": "فریسی غربی", - "xhDisplayName": "خوسا", - "yiDisplayName": "یدیش", - "yoDisplayName": "یوروبا", - "zaDisplayName": "ژوانگ، چوانگ", "unkDisplayName": "نامشخص", - "zuDisplayName": "زولو", - "hawDisplayName": "هاوایی", - "hmnDisplayName": "همونگ", - "multiDisplayName": "چندگانه", - "cebDisplayName": "سِبوآنو", - "dzDisplayName": "زونگخه", - "iwDisplayName": "عبری", - "jwDisplayName": "جاوه‌ای", - "moDisplayName": "مولداویایی", - "shDisplayName": "صرب-کرواتی", "wwCountryDisplayName": "جهان‌و‌جهان", "afCountryDisplayName": "افغانستان", "axCountryDisplayName": "جزایر آلند", @@ -3419,41 +3150,25 @@ "yeCountryDisplayName": "یمن", "zmCountryDisplayName": "زامبیا", "zwCountryDisplayName": "زیمبابوه", - "pay": "پرداخت", - "allPrivateChats": "گفتگوهای مستقیم", - "unknownPrivateChat": "گفتگوی خصوصی ناشناخته", + "pay": "Checkout", "invitedToSpace": "{user} شما را به یک دوره دعوت کرده است: {space}! آیا مایل به پذیرش هستید؟", - "declinedInvitation": "دعوت رد شد", - "acceptedInvitation": "دعوت پذیرفته شد", "youreInvited": "📩 شما دعوت شده‌اید!", "invitedToChat": "{user} شما را به یک چت دعوت کرده است: {name}! آیا مایل به پذیرش هستید؟", "monthlySubscription": "ماهانه", "yearlySubscription": "سالانه", "defaultSubscription": "اشتراک چت پنگئا", "freeTrial": "نسخه آزمایشی رایگان", - "grammarAnalytics": "تحلیل خطا", "total": "مجموع: ", "noDataFound": "داده‌ای یافت نشد", - "promoSubscriptionExpirationDesc": "اشتراک فعلی شما تبلیغاتی است و در تاریخ {expiration} منقضی می‌شود. برای کمک در تغییر اشتراک، پیام به support@pangea.chat ارسال کنید.", - "emptyChatNameWarning": "لطفاً نامی برای این چت وارد کنید", "blurMeansTranslateTitle": "چرا پیام محو شده است؟", "blurMeansTranslateBody": "در حالی که حالت غوطه‌وری فعال است، پیام‌هایی که به زبان پایه شما ارسال می‌شوند، در حین ترجمه توسط ربات پنگئا به زبان هدف، محو می‌شوند. حالت غوطه‌وری را می‌توان در تنظیمات فردی و دوره‌ای فعال یا غیرفعال کرد.", - "someErrorTitle": "هوم، چیزی درست نیست", - "someErrorBody": "ممکن است خطا باشد یا مشکلی در زبان پایه شما وجود دارد.", "bestCorrectionFeedback": "درست است!", "distractorFeedback": "این کمی درست نیست.", "bestAnswerFeedback": "درست است!", "definitionDefaultPrompt": "معنی این کلمه چیست؟", "practiceDefaultPrompt": "بهترین پاسخ چیست؟", "correctionDefaultPrompt": "جایگزین بهترین چیست؟", - "itStartDefaultPrompt": "آیا می‌خواهید در ترجمه کمک بگیرید؟", - "lockedChatWarning": "🔒 این چت قفل شده است", - "lockChat": "قفل کردن چت", - "suggestToChat": "پیشنهاد این چت", - "suggestToChatDesc": "چت‌های پیشنهادی در لیست چت‌ها ظاهر می‌شوند", "acceptSelection": "پذیرش اصلاح", - "acceptSelectionAnyway": "با این حال از آن استفاده کن", - "makingActivity": "در حال انجام فعالیت", "why": "چرا؟", "definition": "تعریف", "exampleSentence": "جمله نمونه", @@ -3461,128 +3176,55 @@ "reportMessageTitle": "{reportingUserId} یک پیام از {reportedUserId} در چت {roomName} گزارش کرده است", "reportMessageBody": "پیام: {reportedMessage}\nدلیل: {reason}", "noTeachersFound": "هیچ معلمی برای گزارش یافت نشد", - "viewArchive": "مشاهده آرشیو", "trialExpiration": "آزمایش رایگان شما در تاریخ {expiration} به پایان می‌رسد", "freeTrialDesc": "کاربران جدید یک هفته آزمایش رایگان پنگئا چت دریافت می‌کنند", "activateTrial": "آزمایش رایگان 7 روزه", "successfullySubscribed": "با موفقیت مشترک شده‌اید!", "clickToManageSubscription": "برای مدیریت اشتراک خود اینجا کلیک کنید.", - "errorGettingAudio": "خطا در دریافت صدا. لطفاً صفحه را تازه‌سازی کنید و دوباره تلاش کنید.", "signUp": "ثبت‌نام", "pleaseChooseAtLeastChars": "لطفاً حداقل {min} کاراکتر را انتخاب کنید.", "noEmailWarning": "لطفاً یک آدرس ایمیل معتبر وارد کنید. در غیر این صورت نمی‌توانید رمز عبور خود را بازنشانی کنید. اگر نمی‌خواهید، دوباره روی دکمه ضربه بزنید تا ادامه دهید.", "pleaseEnterValidEmail": "لطفاً یک آدرس ایمیل معتبر وارد کنید.", "pleaseChooseAUsername": "لطفاً یک نام کاربری انتخاب کنید", - "chooseAUsername": "انتخاب نام کاربری", "define": "تعریف", "listen": "گوش دادن", - "addConversationBot": "فعال کردن ربات مکالمه", - "addConversationBotDesc": "اضافه کردن ربات به این چت", - "convoBotSettingsDescription": "ویرایش موضوع و سطح دشواری مکالمه", - "enterAConversationTopic": "وارد کردن موضوع مکالمه", - "conversationTopic": "موضوع مکالمه", - "enableModeration": "فعال کردن نظارت", - "enableModerationDesc": "فعال کردن نظارت خودکار برای بررسی پیام‌ها قبل از ارسال", - "conversationLanguageLevel": "سطح زبان این مکالمه چیست؟", - "showDefinition": "نمایش تعریف", - "subscriptionPopupTitle": "این جمله ممکن است اشتباه گرامری داشته باشد...", - "subscriptionPopupDesc": "امروز مشترک شوید تا ترجمه و تصحیح گرامر را فعال کنید!", - "seeOptions": "مشاهده گزینه‌ها", - "continuedWithoutSubscription": "ادامه بدون اشتراک", "trialPeriodExpired": "دوره آزمایشی شما به پایان رسیده است", - "selectToDefine": "برای دیدن تعریف هر کلمه کلیک کنید!", "translations": "ترجمه‌ها", "messageAudio": "صدای پیام", "definitions": "تعاریف", "subscribedToUnlockTools": "برای فعال‌سازی ترجمه تعاملی و بررسی گرامر، پخش صدا، فعالیت‌های تمرینی شخصی‌سازی‌شده و تحلیل‌های یادگیری، اشتراک کنید!", "translationTooltip": "ترجمه", - "audioTooltip": "پخش صدا", "speechToTextTooltip": "متن گفتاری", - "certifyAge": "گواهی می‌دهم که بیش از {age} سال دارم", "kickBotWarning": "اخراج ربات پنگئا، ربات گفتگو را از این چت حذف می‌کند.", - "joinToView": "برای مشاهده جزئیات، به این اتاق بپیوندید", "refresh": "تازه‌سازی", - "autoPlayTitle": "پخش خودکار پیام‌ها", - "autoPlayDesc": "در صورت فعال بودن، صدای متن به گفتار پیام‌ها به صورت خودکار پخش می‌شود.", "messageAnalytics": "تحلیل پیام", "words": "کلمات", "score": "امتیاز", "accuracy": "دقت", "points": "نقاط", "noPaymentInfo": "نیازی به اطلاعات پرداخت نیست!", - "conversationBotModeSelectDescription": "فعالیت چت", - "conversationBotModeSelectOption_discussion": "بحث", - "conversationBotModeSelectOption_custom": "سفارشی", - "conversationBotModeSelectOption_conversation": "گفتگو", - "conversationBotModeSelectOption_textAdventure": "ماجراجویی متنی", - "conversationBotModeSelectOption_storyGame": "بازی داستان", - "conversationBotDiscussionZone_title": "تنظیمات بحث", - "conversationBotDiscussionZone_discussionTopicLabel": "موضوع بحث", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "تنظیم موضوع بحث", - "conversationBotDiscussionZone_discussionKeywordsLabel": "کلمات کلیدی بحث", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "تنظیم کلمات کلیدی بحث", - "conversationBotDiscussionZone_discussionKeywordsHintText": "لیست جدا شده با ویرگول از کلمات کلیدی برای راهنمایی بحث", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "ارسال درخواست بحث بر اساس برنامه زمانی", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "ساعت‌های بین درخواست‌های بحث", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "پاسخ در واکنش ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "واکنش برای ارسال درخواست بحث", - "conversationBotCustomZone_title": "تنظیمات سفارشی", - "conversationBotCustomZone_customSystemPromptLabel": "پیشنهاد سیستم", - "conversationBotCustomZone_customSystemPromptPlaceholder": "تنظیم پیشنهاد سیستم سفارشی", - "conversationBotCustomZone_customSystemPromptEmptyError": "پیشنهاد سیستم سفارشی گم شده است", - "botConfig": "تنظیمات ربات و فعالیت", - "botConfigNoPermissionTitle": "بدون مجوز", - "botConfigNoPermissionMessage": "با مدیر اتاق تماس بگیرید تا پیکربندی ربات را تغییر دهد", - "addConversationBotDialogTitleInvite": "تایید دعوت ربات گفتگو", - "addConversationBotButtonInvite": "دعوت", - "addConversationBotDialogInviteConfirmation": "دعوت", - "addConversationBotButtonTitleRemove": "تایید حذف ربات گفتگو", - "addConversationBotButtonRemove": "حذف", - "addConversationBotDialogRemoveConfirmation": "حذف", - "conversationBotConfigConfirmChange": "تایید", - "conversationBotStatus": "دعوت ربات", - "conversationBotTextAdventureZone_title": "ماجراجویی متنی", - "conversationBotTextAdventureZone_instructionLabel": "دستورالعمل‌های مدیر بازی", - "conversationBotTextAdventureZone_instructionPlaceholder": "دستورالعمل‌های مدیر بازی را تنظیم کنید", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "دستورالعمل‌های مدیر بازی گم شده است", - "studentAnalyticsNotAvailable": "داده‌های دانش‌آموز در حال حاضر در دسترس نیست", - "roomDataMissing": "ممکن است برخی داده‌ها در اتاق‌هایی که عضو آن‌ها نیستید، موجود نباشد.", "updatePhoneOS": "ممکن است نیاز باشد نسخه سیستم‌عامل دستگاه خود را به‌روزرسانی کنید.", "wordsPerMinute": "کلمات در دقیقه", "autoIGCToolName": "اجرای خودکار کمک نوشتن پنگئا", "autoIGCToolDescription": "به طور خودکار قبل از ارسال پیام من، کمک نگارش گرامر و ترجمه چت پنگئا را اجرا کنید.", - "runGrammarCorrection": "بررسی پیام", - "grammarCorrectionFailed": "مشکلات برای رفع", - "grammarCorrectionComplete": "به نظر خوب می‌رسد!", "tooltipInstructionsTitle": "مطمئن نیستید چه کاری انجام می‌دهد؟", "tooltipInstructionsMobileBody": "برای مشاهده راهنما، آیتم‌ها را نگه دارید.", "tooltipInstructionsBrowserBody": "برای مشاهده راهنما، روی آیتم‌ها هاور کنید.", "chatCapacity": "ظرفیت چت", "roomFull": "این اتاق در حال حاضر پر است.", - "topicNotSet": "موضوع تعیین نشده است.", - "chatCapacityNotSet": "این چت محدودیت ظرفیت ندارد.", "chatCapacityHasBeenChanged": "ظرفیت چت تغییر یافته است", "chatCapacitySetTooLow": "ظرفیت چت باید حداقل {count} باشد.", "chatCapacityExplanation": "ظرفیت چت تعداد اعضای مجاز در یک چت را محدود می‌کند.", - "chatExceedsCapacity": "این چت از ظرفیت خود عبور کرده است.", "tooManyRequest": "تعداد درخواست‌ها زیاد است، لطفاً بعداً تلاش کنید.", "enterNumber": "لطفاً یک مقدار عدد صحیح وارد کنید.", "buildTranslation": "ترجمه خود را از گزینه‌های بالا بسازید", - "nonexistentSelection": "انتخاب دیگر وجود ندارد.", - "changeAnalyticsLanguage": "تغییر زبان تجزیه و تحلیل", "practice": "تمرین", "noLanguagesSet": "هیچ زبانی تنظیم نشده است", - "noActivitiesFound": "فعلاً کافی است! بعداً برگردید برای اطلاعات بیشتر.", - "hintTitle": "راهنما:", "speechToTextBody": "برای پیام‌های صوتی، می‌توانید متن گفتار را ببینید و نمره کلمات در دقیقه سخنران را مشاهده کنید.", "versionNotFound": "نسخه پیدا نشد", "fetchingVersion": "در حال دریافت نسخه...", "versionFetchError": "خطا در دریافت نسخه", "versionText": "نسخه: {version}+{buildNumber}", - "languageButtonLabel": "زبان: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "پخش خودکار ترجمه", - "interactiveTranslatorAutoPlayDesc": "ترجمه تعاملی را بدون پرسش راه‌اندازی می‌کند.", - "changeAnalyticsView": "تغییر نمای تحلیلی", "l1TranslationBody": "پیام‌ها در زبان پایه شما ترجمه نخواهند شد.", "deleteSubscriptionWarningTitle": "اشتراک فعال دارید", "deleteSubscriptionWarningBody": "حذف حساب شما به طور خودکار اشتراک شما را لغو نمی‌کند.", @@ -3590,9 +3232,7 @@ "error520Title": "لطفاً دوباره تلاش کنید.", "error520Desc": "متأسفیم، نتوانستیم پیام شما را درک کنیم...", "wordsUsed": "کلمات استفاده شده", - "errorTypes": "نوع خطا", "level": "سطح", - "canceledSend": "ارسال لغو شد", "morphsUsed": "مورف‌ها استفاده شده", "translationChoicesBody": "برای راهنمایی، یک گزینه را نگه دارید و کلیک کنید.", "grammar": "دستور زبان", @@ -3602,7 +3242,6 @@ "reportContentIssueTitle": "گزارش مشکل محتوا", "feedback": "بازخورد اختیاری", "reportContentIssueDescription": "اوه! هوش مصنوعی می‌تواند تجربیات یادگیری شخصی‌سازی شده را تسهیل کند اما... همچنین توهم می‌زند. لطفاً هر بازخوردی دارید ارائه دهید و دوباره تلاش خواهیم کرد.", - "changeContent": "اوه! هوش مصنوعی می‌تواند تجربیات یادگیری شخصی‌سازی شده را تسهیل کند اما... همچنین توهم می‌زند. باید چه باشد؟", "clickTheWordAgainToDeselect": "برای لغو انتخاب کلمه، روی آن کلیک کنید.", "l2SupportNa": "در دسترس نیست", "l2SupportAlpha": "آلفا", @@ -3836,7 +3475,6 @@ "grammarCopySPC": "مشخصه", "grammarCopyPARTTYPE": "نوع قسمت‌دار", "grammarCopyINTREL": "سوال-نسبتی", - "grammarCopyNUMFORMpsor": "عدد مالک", "grammarCopyUNKNOWN": "نامشخص", "grammarCopyNUMBERPSOR": "عدد مالک", "grammarCopyPOSS": "ملکی", @@ -3882,28 +3520,14 @@ "grammarCopyVOICEdir": "مستقیم", "grammarCopyVOICEinv": "معکوس", "grammarCopyVOICErcp": "متقابل", - "enterPrompt": "لطفاً یک پیام سیستم وارد کنید", - "selectBotLanguage": "انتخاب زبان ربات", - "chooseVoice": "انتخاب صدا", - "enterLanguageLevel": "لطفاً سطح زبان را وارد کنید", - "enterDiscussionTopic": "لطفاً موضوع بحث را وارد کنید", - "selectBotChatMode": "انتخاب حالت چت ربات", - "messageNotInTargetLang": "پیام در زبان هدف نیست", "other": "دیگر", "levelShort": "سطح {level}", - "botModeValidation": "لطفاً حالت چت را انتخاب کنید", "clickBestOption": "گزینه‌های بهترین را برای ترجمه پیام خود انتخاب کنید!", "completeActivitiesToUnlock": "برای باز کردن قفل ترجمه، حداقل یک فعالیت را کامل کنید!", - "botSettingsSubtitle": "دعوت از ربات برای مدیریت فعالیت چت", - "invitePeople": "دعوت از کاربران", "noCapacityLimit": "محدودیت ظرفیت ندارد", "downloadGroupText": "دانلود متن گروه", "notificationsOn": "اعلان‌ها فعال است", "notificationsOff": "اعلان‌ها غیرفعال است", - "chatCanBeFoundViaSearch": "گفتگو از طریق جستجو قابل پیدا کردن است", - "requireCodeToJoin": "برای پیوستن نیاز به کد است", - "canFindInSearch": "در جستجو قابل پیدا کردن است", - "addChatToSpace": "افزودن چت", "createChatAndInviteUsers": "ایجاد چت و دعوت از کاربران", "updatedNewSpaceDescription": "دوره‌ها به شما امکان می‌دهند چت‌های خود را جمع‌بندی کنید و جوامع خصوصی یا عمومی بسازید.", "joinWithCode": "پیوستن با کد", @@ -3939,39 +3563,19 @@ "constructUseCollected": "در چت جمع‌آوری شده است", "constructUseNanDesc": "قابل اجرا نیست", "xpIntoLevel": "{currentXP} / {maxXP} امتیاز تجربه", - "signInWithUsername": "ورود با نام کاربری و رمز عبور", - "registrationEmailMessage": "لطفاً ایمیل خود را با لینکی که به آن ارسال شده است تأیید کنید. در برخی موارد، ایمیل تا ۵ دقیقه طول می‌کشد تا برسد. لطفاً پوشه هرزنامه خود را نیز بررسی کنید.", "enableTTSToolName": "فعال کردن تبدیل متن به گفتار", "enableTTSToolDescription": "اجازه دهید برنامه خروجی تبدیل متن به گفتار برای بخش‌هایی از متن در زبان هدف شما تولید کند.", - "couldNotFindTTS": "ما نتوانستیم موتور تبدیل متن به گفتار برای زبان هدف فعلی شما پیدا کنیم.", - "ttsInstructionsHyperlink": "برای مشاهده دستورالعمل‌های دانلود صدای جدید در دستگاه خود، اینجا کلیک کنید.", - "createAnAccount": "ایجاد حساب کاربری", - "signIn": "ورود", - "signUpWithEmail": "ثبت‌نام با ایمیل", - "signUpWithGoogle": "ثبت‌نام با گوگل", - "signUpWithApple": "ثبت‌نام با اپل", "yourUsername": "نام کاربری شما", "yourEmail": "ایمیل شما", - "pleaseEnterAnEmail": "لطفاً یک آدرس ایمیل وارد کنید", - "signInWithGoogle": "ورود با گوگل", - "signInWithApple": "ورود با اپل", - "chooseYourAvatar": "انتخاب آواتار شما", "iWantToLearn": "می‌خواهم یاد بگیرم", - "letsStart": "بیایید شروع کنیم", - "pleaseAgreeToTOS": "لطفاً با شرایط و ضوابط موافقت کنید", "pleaseEnterEmail": "لطفاً یک آدرس ایمیل معتبر وارد کنید", - "pleaseSelectALanguage": "لطفاً یک زبان را انتخاب کنید", "myBaseLanguage": "زبان پایه من", - "clickWordsInstructions": "👽 روی هر کلمه کلیک کنید برای جزئیات. 🤐", - "chooseBestDefinition": "این کلمه چه معنایی دارد؟", "meaningSectionHeader": "معنی:", "formSectionHeader": "اشکال مورد استفاده در چت‌ها:", - "noEmojiSelectedTooltip": "هیچ ایموجی انتخاب نشده است", "writingExercisesTooltip": "نوشتن", "listeningExercisesTooltip": "گوش دادن", "readingExercisesTooltip": "خواندن", "meaningNotFound": "معنی پیدا نشد.", - "formsNotFound": "فرم‌ها پیدا نشدند.", "chooseBaseForm": "انتخاب فرم پایه", "notTheCodeError": "متأسفم، این کد نیست!", "totalXP": "کل امتیاز تجربه", @@ -4011,9 +3615,6 @@ "pickAnEmoji": "ایموجی مورد علاقه شما برای '{lemma}' چیست؟", "chooseLemmaMeaningInstructionsBody": "معانی را با کلمات در پیام مطابقت دهید!", "doubleClickToEdit": "برای ویرایش، دو بار کلیک کنید.", - "removeFeature": "حذف {feature}", - "chooseCorrectLabel": "برچسب صحیح را انتخاب کنید.", - "levelPopupTitle": "تبریک می‌گویم، به سطح {level} رسیدید", "activityPlannerTitle": "برنامه‌ریز فعالیت", "topicLabel": "موضوع", "topicPlaceholder": "یک موضوع انتخاب کنید...", @@ -4021,7 +3622,6 @@ "modePlaceholder": "یک حالت انتخاب کنید...", "learningObjectiveLabel": "هدف یادگیری", "learningObjectivePlaceholder": "یک هدف یادگیری انتخاب کنید...", - "mediaLabel": "رسانه‌ای که یادگیرندگان باید به اشتراک بگذارند", "languageOfInstructionsLabel": "زبان دستورالعمل‌های فعالیت", "targetLanguageLabel": "زبان هدف", "cefrLevelLabel": "سطح CEFR", @@ -4036,20 +3636,15 @@ "instructions": "دستورالعمل‌ها", "numberOfLearners": "تعداد یادگیرندگان", "mustBeInteger": "باید عدد صحیح باشد مثلاً ۱، ۲، ۳، ...", - "noLemmasFound": "هیچ واژه‌نامه‌ای با بیش از {xp} امتیاز وجود ندارد. به تمرین ادامه دهید!", "constructUsePvmDesc": "تولید شده در پیام صوتی", - "lockedMorphFeature": "در انتظار قفل شدن", "leaveSpaceDescription": "با ترک دوره، تمام چت‌های درون آن را ترک خواهید کرد. کاربران دیگر خواهند دید که شما دوره را ترک کرده‌اید.", - "whatIsLemma": "واژه‌نامه چیست؟", "constructUseCorMmDesc": "معنای پیام صحیح", "constructUseIncMmDesc": "معنای پیام نادرست", "constructUseIgnMmDesc": "معنای پیام نادیده گرفته شده", "clickForMeaningActivity": "برای چالش معنی اینجا کلیک کنید", "meaning": "معنی", "chatWith": "گروه با {displayname}", - "slightlyOffensive": "کمی توهین‌آمیز", "clickOnEmailLink": "لطفاً روی لینک در ایمیل کلیک کنید و سپس ادامه دهید.\n\nاگر ایمیل دریافت نشده است، پوشه هرزنامه خود را بررسی کنید.", - "whoIsAllowedToJoinThisChat": "چه کسانی مجاز به پیوستن به این چت هستند", "dontForgetPassword": "فراموش نکنید رمز عبور خود را!", "enableAutocorrectToolName": "فعال کردن تصحیح خودکار دستگاه", "enableAutocorrectDescription": "اگر دستگاه شما از زبانی که در حال یادگیری آن هستید پشتیبانی می‌کند، می‌توانید تصحیح خودکار دستگاه را فعال کنید تا خطاهای رایج هنگام تایپ برطرف شوند.", @@ -4077,48 +3672,26 @@ "autocorrectNotAvailable": "متأسفانه پلتفرم شما در حال حاضر برای این ویژگی پشتیبانی نمی‌شود. منتظر توسعه‌های بیشتر باشید!", "pleaseUpdateApp": "لطفاً برنامه را به‌روزرسانی کنید تا ادامه دهید.", "chooseEmojiInstructionsBody": "ایموجی‌ها را با کلماتی که بهترین نشان‌دهنده آن‌ها هستند، مطابقت دهید. نگران نباشید! برای مخالفت هیچ امتیازی کم نمی‌شود. 😅", - "pickAnEmojiFor": "یک ایموجی برای {lemma} انتخاب کنید", "analyticsVocabListBody": "این تمام واژگان شما است! هر چه برای هر کلمه XP کسب کنید، از جوانه زدن به شکوفه کامل تبدیل می‌شود. روی هر کلمه کلیک کنید تا جزئیات بیشتری ببینید.", "morphAnalyticsListBody": "این تمام مفاهیم گرامری در زبانی است که در حال یادگیری آن هستید! شما آن‌ها را هنگام گفتگو کشف خواهید کرد. برای جزئیات کلیک کنید.", "knockSpaceSuccess": "درخواست شما برای پیوستن به این دوره ارسال شده است! مدیر در صورت دریافت درخواست، پاسخ خواهد داد 😄", - "joinByCode": "پیوستن با کد", "chooseWordAudioInstructionsBody": "به پیام کامل گوش دهید. سپس صداها را با کلمات مطابقت دهید.", "chooseMorphsInstructionsBody": "برای سوالات گرامری، قطعات پازل را کلیک کنید!", - "inviteAndLaunch": "دعوت و راه‌اندازی", - "createOwnChat": "ایجاد چت خودتان", "pleaseEnterInt": "لطفاً یک عدد وارد کنید", "home": "خانه", "join": "پیوستن", "readingAssistanceOverviewBody": "برای بازی‌های کوچک در مطابقت ایموجی‌ها، صداها، معانی کلمات و مفاهیم گرامری، روی دکمه‌های زیر کلیک کنید. یا روی هر کلمه برای جزئیات کلیک کنید.", - "learnByTexting": "یادگیری از طریق پیامک", - "levelSummaryTrigger": "مشاهده خلاصه", "levelSummaryPopupTitle": "خلاصه سطح {level}", - "referFriends": "دعوت از دوستان", - "referFriendDialogTitle": "دعوت از یک دوست به گفتگو", - "referFriendDialogDesc": "آیا دوستی دارید که مشتاق است زبان جدیدی را با شما بیاموزد؟ سپس این لینک دعوت را کپی کرده و ارسال کنید تا به جمع بپیوندد و امروز با شما گفتگو کند.", - "youUnlocked": "شما قفل را باز کرده‌اید", "resetInstructionTooltipsTitle": "بازنشانی راهنمای ابزار", "resetInstructionTooltipsDesc": "برای نمایش راهنمای ابزار مانند کاربر جدید، کلیک کنید.", "selectForGrammar": "یک آیکون گرامر برای فعالیت‌ها و جزئیات انتخاب کنید.", - "newChatActivityTitle": "یک فعالیت سرگرم‌کننده اضافه کنید؟", - "newChatActivityDesc": "هر گفتگوی گروهی را با برنامه‌ریز فعالیت‌ها به یک ماجراجویی تبدیل کنید! موضوعات و اهداف جذاب برای گروه تعیین کنید و گفتگوها را با تصاویر خیره‌کننده زنده کنید. بحث‌های خلاقانه را جرقه بزنید و لذت را به راحتی ادامه دهید!", - "exploreMore": "بیشتر کاوش کنید", "randomize": "تصادفی کردن", "clear": "پاک کردن", "makeYourOwnActivity": "فعالیت خود را بسازید", "featuredActivities": "برگزیده", - "goToChat": "برو به گفتگو", "save": "ذخیره", - "selectActivity": "انتخاب فعالیت", - "wordFocusListeningMultipleChoice": "کدام صدا با کلمه مطابقت دارد؟", "startChat": "شروع چت", "translationProblem": "مشکل ترجمه", - "perfectTranslation": "ترجمه کامل!", - "greatJobTranslation": "کار عالی در ترجمه این!", - "goodJobTranslation": "کار خوبی در این ترجمه انجام دادید.", - "makingProgress": "در حال پیشرفت هستید!", - "keepPracticing": "به تمرین ادامه دهید!", - "niceJob": "کار خوبی انجام دادید!", "askToJoin": "درخواست پیوستن", "emptyChatWarningTitle": "چت خالی است", "emptyChatWarningDesc": "شما کسی را به چت خود دعوت نکرده‌اید. برای دعوت از مخاطبین یا ربات به تنظیمات چت بروید. همچنین می‌توانید این کار را بعداً انجام دهید.", @@ -4137,8 +3710,6 @@ "languageLevelC2Desc": "من می‌توانم تقریباً هر چیزی که شنیده یا خوانده می‌شود را درک کنم و خود را روان و دقیق بیان کنم.", "newVocab": "واژگان جدید", "newGrammar": "مفاهیم گرامری جدید", - "congratulationsOnReaching": "شما به سطح {level} رسیدید!", - "seeDetails": "جزئیات را ببینید", "choosePracticeMode": "برای شروع یک فعالیت تمرینی روی یکی از دکمه‌های بالا کلیک کنید", "ban": "مسدود کردن", "unban": "لغو مسدودیت", @@ -4152,8 +3723,6 @@ "timesUsedWithAssistance": "تعداد دفعات استفاده با کمک", "shareInviteCode": "کد دعوت را به اشتراک بگذارید: {code}", "leaderboard": "جدول رده‌بندی", - "welcomeUser": "خوش آمدید {user}", - "joinSpaceOnboardingDesc": "آیا کد یا لینک دعوت به یک دوره عمومی دارید؟", "skipForNow": "فعلاً رد شو", "permissions": "مجوزها", "spaceChildPermission": "چه کسی می‌تواند چت‌های جدید به این دوره اضافه کند", @@ -4161,12 +3730,8 @@ "defaultOption": "پیش‌فرض", "deleteChatDesc": "آیا مطمئن هستید که می‌خواهید این چت را حذف کنید؟ این کار برای همه شرکت‌کنندگان انجام می‌شود و تمام پیام‌های داخل چت دیگر برای تمرین یا تحلیل‌های یادگیری در دسترس نخواهند بود.", "deleteSpaceDesc": "دوره و هر چت انتخاب شده برای همه شرکت‌کنندگان حذف خواهد شد و تمام پیام‌های داخل چت دیگر برای تمرین یا تحلیل‌های یادگیری در دسترس نخواهند بود. این عملیات قابل بازگشت نیست.", - "chatWithActivities": "گفتگو با فعالیت‌ها", "launch": "راه‌اندازی", - "launchActivityToChats": "راه‌اندازی فعالیت در چت‌ها", "searchChats": "جستجوی چت‌ها", - "selectChats": "انتخاب چت‌ها", - "selectChatToStart": "تمام شد! یک چت را برای شروع انتخاب کنید", "maxFifty": "حداکثر ۵۰", "configureSpace": "پیکربندی دوره", "pinMessages": "سنجاق پیام‌ها", @@ -4180,9 +3745,7 @@ "announcements": "اعلامیه‌ها", "activities": "فعالیت‌ها", "access": "دسترسی", - "botSettings": "تنظیمات ربات", "activitySuggestionTimeoutMessage": "ما در حال تلاش برای تولید فعالیت‌های بیشتر برای شما هستیم، لطفاً یک دقیقه دیگر بررسی کنید", - "accessSettingsWarning": "اوپس! به نظر می‌رسد شما مجوز تنظیم قوانین دسترسی این اتاق را ندارید. باید این موارد را بررسی کنید تا مطمئن شوید که نیازهای شما برآورده می‌شود و در صورت نیاز با مدیر اتاق صحبت کنید", "howSpaceCanBeFound": "چگونه این دوره قابل پیدا کردن است", "private": "خصوصی", "cannotBeFoundInSearch": "در جستجو قابل پیدا کردن نیست", @@ -4195,16 +3758,6 @@ "canBeFoundViaKnock": "• درخواست پیوستن و تایید مدیر", "youHaveLeveledUp": "شما سطح خود را ارتقاء دادید!", "sendActivities": "ارسال فعالیت‌ها", - "getStarted": "شروع کنید", - "getStartedBotChatDesc": "گفتگو با هوش مصنوعی مکان عالی برای شروع است و ابزارهای خواندن، نوشتن، گوش دادن و صحبت کردن پنگئا آن را آسان می‌کند!", - "getStartedCommunitiesDesc": "یادگیری با یک جامعه جایی است که چت پنگئا درخشان است!\nمی‌توانید در کلاس خود عضو شوید، یک دوره پیدا کنید یا حتی خودتان بسازید!", - "getStartedFriendsDesc": "آیا دوستی دارید که می‌خواهد با شما یاد بگیرد؟", - "getStartedBotChatComplete": "آفرین! شما در حال گفتگو با ربات هستید!", - "getStartedCommunitiesComplete": "عالی، شما در یک دوره عضو شده‌اید!", - "getStartedComplete": "شما این بخش را کامل کردید!\nبه کاوش در ویژگی‌های شگفت‌انگیز ما با گفتگو با دوستان ادامه دهید!", - "getStartedFriendsComplete": "وای! دوستان دارید! 😊", - "getStartedBotChatButton": "شروع گفتگو!", - "getStartedFriendsButton": "گفتگو با دوست", "groupChat": "گفتگوی گروهی", "directMessage": "پیام مستقیم", "newDirectMessage": "پیام مستقیم جدید", @@ -4220,7 +3773,6 @@ "mySavedActivities": "فعالیت‌های ذخیره شده من", "noSavedActivities": "هیچ فعالیت ذخیره شده‌ای وجود ندارد", "saveActivity": "ذخیره این فعالیت", - "yourSavedActivities": "فعالیت‌های ذخیره شده", "failedToPlayVideo": "پخش ویدیو ناموفق بود", "done": "تمام شد", "inThisSpace": "در این دوره", @@ -4259,37 +3811,27 @@ "maximumActivityParticipants": "هر فعالیت می‌تواند حداکثر {count} شرکت‌کننده داشته باشد.", "pending": "در انتظار", "inactive": "غیرفعال", - "unjoinedActivityMessage": "آیا می‌خواهید شرکت کنید؟ نقش باز را انتخاب کنید!\nیا در کنار هم بمانید و تماشا کنید!", - "fullActivityMessage": "احساس راحتی کنید و تماشا کنید! در حالی که نقش باز برای شرکت وجود ندارد، می‌توانید چت را مشاهده کنید!", "confirmRole": "تایید نقش", "openRoleLabel": "باز", "joinedTheActivity": "👋 {username} به عنوان {role} پیوست", "finishedTheActivity": "🎯 {username} این فعالیت را پایان داد", - "endActivityTitle": "تمام کردم", - "endActivityDesc": "آیا اهداف را کامل کردید؟\nاین تایید شما است که از نوشتن کنار می‌کشید. اما نگران نباشید، سرگرمی در چت ادامه دارد! در کنار هم بمانید و از تماشا لذت ببرید تا همه روی 'تمام شد' کلیک کنند.", "archiveToAnalytics": "به فعالیت‌های کامل‌شده من اضافه کن", "activitySummaryError": "خلاصه فعالیت‌ها در دسترس نیست", "requestSummaries": "درخواست خلاصه‌ها", - "loadingActivitySummary": "در حال بارگذاری خلاصه فعالیت...", "generatingNewActivities": "شما اولین کاربر این جفت زبان هستید! لطفاً یک دقیقه صبر کنید، در حال آماده‌سازی فعالیت‌ها مخصوص شما هستیم.", - "requestAccessTitle": "درخواست دسترسی به مشاهده تحلیل‌ها؟", + "requestAccessTitle": "درخواست دسترسی به تجزیه و تحلیل؟", "requestAccessDesc": "آیا مایلید درخواست دسترسی برای مشاهده تحلیل‌های شرکت‌کنندگان را بدهید؟\n\nاگر شرکت‌کنندگان موافقت کنند، مدیران این دوره قادر خواهند بود موارد زیر را مشاهده کنند:\n • کل واژگان\n • کل مفاهیم گرامری\n • کل جلسات فعالیت انجام شده\n • مفاهیم گرامری خاص استفاده شده، صحیح و نادرست\n\nآن‌ها قادر نخواهند بود موارد زیر را مشاهده کنند:\n • پیام‌ها در چت‌های خارج از دوره\n • فهرست واژگان", "requestAccess": "درخواست دسترسی ({count})", "analyticsInactiveTitle": "درخواست‌ها برای کاربران غیرفعال ارسال نشدند", "analyticsInactiveDesc": "کاربران غیرفعال که از زمان معرفی این ویژگی وارد نشده‌اند، درخواست شما را نخواهند دید.\n\nدکمه درخواست زمانی ظاهر می‌شود که آن‌ها برگردند. می‌توانید درخواست را بعداً با کلیک بر روی دکمه درخواست زیر نام آن‌ها مجدداً ارسال کنید زمانی که در دسترس باشد.", "accessRequestedTitle": "درخواست دسترسی به تحلیل‌ها", - "accessRequestedDesc": "مدیران «{space}» درخواست مشاهده تحلیل‌های یادگیری شما را دارند.\n\nاگر موافق باشید، مدیران این دوره قادر خواهند بود موارد زیر را مشاهده کنند:\n • کل واژگان\n • کل مفاهیم گرامری\n • کل جلسات فعالیت انجام شده\n • مفاهیم گرامری خاص استفاده شده، صحیح و نادرست\n\nآن‌ها قادر نخواهند بود موارد زیر را مشاهده کنند:\n • پیام‌ها در چت‌های خارج از دوره\n • فهرست واژگان", - "allowAccess": "اجازه دسترسی", - "denyAccess": "رد کردن دسترسی", + "accessRequestedDesc": "درخواست از مدیر(ان): {admin} \n\nمدیران از “{space}” در حال درخواست برای مشاهده تجزیه و تحلیل یادگیری شما هستند.\n\nاگر موافق باشید، آنها قادر خواهند بود به موارد زیر دسترسی داشته باشند:\n • واژگان کل\n • مفاهیم گرامری کل\n • تعداد کل جلسات فعالیت انجام شده\n • مفاهیم گرامری خاص استفاده شده، به درستی و نادرست\n\nآنها قادر نخواهند بود به موارد زیر دسترسی داشته باشند:\n • پیام‌ها در چت‌ها خارج از دوره\n • لیست واژگان", "adminRequestedAccess": "مدیران درخواست دیدن تحلیل‌های شما را داده‌اند.", "lastUpdated": "به‌روزرسانی شده\n{time}", "activityFinishedMessage": "همه تمام شد!", "endForAll": "پایان برای همه", "newCourse": "دوره جدید", - "newCourseSubtitle": "کدام برنامه دوره را می‌خواهید استفاده کنید؟", - "failedToLoadCourses": "بارگذاری دوره‌ها ناموفق بود", "numModules": "{num} ماژول", - "numActivityPlans": "{num} برنامه فعالیت", "coursePlan": "برنامه دوره", "editCourseLater": "می‌توانید بعداً عنوان، توضیحات و تصویر دوره را ویرایش کنید.", "newCourseAccess": "به طور پیش‌فرض، دوره‌ها خصوصی هستند و نیاز به تایید مدیر برای پیوستن دارند. شما می‌توانید این تنظیمات را در هر زمان ویرایش کنید.", @@ -4303,17 +3845,11 @@ "accessDesc": "می‌توانید دوره خود را برای جهان باز کنید! یا، دوره خود را خصوصی و امن کنید.", "createGroupChatDesc": "در حالی که جلسات فعالیت شروع و پایان می‌یابند، چت‌های گروهی برای ارتباط روتین باقی خواهند ماند.", "deleteDesc": "فقط مدیران می‌توانند دوره را حذف کنند. این یک اقدام مخرب است که تمام کاربران را حذف می‌کند و تمام چت‌های انتخاب شده درون دوره را حذف می‌کند. با احتیاط اقدام کنید.", - "failedToLoadCourseInfo": "بارگذاری اطلاعات دوره ناموفق بود", "noCourseFound": "اوه، این دوره نیاز به برنامه دارد!\n\nبرنامه‌های دوره مجموعه‌ای از موضوعات و فعالیت‌های گفتگو هستند.", "additionalParticipants": "+ {num} نفر دیگر", - "activityNotFoundForCourse": "این فعالیت در داخل دوره پیدا نشد", - "courseChats": "چت‌های دوره", - "myActivitySessions": "جلسات فعالیت من", "directMessages": "پیام‌های مستقیم", "whatNow": "حالا چه؟", "chooseNextActivity": "انتخاب فعالیت بعدی شما!", - "seeInstructions": "مشاهده دستورالعمل‌ها", - "hideInstructions": "پنهان کردن دستورالعمل‌ها", "letsGo": "برویم", "chooseRole": "یک نقش انتخاب کنید!", "chooseRoleToParticipate": "یک نقش برای شرکت انتخاب کنید!", @@ -4323,23 +3859,15 @@ "inviteFriends": "دعوت دوستان", "waitNotDone": "صبر کن، من تمام نکردم!", "waitingForOthersToFinish": "در انتظار پایان دیگران...", - "saveToCompletedActivities": "ذخیره در فعالیت‌های کامل شده", "generatingSummary": "در حال تحلیل چت و تولید نتایج", - "instructionsLanguage": "زبان دستورالعمل‌ها", "findCourse": "پیدا کردن دوره", - "activityCompletedDesc": "فعالیت کامل شده شما به تجزیه و تحلیل اضافه شد تا بتوانید زبان استفاده شده را مرور و تمرین کنید.", "pingParticipantsNotification": "{user} در حال جستجوی کاربران برای پیوستن به جلسه فعالیت در {room} است", "course": "دوره", "courses": "دوره‌ها", "courseName": "نام دوره", "createNewCourse": "دوره جدید", - "publicCourses": "دوره‌های عمومی", "goToCourse": "برو به دوره: {course}", "activityComplete": "این فعالیت کامل شده است. خلاصه فعالیت باید در زیر در دسترس باشد.", - "haventChattedMuch": "به نظر می‌رسد که شما زیاد گفتگو نکرده‌اید، سعی کنید از کلمات واژگان بیشتری استفاده کنید! اگر احساس می‌کنید هدف خود را کامل کرده‌اید، می‌توانید فعالیت را در زیر پایان دهید.", - "haveChatted": "به نظر می‌رسد که شما مدتی است گفتگو می‌کنید! اگر احساس می‌کنید هدف خود را کامل کرده‌اید، برای پایان فعالیت، آن را جمع‌بندی کنید و ما خلاصه‌ای در چت برایتان تولید می‌کنیم!", - "userDoneAndWaiting": "{num1}/{num2} شرکت‌کننده پایان داده‌اند. منتظر بمانید تا همه پایان دهند، و ما در چت خلاصه‌ای برایتان تولید می‌کنیم!\n\nاگر می‌خواهید مجدداً به گفتگو بپیوندید، روی دکمه ادامه در چت کلیک کنید.", - "othersDoneAndWaiting": "{num1}/{num2} پایان داده‌اند. آیا هدف خود را کامل کرده‌اید؟", "startNewSession": "شروع جلسه جدید", "joinOpenSession": "پیوستن به جلسه باز", "less": "کمتر", @@ -4349,7 +3877,6 @@ "openToJoin": "باز برای پیوستن", "results": "نتایج", "activityDone": "فعالیت تمام شد!", - "moreLabel": "بیشتر", "promoCodeInfo": "کدهای تخفیف را می‌توانید در صفحه بعد وارد کنید", "editsComingSoon": "به زودی امکان ویرایش شهرها و فعالیت‌ها فراهم می‌شود.", "editing": "در حال ویرایش", @@ -4365,13 +3892,10 @@ "courseSavedSuccessfully": "دوره با موفقیت ذخیره شد", "addCoursePlan": "افزودن برنامه دوره", "activityStatsButtonInstruction": "برای مشاهده آمار فعالیت خود و بستن فعالیت پس از اتمام اینجا کلیک کنید", - "readingAnalyticsDesc": "برای فعالیت‌های خواندن، روی هر پیام تمرین کنید.", - "speakingAnalyticsDesc": "برای تمرین صحبت، پیام‌های صوتی ضبط کنید.", - "audioAnalyticsDesc": "برای فعالیت‌های شنیداری، روی هر پیام تمرین کنید.", "loginToAccount": "وارد حساب کاربری من شوید", "appDescription": "یادگیری زبان\nدر حین پیام‌رسانی به دوستانتان.", "languages": "زبان‌ها", - "chooseLanguage": "یک زبان را انتخاب کنید.", + "chooseLanguage": "زبان هدف را انتخاب کنید.", "planTrip": "برنامه‌ریزی سفر خود", "howAreYouTraveling": "چگونه سفر می‌کنید؟", "unlockPrivateTrip": "باز کردن سفر خصوصی", @@ -4384,25 +3908,20 @@ "courseCode": "رمز عبور مخفی چیست؟", "courseCodeHint": "کد سفر یا لینک", "unlockMyTrip": "باز کردن سفر من", - "anyLevel": "هر سطحی", "signupOption": "چگونه می‌خواهید ثبت‌نام کنید؟", "withApple": "با اپل", "withGoogle": "با گوگل", "withEmail": "با ایمیل", "createAccount": "ایجاد حساب کاربری", - "noCoursesFound": "دوره‌ای یافت نشد", "loginWithEmail": "ورود با ایمیل", "usernameOrEmail": "نام کاربری یا ایمیل", "email": "ایمیل", "forgotPassword": "رمز عبور را فراموش کرده‌اید؟", - "writingAnalyticsDesc": "برای تمرین نوشتن پیام ارسال کنید.", "endActivity": "پایان فعالیت", "allLanguages": "همه زبان‌ها", - "allCefrLevels": "همه سطوح CEFR", "chatListTooltip": "در اینجا پیام‌های مستقیم خود را پیدا خواهید کرد! روی آواتار هر کاربر کلیک کنید و «شروع مکالمه» را بزنید تا پیام مستقیم ارسال کنید.", "directMessageBotTitle": "پیام مستقیم به ربات پنگئا", "feedbackTitle": "بازخورد فعالیت", - "feedbackDesc": "چگونه باید فعالیت بهبود یابد؟ اگر می‌توانید جزئیاتی ارائه دهید، تغییر را انجام خواهیم داد!", "feedbackHint": "بازخورد شما", "feedbackButton": "ارسال بازخورد", "directMessageBotDesc": "صحبت با انسان‌ها سرگرم‌کننده‌تر است اما... هوش مصنوعی همیشه آماده است!", @@ -5737,30 +5256,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5776,18 +5271,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5812,18 +5295,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5860,38 +5331,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5900,62 +5343,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5992,10 +5391,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6004,14 +5399,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6020,46 +5407,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6068,10 +5419,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6128,18 +5475,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6148,14 +5483,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6184,18 +5511,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6204,42 +5519,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6248,14 +5531,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6276,26 +5551,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6316,10 +5571,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6352,25 +5603,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6427,34 +5659,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6483,778 +5687,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8247,14 +6683,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8266,14 +6694,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8305,10 +6725,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8317,18 +6733,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8337,14 +6741,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8369,38 +6765,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8446,10 +6814,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8474,10 +6838,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8502,10 +6862,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8514,66 +6870,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8594,42 +6894,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8654,154 +6930,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8818,18 +6946,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8850,14 +6966,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8874,10 +6982,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8890,14 +6994,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8906,14 +7002,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8941,26 +7029,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8989,18 +7057,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9037,10 +7097,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9973,10 +8029,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10157,34 +8209,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10197,10 +8221,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10209,14 +8229,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10233,22 +8245,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10396,14 +8392,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10412,34 +8400,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10448,54 +8408,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10504,10 +8428,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10524,10 +8444,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10699,26 +8615,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10747,10 +8643,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10807,30 +8699,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10859,18 +8735,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10987,14 +8855,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11007,10 +8867,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11019,14 +8875,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11043,14 +8891,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11059,22 +8899,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11087,18 +8911,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11115,22 +8927,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11139,30 +8939,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11235,18 +9011,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11303,18 +9067,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11343,30 +9095,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11419,18 +9155,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11479,46 +9207,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11583,10 +9271,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11758,14 +9442,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11793,14 +9469,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11813,10 +9481,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11852,19 +9516,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11889,14 +9548,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11905,14 +9556,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11965,10 +9608,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11981,18 +9620,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12005,14 +9632,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12053,26 +9672,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12100,10 +9707,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12114,36 +9717,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12180,10 +9753,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12248,18 +9817,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12324,10 +9881,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12348,10 +9901,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12368,10 +9917,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12380,10 +9925,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12396,10 +9937,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12424,16 +9961,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "دعوت از دوستان برای فعالیت", - "inviteFriendsToActivityCourse": "دعوت از دوستان برای فعالیت و دوره", "feedbackRespDesc": "فردا برای به‌روزرسانی‌های فعالیت بررسی کنید.", "activityDropdownDesc": "وقتی کارتان با این فعالیت تمام شد، روی دکمه زیر کلیک کنید", - "activityAnalyticsListBody": "این فعالیت‌های کامل‌شده شما هستند! پس از اتمام فعالیت‌ها، می‌توانید آن‌ها را در اینجا مشاهده کنید.", "languageMismatchTitle": "تفاوت زبان", "languageMismatchDesc": "زبان هدف شما با زبان این فعالیت مطابقت ندارد. می‌خواهید زبان هدف خود را به‌روزرسانی کنید؟", "reportWordIssueTooltip": "گزارش مشکل در اطلاعات کلمه", "tokenInfoFeedbackDialogTitle": "بازخورد اطلاعات کلمه", - "tokenInfoFeedbackDialogDesc": "هوش مصنوعی اشتباه می‌کند. لطفاً هر مشکلی که در اطلاعات بالا پیدا کردید، توصیف کنید.", "noPublicCoursesFound": "دوره عمومی پیدا نشد. مایلید یکی بسازید؟", "noCourseTemplatesFound": "ما نتوانستیم دوره‌ای برای زبان هدف شما پیدا کنیم. در این مدت می‌توانید با ربات پنگئا چت کنید و بعداً برای دوره‌های بیشتر برگردید.", "botActivityJoinFailMessage": "ربات پنگئا در حال پاسخ‌دهی است. لطفاً بعداً دوباره تلاش کنید، یا یک دوست دعوت کنید.", @@ -12441,14 +9974,6 @@ "leaveDesc": "این فضا و تمام چت‌های داخل آن را ترک کنید", "selectAll": "انتخاب همه", "deselectAll": "لغو انتخاب همه", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12457,10 +9982,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12477,10 +9998,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12514,7 +10031,6 @@ "newMessageInPangeaChat": "📩 پیام جدید در چت پنگئا", "shareCourse": "اشتراک‌گذاری دوره", "addCourse": "افزودن دوره", - "joinCourseWithCode": "پیوستن به دوره با کد", "joinPublicCourse": "پیوستن به دوره عمومی", "vocabLevelsDesc": "اینجا جایی است که کلمات واژگان پس از ارتقاء سطح قرار می‌گیرند!", "highlightVocabTooltip": "کلمات هدف را در زیر با ارسال یا تمرین کردن آنها در چت هایلایت کنید", @@ -12538,10 +10054,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12550,7 +10062,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "هیچ پیام مستقیم یا چتی پیدا نشد. مطمئن شوید که جستجوی شما به درستی نوشته شده است.", + "activityAnalyticsTooltipBody": "اینها فعالیت‌های ذخیره‌شده شما برای مرور و تمرین هستند.", + "numSavedActivities": "تعداد فعالیت‌های ذخیره‌شده", + "saveActivityTitle": "ذخیره فعالیت", + "saveActivityDesc": "کار خوبی کردی! این فعالیت را برای مرور و تمرین بعدی ذخیره کن", + "levelInfoTooltip": "اینجا می‌توانید تمام امتیازاتی که کسب کرده‌اید و چگونگی آن را ببینید!", + "alreadyInCourseWithID": "شما در حال حاضر در یک دوره با این برنامه هستید. آیا می‌خواهید دوره‌ای با همان برنامه ایجاد کنید یا به دوره موجود بروید؟", + "goToExistingCourse": "به دوره موجود بروید", + "emojiView": "نمایش ایموجی", + "feedbackDialogDesc": "من هم اشتباه می‌کنم! آیا چیزی هست که به من کمک کند بهتر شوم؟", + "contactHasBeenInvitedToTheCourse": "تماس به دوره دعوت شده است", + "activityStatsButtonTooltip": "اطلاعات فعالیت", + "allow": "اجازه دادن", + "deny": "رد کردن", + "enabledRenewal": "فعال کردن تمدید اشتراک", + "subscriptionEndsOn": "اشتراک در تاریخ پایان می‌یابد", + "subscriptionRenewsOn": "اشتراک در تاریخ تمدید می‌شود", + "waitForSubscriptionChanges": "تغییرات در اشتراک شما ممکن است مدتی طول بکشد تا در برنامه منعکس شود.", + "subscribeReadingAssistance": "برای باز کردن ابزارهای پیام، اشتراک بگیرید", + "aceDisplayName": "آچین", + "achDisplayName": "آکولی", + "afDisplayName": "آفریکانس", + "akDisplayName": "آکان", + "alzDisplayName": "آلور", + "amDisplayName": "امهرایی", + "arDisplayName": "عربی", + "asDisplayName": "آسامese", + "awaDisplayName": "آوادی", + "ayDisplayName": "آیمارا", + "azDisplayName": "آذربایجانی", + "baDisplayName": "باشقیر", + "banDisplayName": "بالینی", + "bbcDisplayName": "باتاک توبا", + "beDisplayName": "بلاروسی", + "bemDisplayName": "بمبا", + "bewDisplayName": "بتاوی", + "bgDisplayName": "بلغاری", + "bhoDisplayName": "بوجپوری", + "bikDisplayName": "بیکول", + "bmDisplayName": "بامبارا", + "bnDisplayName": "بنگالی", + "bnBDDisplayName": "بنگالی (بنگلادش)", + "bnINDisplayName": "بنگالی (هند)", + "brDisplayName": "برتون", + "bsDisplayName": "بوسنیایی", + "btsDisplayName": "باتاک سیما لونگون", + "btxDisplayName": "باتاک کارو", + "buaDisplayName": "بوریات", + "caDisplayName": "کاتالان", + "cebDisplayName": "سبوانو", + "cggDisplayName": "چیگا", + "chmDisplayName": "ماری", + "ckbDisplayName": "کردی مرکزی", + "cnhDisplayName": "هاکا چین", + "coDisplayName": "کورسی", + "crhDisplayName": "ترکی کریمه‌ای", + "crsDisplayName": "فرانسوی کریول سسلووا", + "csDisplayName": "چک", + "cvDisplayName": "چوواش", + "cyDisplayName": "ولزی", + "daDisplayName": "دانمارکی", + "deDisplayName": "آلمانی", + "dinDisplayName": "دینکا", + "doiDisplayName": "دوگری", + "dovDisplayName": "دومبه", + "dzDisplayName": "دزونگکا", + "eeDisplayName": "اوه", + "enDisplayName": "انگلیسی", + "enAUDisplayName": "انگلیسی (استرالیا)", + "enGBDisplayName": "انگلیسی (بریتانیا)", + "enINDisplayName": "انگلیسی (هند)", + "enUSDisplayName": "انگلیسی (ایالات متحده)", + "eoDisplayName": "اسپرانتو", + "esDisplayName": "اسپانیایی", + "esESDisplayName": "اسپانیایی (اسپانیا)", + "esMXDisplayName": "اسپانیایی (مکزیک)", + "euDisplayName": "باسکی", + "faDisplayName": "فارسی", + "ffDisplayName": "فولا", + "fiDisplayName": "فنلاندی", + "filDisplayName": "فیلیپینی", + "fjDisplayName": "فیجی", + "foDisplayName": "فارویی", + "frDisplayName": "فرانسوی", + "frCADisplayName": "فرانسوی (کانادا)", + "frFRDisplayName": "فرانسوی (فرانسه)", + "fyDisplayName": "فرزی غربی", + "gaDisplayName": "ایرلندی", + "gaaDisplayName": "گا", + "gdDisplayName": "گالیایی اسکاتلندی", + "glDisplayName": "گالیسی", + "gnDisplayName": "گوارانی", + "gomDisplayName": "کونکانی گوا", + "guDisplayName": "گجراتی", + "haDisplayName": "هوسا", + "hawDisplayName": "هاوایی", + "heDisplayName": "عبری", + "hiDisplayName": "هندی", + "hilDisplayName": "هیلیگاینون", + "hmnDisplayName": "همونگ", + "hneDisplayName": "چاتیسگرهی", + "hrDisplayName": "کرواسی", + "hrxDisplayName": "هونزریک", + "htDisplayName": "کریدل هائیتی", + "huDisplayName": "مجارستانی", + "hyDisplayName": "ارمنی", + "idDisplayName": "اندونزیایی", + "igDisplayName": "ایگبو", + "iloDisplayName": "ایلوکو", + "isDisplayName": "ایسلندی", + "itDisplayName": "ایتالیایی", + "jaDisplayName": "ژاپنی", + "jvDisplayName": "جاوه‌ای", + "kaDisplayName": "گرجی", + "kkDisplayName": "قزاقی", + "kmDisplayName": "خمری", + "knDisplayName": "کانادا", + "koDisplayName": "کره‌ای", + "kokDisplayName": "کونکانی", + "kriDisplayName": "کریو", + "ksDisplayName": "کشمیری", + "ktuDisplayName": "کیتوبا (جمهوری دموکراتیک کنگو)", + "kuDisplayName": "کردی", + "kyDisplayName": "قرقیزی", + "laDisplayName": "لاتین", + "lbDisplayName": "لوکزامبورگی", + "lgDisplayName": "گاندا", + "liDisplayName": "لیمبورگی", + "lijDisplayName": "لیگوری", + "lmoDisplayName": "لومباردی", + "lnDisplayName": "لینگالا", + "loDisplayName": "لائو", + "ltDisplayName": "لیتوانیایی", + "ltgDisplayName": "لاتگالی", + "luoDisplayName": "لوو (کنیا و تانزانیا)", + "lusDisplayName": "میزو", + "lvDisplayName": "لتونیایی", + "maiDisplayName": "مائیتیلی", + "makDisplayName": "ماکاسار", + "mgDisplayName": "مالاگاسی", + "miDisplayName": "مائوری", + "minDisplayName": "مینانکابائو", + "mkDisplayName": "مقدونی", + "mlDisplayName": "مالایالم", + "mnDisplayName": "مغولی", + "mniDisplayName": "منیپوری", + "mrDisplayName": "ماراچی", + "msDisplayName": "مالایی", + "msArabDisplayName": "مالایی (عربی)", + "msMYDisplayName": "مالایی (مالزی)", + "mtDisplayName": "مالتی", + "mwrDisplayName": "مارواری", + "myDisplayName": "برمه‌ای", + "nanDisplayName": "مین نان", + "nbDisplayName": "نروژی (باکمال)", + "neDisplayName": "نپالی", + "newDisplayName": "نواری", + "nlDisplayName": "هلندی", + "nlBEDisplayName": "فلاندی", + "noDisplayName": "نروژی", + "nrDisplayName": "زبان ندیبل جنوبی", + "nsoDisplayName": "زبان سوتو شمالی", + "nusDisplayName": "زبان نیور", + "nyDisplayName": "زبان نینجا", + "ocDisplayName": "زبان اوکیتان", + "omDisplayName": "زبان اورومو", + "orDisplayName": "زبان اودیا", + "paDisplayName": "زبان پنجابی", + "paArabDisplayName": "پنجابی (شاموخی)", + "paINDisplayName": "پنجابی (گورموخی)", + "pagDisplayName": "پانگاسینان", + "pamDisplayName": "پامپانگا", + "papDisplayName": "پاپیامنتو", + "plDisplayName": "لهجه لهستانی", + "psDisplayName": "پشتو", + "ptDisplayName": "پرتغالی", + "ptBRDisplayName": "پرتغالی (برزیل)", + "ptPTDisplayName": "پرتغالی (پرتغال)", + "quDisplayName": "کچوا", + "rajDisplayName": "راجستانی", + "rnDisplayName": "روندی", + "roDisplayName": "رومانیایی", + "roMDDisplayName": "مولداوی", + "romDisplayName": "رومانی", + "ruDisplayName": "روسی", + "rwDisplayName": "کینیارواندا", + "saDisplayName": "سانسکریت", + "satDisplayName": "سانتالی", + "scnDisplayName": "سیسیلی", + "sdDisplayName": "سندی", + "sgDisplayName": "سانگو", + "shnDisplayName": "شان", + "siDisplayName": "سینهالی", + "skDisplayName": "اسلواکی", + "slDisplayName": "اسلوونیایی", + "smDisplayName": "ساموایی", + "snDisplayName": "شونا", + "soDisplayName": "صومالی", + "sqDisplayName": "آلبانیایی", + "srDisplayName": "صربی", + "srMEDisplayName": "مونته‌نگرینی", + "ssDisplayName": "سواتی", + "stDisplayName": "سوتو جنوبی", + "suDisplayName": "سوندانی", + "svDisplayName": "سوئدی", + "swDisplayName": "سواحیلی", + "szlDisplayName": "سیلزی", + "taDisplayName": "تامیلی", + "teDisplayName": "تلوگو", + "tetDisplayName": "تتوم", + "tgDisplayName": "تاجیک", + "thDisplayName": "تایلندی", + "tiDisplayName": "تیگرینیا", + "tkDisplayName": "ترکمنی", + "tlDisplayName": "تاگالوگ", + "tnDisplayName": "تسوانا", + "trDisplayName": "ترکی", + "tsDisplayName": "تسونگا", + "ttDisplayName": "تاتار", + "ugDisplayName": "اوغور", + "ukDisplayName": "اوکراینی", + "urDisplayName": "اردو", + "urINDisplayName": "اردو (هند)", + "urPKDisplayName": "اردو (پاکستان)", + "uzDisplayName": "ازبکی", + "viDisplayName": "ویتنامی", + "wuuDisplayName": "وو", + "xhDisplayName": "خوسا", + "yiDisplayName": "یدیش", + "yoDisplayName": "یوروبا", + "yuaDisplayName": "یوکاتک", + "yueDisplayName": "کانتونی", + "yueCNDisplayName": "کانتونی (چین)", + "yueHKDisplayName": "کانتونی (هنگ کنگ)", + "zhDisplayName": "چینی", + "zhCNDisplayName": "چینی (ساده شده)", + "zhTWDisplayName": "چینی (سنتی)", + "zuDisplayName": "زولو", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12617,6 +11315,7 @@ "notStartedActivitiesTitle": "جلسات باز ({num})", "inProgressActivitiesTitle": "در حال حاضر ({num})", "completedActivitiesTitle": "انجام شده ({num})", + "pickDifferentActivity": "یک فعالیت متفاوت انتخاب کنید", "inOngoingActivity": "شما یک فعالیت در حال انجام دارید!", "@notStartedActivitiesTitle": { "type": "String", @@ -12642,10 +11341,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "زبان هدف شما با این پیام مطابقت ندارد. آیا زبان هدف خود را به‌روزرسانی کنید؟", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "این همه افرادی هستند که در این دوره حضور دارند. بر روی آواتار هر کاربر کلیک کنید و \"شروع گفتگو\" را بزنید تا یک پیام مستقیم ارسال کنید.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "این کلمه واژگان به طور دائمی از تجزیه و تحلیل شما حذف خواهد شد", + "woman": "زن", + "man": "مرد", + "otherGender": "سایر", + "unselectedGender": "یک گزینه جنسیتی انتخاب کنید", + "gender": "جنسیت", + "chatParticipantTooltip": "این افراد در این چت هستند. روی آواتار هر کاربر کلیک کنید و \"شروع مکالمه\" را بزنید تا یک پیام مستقیم ارسال کنید.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "ابزارهای یادگیری برای پیام‌هایی که به زبان هدف شما نیستند غیرفعال شده‌اند.", + "vocabEmoji": "ایموجی واژگان", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "درخواست تجدید", + "optionalRegenerateReason": "(اختیاری) دلیل", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "شما ایموجی را برای {lemma} تنظیم کرده‌اید! ما از این ایموجی برای نمایش کلمه در فعالیت‌های عملی در آینده استفاده خواهیم کرد.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "در حال انتظار برای تکمیل ورود", + "ssoDialogDesc": "ما یک تب جدید باز کردیم تا شما بتوانید به صورت امن وارد شوید.", + "ssoDialogHelpText": "🤔 اگر تب جدید را ندیدید، لطفاً مسدودکننده پاپ آپ خود را بررسی کنید.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "غیرفعال کردن ابزارهای زبانی", + "disableLanguageToolsDesc": "آیا می‌خواهید کمک‌های زبانی خودکار را غیرفعال کنید؟", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "دسترسی رد شد. برای ضبط پیام‌های صوتی، دسترسی‌های ضبط را فعال کنید.", + "genericWebRecordingError": "مشکلی پیش آمد. ما توصیه می‌کنیم هنگام ضبط پیام‌ها از مرورگر کروم استفاده کنید.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "برای بهترین تجربه در استفاده از این برنامه، لطفاً اندازه صفحه خود را بزرگتر کنید.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "فعالیت‌ها برای باز کردن موضوع بعدی", "activitiesToUnlockTopicDesc": "تعداد فعالیت‌ها را برای باز کردن موضوع بعدی دوره تنظیم کنید", "@activitiesToUnlockTopicTitle": { @@ -12655,5 +11472,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "تمرین تعریف واژه صحیح", + "constructUseIncLMDesc": "تمرین تعریف واژه نادرست", + "constructUseCorLADesc": "تمرین صوتی واژه صحیح", + "constructUseIncLADesc": "تمرین صوتی واژه نادرست", + "constructUseBonus": "پاداش در حین تمرین واژه", + "practiceVocab": "تمرین واژگان", + "selectMeaning": "معنی را انتخاب کنید", + "selectAudio": "صوت مطابقتی را انتخاب کنید", + "congratulations": "تبریک می‌گویم!", + "anotherRound": "یک دور دیگر", + "noActivityRequest": "درخواست فعالیت فعلی وجود ندارد.", + "quit": "خروج", + "congratulationsYouveCompletedPractice": "تبریک! شما جلسه تمرین را کامل کرده‌اید.", + "mustHave10Words": "شما باید حداقل 10 کلمه واژگان برای تمرین داشته باشید. سعی کنید با یک دوست یا ربات پانژیا صحبت کنید تا بیشتر کشف کنید!", + "botSettings": "تنظیمات ربات", + "activitySettingsOverrideWarning": "زبان و سطح زبان تعیین شده توسط برنامه فعالیت", + "voice": "صدا", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index 0c2992875..95155473a 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -2878,26 +2878,14 @@ "commandHint_logoutall": "Kirjaudu ulos kaikista aktiivisista laitteista", "displayNavigationRail": "Näytä navigointiraita mobiilissa", "customReaction": "Mukautettu reaktio", - "accountInformation": "Tilitiedot", - "addGroupDescription": "Lisää keskustelun kuvaus", - "addNewFriend": "Lisää uusi ystävä", - "alreadyHaveAnAccount": "Onko sinulla jo tili?", - "createNewGroup": "Luo uusi keskustelu", - "editChatPermissions": "Muokkaa keskustelun oikeuksia", "writeAMessageLangCodes": "Kirjoita {l1} tai {l2}...", "requests": "Pyyntöjä", - "allCorrect": "Näin minä sanoisin! Hienoa!", - "newWayAllGood": "En ehkä sanoisi niin, mutta se näyttää hyvältä!", - "othersAreBetter": "Hm, saattaa olla parempi tapa sanoa se.", "holdForInfo": "Pidä painettuna sanan tiedoista.", "greenFeedback": "Se on mitä laittaisin!", "yellowFeedback": "Hm, voit kokeilla sitä ja katsoa, toimiiko se! Käyttääksesi tätä sanaa, klikkaa sitä uudelleen.", "redFeedback": "En usko, että se on oikein...", "itInstructionsTitle": "Voin auttaa sinua kääntämisessä!", "itInstructionsBody": "Voit napsauttaa ja pitää valintoja saadaksesi sanan tiedot.", - "oneday": "Viimeiset 24 tuntia", - "oneweek": "Viimeiset 7 päivää", - "onemonth": "Viime kuukausi", "gaTooltip": "L2:n käyttö kielioppiavustuksella", "taTooltip": "L2:n käyttö käännösavustuksella", "unTooltip": "Muu", @@ -2907,58 +2895,27 @@ "interactiveTranslatorAllowed": "Oppilaan valinta", "interactiveTranslatorRequired": "Pakollinen", "notYetSet": "Ei vielä asetettu", - "myLearning": "Oma analytiikkani", "waTooltip": "L2 ilman apua", - "changeDateRange": "Vaihda aikaväliä", - "classDescription": "Kuvaus", - "addStudents": "Kutsu käyttäjiä linkillä tai koodilla", - "copyClassLink": "Kopioi kutsulinkki", - "copyClassCode": "Kopioi kutsukoodi", - "inviteStudentByUserName": "Kutsu käyttäjiä käyttäjätunnuksella", "languageSettings": "Kieliasetukset", "interactiveTranslator": "Käännöstuki", - "shareVideo": "Jaa video", - "shareVideoDesc": "Ota tämä käyttöön, jotta opiskelijat voivat jakaa videoita keskusteluissa.", - "shareFiles": "Jaa tiedostoja", - "selectLanguageLevel": "Valitse kielitaso", "noIdenticalLanguages": "Valitse eri perus- ja kohdekielet", - "iWantALanguagePartnerFrom": "On kotoisin:", - "worldWide": "Maailmanlaajuisesti", - "noResults": "Ei tuloksia! Laajenna hakua.", "searchBy": "Etsi maasta ja kielistä", - "iWantAConversationPartner": "Haluan keskustelukumppanin, joka", - "iWantALanguagePartnerWhoSpeaks": "Puhuu:", - "iWantALanguagePartnerWhoIsLearning": "Oppii:", "joinWithClassCode": "Liity kurssille", - "joinWithClassCodeHint": "Syötä kutsukoodi", - "languageLevelPreA1": "Tosi aloitteleva (Pre A1)", - "languageLevelA1": "Alkeistaso (A1)", - "languageLevelA2": "Perustaso (A2)", - "languageLevelB1": "Keskitaso (B1)", - "languageLevelB2": "Yläkeskitaso (B2)", - "languageLevelC1": "Edistynyt (C1)", - "languageLevelC2": "Mestaritaito (C2)", + "languageLevelPreA1": "Aloittelija Matala (Pre A1)", + "languageLevelA1": "Aloittelija Keskitaso (A1)", + "languageLevelA2": "Aloittelija Korkea (A2)", + "languageLevelB1": "Keskitaso Keskiväli (B1)", + "languageLevelB2": "Korkea Alhainen (B2)", + "languageLevelC1": "Korkea Keskiväli (C1)", + "languageLevelC2": "Erinomainen (C2)", "changeTheNameOfTheClass": "Vaihda nimi", "changeTheNameOfTheChat": "Vaihda keskustelun nimi", - "askPangeaBot": "Kysy Pangea Botilta kontekstuaalista määritelmää.", "sorryNoResults": "Valitettavasti ei tuloksia.", "ignoreInThisText": "Ohita", - "helpMeTranslate": "Kyllä!", - "needsItShortMessage": "Ei kohdetta", "needsItMessage": "Odotas, se ei ole {targetLanguage}! Tarvitsetko apua kääntämisessä?", - "needsIgcMessage": "Tässä viestissä on kielioppivirhe.", - "tokenTranslationTitle": "Sana on peruskielessäsi.", - "spanTranslationDesc": "Katso mahdolliset käännökset alla.", - "spanTranslationTitle": "Joitakin sanoja on peruskielessäsi.", - "l1SpanAndGrammarTitle": "Ulkopuolella kohdekieltä", - "l1SpanAndGrammarDesc": "Tämä voi olla peruskielessäsi tai kielioppivirhe.", - "otherTitle": "Sinulla on virhe.", - "otherDesc": "Katso mahdolliset korjaukset alla.", "countryInformation": "Kotikuntani", - "myLanguages": "Perus- ja kohdekieleni", "targetLanguage": "Kohdekieli", "sourceLanguage": "Peruskieli", - "languagesISpeak": "Kielet, joita puhun", "updateLanguage": "Kieleni", "whatLanguageYouWantToLearn": "Mitä kieltä haluat oppia?", "whatIsYourBaseLanguage": "Mikä on peruskielesi?", @@ -2973,13 +2930,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klikkaa tästä päivittääksesi käännös- ja kielioppiohjeiden asetukset", "errorDisableITClassDesc": "Käännösohjeita ei ole käytössä tämän kurssin chatissä.", "errorDisableIGCClassDesc": "Kielenhuollon apu on pois päältä tämän keskustelun kurssille.", - "itIsDisabled": "Interaktiivinen käännös on pois käytöstä", - "igcIsDisabled": "Interaktiivinen kielioppitarkistus on pois käytöstä", - "goToLearningSettings": "Siirry oppimisasetuksiin", "error405Title": "Kielet eivät ole asetettu", "error405Desc": "Aseta kielesi Päävalikosta > Oppimisasetukset.", - "loginOrSignup": "Kirjaudu sisään", - "iAgreeToThe": "Hyväksyn ", "termsAndConditions": "käyttöehdot", "andCertifyIAmAtLeast13YearsOfAge": " ja vahvistan, että olen vähintään 16-vuotias.", "error502504Title": "Vau, verkossa on paljon oppilaita!", @@ -2987,40 +2939,21 @@ "error404Title": "Käännösvirhe!", "error404Desc": "Pangea-botti ei ole varma, miten tämä tulisi kääntää...", "errorPleaseRefresh": "Tarkistamme asiaa! Lataa sivu uudelleen ja yritä uudelleen.", - "toggleIT": "Interaktiivinen käännös", - "toggleIGC": "Interaktiivinen kielioppitarkistus", - "toggleToolSettingsDescription": "Täällä voit säätää yksittäisen kielen työkaluasetuksiasi.", "connectedToStaging": "Yhdistetty esikatseluun", "learningSettings": "Oppimisasetukset", - "sendVoiceNotes": "Lähetä äänimuistioita", - "sendVoiceNotesDesc": "Ota tämä käyttöön sallia opiskelijoiden lähettää äänimuistioita keskusteluissa.", - "chatTopic": "Keskustelun aihe", - "chatTopicDesc": "Aseta keskustelun aihe", - "inviteStudentByUserNameDesc": "Jos opiskelijallasi on jo tili, voit etsiä hänet.", "participants": "Osallistujat", - "almostPerfect": "Näyttää oikealta! Tässä mitä olisin sanonut.", - "prettyGood": "Melko hyvä! Tässä mitä olisin sanonut.", - "letMeThink": "Hmm, katsotaan kuinka hyvin onnistuit!", "clickMessageTitle": "Tarvitsetko apua?", "clickMessageBody": "Klikkaa viestiä saadaksesi kielityökaluja kuten käännös, toisto ja muuta!", - "understandingMessagesTitle": "Määritelmät ja käännökset!", - "understandingMessagesBody": "Klikkaa alleviivattuja sanoja saadaksesi määritelmiä. Käännä viestivaihtoehdoilla (yläoikealla).", "allDone": "Kaikki valmista!", "vocab": "Sanasto", "low": "Meillä on todisteita siitä, että käyttäjä ei ymmärrä näitä sanoja.", "medium": "Näitä sanoja on käytetty. On epäselvää, ymmärretäänkö sanat täysin vai ei.", "high": "Meillä on todisteita siitä, että käyttäjä ymmärtää nämä sanat.", - "unknownProficiency": "Näitä sanoja ei ole käytetty Pangea Chatissa.", - "changeView": "Vaihda näkymiä.", - "clearAll": "Tyhjennä kaikki sanat?", - "generateVocabulary": "Luo sanasto otsikon ja kuvauksen perusteella", - "generatePrompts": "Luo kehotteet", "subscribe": "Tilaa", "getAccess": "Tilaa nyt!", "subscriptionDesc": "Viestintä on ilmaista! Tilaa saadaksesi käyttöön vuorovaikutteinen käännös, kieliopin tarkistus ja oppimisanalyytiikka.", "subscriptionManagement": "Tilauksen hallinta", "currentSubscription": "Nykyinen tilaus", - "changeSubscription": "Vaihda tilaustasi", "cancelSubscription": "Peruuta tilauksesi", "selectYourPlan": "Valitse suunnitelmasi", "subsciptionPlatformTooltip": "Kirjaudu alkuperäiseen laitteeseesi hallinnoidaksesi tilaussuunnitelmaasi", @@ -3029,9 +2962,6 @@ "paymentHistory": "Maksuhistoria", "emptyChatDownloadWarning": "Tyhjää keskustelua ei voi ladata", "update": "Päivitä", - "updateDesc": "Voit nyt päivittää tämän sovelluksen versiosta {localVersion} versioon {storeVersion}", - "maybeLater": "Ehkä myöhemmin", - "mainMenu": "Päävalikko", "toggleImmersionMode": "Immersiotila", "toggleImmersionModeDesc": "Kun tämä on käytössä, kaikki viestit näytetään kohdekielelläsi. Tämä asetus on erityisen hyödyllinen kielivaihdoissa.", "itToggleDescription": "Tämä kielten oppimistyökalu tunnistaa sanoja peruskielestäsi ja auttaa sinua kääntämään ne kohdekielelle. Vaikka harvinaista, tekoäly voi tehdä käännösvirheitä.", @@ -3046,234 +2976,13 @@ "definitionsToolDescription": "Kun tämä on käytössä, sininen alleviivatut sanat voidaan klikata määritelmiä varten. Klikkaa viestejä saadaksesi määritelmät.", "translationsToolDescrption": "Kun tämä on käytössä, klikkaa viestiä ja käännöskuvaketta nähdäksesi viestin peruskielelläsi.", "welcomeBack": "Tervetuloa takaisin! Jos olit osa pilottia vuosina 2023-2024, ota yhteyttä saadaksesi erityisen pilottitilauksesi. Jos olet opettaja, joka on ostanut (tai oppilaitoksesi on ostanut) lisenssejä luokkaasi varten, ota yhteyttä saadaksesi opettajatilauksesi.", - "kickAllStudents": "Poista kaikki opiskelijat", - "kickAllStudentsConfirmation": "Oletko varma, että haluat poistaa kaikki opiskelijat?", - "inviteAllStudents": "Kutsu kaikki opiskelijat", - "inviteAllStudentsConfirmation": "Oletko varma, että haluat kutsua kaikki opiskelijat?", - "inviteUsersFromPangea": "Lisää ylläpitäjiä", - "redeemPromoCode": "Vaihda alennuskoodi", - "enterPromoCode": "Syötä alennuskoodi", "downloadTxtFile": "Lataa tekstitiedosto", "downloadCSVFile": "Lataa CSV-tiedosto", "promotionalSubscriptionDesc": "Sinulla on tällä hetkellä elinikäinen kampanjatilaus. Lähetä viesti osoitteeseen support@pangea.chat saadaksesi apua tilauksesi muuttamiseen.", "originalSubscriptionPlatform": "Tilauksen ostit {purchasePlatform} kautta", "oneWeekTrial": "Yhden viikon kokeilujakso", "downloadXLSXFile": "Lataa Excel-tiedosto", - "abDisplayName": "Abhaasi", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanian", - "amDisplayName": "Amharic", - "arDisplayName": "Arabia", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armenian", - "asDisplayName": "Assami", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaidžani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkiiri", - "euDisplayName": "Baski", - "beDisplayName": "Valkovenäjä", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnia", - "brDisplayName": "Bretoni", - "bgDisplayName": "Bulgari", - "myDisplayName": "Burma", - "caDisplayName": "Kataloni, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Tsetsheen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kiina", - "cvDisplayName": "Tšuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Korsika", - "crDisplayName": "Cree", - "hrDisplayName": "Kroatia", - "csDisplayName": "Tšekki", - "daDisplayName": "Tanska", - "dvDisplayName": "Divehi; Dhivehi; Malediivit;", - "nlDisplayName": "Hollanti", - "enDisplayName": "Englanti", - "eoDisplayName": "Esperanto", - "etDisplayName": "Viro", - "eeDisplayName": "Ewe", - "foDisplayName": "Fäärin kieli", - "fjDisplayName": "Fidži", - "fiDisplayName": "Suomi", - "frDisplayName": "Ranska", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicia", - "kaDisplayName": "Georgian", - "deDisplayName": "Saksa", - "elDisplayName": "Kreikka, nykyaikainen", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Haitian Creole", - "haDisplayName": "Hausa", - "heDisplayName": "Heprea (nykyinen)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Unkari", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesian", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Iiri", - "igDisplayName": "Ibo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islanti", - "itDisplayName": "Italia", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japani", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, Grönländska", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgisisk, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreanska", - "kuDisplayName": "Kurdiska", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxemburgiska, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgiska, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laotiska", - "ltDisplayName": "Liettua", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latvia", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonia", - "mgDisplayName": "Malgaasi", - "msDisplayName": "Malaja", - "mlDisplayName": "Malajalam", - "mtDisplayName": "Malta", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolia", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norjan Bokmål", - "ndDisplayName": "Pohjois-Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norjan Nynorsk", - "noDisplayName": "Norja", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Etelä-Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Vanhat kirkko slaavilainen, Kirkko slaavilainen, Kirkko slaavilainen, Vanha bulgari, Vanha slaavilainen", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persia", - "plDisplayName": "Puola", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugali", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romania, Moldavia, Moldovan", - "ruDisplayName": "Venäjä", - "saDisplayName": "Sanskrit (Saṁskṛta)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Pohjois-Sami", - "smDisplayName": "Samoa", - "sgDisplayName": "Sango", - "srDisplayName": "Serbia", - "gdDisplayName": "Skotlannin gaeli, gaeli", - "snDisplayName": "Shona", - "siDisplayName": "Singhalese, Sinhala", - "skDisplayName": "Slovakki", - "slDisplayName": "Sloveeni", - "soDisplayName": "Somali", - "stDisplayName": "Etelä-Sotho", - "esDisplayName": "Espanja", - "suDisplayName": "Sundaneesi", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Ruotsi", - "taDisplayName": "Tamili", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžiki", - "thDisplayName": "Thaimaa", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tiibetin standardi, Tiibeti, Keski", - "tkDisplayName": "Turkmeeni", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tongan saaret)", - "trDisplayName": "Turkki", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataari", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uiguuri, Uiguuri", - "ukDisplayName": "Ukrainalainen", - "urDisplayName": "Urdun", - "uzDisplayName": "Uzbekki", - "veDisplayName": "Venda", - "viDisplayName": "Vietnam", - "translation": { - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžiki", - "thDisplayName": "Thaimaa", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tiibetin standardi, Tiibeti, Keski", - "tkDisplayName": "Turkmeeni", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tongan saaret)", - "trDisplayName": "Turkki", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataari", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uiguuri, Uiguuri", - "ukDisplayName": "Ukrainalainen", - "urDisplayName": "Urdun", - "uzDisplayName": "Uzbekki", - "veDisplayName": "Venda", - "viDisplayName": "Vietnam" - }, - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Walesin", - "woDisplayName": "Wolof", - "fyDisplayName": "Länsi-Frisian", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddis", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Tuntematon", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havaiji", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Monialainen", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Heprea", - "jwDisplayName": "Javanese", - "moDisplayName": "Moldova", - "shDisplayName": "Serbo-Kroatia", "wwCountryDisplayName": "Maailmanlaajuinen", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Ahvenanmaa", @@ -3521,41 +3230,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Sambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Maksa", - "allPrivateChats": "Yksityiset keskustelut", - "unknownPrivateChat": "Tuntematon yksityinen keskustelu", + "pay": "Kassalle", "invitedToSpace": "{user} on kutsunut sinut liittymään kurssille: {space}! Haluatko hyväksyä?", - "declinedInvitation": "Kutsu hylätty", - "acceptedInvitation": "Kutsu hyväksytty", "youreInvited": "📩 Olet kutsuttu!", "invitedToChat": "{user} on kutsunut sinut liittymään keskusteluun: {name}! Haluatko hyväksyä?", "monthlySubscription": "Kuukausittainen", "yearlySubscription": "Vuosittainen", "defaultSubscription": "Pangea Chat -tilaus", "freeTrial": "Ilmainen kokeilujakso", - "grammarAnalytics": "Virheanalytiikka", "total": "Yhteensä: ", "noDataFound": "Tietoja ei löytynyt", - "promoSubscriptionExpirationDesc": "Nykyinen tilauksesi on kampanjatarjous ja vanhenee {expiration}. Lähetä viesti osoitteeseen support@pangea.chat saadaksesi apua tilauksesi muuttamiseen.", - "emptyChatNameWarning": "Anna nimi tälle keskustelulle", "blurMeansTranslateTitle": "Miksi viesti on sumea?", "blurMeansTranslateBody": "Kun Immersion-tila on päällä, viestit, jotka lähetetään peruskielessäsi, ovat sumeita, kun Pangea Bot kääntää ne kohdekielellesi. Immersion-tila voidaan ottaa käyttöön ja poistaa käytöstä yksittäisissä ja kurssiasetuksissa.", - "someErrorTitle": "Hmm, jokin ei ole kunnossa", - "someErrorBody": "Se voi olla virhe tai jotain peruskielessäsi.", "bestCorrectionFeedback": "Se on oikein!", "distractorFeedback": "Se ei ole aivan oikein.", "bestAnswerFeedback": "Se on oikein!", "definitionDefaultPrompt": "Mitä tämä sana tarkoittaa?", "practiceDefaultPrompt": "Mikä on paras vastaus?", "correctionDefaultPrompt": "Mikä on paras korvaus?", - "itStartDefaultPrompt": "Haluatko apua kääntämisessä?", - "lockedChatWarning": "🔒 Tämä keskustelu on lukittu", - "lockChat": "Lukitse keskustelu", - "suggestToChat": "Ehdota tätä keskustelua", - "suggestToChatDesc": "Ehdotetut keskustelut näkyvät keskustelulistoissa", "acceptSelection": "Hyväksy korjaus", - "acceptSelectionAnyway": "Käytä tätä silti", - "makingActivity": "Tehdään toimintaa", "why": "Miksi?", "definition": "Määritelmä", "exampleSentence": "Esimerkkilause", @@ -3563,128 +3256,55 @@ "reportMessageTitle": "{reportingUserId} on raportoinut viestin käyttäjältä {reportedUserId} chatissa {roomName}", "reportMessageBody": "Viesti: {reportedMessage}\nSyy: {reason}", "noTeachersFound": "Ei opettajia raportoitu", - "viewArchive": "Näytä arkisto", "trialExpiration": "Ilmainen kokeilujakso päättyy {expiration}", "freeTrialDesc": "Uudet käyttäjät saavat viikon ilmaisen kokeilun Pangea Chatista", "activateTrial": "Vapaa 7 päivän kokeilu", "successfullySubscribed": "Olet tilannut onnistuneesti!", "clickToManageSubscription": "Klikkaa tästä hallitaksesi tilaustasi.", - "errorGettingAudio": "Virhe äänen hakemisessa. Päivitä sivu ja yritä uudelleen.", "signUp": "Rekisteröidy", "pleaseChooseAtLeastChars": "Valitse vähintään {min} merkkiä.", "noEmailWarning": "Syötä kelvollinen sähköpostiosoite. Muuten et voi palauttaa salasanaasi. Jos et halua, napauta uudelleen jatkaaksesi.", "pleaseEnterValidEmail": "Syötä kelvollinen sähköpostiosoite.", "pleaseChooseAUsername": "Valitse käyttäjänimi", - "chooseAUsername": "Valitse käyttäjänimi", "define": "Määritä", "listen": "Kuuntele", - "addConversationBot": "Ota keskustelubotti käyttöön", - "addConversationBotDesc": "Lisää botti tähän keskusteluun", - "convoBotSettingsDescription": "Muokkaa keskustelun aihetta ja vaikeustasoa", - "enterAConversationTopic": "Syötä keskustelun aihe", - "conversationTopic": "Keskustelun aihe", - "enableModeration": "Ota moderointi käyttöön", - "enableModerationDesc": "Ota automaattinen moderointi käyttöön viestien tarkistamiseksi ennen lähettämistä", - "conversationLanguageLevel": "Mikä on tämän keskustelun kielitaso?", - "showDefinition": "Näytä määritelmä", - "subscriptionPopupTitle": "Tällä lauseella saattaa olla kielioppivirhe...", - "subscriptionPopupDesc": "Tilaa tänään avataksesi käännökset ja kielioppikorjaukset!", - "seeOptions": "Näytä vaihtoehdot", - "continuedWithoutSubscription": "Jatka ilman tilausta", "trialPeriodExpired": "Kokeilujaksonne on päättynyt", - "selectToDefine": "Klikkaa mitä tahansa sanaa nähdäksesi sen määritelmän!", "translations": "käännökset", "messageAudio": "viestin ääni", "definitions": "määritelmät", "subscribedToUnlockTools": "Viritä tilaukseen saadaksesi käyttöön vuorovaikutteinen käännös ja kielioppitarkistus, äänen toisto, henkilökohtaiset harjoitustoiminnot ja oppimisanalyyttiset tiedot!", "translationTooltip": "Käännä", - "audioTooltip": "Toista ääni", "speechToTextTooltip": "Tekstiksi", - "certifyAge": "Varmistan, että olen yli {age} vuotta vanha", "kickBotWarning": "Pangea-botin poistaminen poistaa keskustelubotin tästä keskustelusta.", - "joinToView": "Liity tähän huoneeseen nähdäksesi tiedot", "refresh": "Päivitä", - "autoPlayTitle": "Automaattinen toisto viesteistä", - "autoPlayDesc": "Kun tämä on käytössä, viestien tekstistä puheeksi -ääni toistetaan automaattisesti valittaessa.", "messageAnalytics": "Viestien analytiikka", "words": "Sanat", "score": "Pisteet", "accuracy": "Tarkkuus", "points": "Pisteet", "noPaymentInfo": "Maksutietoja ei tarvita!", - "conversationBotModeSelectDescription": "Keskustelutoiminta", - "conversationBotModeSelectOption_discussion": "Keskustelu", - "conversationBotModeSelectOption_custom": "Mukautettu", - "conversationBotModeSelectOption_conversation": "Keskustelu", - "conversationBotModeSelectOption_textAdventure": "Tekstiseikkailu", - "conversationBotModeSelectOption_storyGame": "Tarina-peli", - "conversationBotDiscussionZone_title": "Keskusteluasetukset", - "conversationBotDiscussionZone_discussionTopicLabel": "Keskustelun aihe", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Aseta keskustelun aihe", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Keskustelun avainsanat", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Aseta keskustelun avainsanat", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Pilkuilla erotettu avainsanojen lista keskustelun ohjaamiseksi", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Lähetä keskustelukehotus aikataulun mukaan", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Tunnit keskustelukehotusten välillä", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Vastaa 🡒 reaktiolla", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaktio keskustelukehotuksen lähettämiseen", - "conversationBotCustomZone_title": "Mukautetut asetukset", - "conversationBotCustomZone_customSystemPromptLabel": "Järjestelmän kehotus", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Aseta mukautettu järjestelmän kehotus", - "conversationBotCustomZone_customSystemPromptEmptyError": "Puuttuu mukautettu järjestelmän kehotus", - "botConfig": "Botin ja toiminnan asetukset", - "botConfigNoPermissionTitle": "Ei lupaa", - "botConfigNoPermissionMessage": "Ota yhteyttä huoneen ylläpitäjään muuttaaksesi botin asetuksia", - "addConversationBotDialogTitleInvite": "Vahvista keskustelubotin kutsuminen", - "addConversationBotButtonInvite": "Kutsu", - "addConversationBotDialogInviteConfirmation": "Kutsu", - "addConversationBotButtonTitleRemove": "Vahvista keskustelubotin poistaminen", - "addConversationBotButtonRemove": "Poista", - "addConversationBotDialogRemoveConfirmation": "Poista", - "conversationBotConfigConfirmChange": "Vahvista", - "conversationBotStatus": "Kutsu botti", - "conversationBotTextAdventureZone_title": "Tekstiseikkailu", - "conversationBotTextAdventureZone_instructionLabel": "Pelimestarin ohjeet", - "conversationBotTextAdventureZone_instructionPlaceholder": "Aseta pelimestarin ohjeet", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Puuttuvat pelimestarin ohjeet", - "studentAnalyticsNotAvailable": "Opiskelijatietoja ei tällä hetkellä saatavilla", - "roomDataMissing": "Joitakin tietoja saattaa puuttua huoneista, joissa et ole jäsen.", "updatePhoneOS": "Saattaa olla, että sinun täytyy päivittää laitteesi käyttöjärjestelmän versio.", "wordsPerMinute": "Sanoja minuutissa", "autoIGCToolName": "Aja Pangea kirjoitusavustusta automaattisesti", "autoIGCToolDescription": "Aja automaattisesti Pangea Chatin kieliopin ja käännöksen kirjoitusavustusta ennen viestini lähettämistä.", - "runGrammarCorrection": "Tarkista viesti", - "grammarCorrectionFailed": "Ongelmia korjauksessa", - "grammarCorrectionComplete": "Näyttää hyvältä!", "tooltipInstructionsTitle": "Et ole varma, mitä tämä tekee?", "tooltipInstructionsMobileBody": "Pidä painettuna kohteita nähdäksesi työkaluvihjeet.", "tooltipInstructionsBrowserBody": "Vie hiiri kohteen päälle nähdäksesi työkaluvihjeet.", "chatCapacity": "Chatin kapasiteetti", "roomFull": "Huone on jo täynnä.", - "topicNotSet": "Aihetta ei ole asetettu.", - "chatCapacityNotSet": "Tässä chatissa ei ole kapasiteettirajaa.", "chatCapacityHasBeenChanged": "Chatin kapasiteetti on muuttunut", "chatCapacitySetTooLow": "Chatin kapasiteetti on oltava vähintään {count}.", "chatCapacityExplanation": "Chatin kapasiteetti rajoittaa chatissa sallittujen jäsenten määrää.", - "chatExceedsCapacity": "Tämä chat ylittää kapasiteettinsa.", "tooManyRequest": "Liian monta pyyntöä, yritä uudelleen myöhemmin.", "enterNumber": "Syötä kokonaisluku.", "buildTranslation": "Rakenna käännöksesi yllä olevista vaihtoehdoista", - "nonexistentSelection": "Valinta ei enää ole olemassa.", - "changeAnalyticsLanguage": "Vaihda analytiikan kieltä", "practice": "Harjoitus", "noLanguagesSet": "Kieliä ei ole asetettu", - "noActivitiesFound": "Seuraavaksi riittää tältä erää! Palaa myöhemmin lisää.", - "hintTitle": "Vihje:", "speechToTextBody": "Ääniviesteissä näet myös litteroinnin sekä puhujan Words Per Minute -pistemäärän.", "versionNotFound": "Versiota ei löytynyt", "fetchingVersion": "Haetaan versiota...", "versionFetchError": "Virhe haettaessa versiota", "versionText": "Versio: {version}+{buildNumber}", - "languageButtonLabel": "Kieli: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automaattinen käännöksen toisto", - "interactiveTranslatorAutoPlayDesc": "Käynnistää interaktiivisen kääntäjän ilman kysymistä.", - "changeAnalyticsView": "Vaihda analytiikanäkymää", "l1TranslationBody": "Peruskielesi viestit eivät tule käännetyiksi.", "deleteSubscriptionWarningTitle": "Sinulla on aktiivinen tilaus", "deleteSubscriptionWarningBody": "Tilisi poistaminen ei automaattisesti peruuta tilaustasi.", @@ -3692,9 +3312,7 @@ "error520Title": "Yritä uudelleen.", "error520Desc": "Valitettavasti emme ymmärtäneet viestiäsi...", "wordsUsed": "Käytetyt sanat", - "errorTypes": "Virhetyypit", "level": "Taso", - "canceledSend": "Peruutettu lähetys", "morphsUsed": "Käytetyt morfit", "translationChoicesBody": "Pidä valittua vaihtoehtoa painettuna vihjeen saamiseksi.", "grammar": "Kielioppi", @@ -3704,7 +3322,6 @@ "reportContentIssueTitle": "Ilmoita sisällön ongelmasta", "feedback": "Valinnainen palaute", "reportContentIssueDescription": "Voi ei! Tekoäly voi auttaa personoiduissa oppimiskokemuksissa, mutta... myös harhailee. Anna palautetta, niin yritämme uudelleen.", - "changeContent": "Voi ei! Tekoäly voi auttaa personoiduissa oppimiskokemuksissa, mutta... myös harhailee. Mitä sen tulisi olla?", "clickTheWordAgainToDeselect": "Klikkaa valittua sanaa poistaaksesi valinnan.", "l2SupportNa": "Ei saatavilla", "l2SupportAlpha": "Alpha", @@ -3938,7 +3555,6 @@ "grammarCopySPC": "Tarkkuus", "grammarCopyPARTTYPE": "Partitiivityyppi", "grammarCopyINTREL": "Interogatiivinen-relatiivinen", - "grammarCopyNUMFORMpsor": "Omistajan lukumäärä", "grammarCopyUNKNOWN": "Tuntematon", "grammarCopyNUMBERPSOR": "Omistajan lukumäärä", "grammarCopyPOSS": "Omistussana", @@ -3984,28 +3600,14 @@ "grammarCopyVOICEdir": "Suora", "grammarCopyVOICEinv": "Käänteinen", "grammarCopyVOICErcp": "Vastavuoroinen", - "enterPrompt": "Ole hyvä ja syötä järjestelmän kehotus", - "selectBotLanguage": "Valitse botin kieli", - "chooseVoice": "Valitse ääni", - "enterLanguageLevel": "Ole hyvä ja syötä kielitaso", - "enterDiscussionTopic": "Ole hyvä ja syötä keskustelunaihe", - "selectBotChatMode": "Valitse keskustelutila", - "messageNotInTargetLang": "Viestissä ei ole kohdekieltä", "other": "Muu", "levelShort": "TASO {level}", - "botModeValidation": "Valitse keskustelutila", "clickBestOption": "Valitse parhaat vaihtoehdot viestisi kääntämiseen!", "completeActivitiesToUnlock": "Vähemmän kuin yksi aktiviteetti on suoritettu, jotta voit avata käännöksen!", - "botSettingsSubtitle": "Kutsu botti valvomaan keskustelun toimintaa", - "invitePeople": "Kutsu käyttäjiä", "noCapacityLimit": "Ei kapasiteettirajaa", "downloadGroupText": "Lataa ryhmäteksti", "notificationsOn": "Ilmoitukset päällä", "notificationsOff": "Ilmoitukset pois päältä", - "chatCanBeFoundViaSearch": "Keskustelu löytyy haulla", - "requireCodeToJoin": "Vaadi koodi liittyäksesi", - "canFindInSearch": "Löytyy haulla", - "addChatToSpace": "Lisää keskustelu", "createChatAndInviteUsers": "Luo keskustelu ja kutsu käyttäjiä", "updatedNewSpaceDescription": "Kurssit auttavat sinua yhdistämään keskustelusi ja rakentamaan yksityisiä tai julkisia yhteisöjä.", "joinWithCode": "Liity koodilla", @@ -4041,39 +3643,19 @@ "constructUseCollected": "Kerätty chatissa", "constructUseNanDesc": "Ei sovellu", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Kirjaudu sisään käyttäjätunnuksella ja salasanalla", - "registrationEmailMessage": "Vahvista sähköpostisi linkin avulla, joka lähetetään sinne. Joissakin tapauksissa sähköposti saapuu jopa 5 minuutissa. Tarkista myös roskapostikansio.", "enableTTSToolName": "Ota tekstistä puhe käyttöön", "enableTTSToolDescription": "Salli sovelluksen tuottaa tekstistä puhetta osioista tekstissä kohdekielessäsi.", - "couldNotFindTTS": "Emme löytäneet tekstistä puhe -moottoria nykyiselle kohdekielellesi.", - "ttsInstructionsHyperlink": "Klikkaa tästä nähdäksesi ohjeet uuden äänen lataamiseen laitteellesi.", - "createAnAccount": "Luo tili", - "signIn": "Kirjaudu sisään", - "signUpWithEmail": "Rekisteröidy sähköpostilla", - "signUpWithGoogle": "Rekisteröidy Googlella", - "signUpWithApple": "Rekisteröidy Applella", "yourUsername": "Käyttäjänimesi", "yourEmail": "Sähköpostisi", - "pleaseEnterAnEmail": "Anna sähköpostiosoite", - "signInWithGoogle": "Kirjaudu sisään Googlella", - "signInWithApple": "Kirjaudu sisään Applella", - "chooseYourAvatar": "Valitse avatarisi", "iWantToLearn": "Haluan oppia", - "letsStart": "Aloitetaan", - "pleaseAgreeToTOS": "Ole hyvä ja hyväksy käyttöehdot", "pleaseEnterEmail": "Anna kelvollinen sähköpostiosoite.", - "pleaseSelectALanguage": "Valitse kieli", "myBaseLanguage": "Peruskieleni", - "clickWordsInstructions": "🧻 Klikkaa mitä tahansa sanaa saadaksesi lisätietoja. 🤐", - "chooseBestDefinition": "Mitä tämä sana tarkoittaa?", "meaningSectionHeader": "Tarkoitus:", "formSectionHeader": "Käytetyt muodot keskusteluissa:", - "noEmojiSelectedTooltip": "Ei emojiä valittu", "writingExercisesTooltip": "Kirjoittaminen", "listeningExercisesTooltip": "Kuuntelu", "readingExercisesTooltip": "Lukeminen", "meaningNotFound": "Tarkoitusta ei löytynyt.", - "formsNotFound": "Muotoja ei löytynyt.", "chooseBaseForm": "Valitse perusmuoto", "notTheCodeError": "Valitettavasti, se ei ole koodi!", "totalXP": "Kokonaistyökokemus", @@ -4113,9 +3695,6 @@ "pickAnEmoji": "Mikä on suosikkisi emoji '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Vastaa sanojen merkityksiin viestissä!", "doubleClickToEdit": "Muokkaa kaksoisnapsauttamalla.", - "removeFeature": "Poista {feature}", - "chooseCorrectLabel": "Valitse oikea etiketti.", - "levelPopupTitle": "Onnittelut tasolle {level} pääsemisestä", "activityPlannerTitle": "Toimintasuunnitelma", "topicLabel": "Aihe", "topicPlaceholder": "Valitse aihe...", @@ -4123,7 +3702,6 @@ "modePlaceholder": "Valitse tila...", "learningObjectiveLabel": "Oppimistavoite", "learningObjectivePlaceholder": "Valitse oppimistavoite...", - "mediaLabel": "Median, jonka oppijat tulisi jakaa", "languageOfInstructionsLabel": "Toimintaohjeiden kieli", "targetLanguageLabel": "Kohdekieli", "cefrLevelLabel": "CEFR-taso", @@ -4138,20 +3716,15 @@ "instructions": "Ohjeet", "numberOfLearners": "Oppijoiden määrä", "mustBeInteger": "Täytyy olla kokonaisluku esim. 1, 2, 3, ...", - "noLemmasFound": "Ei löydy sanastoa, jonka XP on enemmän kuin {xp}. Jatka harjoittelua!", "constructUsePvmDesc": "Tuotettu ääniviestissä", - "lockedMorphFeature": "Odottaa avattavaksi", "leaveSpaceDescription": "Lähdettäessä kurssilta, poistut kaikista keskusteluista siinä. Muut käyttäjät näkevät, että olet poistunut kurssilta.", - "whatIsLemma": "Mikä on lemma?", "constructUseCorMmDesc": "Oikea viestin merkitys", "constructUseIncMmDesc": "Väärä viestin merkitys", "constructUseIgnMmDesc": "Ohitettu viestin merkitys", "clickForMeaningActivity": "Klikkaa tästä merkityshaasteeseen", "meaning": "Merkitys", "chatWith": "Ryhmä {displayname} kanssa", - "slightlyOffensive": "Vähän loukkaava", "clickOnEmailLink": "Klikkaa sähköpostin linkkiä ja jatka.\n\nTarkista roskapostikansio, jos sähköposti ei ole saapunut.", - "whoIsAllowedToJoinThisChat": "Kuka saa liittyä tähän keskusteluun", "dontForgetPassword": "Älä unohda salasanaasi!", "enableAutocorrectToolName": "Ota laiteautokorjaus käyttöön", "enableAutocorrectDescription": "Jos laitteesi tukee oppimaasi kieltä, voit ottaa automaattikorjauksen käyttöön laitteessasi korjataksesi yleisiä virheitä kirjoittaessasi.", @@ -4179,48 +3752,26 @@ "autocorrectNotAvailable": "Valitettavasti alustasi ei tällä hetkellä tue tätä ominaisuutta. Pysy kuulolla jatkokehityksestä!", "pleaseUpdateApp": "Päivitä sovellus jatkaaksesi.", "chooseEmojiInstructionsBody": "Vastaa emojien ja niiden parhaiten kuvaavien sanojen kanssa. Älä huoli! Ei pisteitä, vaikka eri mieltä olisitkin. 😅", - "pickAnEmojiFor": "Valitse emoji kohteelle {lemma}", "analyticsVocabListBody": "Tämä on koko sanastosi! Kun ansaitset XP:tä jokaisesta sanasta, ne kasvavat siemenestä täyteen kukkaan. Klikkaa mitä tahansa sanaa nähdäksesi lisää tietoja.", "morphAnalyticsListBody": "Nämä ovat kaikki oppimasi kielen kielioppikäsitteet! Saat ne avautumaan, kun kohtaat ne keskustelussa. Klikkaa lisätietoja varten.", "knockSpaceSuccess": "Olet pyytänyt liittymistä tähän kurssiin! Järjestelmänvalvoja vastaa pyyntöön, kun se on vastaanotettu 😊", - "joinByCode": "Liity koodilla", "chooseWordAudioInstructionsBody": "Kuuntele koko viesti. Sitten yhdistä äänitiedostot sanoihin.", "chooseMorphsInstructionsBody": "Klikkaa palapelin paloja kielioppikysymyksiin!", - "inviteAndLaunch": "Kutsu ja käynnistä", - "createOwnChat": "Luo oma keskustelu", "pleaseEnterInt": "Syötä numero", "home": "Koti", "join": "Liity", "readingAssistanceOverviewBody": "Klikkaa alla olevia painikkeita minipeleihin, joissa yhdistetään emojit, äänitiedostot, sanan merkitys ja kielioppikäsitteet. Tai klikkaa mitä tahansa sanaa saadaksesi lisätietoja.", - "learnByTexting": "Opiskele tekstiviesteillä", - "levelSummaryTrigger": "Näytä yhteenveto", "levelSummaryPopupTitle": "Tason {level} yhteenveto", - "referFriends": "Suosittele ystäviä", - "referFriendDialogTitle": "Kutsu ystävä keskusteluusi", - "referFriendDialogDesc": "Onko sinulla ystävä, joka on innoissaan oppimaan uutta kieltä kanssasi? Kopioi ja lähetä tämä kutsulinkki liittyäksesi ja aloittaaksesi keskustelun kanssasi tänään.", - "youUnlocked": "Olet avannut", "resetInstructionTooltipsTitle": "Nollaa ohjeiden työkaluvihjeet", "resetInstructionTooltipsDesc": "Klikkaa näyttääksesi ohjeiden työkaluvihjeet kuten uudelle käyttäjälle.", "selectForGrammar": "Valitse kielioppikuvake aktiviteetteihin ja yksityiskohtiin.", - "newChatActivityTitle": "Lisää hauska aktiviteetti?", - "newChatActivityDesc": "Tee jokaisesta ryhmäkeskustelusta seikkailu Aktiviteettisuunnittelijan avulla! Aseta kiehtovia aiheita ja tavoitteita ryhmälle, ja herätä keskustelut eloon upeilla kuvilla. Sytytä mielikuvituksellisia keskusteluja ja pidä hauskanpito sujuvasti käynnissä!", - "exploreMore": "Löydä lisää", "randomize": "Satunnaista", "clear": "Tyhjennä", "makeYourOwnActivity": "Luo oma aktiviteetti", "featuredActivities": "Suositellut", - "goToChat": "Siirry keskusteluun", "save": "Tallenna", - "selectActivity": "Valitse aktiviteetti", - "wordFocusListeningMultipleChoice": "Mikä ääni vastaa sanaa?", "startChat": "Aloita keskustelu", "translationProblem": "Käännösongelma", - "perfectTranslation": "Täydellinen käännös!", - "greatJobTranslation": "Hienoa työtä tämän käännöksen kanssa!", - "goodJobTranslation": "Hyvää työtä tämän käännöksen parissa.", - "makingProgress": "Olet edistynyt!", - "keepPracticing": "Jatka harjoittelua!", - "niceJob": "Hyvää työtä!", "askToJoin": "Kysy liittymistä", "emptyChatWarningTitle": "Chat on tyhjä", "emptyChatWarningDesc": "Et ole kutsunut ketään chattiisi. Mene Chat-asetuksiin kutsuaksesi yhteystietosi tai Botin. Voit tehdä tämän myös myöhemmin.", @@ -4239,8 +3790,6 @@ "languageLevelC2Desc": "Ymmärrän käytännössä kaiken kuullun tai luetun ja pystyn ilmaisemaan itseäni sujuvasti ja tarkasti.", "newVocab": "Uusi sanasto", "newGrammar": "Uudet kielioppikäsitteet", - "congratulationsOnReaching": "Olet saavuttanut tason {level}!", - "seeDetails": "Näytä tiedot", "choosePracticeMode": "Klikkaa yllä olevista painikkeista aloittaaksesi harjoitustoiminnan", "ban": "Kielto", "unban": "Poista kielto", @@ -4254,8 +3803,6 @@ "timesUsedWithAssistance": "Kertojen määrä avustuksella käytettynä", "shareInviteCode": "Jaa kutsukoodi: {code}", "leaderboard": "Sijoituslista", - "welcomeUser": "Tervetuloa {user}", - "joinSpaceOnboardingDesc": "Onko sinulla kutsukoodi tai linkki julkiseen kurssiin?", "skipForNow": "Ohita nyt", "permissions": "Oikeudet", "spaceChildPermission": "Kuka voi lisätä uusia keskusteluja tähän kurssiin", @@ -4263,12 +3810,8 @@ "defaultOption": "Oletus", "deleteChatDesc": "Oletko varma, että haluat poistaa tämän keskustelun? Se poistetaan kaikilta osallistujilta ja kaikki keskustelun viestit eivät ole enää käytettävissä harjoitteluun tai oppimisanalytiikkaan.", "deleteSpaceDesc": "Kurssi ja kaikki valitut keskustelut poistetaan kaikilta osallistujilta ja kaikki keskustelun viestit eivät ole enää käytettävissä harjoitteluun tai oppimisanalytiikkaan. Tätä toimintoa ei voi peruuttaa.", - "chatWithActivities": "Keskustele aktiviteeteilla", "launch": "Käynnistä", - "launchActivityToChats": "Käynnistä aktiviteetti keskusteluihin", "searchChats": "Etsi keskusteluja", - "selectChats": "Valitse keskustelut", - "selectChatToStart": "Valmis! Valitse keskustelu aloittaaksesi", "maxFifty": "Maks 50", "configureSpace": "Määritä kurssi", "pinMessages": "Kiinnitä viestit", @@ -4282,9 +3825,7 @@ "announcements": "Ilmoitukset", "activities": "Toiminnot", "access": "Pääsy", - "botSettings": "Botin asetukset", "activitySuggestionTimeoutMessage": "Työskentelemme kovasti luodaksemme lisää aktiviteetteja sinulle, tarkista uudelleen minuutin kuluttua", - "accessSettingsWarning": "Hups! Näyttää siltä, että sinulla ei ole oikeutta asettaa tämän huoneen pääsysääntöjä. Sinun tulisi tarkistaa nämä varmistaaksesi, että ne vastaavat tarpeitasi ja keskustella huoneen ylläpitäjän kanssa, jos haluat muuttaa niitä", "howSpaceCanBeFound": "Kuinka tämä kurssi löytyy", "private": "Yksityinen", "cannotBeFoundInSearch": "Ei löydy haussa", @@ -4297,16 +3838,6 @@ "canBeFoundViaKnock": "• pyytää liittymistä ja ylläpidon hyväksyntä", "youHaveLeveledUp": "Olet noussut tasolle!", "sendActivities": "Lähetä aktiviteetteja", - "getStarted": "Aloita", - "getStartedBotChatDesc": "Chatta AI:n kanssa on hyvä paikka aloittaa, ja Pangea:n lukemisen, kirjoittamisen, kuuntelun ja puhumisen työkalut tekevät siitä helppoa!", - "getStartedCommunitiesDesc": "Oppiminen yhteisön kanssa on se, missä Pangea Chat loistaa!\nVoit liittyä luokkaasi, löytää kurssin tai jopa tehdä oman!", - "getStartedFriendsDesc": "Onko sinulla ystävä, joka haluaa oppia kanssasi?", - "getStartedBotChatComplete": "Hyvin tehty! Keskustelet nyt botin kanssa!", - "getStartedCommunitiesComplete": "Hienoa, olet liittynyt kurssiin!", - "getStartedComplete": "Olet suorittanut tämän osion!\nJatka upeiden ominaisuuksiemme tutkimista keskustelemalla ystävien kanssa!", - "getStartedFriendsComplete": "Huraa! Sinulla on ystäviä! 😊", - "getStartedBotChatButton": "Aloita keskustelu!", - "getStartedFriendsButton": "Keskustele ystävän kanssa", "groupChat": "Ryhmäsuunnittelu", "directMessage": "Yksityisviesti", "newDirectMessage": "Uusi yksityisviesti", @@ -4322,7 +3853,6 @@ "mySavedActivities": "Tallentamani aktiviteetit", "noSavedActivities": "Ei tallennettuja aktiviteetteja", "saveActivity": "Tallenna tämä aktiviteetti", - "yourSavedActivities": "Tallennetut aktiviteetit", "failedToPlayVideo": "Videon toistaminen epäonnistui", "done": "Valmis", "inThisSpace": "Tässä kurssissa", @@ -4361,37 +3891,27 @@ "maximumActivityParticipants": "Jokaisessa aktiviteetissa voi olla enintään {count} osallistuja(a).", "pending": "Odottaa", "inactive": "Ei aktiivinen", - "unjoinedActivityMessage": "Haluatko osallistua? Valitse avoin rooli!\nTai hengaile ja katso esitys!", - "fullActivityMessage": "Vapaasti katso esitystä! Vaikka avoimia rooleja ei ole, voit katsella chattia!", "confirmRole": "Vahvista rooli", "openRoleLabel": "AVOIN", "joinedTheActivity": "👋 {username} liittyi roolilla {role}", "finishedTheActivity": "🎯 {username} saatteli aktiviteetin päätökseen", - "endActivityTitle": "Olen valmis", - "endActivityDesc": "Oletko saavuttanut tavoitteet?\nTämä on vahvistuksesi siitä, että lopetat tekstin lähettämisen. Mutta älä huoli, hauskanpito jatkuu chatissa! Hengaile ja nauti esityksestä, kunnes kaikki klikkaavat 'Valmis'.", "archiveToAnalytics": "Lisää suoritettuihin aktiviteetteihini", "activitySummaryError": "Aktiviteettien yhteenvetoja ei saatavilla", "requestSummaries": "Pyydä yhteenvetoja", - "loadingActivitySummary": "Ladataan aktiviteetin yhteenvetoa...", "generatingNewActivities": "Olet tämän kieliparin ensimmäinen käyttäjä! Odota hetki, valmistelemme aktiviteetteja juuri sinulle.", - "requestAccessTitle": "Pyytääksesi pääsyä analytiikan katseluun?", + "requestAccessTitle": "Pyydä analytiikkapääsyä?", "requestAccessDesc": "Haluatko pyytää pääsyä nähdäksesi osallistujien analytiikan?\n\nJos osallistujat suostuvat, kurssin ylläpitäjät voivat nähdä heidän:\n • kokonaissanaston\n • kokonaiskielioppikonseptit\n • kokonaisaktiviteettisessiot, jotka on suoritettu\n • käytetyt, oikein ja väärin, kielioppikonseptit\n\nHe eivät voi nähdä heidän:\n • viestejä keskusteluissa kurssin ulkopuolella\n • sanastoluetteloa", "requestAccess": "Pyydä pääsyä ({count})", "analyticsInactiveTitle": "Ei voitu lähettää pyyntöjä inaktiivisille käyttäjille", "analyticsInactiveDesc": "Inaktiiviset käyttäjät, jotka eivät ole kirjautuneet sisään tämän ominaisuuden käyttöönoton jälkeen, eivät näe pyyntöäsi.\n\nPyyntöpainike ilmestyy, kun he palaavat. Voit lähettää pyynnön uudelleen myöhemmin napsauttamalla Pyyntö-painiketta heidän nimensä alla, kun se on saatavilla.", "accessRequestedTitle": "Analytiikan pääsypyyntö", - "accessRequestedDesc": "Kohteen “{space}” ylläpitäjät pyytävät katsomaan oppimisanalyyttisiä tietojasi.\n\nJos suostut, kurssin ylläpitäjät voivat nähdä sinun:\n • kokonaissanaston\n • kokonaiskielioppikonseptit\n • kokonaisaktiviteettisessiot, jotka on suoritettu\n • käytetyt, oikein ja väärin, kielioppikonseptit\n\nHe eivät voi nähdä sinun:\n • viestejä keskusteluissa kurssin ulkopuolella\n • sanastoluetteloa", - "allowAccess": "Salli pääsy", - "denyAccess": "Estä pääsy", + "accessRequestedDesc": "Pyydetään ylläpitäjää(t): {admin} \n\nYlläpitäjät tilasta “{space}” pyytävät päästäkseen tarkastelemaan oppimisanalyysejäsi.\n\nJos hyväksyt, he voivat tarkastella:\n • koko sanavarastoasi\n • kaikkia kielioppikäsitteitäsi\n • kaikkia suorittamiasi aktiviteettisessioita\n • käytettyjä kielioppikäsitteitä, oikein ja väärin\n\nHe eivät voi tarkastella:\n • viestejä kursseja ulkopuolella olevissa keskusteluissa\n • sanavarastoluetteloasi", "adminRequestedAccess": "Ylläpitäjät pyytävät katsomaan analytiikkaasi.", "lastUpdated": "Päivitetty\n{time}", "activityFinishedMessage": "Kaikki valmiina!", "endForAll": "Lopeta kaikille", "newCourse": "Uusi kurssi", - "newCourseSubtitle": "Minkä kurssisuunnitelman haluaisit käyttää?", - "failedToLoadCourses": "Kurssien lataaminen epäonnistui", "numModules": "{num} moduulia", - "numActivityPlans": "{num} aktiviteettisuunnitelmaa", "coursePlan": "Kurssisuunnitelma", "editCourseLater": "Voit muokata mallin otsikkoa, kuvauksia ja kurssikuvaa myöhemmin.", "newCourseAccess": "Oletuksena kurssit ovat yksityisiä ja vaativat ylläpitäjän hyväksynnän liittyäksesi. Voit muokata näitä asetuksia milloin tahansa.", @@ -4405,17 +3925,11 @@ "accessDesc": "Voit tehdä kurssistasi avoimen maailmalle! Tai tehdä siitä yksityisen ja turvallisen.", "createGroupChatDesc": "Sillä aikaa kun aktiviteettisessiot alkavat ja päättyvät, ryhmäkeskustelut pysyvät avoimina säännöllistä viestintää varten.", "deleteDesc": "Vain ylläpitäjät voivat poistaa kurssin. Tämä on tuhoava toimenpide, joka poistaa kaikki käyttäjät ja poistaa kaikki valitut keskustelut kurssin sisällä. Toimi varoen.", - "failedToLoadCourseInfo": "Kurssin tietojen lataaminen epäonnistui", "noCourseFound": "Voi, tämä kurssi tarvitsee suunnitelman!\n\nKurssisuunnitelmat ovat aiheiden ja keskustelutoimintojen sarja.", "additionalParticipants": "+ {num} muuta", - "activityNotFoundForCourse": "Tätä toimintoa ei löytynyt kurssin sisältä", - "courseChats": "Kurssikeskustelut", - "myActivitySessions": "Omat aktiviteettisessiosi", "directMessages": "Suorat viestit", "whatNow": "Mitä nyt?", "chooseNextActivity": "Valitse seuraava toimintosi!", - "seeInstructions": "Katso ohjeet", - "hideInstructions": "Piilota ohjeet", "letsGo": "Lähdetään", "chooseRole": "Valitse rooli!", "chooseRoleToParticipate": "Valitse rooli osallistumista varten!", @@ -4425,23 +3939,15 @@ "inviteFriends": "Kutsu ystäviä", "waitNotDone": "Odotan, en ole valmis!", "waitingForOthersToFinish": "Odotetaan muiden valmistumista...", - "saveToCompletedActivities": "Tallenna valmiit aktiviteetit", "generatingSummary": "Analysoidaan keskustelua ja luodaan tuloksia", - "instructionsLanguage": "Ohjeiden kieli", "findCourse": "Etsi kurssi", - "activityCompletedDesc": "Valmis aktiviteettisi lisättiin analytiikkaan, jossa voit tarkastella ja harjoitella käyttämääsi kieltä.", "pingParticipantsNotification": "{user} etsii käyttäjiä liittymään aktiviteettisessioon {room}", "course": "Kurssi", "courses": "Kurssit", "courseName": "Kurssin nimi", "createNewCourse": "Uusi kurssi", - "publicCourses": "Julkiset kurssit", "goToCourse": "Siirry kurssiin: {course}", "activityComplete": "Tämä aktiviteetti on suoritettu. Yhteenveto aktiviteetista pitäisi olla saatavilla alla.", - "haventChattedMuch": "Näyttää siltä, ettet ole keskustellut paljon, kokeile käyttää enemmän sanastoesimerkkejä! Jos koet saavuttaneesi tavoitteesi, voit lopettaa aktiviteetin alla.", - "haveChatted": "Näyttää siltä, että olet keskustellut jonkin aikaa! Jos koet saavuttaneesi tavoitteesi, lopeta aktiviteetti ja me luomme sinulle yhteenvedon keskustelussa!", - "userDoneAndWaiting": "{num1}/{num2} osallistujaa on lopettanut. Odota, että kaikki saavat valmiiksi, ja luomme sinulle yhteenvedon keskustelussa! \n\nJos haluat liittyä uudelleen keskusteluun, napsauta jatka-painiketta keskustelussa.", - "othersDoneAndWaiting": "{num1}/{num2} on valmis. Oletko saavuttanut tavoitteesi?", "startNewSession": "Aloita uusi istunto", "joinOpenSession": "Liity avoimeen istuntoon", "less": "vähemmän", @@ -4451,7 +3957,6 @@ "openToJoin": "Avoin liittyä", "results": "Tulokset", "activityDone": "Aktiviteetti valmis!", - "moreLabel": "lisää", "promoCodeInfo": "Alennuskoodit voidaan syöttää seuraavalla sivulla", "editsComingSoon": "Mahdollisuus muokata kaupunkeja ja aktiviteetteja on tulossa pian.", "editing": "Muokkaus", @@ -4467,13 +3972,10 @@ "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", - "chooseLanguage": "Valitse kieli.", + "chooseLanguage": "Valitse kohdekieli.", "planTrip": "Suunnittele matkasi", "howAreYouTraveling": "Miten matkustat?", "unlockPrivateTrip": "Avaa yksityinen matka", @@ -4486,25 +3988,20 @@ "courseCode": "Mikä on salainen salasana?", "courseCodeHint": "Matkan koodi tai linkki", "unlockMyTrip": "Avaa matkasi", - "anyLevel": "Kaikki tasot", "signupOption": "Miten haluat rekisteröityä?", "withApple": "Applella", "withGoogle": "Googlella", "withEmail": "Sähköpostilla", "createAccount": "Luo tili", - "noCoursesFound": "Kurssia ei löytynyt", "loginWithEmail": "Kirjaudu sisään sähköpostilla", "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", - "allCefrLevels": "Kaikki CEFR-tasot", "chatListTooltip": "Täältä löydät yksityisviestisi! Klikkaa minkä tahansa käyttäjän avataria ja \"aloita keskustelu\" lähettääksesi yksityisviestin.", "directMessageBotTitle": "Yksityisviesti Pangea Bot", "feedbackTitle": "Toiminnan palaute", - "feedbackDesc": "Kuinka toimintaa voitaisiin parantaa? Jos voit antaa lisätietoja, teemme muutoksen!", "feedbackHint": "Palaute", "feedbackButton": "Lähetä palaute", "directMessageBotDesc": "Ihmisten kanssa puhuminen on hauskempaa, mutta... tekoäly on aina valmiina!", @@ -4512,7 +4009,7 @@ "playWithAI": "Leiki tekoälyn kanssa nyt", "courseStartDesc": "Pangea Bot on valmis milloin tahansa!\n\n...mutta oppiminen on parempaa ystävien kanssa!", "@@locale": "fi", - "@@last_modified": "2026-01-06 13:01:04.204663", + "@@last_modified": "2026-01-07 14:23:39.963677", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -5650,30 +5147,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5689,18 +5162,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5725,18 +5186,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5773,38 +5222,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5813,62 +5234,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5905,10 +5282,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5917,14 +5290,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5933,46 +5298,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5981,10 +5310,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6041,18 +5366,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6061,14 +5374,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6097,18 +5402,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6117,42 +5410,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6161,14 +5422,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6189,26 +5442,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6229,10 +5462,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6265,25 +5494,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6340,34 +5550,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6396,778 +5578,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8160,14 +6574,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8179,14 +6585,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8218,10 +6616,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8230,18 +6624,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8250,14 +6632,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8282,38 +6656,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8359,10 +6705,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8387,10 +6729,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8415,10 +6753,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8427,66 +6761,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8507,42 +6785,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8567,154 +6821,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8731,18 +6837,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8763,14 +6857,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8787,10 +6873,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8803,14 +6885,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8819,14 +6893,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8854,26 +6920,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8902,18 +6948,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8950,10 +6988,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9886,10 +7920,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10070,34 +8100,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10110,10 +8112,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10122,14 +8120,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10146,22 +8136,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10309,14 +8283,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10325,34 +8291,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10361,54 +8299,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10417,10 +8319,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10437,10 +8335,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10612,26 +8506,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10660,10 +8534,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10720,30 +8590,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10772,18 +8626,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10900,14 +8746,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10920,10 +8758,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10932,14 +8766,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10956,14 +8782,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10972,22 +8790,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11000,18 +8802,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11028,22 +8818,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11052,30 +8830,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11148,18 +8902,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11216,18 +8958,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11256,30 +8986,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11332,18 +9046,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11392,46 +9098,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11496,10 +9162,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11671,14 +9333,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11706,14 +9360,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11726,10 +9372,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11765,19 +9407,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11802,14 +9439,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11818,14 +9447,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11878,10 +9499,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11894,18 +9511,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11918,14 +9523,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11966,26 +9563,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12013,10 +9598,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12027,36 +9608,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12093,10 +9644,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12161,18 +9708,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12237,10 +9772,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12261,10 +9792,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12281,10 +9808,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12293,10 +9816,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12309,10 +9828,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12337,16 +9852,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Kutsu ystäviä aktiviteettiin", - "inviteFriendsToActivityCourse": "Kutsu ystäviä aktiviteettiin ja kurssille", "feedbackRespDesc": "Tarkista huomenna aktiviteettipäivitykset.", "activityDropdownDesc": "Kun olet valmis tämän aktiviteetin kanssa, napsauta alla", - "activityAnalyticsListBody": "Nämä ovat suorittamiasi aktiviteetteja! Aktiviteettien suorittamisen jälkeen voit katsella niitä täällä.", "languageMismatchTitle": "Kielivirhe", "languageMismatchDesc": "Kohdekielesi ei vastaa tämän aktiviteetin kieltä. Haluatko päivittää kohdekielesi?", "reportWordIssueTooltip": "Ilmoita sanan tiedoista ongelmasta", "tokenInfoFeedbackDialogTitle": "Sanatiedon palaute", - "tokenInfoFeedbackDialogDesc": "Tekoäly tekee virheitä. Kuvaile kaikki ongelmat, jotka löysit yllä olevissa tiedoissa.", "noPublicCoursesFound": "Yksityisiä kursseja ei löytynyt. Haluatko luoda sellaisen?", "noCourseTemplatesFound": "Emme löytäneet kursseja kohdekielellesi. Voit keskustella Pangea Botin kanssa sillä välin ja palata myöhemmin hakemaan lisää kursseja.", "botActivityJoinFailMessage": "Pangea Bot ei vastaa hetkeen. Yritä uudelleen myöhemmin tai kutsu ystäväsi mukaan.", @@ -12354,14 +9865,6 @@ "leaveDesc": "Poistu tästä tilasta ja kaikista keskusteluista siinä", "selectAll": "Valitse kaikki", "deselectAll": "Poista valinta kaikista", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12370,10 +9873,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12390,10 +9889,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12427,7 +9922,6 @@ "newMessageInPangeaChat": "💬 Uusi viesti Pangea-chatissa", "shareCourse": "Jaa kurssi", "addCourse": "Lisää kurssi", - "joinCourseWithCode": "Liity kurssille koodilla", "joinPublicCourse": "Liity julkiseen kurssiin", "vocabLevelsDesc": "Tässä kohtaa sanat menevät, kun olet nostanut niiden tasoa!", "highlightVocabTooltip": "Korosta alla olevia kohdesanastoja lähettämällä niitä tai harjoittelemalla niitä chatissa", @@ -12451,10 +9945,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12463,7 +9953,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Ei DM:itä tai keskusteluja löytynyt. Varmista, että hakusi on kirjoitettu oikein.", + "activityAnalyticsTooltipBody": "Nämä ovat tallennetut aktiviteettisi tarkistettavaksi ja harjoiteltavaksi.", + "numSavedActivities": "Tallennettujen aktiviteettien määrä", + "saveActivityTitle": "Tallenna aktiviteetti", + "saveActivityDesc": "Hyvä työ! Tallenna tämä aktiviteetti myöhempää tarkistusta ja harjoittelua varten", + "levelInfoTooltip": "Täältä näet kaikki ansaitsemasi pisteet ja miten!", + "alreadyInCourseWithID": "Olet jo kurssilla, jossa on tämä suunnitelma. Haluatko luoda kurssin samalla suunnitelmalla vai siirtyä olemassa olevaan kurssiin?", + "goToExistingCourse": "Siirry olemassa olevaan kurssiin", + "emojiView": "Emojinäkymä", + "feedbackDialogDesc": "Teen myös virheitä! Onko jotain, mikä auttaisi minua parantamaan?", + "contactHasBeenInvitedToTheCourse": "Yhteyshenkilö on kutsuttu kurssille", + "activityStatsButtonTooltip": "Toimintatiedot", + "allow": "Salli", + "deny": "Hylkää", + "enabledRenewal": "Ota käyttöön tilauksen uusiminen", + "subscriptionEndsOn": "Tilauksen päättymispäivä", + "subscriptionRenewsOn": "Tilauksen uusimispäivä", + "waitForSubscriptionChanges": "Muutokset tilauksessasi saattavat kestää hetken näkyä sovelluksessa.", + "subscribeReadingAssistance": "Tilaa avustustyökalujen avaamiseksi", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaanit", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Arabia", + "asDisplayName": "Assami", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaidžaani", + "baDisplayName": "Baškir", + "banDisplayName": "Balilainen", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Valkovenäläinen", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgari", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Intia)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnia", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalonia", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Keski-kurdin", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsika", + "crhDisplayName": "Kriminan turkki", + "crsDisplayName": "Seselwa kreoliranska", + "csDisplayName": "Tšekki", + "cvDisplayName": "Tšuvaši", + "cyDisplayName": "Wales", + "daDisplayName": "Tanska", + "deDisplayName": "Saksa", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Englanti", + "enAUDisplayName": "Englanti (Australia)", + "enGBDisplayName": "Englanti (Iso-Britannia)", + "enINDisplayName": "Englanti (Intia)", + "enUSDisplayName": "Englanti (Yhdysvallat)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espanja", + "esESDisplayName": "Espanja (Espanja)", + "esMXDisplayName": "Espanja (Meksiko)", + "euDisplayName": "Baskimaa", + "faDisplayName": "Persia", + "ffDisplayName": "Fulah", + "fiDisplayName": "Suomi", + "filDisplayName": "Filippiiniläinen", + "fjDisplayName": "Fidžiläinen", + "foDisplayName": "Faroese", + "frDisplayName": "Ranska", + "frCADisplayName": "Ranska (Kanada)", + "frFRDisplayName": "Ranska (Ranska)", + "fyDisplayName": "Länsi-Frisi", + "gaDisplayName": "Irlanti", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skottilainen gaeli", + "glDisplayName": "Galego", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havaiji", + "heDisplayName": "Heprea", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatialainen", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitilainen kreoli", + "huDisplayName": "Unkarilainen", + "hyDisplayName": "Armenialainen", + "idDisplayName": "Indonesialainen", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islanti", + "itDisplayName": "italialainen", + "jaDisplayName": "japanilainen", + "jvDisplayName": "javanilainen", + "kaDisplayName": "georgialainen", + "kkDisplayName": "kazakki", + "kmDisplayName": "khmer", + "knDisplayName": "kannada", + "koDisplayName": "korea", + "kokDisplayName": "konkani", + "kriDisplayName": "kriolu", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Kongon demokraattinen tasavalta)", + "kuDisplayName": "Kurdin", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latina", + "lbDisplayName": "Luxemburgin", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgin", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": " Liettua", + "ltgDisplayName": "Latgalia", + "luoDisplayName": "Luo (Kenia ja Tansania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvia", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagassi", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolian", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaiji", + "msArabDisplayName": "Malaiji (arabia)", + "msMYDisplayName": "Malaiji (Malesia)", + "mtDisplayName": "Maltalainen", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norja (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Hollanti", + "nlBEDisplayName": "Flaami", + "noDisplayName": "Norja", + "nrDisplayName": "Etelä-Ndebele", + "nsoDisplayName": "Pohjois-Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Oktsitaani", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Puola", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugali", + "ptBRDisplayName": "Portugali (Brasilia)", + "ptPTDisplayName": "Portugali (Portugali)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romanialainen", + "roMDDisplayName": "Moldovalainen", + "romDisplayName": "Romani", + "ruDisplayName": "Venäjä", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sitsiilia", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovakki", + "slDisplayName": "Sloveeni", + "smDisplayName": "Samoa", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albania", + "srDisplayName": "Serbia", + "srMEDisplayName": "Montenegro", + "ssDisplayName": "Swati", + "stDisplayName": "Etelä-Sotho", + "suDisplayName": "Sunda", + "svDisplayName": "Ruotsi", + "swDisplayName": "Swahili", + "szlDisplayName": "Sileesia", + "taDisplayName": "Tamili", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadžik", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turkki", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tataari", + "ugDisplayName": "Uyguri", + "ukDisplayName": "Ukrainalainen", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Intia)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamilainen", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddisch", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Yukatekki", + "yueDisplayName": "Kantonin kiina", + "yueCNDisplayName": "Kantonin kiina (Kiina)", + "yueHKDisplayName": "Kantonin kiina (Hongkong)", + "zhDisplayName": "Kiina", + "zhCNDisplayName": "Kiina (yksinkertaistettu)", + "zhTWDisplayName": "Kiina (perinteinen)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12530,6 +11206,7 @@ "notStartedActivitiesTitle": "Avoimet istunnot ({num})", "inProgressActivitiesTitle": "Käynnissä nyt ({num})", "completedActivitiesTitle": "Valmis ({num})", + "pickDifferentActivity": "Valitse toinen aktiviteetti", "inOngoingActivity": "Sinulla on meneillään oleva aktiviteetti!", "@notStartedActivitiesTitle": { "type": "String", @@ -12555,10 +11232,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Kohdekielesi ei vastaa tätä viestiä. Päivitäkö kohdekielesi?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Tässä ovat kaikki tämän kurssin osallistujat. Napsauta kenen tahansa käyttäjän avataria ja valitse \"aloita keskustelu\" lähettääksesi yksityisviestin.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Tämä sanavihkon sana poistetaan pysyvästi analytiikastasi", + "woman": "Nainen", + "man": "Mies", + "otherGender": "Muu", + "unselectedGender": "Valitse sukupuoli vaihtoehto", + "gender": "Sukupuoli", + "chatParticipantTooltip": "Tässä ovat kaikki tässä keskustelussa. Napsauta mitä tahansa käyttäjän avatarista ja \"aloita keskustelu\" lähettääksesi yksityisviestin.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Oppimistyökalut ovat pois käytöstä viesteille, jotka eivät ole kohdekielessäsi.", + "vocabEmoji": "Sanastoemojit", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Pyydä uudelleensyntymää", + "optionalRegenerateReason": "(Valinnainen) Syynä", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Olet asettanut emojin {lemma} varten! Käytämme tätä emojia sanan edustamiseen käytännön aktiviteeteissa tulevaisuudessa.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Odotetaan kirjautumisen valmistumista", + "ssoDialogDesc": "Avasimme uuden välilehden, jotta voit kirjautua sisään turvallisesti.", + "ssoDialogHelpText": "🤔 Jos et nähnyt uutta välilehteä, tarkista ponnahdusikkunoiden estäjäsi.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Poista kielityökalut käytöstä", + "disableLanguageToolsDesc": "Haluaisitko poistaa automaattisen kieliavun käytöstä?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Oikeus evätty. Ota käyttöön tallennusoikeudet ääniviestien tallentamiseksi.", + "genericWebRecordingError": "Jotain meni pieleen. Suosittelemme käyttämään Chrome-selainta viestien tallentamiseen.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Parhaan käyttökokemuksen saamiseksi tämän sovelluksen käytössä, laajenna näyttökokoasi.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Toiminnot seuraavan aiheen avaamiseksi", "activitiesToUnlockTopicDesc": "Aseta toimintojen määrä seuraavan kurssiaiheen avaamiseksi", "@activitiesToUnlockTopicTitle": { @@ -12568,5 +11363,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Oikea sanaston määritelmän harjoittelu", + "constructUseIncLMDesc": "Väärä sanaston määritelmän harjoittelu", + "constructUseCorLADesc": "Oikea sanaston ääniharjoittelu", + "constructUseIncLADesc": "Väärä sanaston ääniharjoittelu", + "constructUseBonus": "Bonus sanaharjoittelun aikana", + "practiceVocab": "Harjoittele sanastoa", + "selectMeaning": "Valitse merkitys", + "selectAudio": "Valitse vastaava ääni", + "congratulations": "Onnittelut!", + "anotherRound": "Toinen kierros", + "noActivityRequest": "Ei nykyistä aktiviteettipyyntöä.", + "quit": "Poistu", + "congratulationsYouveCompletedPractice": "Onnittelut! Olet suorittanut harjoitussession.", + "mustHave10Words": "Sinulla on oltava vähintään 10 sanastoa harjoiteltavaksi. Yritä puhua ystävän tai Pangea Botin kanssa löytääksesi lisää!", + "botSettings": "Bottiasetukset", + "activitySettingsOverrideWarning": "Kieli ja kielitaso määräytyvät aktiviteettisuunnitelman mukaan", + "voice": "Ääni", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index cfdecfa8c..f70476b4e 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -1642,28 +1642,16 @@ "commandHint_logoutall": "Mag-logout sa lahat ng aktibong device", "displayNavigationRail": "Ipakita ang navigation rail sa mobile", "customReaction": "Pasadyang reaksyon", - "accountInformation": "Impormasyon ng account", - "addGroupDescription": "Magdagdag ng paglalarawan ng chat", - "addNewFriend": "Magdagdag ng bagong kaibigan", - "alreadyHaveAnAccount": "May account ka na?", - "createNewGroup": "Lumikha ng bagong chat", - "editChatPermissions": "I-edit ang mga pahintulot sa chat", "ignore": "Block", "ignoredUsers": "Mga na-block na user", "writeAMessageLangCodes": "Mag-type sa {l1} o {l2}...", "requests": "Mga kahilingan", - "allCorrect": "Ganoon ang sasabihin ko! Magaling!", - "newWayAllGood": "Hindi iyon ang sasabihin ko pero mukhang maganda!", - "othersAreBetter": "Hm, maaaring may mas magandang paraan para sabihin iyon.", "holdForInfo": "Pindutin at hawakan para sa impormasyon ng salita.", "greenFeedback": "Ito ang ilalagay ko!", "yellowFeedback": "Hm, subukan mo iyon at tingnan kung gagana! Upang magamit ang salitang ito, pindutin muli ito.", "redFeedback": "Sa tingin ko hindi iyon tama...", "itInstructionsTitle": "Matutulungan kitang isalin!", "itInstructionsBody": "Maaari kang mag-click at mag-hold ng mga pagpipilian para sa impormasyon ng salita.", - "oneday": "Huling 24 na oras", - "oneweek": "Huling 7 araw", - "onemonth": "Nakaraang buwan", "gaTooltip": "L2 gamitin kasama ang tulong sa gramatika", "taTooltip": "L2 gamitin kasama ang tulong sa pagsasalin", "unTooltip": "Iba pa", @@ -1673,58 +1661,27 @@ "interactiveTranslatorAllowed": "Piliin ng Mag-aaral", "interactiveTranslatorRequired": "Kinakailangan", "notYetSet": "Hindi pa naitatakda", - "myLearning": "Aking Analitika", "waTooltip": "L2 gamitin nang walang tulong", - "changeDateRange": "Palitan ang saklaw ng petsa", - "classDescription": "Paglalarawan", - "addStudents": "Anyayahan ang mga gumagamit sa pamamagitan ng link o code", - "copyClassLink": "Kopyahin ang link ng imbitasyon", - "copyClassCode": "Kopyahin ang code ng imbitasyon", - "inviteStudentByUserName": "Anyayahan ang mga gumagamit sa pamamagitan ng username", "languageSettings": "Mga Setting ng Wika", "interactiveTranslator": "Tulong sa Pagsasalin", - "shareVideo": "Ibahagi ang Video", - "shareVideoDesc": "I-toggle ito upang payagan ang mga estudyante na magbahagi ng mga video sa mga chat.", - "shareFiles": "Ibahagi ang mga File", - "selectLanguageLevel": "Piliin ang antas ng wika", "noIdenticalLanguages": "Mangyaring pumili ng iba't ibang pangunahing at target na mga wika", - "iWantALanguagePartnerFrom": "Mula sa:", - "worldWide": "Sa buong mundo", - "noResults": "Walang resulta! Subukang palawakin ang iyong paghahanap.", "searchBy": "Maghanap ayon sa bansa at mga wika", - "iWantAConversationPartner": "Gusto ko ng kasamahan sa pag-uusap na", - "iWantALanguagePartnerWhoSpeaks": "Nagsasalita:", - "iWantALanguagePartnerWhoIsLearning": "Nagtututo:", "joinWithClassCode": "Sumali sa kurso", - "joinWithClassCodeHint": "Ilagay ang invite code", - "languageLevelPreA1": "Tunay na Nagsisimula (Pre A1)", - "languageLevelA1": "Nagsisimula (A1)", - "languageLevelA2": "Pang-Elementary (A2)", - "languageLevelB1": "Intermediate (B1)", - "languageLevelB2": "Upper Intermediate (B2)", - "languageLevelC1": "Advanced (C1)", - "languageLevelC2": "Mastery (C2)", + "languageLevelPreA1": "Baguhan Mababa (Pre A1)", + "languageLevelA1": "Baguhang Mid (A1)", + "languageLevelA2": "Baguhan Mataas (A2)", + "languageLevelB1": "Katamtamang Gitna (B1)", + "languageLevelB2": "Advanced Mababa (B2)", + "languageLevelC1": "Advanced Gitna (C1)", + "languageLevelC2": "Superyor (C2)", "changeTheNameOfTheClass": "Palitan ang pangalan", "changeTheNameOfTheChat": "Palitan ang pangalan ng chat", - "askPangeaBot": "Magtanong kay Pangea Bot para sa isang kontekstuwal na depinisyon.", "sorryNoResults": "Paumanhin, walang resulta.", "ignoreInThisText": "Balewalain", - "helpMeTranslate": "Oo!", - "needsItShortMessage": "Walang target", "needsItMessage": "Sandali, hindi iyon {targetLanguage}! Kailangan mo ba ng tulong sa pagsasalin?", - "needsIgcMessage": "May mali sa gramatika ang mensaheng ito.", - "tokenTranslationTitle": "Isang salita ang nasa iyong pangunahing wika.", - "spanTranslationDesc": "Tingnan ang mga posibleng pagsasalin sa ibaba.", - "spanTranslationTitle": "May ilang salita sa iyong pangunahing wika.", - "l1SpanAndGrammarTitle": "Sa labas ng target na wika", - "l1SpanAndGrammarDesc": "Maaaring nasa iyong pangunahing wika ito o maaaring mali sa gramatika.", - "otherTitle": "May mali ka.", - "otherDesc": "Tingnan ang mga posibleng pagwawasto sa ibaba.", "countryInformation": "Impormasyon ng aking bansa", - "myLanguages": "Aking mga pangunahing at target na wika", "targetLanguage": "Target na Wika", "sourceLanguage": "Pangunahing wika", - "languagesISpeak": "Mga wika na aking sinasalita", "updateLanguage": "Aking mga wika", "whatLanguageYouWantToLearn": "Anong wika ang nais mong matutunan?", "whatIsYourBaseLanguage": "Ano ang iyong pangunahing wika?", @@ -1739,13 +1696,8 @@ "errorDisableLanguageAssistanceUserDesc": "I-click dito upang i-update ang mga setting ng tulong sa pagsasalin at tulong sa gramatika", "errorDisableITClassDesc": "Naka-off ang tulong sa pagsasalin para sa kurso kung saan naroroon ang chat na ito.", "errorDisableIGCClassDesc": "Naka-off ang tulong sa gramatika para sa kurso kung saan naroroon ang chat na ito.", - "itIsDisabled": "Naka-disable ang Interactive Translation", - "igcIsDisabled": "Naka-disable ang Interactive Grammar Checking", - "goToLearningSettings": "Pumunta sa Learning Settings", "error405Title": "Hindi naka-set ang mga Wika", "error405Desc": "Mangyaring itakda ang iyong mga wika sa Main Menu > Learning Settings.", - "loginOrSignup": "Mag-sign in gamit ang", - "iAgreeToThe": "Sumasang-ayon ako sa ", "termsAndConditions": "Mga Tuntunin at Kondisyon", "andCertifyIAmAtLeast13YearsOfAge": " at certipikadong ako ay hindi bababa sa 16 na taong gulang.", "error502504Title": "Wow, maraming estudyante online!", @@ -1753,40 +1705,21 @@ "error404Title": "Error sa Pagsasalin!", "error404Desc": "Hindi sigurado ang Pangea Bot kung paano isasalin iyon...", "errorPleaseRefresh": "Tinitingnan namin ito! Mangyaring i-reload at subukan muli.", - "toggleIT": "Interactive Translation", - "toggleIGC": "Interactive Grammar Checking", - "toggleToolSettingsDescription": "Dito maaari mong i-toggle ang iyong mga indibidwal na setting ng wika ng tool.", "connectedToStaging": "Nakakonekta sa Staging", "learningSettings": "Mga setting sa pag-aaral", - "sendVoiceNotes": "Magpadala ng Voice Notes", - "sendVoiceNotesDesc": "I-toggle ito upang payagan ang mga estudyante na magpadala ng voice notes sa mga chat.", - "chatTopic": "Paksa ng chat", - "chatTopicDesc": "Itakda ang paksa ng chat", - "inviteStudentByUserNameDesc": "Kung ang iyong estudyante ay may account na, maaari mo silang hanapin.", "participants": "Mga kalahok", - "almostPerfect": "Mukhang tama! Ito ang sasabihin ko.", - "prettyGood": "Medyo maganda! Ito ang sasabihin ko.", - "letMeThink": "Hmm, tingnan natin kung paano ka nagawa!", "clickMessageTitle": "Kailangan ng tulong?", "clickMessageBody": "I-click ang isang mensahe para sa mga kasangkapan sa wika tulad ng pagsasalin, replay, at iba pa!", - "understandingMessagesTitle": "Mga depinisyon at pagsasalin!", - "understandingMessagesBody": "I-click ang mga salitang naka-underline para sa mga depinisyon. Isalin gamit ang mga opsyon sa mensahe (itaas kanan).", "allDone": "Tapos na!", "vocab": "Bokabularyo", "low": "May ebidensya na hindi nauunawaan ng user ang mga salitang ito.", "medium": "Nagamit na ang mga salitang ito. Hindi malinaw kung nauunawaan nang buo ang mga salita o hindi.", "high": "May ebidensya na naiintindihan ng user ang mga salitang ito.", - "unknownProficiency": "Hindi nagamit ang mga salitang ito sa Pangea Chat.", - "changeView": "Palitan ang mga view.", - "clearAll": "Alisin ang lahat ng mga salita?", - "generateVocabulary": "Gumawa ng bokabularyo mula sa pamagat at paglalarawan", - "generatePrompts": "Gumawa ng mga prompt", "subscribe": "Mag-subscribe", "getAccess": "Mag-subscribe ngayon!", "subscriptionDesc": "Libre ang messaging! Mag-subscribe upang ma-unlock ang interactive na pagsasalin, pagsusuri ng gramatika, at analytics sa pag-aaral.", "subscriptionManagement": "Pamamahala ng Subskripsyon", "currentSubscription": "Kasalukuyang Subskripsyon", - "changeSubscription": "Palitan ang iyong subskripsyon", "cancelSubscription": "Kanselahin ang iyong subskripsyon", "selectYourPlan": "Piliin ang Iyong Plano", "subsciptionPlatformTooltip": "Mangyaring mag-login sa iyong orihinal na device upang pamahalaan ang iyong plano sa subskripsyon", @@ -1795,9 +1728,6 @@ "paymentHistory": "Kasaysayan ng Bayad", "emptyChatDownloadWarning": "Hindi maaaring i-download ang walang laman na chat", "update": "I-update", - "updateDesc": "Maaari mo nang i-update ang app na ito mula {localVersion} hanggang {storeVersion}", - "maybeLater": "Siguro Mamaya", - "mainMenu": "Pangunahing Menu", "toggleImmersionMode": "Mode ng Paglubog", "toggleImmersionModeDesc": "Kapag naka-enable, lahat ng mensahe ay ipinapakita sa iyong target na wika. Ang setting na ito ay pinaka-kapaki-pakinabang sa mga palitan ng wika.", "itToggleDescription": "Ang kasangkapang ito sa pag-aaral ng wika ay tutukoy sa mga salita sa iyong pangunahing wika at tutulungan kang isalin ang mga ito sa iyong target na wika. Bagamat bihira, maaaring magkamali ang AI sa pagsasalin.", @@ -1812,212 +1742,13 @@ "definitionsToolDescription": "Kapag naka-enable, ang mga salitang naka-underline sa asul ay maaaring i-click para sa mga kahulugan. I-click ang mga mensahe upang ma-access ang mga kahulugan.", "translationsToolDescrption": "Kapag naka-enable, i-click ang isang mensahe at ang icon ng pagsasalin upang makita ang isang mensahe sa iyong pangunahing wika.", "welcomeBack": "Maligayang pagbabalik! Kung ikaw ay bahagi ng pilot noong 2023-2024, makipag-ugnayan sa amin para sa iyong espesyal na pilot na subscription. Kung ikaw ay isang guro na bumili ng mga lisensya para sa iyong klase (o ang iyong institusyon ay bumili), makipag-ugnayan sa amin para sa iyong guro na subscription.", - "kickAllStudents": "Tanggalin ang Lahat ng Mag-aaral", - "kickAllStudentsConfirmation": "Sigurado ka bang nais mong tanggalin ang lahat ng mag-aaral?", - "inviteAllStudents": "Anyayahan ang Lahat ng Mag-aaral", - "inviteAllStudentsConfirmation": "Sigurado ka bang nais mong anyayahan ang lahat ng mag-aaral?", - "inviteUsersFromPangea": "Magdagdag ng mga admin", - "redeemPromoCode": "I-redeem ang Promo Code", - "enterPromoCode": "Ilagay ang Promo Code", "downloadTxtFile": "I-download ang Text File", "downloadCSVFile": "I-download ang CSV File", "promotionalSubscriptionDesc": "Sa kasalukuyan ay mayroon kang panghabang-buhay na promosyonal na subscription. Makipag-ugnayan sa support@pangea.chat para sa tulong sa pagbabago ng iyong subscription.", "originalSubscriptionPlatform": "Subscription na binili sa pamamagitan ng {purchasePlatform}", "oneWeekTrial": "Isang Linggong Pagsubok", "downloadXLSXFile": "I-download ang Excel File", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanian", - "amDisplayName": "Amharic", - "arDisplayName": "Arabic", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armenian", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basque", - "beDisplayName": "Belaruso", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnian", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgarian", - "myDisplayName": "Burmese", - "caDisplayName": "Katalan, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Chechen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Tsino", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corsican", - "crDisplayName": "Cree", - "hrDisplayName": "Croatian", - "csDisplayName": "Czech", - "daDisplayName": "Danish", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Dutch", - "enDisplayName": "Ingles", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonian", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijian", - "fiDisplayName": "Finnish", - "frDisplayName": "Pranses", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galician", - "kaDisplayName": "Georgian", - "deDisplayName": "Aleman", - "elDisplayName": "Griyego, Moderno", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Haitian Creole", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrew (bago)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hungarian", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesian", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irish", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Icelandic", - "itDisplayName": "Italian", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Hapon", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, Greenlandic", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreano", - "kuDisplayName": "Kurdish", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxembourgish, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Lao", - "ltDisplayName": "Lithuanian", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Lativian", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedonian", - "mgDisplayName": "Malagasy", - "msDisplayName": "Malay", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltese", - "miDisplayName": "Māori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolian", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norwegian Bokmål", - "ndDisplayName": "North Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norwegian Nynorsk", - "noDisplayName": "Norwegian", - "iiDisplayName": "Nuosu", - "nrDisplayName": "South Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Lumang Church Slavonic, Church Slavic, Church Slavonic, Lumang Bulgarian, Lumang Slavonic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persian", - "plDisplayName": "Polish", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portuges", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romanian, Moldavian, Moldovan", - "ruDisplayName": "Ruso", - "saDisplayName": "Sanskrit (Sanskṛta)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Northern Sami", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbian", - "gdDisplayName": "Scottish Gaelic, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovak", - "slDisplayName": "Slovene", - "soDisplayName": "Somali", - "stDisplayName": "Southern Sotho", - "esDisplayName": "Espanyol", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Swedish", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetano Standard, Tibetan, Central", - "tkDisplayName": "Turkmeno", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Mga Isla ng Tonga)", - "trDisplayName": "Turko", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uighur, Uyghur", - "ukDisplayName": "Ukrainian", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamese", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "Kanluraning Frisian", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Unknown", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Maramihan", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrew", - "jwDisplayName": "Javanese", - "moDisplayName": "Moldavian", - "shDisplayName": "Serbo-Kroatian", "wwCountryDisplayName": "Sa Buong Mundo", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Aland Islands", @@ -2265,41 +1996,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Magbayad", - "allPrivateChats": "Direktang mga chat", - "unknownPrivateChat": "Hindi kilalang pribadong chat", + "pay": "Checkout", "invitedToSpace": "{user} ay nag-imbita sa iyo na sumali sa isang kurso: {space}! Nais mo bang tanggapin?", - "declinedInvitation": "Tinanggihan ang imbitasyon", - "acceptedInvitation": "Tinatanggap ang imbitasyon", "youreInvited": "📩 Ikaw ay inimbitahan!", "invitedToChat": "{user} ay nag-imbita sa iyo na sumali sa isang chat: {name}! Nais mo bang tanggapin?", "monthlySubscription": "Buwanang", "yearlySubscription": "Taunan", "defaultSubscription": "Pangea Chat Subscription", "freeTrial": "Libreng Pagsubok", - "grammarAnalytics": "Error Analytics", "total": "Kabuuan: ", "noDataFound": "Walang nahanap na data", - "promoSubscriptionExpirationDesc": "Ang kasalukuyang subscription mo ay pang-promosyon at mag-e-expire sa {expiration}. Makipag-ugnayan sa support@pangea.chat para sa tulong sa pagbabago ng iyong subscription.", - "emptyChatNameWarning": "Mangyaring magpasok ng pangalan para sa chat na ito", "blurMeansTranslateTitle": "Bakit blurred ang mensahe?", "blurMeansTranslateBody": "Habang naka-on ang Immersion Mode, ang mga mensahe na ipinapadala sa iyong pangunahing wika ay magiging blurred habang isinasalin ito ng Pangea Bot sa iyong target na wika. Maaaring i-toggle ang Immersion Mode sa mga indibidwal na setting at setting ng kurso.", - "someErrorTitle": "Hm, may hindi tama", - "someErrorBody": "Maaaring ito ay isang error o may nangyayari sa iyong pangunahing wika.", "bestCorrectionFeedback": "Tama iyan!", "distractorFeedback": "Hindi ito ganap na tama.", "bestAnswerFeedback": "Tama iyan!", "definitionDefaultPrompt": "Ano ang ibig sabihin ng salitang ito?", "practiceDefaultPrompt": "Ano ang pinakamahusay na sagot?", "correctionDefaultPrompt": "Ano ang pinakamahusay na kapalit?", - "itStartDefaultPrompt": "Gusto mo bang tulong sa pagsasalin?", - "lockedChatWarning": "🔒 Naka-lock ang chat na ito", - "lockChat": "I-lock ang Chat", - "suggestToChat": "I-suggest ang chat na ito", - "suggestToChatDesc": "Ang mga inirerekomendang chat ay lalabas sa mga listahan ng chat", "acceptSelection": "Tanggapin ang Pagwawasto", - "acceptSelectionAnyway": "Gamitin ito kahit na", - "makingActivity": "Gumagawa ng aktibidad", "why": "Bakit?", "definition": "Depinisyon", "exampleSentence": "Halimbawa ng Pangungusap", @@ -2307,128 +2022,55 @@ "reportMessageTitle": "{reportingUserId} ay nag-ulat ng isang mensahe mula kay {reportedUserId} sa chat {roomName}", "reportMessageBody": "Mensahe: {reportedMessage}\nDahilan: {reason}", "noTeachersFound": "Walang natagpuang guro na maaaring i-report", - "viewArchive": "Tingnan ang Arkibo", "trialExpiration": "Mag-e-expire ang iyong libreng pagsubok sa {expiration}", "freeTrialDesc": "Nakakatanggap ang mga bagong user ng isang linggong libreng pagsubok sa Pangea Chat", "activateTrial": "Libreng 7-Araw na Pagsubok", "successfullySubscribed": "Matagumpay kang nakasubscribe!", "clickToManageSubscription": "I-click dito upang pamahalaan ang iyong subscription.", - "errorGettingAudio": "May error sa pagkuha ng audio. Pakisariwang muli at subukan ulit.", "signUp": "Mag-sign up", "pleaseChooseAtLeastChars": "Pumili ng hindi bababa sa {min} na mga karakter.", "noEmailWarning": "Mangyaring magpasok ng isang wastong email address. Kung hindi, hindi mo magagawang i-reset ang iyong password. Kung ayaw mo, pindutin muli ang button upang magpatuloy.", "pleaseEnterValidEmail": "Mangyaring magpasok ng isang wastong email address.", "pleaseChooseAUsername": "Mangyaring pumili ng isang username", - "chooseAUsername": "Pumili ng isang username", "define": "Tukuyin", "listen": "Makinig", - "addConversationBot": "Paganahin ang Conversation Bot", - "addConversationBotDesc": "Magdagdag ng bot sa chat na ito", - "convoBotSettingsDescription": "I-edit ang paksa ng pag-uusap at antas ng kahirapan", - "enterAConversationTopic": "Magpasok ng paksa ng pag-uusap", - "conversationTopic": "Paksa ng pag-uusap", - "enableModeration": "Paganahin ang moderation", - "enableModerationDesc": "Paganahin ang awtomatikong moderation upang suriin ang mga mensahe bago ito ipadala", - "conversationLanguageLevel": "Ano ang antas ng wika ng pag-uusap na ito?", - "showDefinition": "Ipakita ang Depinisyon", - "subscriptionPopupTitle": "Maaaring may mali sa gramatika ang pangungusap na ito...", - "subscriptionPopupDesc": "Mag-subscribe ngayon upang ma-unlock ang pagsasalin at pagwawasto ng gramatika!", - "seeOptions": "Tingnan ang mga opsyon", - "continuedWithoutSubscription": "Magpatuloy nang walang pag-subscribe", "trialPeriodExpired": "Umalis na ang iyong trial period", - "selectToDefine": "Pindutin ang kahit anong salita upang makita ang depinisyon nito!", "translations": "mga pagsasalin", "messageAudio": "audio ng mensahe", "definitions": "mga depinisyon", "subscribedToUnlockTools": "Mag-subscribe upang ma-unlock ang interaktibong pagsasalin at pagsusuri ng gramatika, pag-play ng audio, personalisadong mga aktibidad sa praktis, at analytics sa pag-aaral!", "translationTooltip": "Isalin", - "audioTooltip": "Play Audio", "speechToTextTooltip": "Transcript", - "certifyAge": "Pinapatunayan ko na ako ay higit sa {age} taong gulang", "kickBotWarning": "Ang pagtulak sa Pangea Bot ay mag-aalis sa bot ng pag-uusap mula sa chat na ito.", - "joinToView": "Sumali sa kuwartong ito upang makita ang mga detalye", "refresh": "I-refresh", - "autoPlayTitle": "Auto Play ng Mga Mensahe", - "autoPlayDesc": "Kapag naka-enable, ang text-to-speech na audio ng mga mensahe ay awtomatikong maglalaro kapag pinili.", "messageAnalytics": "Analytics ng Mensahe", "words": "Mga Salita", "score": "Iskor", "accuracy": "Katumpakan", "points": "Mga Punto", "noPaymentInfo": "Hindi kailangan ng impormasyon sa pagbabayad!", - "conversationBotModeSelectDescription": "Aktibidad ng pag-uusap", - "conversationBotModeSelectOption_discussion": "Talakayan", - "conversationBotModeSelectOption_custom": "Pasadyang", - "conversationBotModeSelectOption_conversation": "Pag-uusap", - "conversationBotModeSelectOption_textAdventure": "Teksto na Pakikipagsapalaran", - "conversationBotModeSelectOption_storyGame": "Laro ng Kwento", - "conversationBotDiscussionZone_title": "Mga Setting ng Talakayan", - "conversationBotDiscussionZone_discussionTopicLabel": "Paksa ng Talakayan", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Itakda ang paksa ng talakayan", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Mga Keyword ng Talakayan", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Itakda ang mga keyword ng talakayan", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Listahan ng mga keyword na pinaghihiwalay ng kuwit upang gabayan ang talakayan", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Magpadala ng paalala ng talakayan ayon sa iskedyul", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Oras sa pagitan ng mga paalala ng talakayan", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Tumugon sa reaksyon na ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaksyon upang magpadala ng paalala ng talakayan", - "conversationBotCustomZone_title": "Pasadyang Mga Setting", - "conversationBotCustomZone_customSystemPromptLabel": "Pasadyang prompt ng sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Itakda ang pasadyang prompt ng sistema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Nawawala ang pasadyang prompt ng sistema", - "botConfig": "Mga setting ng Bot at aktibidad", - "botConfigNoPermissionTitle": "Walang permiso", - "botConfigNoPermissionMessage": "Makipag-ugnayan sa admin ng silid upang baguhin ang configuration ng bot", - "addConversationBotDialogTitleInvite": "Kumpirmahin ang pag-imbita sa conversation bot", - "addConversationBotButtonInvite": "Anyayahan", - "addConversationBotDialogInviteConfirmation": "Anyayahan", - "addConversationBotButtonTitleRemove": "Kumpirmahin ang pagtanggal ng conversation bot", - "addConversationBotButtonRemove": "Tanggalin", - "addConversationBotDialogRemoveConfirmation": "Tanggalin", - "conversationBotConfigConfirmChange": "Kumpirmahin", - "conversationBotStatus": "Anyayahan ang bot", - "conversationBotTextAdventureZone_title": "Text Adventure", - "conversationBotTextAdventureZone_instructionLabel": "Mga Tagubilin ng Game Master", - "conversationBotTextAdventureZone_instructionPlaceholder": "Itakda ang mga tagubilin ng game master", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Nawawala ang mga tagubilin ng game master", - "studentAnalyticsNotAvailable": "Sa kasalukuyan, hindi available ang datos ng estudyante", - "roomDataMissing": "Maaaring may nawawalang datos mula sa mga silid na hindi ka kasapi.", "updatePhoneOS": "Maaaring kailangan mong i-update ang bersyon ng OS ng iyong device.", "wordsPerMinute": "Mga salita kada minuto", "autoIGCToolName": "Awtomatikong patakbuhin ang Pangea writing assistance", "autoIGCToolDescription": "Awtomatikong patakbuhin ang Pangea Chat grammar at translation writing assistance bago ipadala ang aking mensahe.", - "runGrammarCorrection": "Suriin ang mensahe", - "grammarCorrectionFailed": "Mga isyung kailangang ayusin", - "grammarCorrectionComplete": "Mukhang maayos!", "tooltipInstructionsTitle": "Hindi sigurado kung ano ang ginagawa niyan?", "tooltipInstructionsMobileBody": "Pindutin at hawakan ang mga item upang makita ang mga tooltip.", "tooltipInstructionsBrowserBody": "I-hover ang cursor sa mga item upang makita ang mga tooltip.", "chatCapacity": "Kapasidad ng chat", "roomFull": "Puno na ang kuwartong ito.", - "topicNotSet": "Hindi pa naitatakda ang paksa.", - "chatCapacityNotSet": "Walang limitasyon sa kapasidad ang chat na ito.", "chatCapacityHasBeenChanged": "Nailipat ang kapasidad ng chat", "chatCapacitySetTooLow": "Ang kapasidad ng chat ay dapat hindi bababa sa {count}.", "chatCapacityExplanation": "Ang kapasidad ng chat ay naglilimita sa bilang ng mga miyembro na pinapayagan sa isang chat.", - "chatExceedsCapacity": "Lumampas ang chat na ito sa kapasidad nito.", "tooManyRequest": "Sobrang dami ng kahilingan, subukan muli mamaya.", "enterNumber": "Mangyaring magpasok ng isang buong bilang.", "buildTranslation": "Buuin ang iyong pagsasalin mula sa mga pagpipilian sa itaas", - "nonexistentSelection": "Hindi na umiiral ang pagpili.", - "changeAnalyticsLanguage": "Palitan ang Wika ng Analytics", "practice": "Praktis", "noLanguagesSet": "Walang nakatakdang wika", - "noActivitiesFound": "Sapat na iyon para sa ngayon! Bumalik mamaya para sa higit pa.", - "hintTitle": "Pahiwatig:", "speechToTextBody": "Para sa mga mensahe sa boses, makikita mo ang transcript pati na rin ang score na Words Per Minute ng tagapagsalita.", "versionNotFound": "Hindi Nahanap ang Bersyon", "fetchingVersion": "Kinukuha ang bersyon...", "versionFetchError": "Error sa pagkuha ng bersyon", "versionText": "Bersyon: {version}+{buildNumber}", - "languageButtonLabel": "Wika: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Autoplay ng pagsasalin", - "interactiveTranslatorAutoPlayDesc": "Ilulunsad ang interactive translator nang hindi nagtatanong.", - "changeAnalyticsView": "Baguhin ang View ng Analytics", "l1TranslationBody": "Ang mga mensahe sa iyong pangunahing wika ay hindi isasalin.", "deleteSubscriptionWarningTitle": "May aktibong subscription ka", "deleteSubscriptionWarningBody": "Ang pagtanggal ng iyong account ay hindi awtomatikong magcancela ng iyong subscription.", @@ -2436,9 +2078,7 @@ "error520Title": "Mangyaring subukan muli.", "error520Desc": "Paumanhin, hindi namin maintindihan ang iyong mensahe...", "wordsUsed": "Mga Salitang Ginamit", - "errorTypes": "Mga Uri ng Error", "level": "Antas", - "canceledSend": "Kinansela ang pagpapadala", "morphsUsed": "Mga Morphs na Ginamit", "translationChoicesBody": "Pindutin at hawakan ang isang opsyon para sa isang pahiwatig.", "grammar": "Balarila", @@ -2448,7 +2088,6 @@ "reportContentIssueTitle": "Iulat ang isyu sa nilalaman", "feedback": "Opsyonal na puna", "reportContentIssueDescription": "Naku! Maaaring magbigay ang AI ng mga personalisadong karanasan sa pagkatuto ngunit... nagkakaroon din ito ng hallucinations. Mangyaring ibigay ang anumang puna na mayroon ka at susubukan naming muli.", - "changeContent": "Naku! Maaaring magbigay ang AI ng mga personalisadong karanasan sa pagkatuto ngunit... nagkakaroon din ito ng hallucinations. Ano ang dapat nitong gawin?", "clickTheWordAgainToDeselect": "Pindutin muli ang napiling salita upang i-deselect ito.", "l2SupportNa": "Hindi Magagamit", "l2SupportAlpha": "Alpha", @@ -2682,7 +2321,6 @@ "grammarCopySPC": "Espesipikasyon", "grammarCopyPARTTYPE": "Uri ng Partitivo", "grammarCopyINTREL": "Interogatibo-Relatibo", - "grammarCopyNUMFORMpsor": "Numero ng Tagapagmay-ari", "grammarCopyUNKNOWN": "Hindi Alam", "grammarCopyNUMBERPSOR": "Numero ng Tagapagmay-ari", "grammarCopyPOSS": "Pagmamay-ari", @@ -2728,28 +2366,14 @@ "grammarCopyVOICEdir": "Direkta", "grammarCopyVOICEinv": "Baligtad", "grammarCopyVOICErcp": "Reciprocal", - "enterPrompt": "Mangyaring magpasok ng isang prompt sa sistema", - "selectBotLanguage": "Piliin ang wika ng bot", - "chooseVoice": "Pumili ng boses", - "enterLanguageLevel": "Mangyaring magpasok ng antas ng wika", - "enterDiscussionTopic": "Mangyaring magpasok ng paksa ng talakayan", - "selectBotChatMode": "Piliin ang mode ng chat", - "messageNotInTargetLang": "Hindi nasa target na wika ang mensahe", "other": "Iba pa", "levelShort": "LVL {level}", - "botModeValidation": "Mangyaring piliin ang mode ng chat", "clickBestOption": "Piliin ang pinakamahusay na mga opsyon upang isalin ang iyong mensahe!", "completeActivitiesToUnlock": "Kumpletuhin ang hindi bababa sa isang aktibidad upang ma-unlock ang pagsasalin!", - "botSettingsSubtitle": "Anyayahan ang bot upang pangasiwaan ang aktibidad sa chat", - "invitePeople": "Anyayahan ang mga tao", "noCapacityLimit": "Walang limitasyon sa kapasidad", "downloadGroupText": "I-download ang teksto ng grupo", "notificationsOn": "Naka-on ang mga notipikasyon", "notificationsOff": "Naka-off ang mga notipikasyon", - "chatCanBeFoundViaSearch": "Maaaring mahanap ang chat sa pamamagitan ng paghahanap", - "requireCodeToJoin": "Kailangan ng code upang makasali", - "canFindInSearch": "Maaaring mahanap sa paghahanap", - "addChatToSpace": "Idagdag ang chat", "createChatAndInviteUsers": "Lumikha ng chat at anyayahan ang mga user", "updatedNewSpaceDescription": "Pinapayagan ka ng mga kurso na pagsamahin ang iyong mga chat at bumuo ng mga pribado o pampublikong komunidad.", "joinWithCode": "Sumali gamit ang code", @@ -2785,39 +2409,19 @@ "constructUseCollected": "Nakalap sa chat", "constructUseNanDesc": "Hindi naaangkop", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Mag-sign in gamit ang username at password", - "registrationEmailMessage": "Mangyaring i-verify ang iyong email gamit ang isang link na ipinadala doon. Sa ilang kaso, umaabot ng hanggang 5 minuto bago makarating ang email. Mangyaring suriin din ang iyong spam folder.", "enableTTSToolName": "Pinagana ang text-to-speech", "enableTTSToolDescription": "Payagan ang app na lumikha ng output na text-to-speech para sa mga bahagi ng teksto sa iyong target na wika.", - "couldNotFindTTS": "Hindi namin mahanap ang isang text-to-speech engine para sa iyong kasalukuyang target na wika.", - "ttsInstructionsHyperlink": "Pindutin dito upang makita ang mga tagubilin para sa pag-download ng isang bagong boses sa iyong device.", - "createAnAccount": "Lumikha ng isang account", - "signIn": "Mag-sign in", - "signUpWithEmail": "Mag-sign up gamit ang Email", - "signUpWithGoogle": "Mag-sign up gamit ang Google", - "signUpWithApple": "Mag-sign up gamit ang Apple", "yourUsername": "Ang iyong username", "yourEmail": "Ang iyong email", - "pleaseEnterAnEmail": "Mangyaring magpasok ng isang email address", - "signInWithGoogle": "Mag-sign in gamit ang Google", - "signInWithApple": "Mag-sign in gamit ang Apple", - "chooseYourAvatar": "Piliin ang iyong avatar", "iWantToLearn": "Gusto kong matuto", - "letsStart": "Simulan na natin", - "pleaseAgreeToTOS": "Paki-sang-ayon sa Mga Tuntunin at Kondisyon", "pleaseEnterEmail": "Paki-enter ang isang wastong email address.", - "pleaseSelectALanguage": "Piliin ang isang wika", "myBaseLanguage": "Aking pangunahing wika", - "clickWordsInstructions": "🧻 I-click ang kahit anong salita para sa detalye. 🤐", - "chooseBestDefinition": "Ano ang ibig sabihin ng salitang ito?", "meaningSectionHeader": "Kahulugan:", "formSectionHeader": "Mga porma na ginagamit sa chat:", - "noEmojiSelectedTooltip": "Walang emoji na napili", "writingExercisesTooltip": "Pagsusulat", "listeningExercisesTooltip": "Pakikinig", "readingExercisesTooltip": "Pagbasa", "meaningNotFound": "Hindi mahanap ang kahulugan.", - "formsNotFound": "Hindi mahanap ang mga porma.", "chooseBaseForm": "Piliin ang pangunahing porma", "notTheCodeError": "Paumanhin, hindi iyon ang code!", "totalXP": "Kabuuang XP", @@ -2857,9 +2461,6 @@ "pickAnEmoji": "Anong paboritong emoji mo para sa '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Itugma ang mga kahulugan sa mga salita sa mensahe!", "doubleClickToEdit": "Mag-double click para i-edit.", - "removeFeature": "Alisin ang {feature}", - "chooseCorrectLabel": "Piliin ang tamang label.", - "levelPopupTitle": "Binabati kita sa pag-abot sa\nLevel {level}", "activityPlannerTitle": "Tagaplano ng Gawain", "topicLabel": "Paksa", "topicPlaceholder": "Pumili ng paksa...", @@ -2867,7 +2468,6 @@ "modePlaceholder": "Pumili ng uri...", "learningObjectiveLabel": "Layunin sa Pagkatuto", "learningObjectivePlaceholder": "Pumili ng layunin sa pagkatuto...", - "mediaLabel": "Media na dapat ibahagi ng mga mag-aaral", "languageOfInstructionsLabel": "Wika ng mga tagubilin sa gawain", "targetLanguageLabel": "Target na wika", "cefrLevelLabel": "Antas ng CEFR", @@ -2882,20 +2482,15 @@ "instructions": "Mga tagubilin", "numberOfLearners": "Bilang ng mga mag-aaral", "mustBeInteger": "Dapat isang buong numero hal. 1, 2, 3, ...", - "noLemmasFound": "Walang bokabularyo na may higit sa {xp} XP. Magpatuloy sa pag-eensayo!", "constructUsePvmDesc": "Ginawa sa mensahe ng boses", - "lockedMorphFeature": "Naghihintay na ma-unlock", "leaveSpaceDescription": "Sa pag-alis sa kurso, iiwan mo ang lahat ng mga chat dito. Makikita ng ibang mga user na umalis ka na sa kurso.", - "whatIsLemma": "Ano ang lemma?", "constructUseCorMmDesc": "Tamang kahulugan ng mensahe", "constructUseIncMmDesc": "Maling kahulugan ng mensahe", "constructUseIgnMmDesc": "Nakalimutang kahulugan ng mensahe", "clickForMeaningActivity": "Pindutin dito para sa Isang Hamon sa Kahulugan", "meaning": "Kahulugan", "chatWith": "Grupo kasama si {displayname}", - "slightlyOffensive": "Medyo nakakasakit", "clickOnEmailLink": "Pindutin ang link sa email at magpatuloy.\n\nSuriin ang iyong spam folder kung hindi pa dumarating ang email.", - "whoIsAllowedToJoinThisChat": "Sino ang pinapayagang sumali sa chat na ito", "dontForgetPassword": "Huwag kalimutan ang iyong password!", "enableAutocorrectToolName": "Paganahin ang auto-correct ng device", "enableAutocorrectDescription": "Kung sinusuportahan ng iyong device ang wikang iyong pinag-aaralan, maaari mong paganahin ang auto-correct upang ayusin ang mga karaniwang mali habang nagta-type.", @@ -2923,48 +2518,26 @@ "autocorrectNotAvailable": "Sa kasamaang palad, ang iyong platform ay kasalukuyang hindi sinusuportahan para sa tampok na ito. Abangan ang karagdagang pag-unlad!", "pleaseUpdateApp": "Mangyaring i-update ang app upang magpatuloy.", "chooseEmojiInstructionsBody": "Itugma ang mga emoji sa mga salitang pinakamahusay na kumakatawan dito. Huwag mag-alala! Walang puntos na mawawala kung hindi magkatugma. 😅", - "pickAnEmojiFor": "Pumili ng emoji para sa {lemma}", "analyticsVocabListBody": "Ito ang lahat ng iyong bokabularyo! Habang kumikita ka ng XP para sa bawat salita, magpapalago ito mula sa binhi hanggang sa buong bulaklak. I-click ang anumang salita upang makita ang higit pang detalye.", "morphAnalyticsListBody": "Ito ang lahat ng mga konsepto sa gramatika sa wikang iyong pinag-aaralan! I-unlock mo ang mga ito habang nakikisalamuha ka. I-click para sa mga detalye.", "knockSpaceSuccess": "Nais mong sumali sa kursong ito! Sasagot ang isang admin sa iyong kahilingan kapag natanggap nila ito 😄", - "joinByCode": "Sumali sa pamamagitan ng code", "chooseWordAudioInstructionsBody": "Makinig sa buong mensahe. Pagkatapos, itugma ang mga audio sa mga salita.", "chooseMorphsInstructionsBody": "I-click ang mga piraso ng puzzle para sa mga tanong sa gramatika!", - "inviteAndLaunch": "Imbitahan at ilunsad", - "createOwnChat": "Lumikha ng sarili mong chat", "pleaseEnterInt": "Mangyaring magpasok ng isang numero", "home": "Home", "join": "Sumali", "readingAssistanceOverviewBody": "I-click ang mga button sa ibaba para sa mga mini-game sa pagtutugma ng mga emoji, audio, kahulugan ng salita, at mga konsepto sa gramatika. O i-click ang anumang salita para sa mga detalye.", - "learnByTexting": "Matuto sa pamamagitan ng pagpapadala ng text", - "levelSummaryTrigger": "Tingnan ang buod", "levelSummaryPopupTitle": "Buod ng Antas {level}", - "referFriends": "Mag-refer ng mga kaibigan", - "referFriendDialogTitle": "Imbitahan ang isang kaibigan sa iyong pag-uusap", - "referFriendDialogDesc": "Mayroon ka bang kaibigan na sabik matuto ng bagong wika kasama ka? Kopyahin at ipadala ang imbitasyong ito upang sumali at magsimula ng pag-uusap sa iyo ngayon.", - "youUnlocked": "Na-unlock mo na", "resetInstructionTooltipsTitle": "I-reset ang mga tooltip ng instruksyon", "resetInstructionTooltipsDesc": "I-click upang ipakita ang mga tooltip ng instruksyon tulad ng para sa isang bagong user.", "selectForGrammar": "Pumili ng icon ng gramatika para sa mga aktibidad at detalye.", - "newChatActivityTitle": "Magdagdag ng isang masayang aktibidad?", - "newChatActivityDesc": "Gawing isang pakikipagsapalaran ang bawat group chat gamit ang Activity Planner! Magtakda ng mga nakakaakit na paksa at layunin para sa grupo, at buhayin ang mga pag-uusap gamit ang mga kamangha-manghang larawan. Pasiglahin ang malikhaing talakayan at panatilihing tuloy-tuloy ang kasiyahan!", - "exploreMore": "Mag-explore pa", "randomize": "Randomin", "clear": "I-clear", "makeYourOwnActivity": "Gumawa ng sarili mong aktibidad", "featuredActivities": "Itinatampok", - "goToChat": "Pumunta sa chat", "save": "I-save", - "selectActivity": "Piliin ang aktibidad", - "wordFocusListeningMultipleChoice": "Alin ang audio na tumutugma sa salita?", "startChat": "Simulan ang chat", "translationProblem": "Problema sa pagsasalin", - "perfectTranslation": "Perpektong pagsasalin!", - "greatJobTranslation": "Magandang trabaho sa pagsasalin na ito!", - "goodJobTranslation": "Magaling na trabaho sa pagsasalin na ito.", - "makingProgress": "Nangyayari ang progreso mo!", - "keepPracticing": "Ipagpatuloy ang pagpraktis!", - "niceJob": "Magandang trabaho!", "askToJoin": "Humingi ng paglahok", "emptyChatWarningTitle": "Walang laman ang chat", "emptyChatWarningDesc": "Hindi ka pa nag-imbita ng sinuman sa iyong chat. Pumunta sa mga setting ng Chat upang mag-imbita ng iyong mga contact o ang Bot. Maaari mo rin itong gawin mamaya.", @@ -2983,8 +2556,6 @@ "languageLevelC2Desc": "Kaya kong maunawaan halos lahat ng naririnig o nababasa at maipahayag ang aking sarili nang malaya at tumpak.", "newVocab": "Bagong bokabularyo", "newGrammar": "Bagong mga konsepto sa gramatika", - "congratulationsOnReaching": "Nakarating ka na sa Antas {level}!", - "seeDetails": "Tingnan ang mga Detalye", "choosePracticeMode": "Pindutin ang isa sa mga button sa itaas upang simulan ang isang aktibidad sa pagsasanay", "ban": "Ban", "unban": "I-unban", @@ -2998,8 +2569,6 @@ "timesUsedWithAssistance": "Mga beses na ginamit kasama ang tulong", "shareInviteCode": "Ibahagi ang code ng imbitasyon: {code}", "leaderboard": "Talaan ng mga Nangunguna", - "welcomeUser": "Maligayang pagdating {user}", - "joinSpaceOnboardingDesc": "Mayroon ka bang isang invite code o link sa isang pampublikong kurso?", "skipForNow": "Laktawan muna", "permissions": "Mga Pahintulot", "spaceChildPermission": "Sino ang maaaring magdagdag ng mga bagong chat sa kursong ito", @@ -3007,12 +2576,8 @@ "defaultOption": "Default", "deleteChatDesc": "Sigurado ka bang nais mong i-delete ang chat na ito? Ito ay matatanggal para sa lahat ng kalahok at ang lahat ng mensahe sa loob ng chat ay hindi na magagamit para sa praktis o analytics sa pag-aaral.", "deleteSpaceDesc": "Ang kurso at anumang napiling mga chat ay matatanggal para sa lahat ng kalahok at ang lahat ng mensahe sa loob ng chat ay hindi na magagamit para sa praktis o analytics sa pag-aaral. Hindi na maibabalik ang aksyong ito.", - "chatWithActivities": "Makipag-chat kasama ang mga aktibidad", "launch": "Ilunsad", - "launchActivityToChats": "Ilunsad ang aktibidad sa mga chat", "searchChats": "Maghanap ng mga chat", - "selectChats": "Piliin ang mga chat", - "selectChatToStart": "Tapos na! Pumili ng chat upang simulan", "maxFifty": "Maximum na 50", "configureSpace": "I-configure ang kurso", "pinMessages": "I-pin ang mga mensahe", @@ -3026,9 +2591,7 @@ "announcements": "Mga Anunsyo", "activities": "Mga Gawain", "access": "Access", - "botSettings": "Mga setting ng bot", "activitySuggestionTimeoutMessage": "Nagsusumikap kaming lumikha ng mas maraming aktibidad para sa iyo, mangyaring mag-check muli sa isang minuto", - "accessSettingsWarning": "Oops! Mukhang wala kang pahintulot na itakda ang mga patakaran sa Access ng kuwartong ito. Dapat mong suriin ang mga ito upang matiyak na ang mga ito ay ayon sa iyong pangangailangan at makipag-usap sa isang admin ng kuwarto kung kailangan mong baguhin ang mga ito", "howSpaceCanBeFound": "Paano mahanap ang kursong ito", "private": "Pribado", "cannotBeFoundInSearch": "Hindi mahanap sa paghahanap", @@ -3041,16 +2604,6 @@ "canBeFoundViaKnock": "• kahilingan na sumali at pag-apruba ng admin", "youHaveLeveledUp": "Naka-level up ka na!", "sendActivities": "Magpadala ng mga aktibidad", - "getStarted": "Simulan na", - "getStartedBotChatDesc": "Ang pakikipag-chat sa AI ay isang magandang paraan upang magsimula at ang mga kasangkapan sa pagbabasa, pagsusulat, pakikinig, at pagsasalita ng Pangea ay ginagawang madali!", - "getStartedCommunitiesDesc": "Ang pag-aaral kasama ang isang komunidad ay kung saan namumukod-tangi ang Pangea Chat!\nMaaari kang sumali sa iyong klase, maghanap ng kurso, o kahit gumawa ng sarili mong kurso!", - "getStartedFriendsDesc": "May kaibigan ka bang nais matuto kasama ka?", - "getStartedBotChatComplete": "Magaling! Nakikipag-chat ka na sa bot!", - "getStartedCommunitiesComplete": "Magaling, nakasali ka na sa isang kurso!", - "getStartedComplete": "Natapos mo na ang seksyong ito!\nPatuloy na tuklasin ang aming kamangha-manghang mga tampok sa pamamagitan ng pakikipag-chat sa mga kaibigan!", - "getStartedFriendsComplete": "Woohoo! May mga kaibigan ka na! 😉", - "getStartedBotChatButton": "Simulan ang pakikipag-chat!", - "getStartedFriendsButton": "Makipag-chat sa isang kaibigan", "groupChat": "Pangkat na Chat", "directMessage": "Direktang Mensahe", "newDirectMessage": "Bagong direktang mensahe", @@ -3066,7 +2619,6 @@ "mySavedActivities": "Aking Naitabing Gawain", "noSavedActivities": "Walang naitabing gawain", "saveActivity": "I-save ang gawain na ito", - "yourSavedActivities": "Mga Naitabing Gawain", "failedToPlayVideo": "Nabigong i-play ang video", "done": "Tapos na", "inThisSpace": "Sa kurso na ito", @@ -3105,37 +2657,27 @@ "maximumActivityParticipants": "Bawat Gawain ay maaaring magkaroon ng maximum na {count} na kalahok.", "pending": "Naghihintay", "inactive": "Hindi Aktibo", - "unjoinedActivityMessage": "Nais mo bang makilahok? Pumili ng bukas na papel!\nO mag-hang out at panoorin ang palabas!", - "fullActivityMessage": "Malaya kang manood ng palabas! Habang walang bukas na papel para makilahok, maaari mong tingnan ang chat!", "confirmRole": "Kumpirmahin ang papel", "openRoleLabel": "BUKAS", "joinedTheActivity": "👋 {username} ay sumali bilang {role}", "finishedTheActivity": "🎯 {username} ay nagtapos sa gawaing ito", - "endActivityTitle": "Tapos na ako", - "endActivityDesc": "Natapos mo ba ang mga layunin?\nIto ang iyong kumpirmasyon na ikaw ay bumaba mula sa pakikipag-chat. Ngunit huwag mag-alala, magpapatuloy ang kasiyahan sa chat! Malaya kang mag-hang out at mag-enjoy sa palabas hanggang sa lahat ay mag-click ng 'Tapos na'.", "archiveToAnalytics": "Idagdag sa aking Natapos na Mga Gawain", "activitySummaryError": "Hindi magagamit ang mga buod ng gawain", "requestSummaries": "Humiling ng mga buod", - "loadingActivitySummary": "Naglo-load ng buod ng gawain...", "generatingNewActivities": "Ikaw ang unang user ng pares ng wikang ito! Pakiusap, maghintay ng isang minuto, naghahanda kami ng mga gawain para sa iyo.", - "requestAccessTitle": "Hilingin ang access sa analytics?", + "requestAccessTitle": "Humiling ng access sa analytics?", "requestAccessDesc": "Nais mo bang humiling ng access upang makita ang analytics ng kalahok?\n\nKung pumayag ang mga kalahok, magagawa ng mga admin ng kursong ito na makita ang kanilang:\n • kabuuang bokabularyo\n • kabuuang mga konsepto sa gramatika\n • kabuuang mga sesyon ng gawain na natapos\n • ang mga partikular na konsepto sa gramatika na ginamit, tama at mali\n\nHindi nila magagawang makita ang kanilang:\n • mga mensahe sa mga chat sa labas ng kurso\n • listahan ng bokabularyo", "requestAccess": "Hilingin ang access ({count})", "analyticsInactiveTitle": "Hindi maipapadala ang mga kahilingan sa hindi aktibong mga gumagamit", "analyticsInactiveDesc": "Ang mga hindi aktibong gumagamit na hindi nag-login mula nang ipakilala ang tampok na ito ay hindi makakakita ng iyong kahilingan.\n\nAng pindutan ng Hiling ay lalabas kapag sila ay bumalik. Maaari mong muling ipadala ang kahilingan sa pamamagitan ng pag-click sa pindutan ng Hiling sa ilalim ng kanilang pangalan kapag available na ito.", "accessRequestedTitle": "Hiling sa Access sa Analytics", - "accessRequestedDesc": "Hinihiling ng mga administrador ng “{space}” na makita ang iyong analytics sa pag-aaral.\n\nKung sang-ayon ka, magagawa ng mga admin ng kursong ito na makita ang iyong:\n • kabuuang bokabularyo\n • kabuuang mga konsepto sa gramatika\n • kabuuang mga sesyon ng aktibidad na natapos\n • ang mga partikular na konsepto sa gramatika na ginamit, tama at mali\n\nHindi nila makikita ang iyong:\n • mga mensahe sa mga chat sa labas ng kurso\n • listahan ng bokabularyo", - "allowAccess": "Pahintulutan ang Access", - "denyAccess": "Tanggihan ang Access", + "accessRequestedDesc": "Humihiling na admin(s): {admin} \n\nAng mga admin mula sa “{space}” ay humihiling na makita ang iyong learning analytics.\n\nKung ikaw ay sumasang-ayon, makikita nila ang iyong:\n • kabuuang bokabularyo\n • kabuuang konsepto ng gramatika\n • kabuuang bilang ng mga session ng aktibidad na natapos\n • ang mga tiyak na konsepto ng gramatika na ginamit, tama at mali\n\nHindi nila makikita ang iyong:\n • mga mensahe sa mga chat sa labas ng kurso\n • listahan ng bokabularyo", "adminRequestedAccess": "Hiningi ng mga admin na makita ang iyong analytics.", "lastUpdated": "Na-update\n{time}", "activityFinishedMessage": "Lahat ay Natapos na!", "endForAll": "Tapos na para sa lahat", "newCourse": "Bagong kurso", - "newCourseSubtitle": "Aling plano ng kurso ang nais mong gamitin?", - "failedToLoadCourses": "Nabigo sa pag-load ng mga kurso", "numModules": "{num} mga module", - "numActivityPlans": "{num} mga plano ng aktibidad", "coursePlan": "Plano ng Kurso", "editCourseLater": "Maaari mong i-edit ang pamagat ng template, mga paglalarawan, at larawan ng kurso sa ibang pagkakataon.", "newCourseAccess": "Sa default, ang mga kurso ay pribado at nangangailangan ng pag-apruba ng admin upang makasali. Maaari mong i-edit ang mga setting na ito anumang oras.", @@ -3149,44 +2691,28 @@ "accessDesc": "Maaari mong gawing bukas ang iyong kurso sa buong mundo! O, gawing pribado at ligtas ang iyong kurso.", "createGroupChatDesc": "Kung saan nagsisimula at nagtatapos ang mga sesyon ng aktibidad, mananatiling bukas ang mga pangkat na usapan para sa pang-araw-araw na komunikasyon.", "deleteDesc": "Tanging mga admin lamang ang maaaring magtanggal ng kurso. Ito ay isang mapanirang aksyon na nag-aalis ng lahat ng mga user at nagtatanggal ng lahat ng napiling usapan sa loob ng kurso. Mag-ingat sa pagproseso.", - "failedToLoadCourseInfo": "Nabigo sa pag-load ng impormasyon ng kurso", "noCourseFound": "Naku, kailangan ng planong ito ng kurso!\n\nAng mga plano ng kurso ay isang sunod-sunod na mga paksa at aktibidad ng pag-uusap.", "additionalParticipants": "+ {num} iba pa", - "activityNotFoundForCourse": "Hindi nahanap ang aktibidad na ito sa loob ng kurso", - "courseChats": "Mga Usapan sa Kurso", - "myActivitySessions": "Aking Mga Sesyon ng Aktibidad", "directMessages": "Mga Direktang Mensahe", "whatNow": "Ano na ngayon?", "chooseNextActivity": "Piliin ang iyong susunod na aktibidad!", - "seeInstructions": "Tingnan ang mga Tagubilin", - "hideInstructions": "Itago ang mga Tagubilin", "letsGo": "Tara na", "chooseRole": "Pumili ng papel!", "chooseRoleToParticipate": "Pumili ng papel upang makilahok!", "waitingToFillRole": "Naghihintay na punan ang {num} na papel...", "pingParticipants": "I-ping ang mga kalahok sa kurso", "playWithBot": "Maglaro kasama ang Pangea Bot", - "inviteFriendsToActivity": "Anyayahan ang mga kaibigan sa aktibidad", - "inviteFriendsToActivityCourse": "Anyayahan ang mga kaibigan sa aktibidad at kurso", "waitNotDone": "Hintay, hindi pa tapos!", "waitingForOthersToFinish": "Naghihintay na matapos ang iba...", - "saveToCompletedActivities": "I-save sa mga natapos nang aktibidad", "generatingSummary": "Sinusuri ang chat at bumubuo ng mga resulta", - "instructionsLanguage": "Wika ng mga tagubilin", "findCourse": "Maghanap ng kurso", - "activityCompletedDesc": "Ang iyong natapos na aktibidad ay idinagdag sa analytics kung saan maaari mong suriin at pagpraktisan ang wikang ginamit mo.", "pingParticipantsNotification": "{user} ay naghahanap ng mga user na sumali sa sesyon ng aktibidad sa {room}", "course": "Kurso", "courses": "Mga kurso", "courseName": "Pangalan ng kurso", "createNewCourse": "Bagong kurso", - "publicCourses": "Mga pampublikong kurso", "goToCourse": "Pumunta sa kurso: {course}", "activityComplete": "Tapos na ang aktibidad na ito. Dapat ay makikita ang buod ng aktibidad sa ibaba.", - "haventChattedMuch": "Mukhang hindi ka pa masyadong nakipag-chat, subukan mong gumamit pa ng mas maraming salita! Kung sa tingin mo ay natapos mo na ang iyong layunin, maaari mong tapusin ang aktibidad sa ibaba.", - "haveChatted": "Mukhang matagal ka nang nakikipag-chat! Kung sa tingin mo ay natapos mo na ang iyong layunin, tapusin na ang aktibidad at gagawa kami ng buod sa chat!", - "userDoneAndWaiting": "{num1}/{num2} na kalahok ay tapos na. Maghintay hanggang sa makumpleto ng lahat, at gagawa kami ng buod sa chat! \n\nKung nais mong muling sumali sa usapan, i-click ang continue button sa chat.", - "othersDoneAndWaiting": "{num1}/{num2} ay tapos na. Natapos mo na ba ang iyong layunin?", "startNewSession": "Simulan ang bagong sesyon", "joinOpenSession": "Sumali sa bukas na sesyon", "less": "mas kaunti", @@ -3196,7 +2722,6 @@ "openToJoin": "Bukas para sumali", "results": "Mga resulta", "activityDone": "Tapos na ang aktibidad!", - "moreLabel": "marami pa", "promoCodeInfo": "Maaaring ilagay ang mga promo code sa susunod na pahina", "editsComingSoon": "Malapit nang dumating ang kakayahang mag-edit ng mga lungsod at aktibidad.", "editing": "Nag-eedit", @@ -3212,13 +2737,10 @@ "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", - "chooseLanguage": "Pumili ng isang wika.", + "chooseLanguage": "Pumili ng target na wika.", "planTrip": "Planuhin ang iyong biyahe", "howAreYouTraveling": "Kamusta ang iyong paglalakbay?", "unlockPrivateTrip": "I-unlock ang pribadong biyahe", @@ -3231,25 +2753,20 @@ "courseCode": "Ano ang lihim na password?", "courseCodeHint": "Kodigo ng biyahe o link", "unlockMyTrip": "I-unlock ang aking biyahe", - "anyLevel": "Anumang Antas", "signupOption": "Paano ka nais magparehistro?", "withApple": "Gamit ang Apple", "withGoogle": "Gamit ang Google", "withEmail": "Gamit ang Email", "createAccount": "Lumikha ng account", - "noCoursesFound": "Walang nahanap na mga kurso", "loginWithEmail": "Mag-login gamit ang email", "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", - "allCefrLevels": "Lahat ng antas ng CEFR", "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.", "directMessageBotTitle": "Direktang mensahe Pangea Bot", "feedbackTitle": "Feedback sa Aktibidad", - "feedbackDesc": "Paano mapapabuti ang aktibidad? Kung makakapagbigay ka ng ilang detalye, gagawin namin ang pagbabago!", "feedbackRespDesc": "Balikan bukas para sa mga update sa aktibidad.", "feedbackHint": "Ang iyong feedback", "feedbackButton": "Isumite ang feedback", @@ -3258,12 +2775,10 @@ "playWithAI": "Maglaro muna kasama ang AI", "courseStartDesc": "Handa na ang Pangea Bot anumang oras!\n\n...pero mas maganda ang pag-aaral kasama ang mga kaibigan!", "activityDropdownDesc": "Kapag tapos ka na sa aktibidad na ito, i-click sa ibaba", - "activityAnalyticsListBody": "Ito ang iyong mga natapos na aktibidad! Pagkatapos makumpleto ang mga aktibidad, makikita mo ang mga ito dito.", "languageMismatchTitle": "Hindi tugma ang wika", "languageMismatchDesc": "Ang iyong target na wika ay hindi tumutugma sa wika ng aktibidad na ito. Nais mong i-update ang iyong target na wika?", "reportWordIssueTooltip": "Iulat ang isyu sa impormasyon ng salita", "tokenInfoFeedbackDialogTitle": "Feedback sa Impormasyon ng Salita", - "tokenInfoFeedbackDialogDesc": "Nagkakamali ang AI. Mangyaring ilarawan ang anumang isyu na iyong natuklasan sa impormasyon sa itaas.", "noPublicCoursesFound": "Walang nahanap na pampublikong kurso. Nais mo bang lumikha ng isa?", "noCourseTemplatesFound": "Hindi namin mahanap ang anumang kurso para sa iyong target na wika. Maaari kang makipag-chat sa Pangea Bot habang naghihintay, at bumalik mamaya para sa mas maraming kurso.", "botActivityJoinFailMessage": "Matagal nang tumutugon ang Pangea Bot. Subukan muli mamaya, o anyayahan ang isang kaibigan.", @@ -3272,7 +2787,7 @@ "selectAll": "Piliin lahat", "deselectAll": "Huwag piliin lahat", "@@locale": "fil", - "@@last_modified": "2026-01-06 13:02:03.027217", + "@@last_modified": "2026-01-07 14:26:57.612933", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -5994,30 +5509,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6041,18 +5532,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6077,18 +5556,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6125,38 +5592,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6165,62 +5604,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6257,10 +5652,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6269,14 +5660,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6285,46 +5668,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6333,10 +5680,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6393,18 +5736,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6413,14 +5744,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6449,18 +5772,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6469,42 +5780,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6513,14 +5792,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6541,26 +5812,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6581,10 +5832,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6617,25 +5864,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6692,34 +5920,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6748,778 +5948,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8512,14 +6944,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8531,14 +6955,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8570,10 +6986,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8582,18 +6994,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8602,14 +7002,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8634,38 +7026,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8711,10 +7075,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8739,10 +7099,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8767,10 +7123,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8779,66 +7131,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8859,42 +7155,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8919,154 +7191,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9083,18 +7207,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9115,14 +7227,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9139,10 +7243,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9155,14 +7255,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9171,14 +7263,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9206,26 +7290,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9254,18 +7318,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9302,10 +7358,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10238,10 +8290,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10422,34 +8470,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10462,10 +8482,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10474,14 +8490,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10498,22 +8506,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10661,14 +8653,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10677,34 +8661,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10713,54 +8669,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10769,10 +8689,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10789,10 +8705,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10964,26 +8876,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11012,10 +8904,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11072,30 +8960,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11124,18 +8996,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11252,14 +9116,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11272,10 +9128,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11284,14 +9136,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11308,14 +9152,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11324,22 +9160,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11352,18 +9172,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11380,22 +9188,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11404,30 +9200,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11500,18 +9272,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11568,18 +9328,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11608,30 +9356,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11684,18 +9416,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11744,46 +9468,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11848,10 +9532,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12023,14 +9703,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12058,14 +9730,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12078,10 +9742,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12117,19 +9777,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12154,14 +9809,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12170,14 +9817,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12230,10 +9869,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12246,18 +9881,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12270,14 +9893,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12306,14 +9921,6 @@ "type": "String", "placeholders": {} }, - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@waitNotDone": { "type": "String", "placeholders": {} @@ -12322,26 +9929,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12369,10 +9964,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12383,36 +9974,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12449,10 +10010,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12517,18 +10074,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12593,10 +10138,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12617,10 +10158,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12637,10 +10174,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12649,10 +10182,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12665,10 +10194,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12701,10 +10226,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12721,10 +10242,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12758,7 +10275,6 @@ "newMessageInPangeaChat": "🗨️ Bagong mensahe sa Pangea Chat", "shareCourse": "Ibahagi ang kurso", "addCourse": "Magdagdag ng kurso", - "joinCourseWithCode": "Sumali sa kurso gamit ang code", "joinPublicCourse": "Sumali sa pampublikong kurso", "vocabLevelsDesc": "Dito mapupunta ang mga salita sa bokabularyo kapag na-level up mo na sila!", "highlightVocabTooltip": "I-highlight ang mga target na salita sa bokabularyo sa ibaba sa pamamagitan ng pagpapadala sa kanila o pagsasanay gamit ang mga ito sa chat", @@ -12782,10 +10298,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12794,7 +10306,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Walang DMs o chat na natagpuan. Siguraduhing tama ang pagkakasulat ng iyong paghahanap.", + "activityAnalyticsTooltipBody": "Ito ang iyong mga nai-save na aktibidad para sa pagsusuri at pagsasanay.", + "numSavedActivities": "Bilang ng mga nai-save na aktibidad", + "saveActivityTitle": "I-save ang aktibidad", + "saveActivityDesc": "Magandang trabaho! I-save ang aktibidad na ito para sa susunod na pagsusuri at pagsasanay", + "levelInfoTooltip": "Dito mo makikita ang lahat ng puntos na iyong nakuha at kung paano!", + "alreadyInCourseWithID": "Nasa isang kurso ka na gamit ang planong ito. Gusto mo bang lumikha ng isang kurso gamit ang parehong plano, o pumunta sa umiiral na kurso?", + "goToExistingCourse": "Pumunta sa umiiral na kurso", + "emojiView": "Tingin ng emoji", + "feedbackDialogDesc": "Nagkakamali din ako! Mayroon bang anumang makakatulong sa akin na mag-improve?", + "contactHasBeenInvitedToTheCourse": "Ang contact ay naimbitahan sa kurso", + "activityStatsButtonTooltip": "Impormasyon ng aktibidad", + "allow": "Pahintulutan", + "deny": "Tanggihan", + "enabledRenewal": "Paganahin ang Pag-renew ng Subscription", + "subscriptionEndsOn": "Nagtatapos ang Subscription Sa", + "subscriptionRenewsOn": "Nag-renew ang Subscription Sa", + "waitForSubscriptionChanges": "Ang mga pagbabago sa iyong subscription ay maaaring magtagal ng kaunti upang magpakita sa app.", + "subscribeReadingAssistance": "Mag-subscribe upang i-unlock ang mga tool sa mensahe", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Arabic", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijani", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinese", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Belarusian", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgarian", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnian", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Sentral na Kurdo", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsican", + "crhDisplayName": "Crimean Turkish", + "crsDisplayName": "Seselwa Creole French", + "csDisplayName": "Czech", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Welsh", + "daDisplayName": "Danish", + "deDisplayName": "Aleman", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Ingles", + "enAUDisplayName": "Ingles (Australia)", + "enGBDisplayName": "Ingles (UK)", + "enINDisplayName": "Ingles (India)", + "enUSDisplayName": "Ingles (US)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espanyol", + "esESDisplayName": "Espanyol (Espanya)", + "esMXDisplayName": "Espanyol (Mexico)", + "euDisplayName": "Basque", + "faDisplayName": "Persiano", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnish", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroese", + "frDisplayName": "Pranses", + "frCADisplayName": "Pranses (Canada)", + "frFRDisplayName": "Pranses (France)", + "fyDisplayName": "Kanlurang Frisian", + "gaDisplayName": "Irish", + "gaaDisplayName": "Ga", + "gdDisplayName": "Scottish Gaelic", + "glDisplayName": "Galician", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiian", + "heDisplayName": "Hebreo", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatian", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Kreol ng Haitian", + "huDisplayName": "Hungarian", + "hyDisplayName": "Armenian", + "idDisplayName": "Indonesian", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islándiko", + "itDisplayName": "Italyano", + "jaDisplayName": "Hapones", + "jvDisplayName": "Javanese", + "kaDisplayName": "Georgiano", + "kkDisplayName": "Kazakh", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreano", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Demokratikong Republika ng Congo)", + "kuDisplayName": "Kurdish", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgish", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgish", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lithuanian", + "ltgDisplayName": "Latgalian", + "luoDisplayName": "Luo (Kenya at Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvian", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolian", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabic)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norwegian (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Dutch", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Norwegian", + "nrDisplayName": "Timog Ndebele", + "nsoDisplayName": "Hilagang Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polish", + "psDisplayName": "Pashto", + "ptDisplayName": "Portuguese", + "ptBRDisplayName": "Portuguese (Brazil)", + "ptPTDisplayName": "Portuguese (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romanian", + "roMDDisplayName": "Moldovan", + "romDisplayName": "Romany", + "ruDisplayName": "Ruso", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilian", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovak", + "slDisplayName": "Slovenian", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanian", + "srDisplayName": "Serbian", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Southern Sotho", + "suDisplayName": "Sundanese", + "svDisplayName": "Swedish", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajik", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turkish", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uyghur", + "ukDisplayName": "Ukrainian", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamese", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kanton", + "yueCNDisplayName": "Kanton (Tsina)", + "yueHKDisplayName": "Kanton (Hong Kong)", + "zhDisplayName": "Tsino", + "zhCNDisplayName": "Tsino (Pinadali)", + "zhTWDisplayName": "Tsino (Tradisyonal)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12861,6 +11559,7 @@ "notStartedActivitiesTitle": "Bukas na sesyon ({num})", "inProgressActivitiesTitle": "Nangyayari ngayon ({num})", "completedActivitiesTitle": "Tapos na ({num})", + "pickDifferentActivity": "Pumili ng ibang aktibidad", "inOngoingActivity": "Mayroon kang patuloy na aktibidad!", "@notStartedActivitiesTitle": { "type": "String", @@ -12886,10 +11585,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ang iyong target na wika ay hindi tumutugma sa mensaheng ito. I-update ang iyong target na wika?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ito ang lahat ng tao sa kursong ito. I-click ang avatar ng sinumang user at \"magsimula ng pag-uusap\" upang magpadala ng DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ang salitang bokabularyo na ito ay permanenteng aalisin mula sa iyong analytics", + "woman": "Babae", + "man": "Lalaki", + "otherGender": "Iba", + "unselectedGender": "Pumili ng opsyon sa kasarian", + "gender": "Kasarian", + "chatParticipantTooltip": "Ito ang lahat ng tao sa chat na ito. I-click ang avatar ng sinumang user at \"simulan ang pag-uusap\" upang magpadala ng DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Ang mga kasangkapan sa pag-aaral ay hindi pinagana para sa mga mensahe na hindi nasa iyong target na wika.", + "vocabEmoji": "Emoji ng bokabularyo", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Humiling ng muling pagbuo", + "optionalRegenerateReason": "(Opsyonal) Dahilan", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Naitakda mo na ang emoji para sa {lemma}! Gagamitin namin ang emoji na ito upang kumatawan sa salita sa mga aktibidad sa pagsasanay mula ngayon.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Naghihintay na makumpleto ang pag-sign in", + "ssoDialogDesc": "Nagbukas kami ng bagong tab upang makapag-sign in ka nang ligtas.", + "ssoDialogHelpText": "🤔 Kung hindi mo nakita ang bagong tab, mangyaring suriin ang iyong popup blocker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "I-disable ang mga kasangkapan sa wika", + "disableLanguageToolsDesc": "Gusto mo bang i-disable ang awtomatikong tulong sa wika?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Tanggihan ang pahintulot. I-enable ang mga pahintulot sa pag-record upang makapag-record ng mga mensaheng audio.", + "genericWebRecordingError": "May nangyaring mali. Inirerekomenda naming gumamit ng Chrome browser kapag nagre-record ng mga mensahe.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Para sa pinakamahusay na karanasan sa paggamit ng application na ito, mangyaring palawakin ang laki ng iyong screen.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Mga Aktibidad upang I-unlock ang Susunod na Paksa", "activitiesToUnlockTopicDesc": "Itakda ang bilang ng mga aktibidad upang i-unlock ang susunod na paksa ng kurso", "@activitiesToUnlockTopicTitle": { @@ -12899,5 +11716,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Tamang pagsasanay sa kahulugan ng bokabularyo", + "constructUseIncLMDesc": "Maling pagsasanay sa kahulugan ng bokabularyo", + "constructUseCorLADesc": "Tamang pagsasanay sa audio ng bokabularyo", + "constructUseIncLADesc": "Maling pagsasanay sa audio ng bokabularyo", + "constructUseBonus": "Bonus sa panahon ng pagsasanay sa bokabularyo", + "practiceVocab": "Magsanay ng bokabularyo", + "selectMeaning": "Pumili ng kahulugan", + "selectAudio": "Pumili ng katugmang audio", + "congratulations": "Binabati kita!", + "anotherRound": "Isa pang round", + "noActivityRequest": "Walang kasalukuyang kahilingan sa aktibidad.", + "quit": "Lumabas", + "congratulationsYouveCompletedPractice": "Binabati kita! Natapos mo na ang sesyon ng pagsasanay.", + "mustHave10Words": "Dapat mayroon kang hindi bababa sa 10 salita ng bokabularyo upang sanayin ang mga ito. Subukan mong makipag-usap sa isang kaibigan o sa Pangea Bot upang matuklasan pa!", + "botSettings": "Mga Setting ng Bot", + "activitySettingsOverrideWarning": "Wika at antas ng wika na tinutukoy ng plano ng aktibidad", + "voice": "Boses", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index feea75e17..39234cc32 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,6 @@ { "@@locale": "fr", - "@@last_modified": "2026-01-06 13:02:50.687446", + "@@last_modified": "2026-01-07 14:29:28.310920", "about": "À propos", "@about": { "type": "String", @@ -3208,26 +3208,14 @@ "commandHint_logoutall": "Déconnectez tous les appareils actifs", "displayNavigationRail": "Afficher le rail de navigation sur mobile", "customReaction": "Réaction personnalisée", - "accountInformation": "Informations du compte", - "addGroupDescription": "Ajouter une description de chat", - "addNewFriend": "Ajouter un nouvel ami", - "alreadyHaveAnAccount": "Vous avez déjà un compte ?", - "createNewGroup": "Créer un nouveau chat", - "editChatPermissions": "Modifier les permissions du chat", "writeAMessageLangCodes": "Tapez en {l1} ou {l2}...", "requests": "Demandes", - "allCorrect": "C'est comme ça que je le dirais ! Super !", - "newWayAllGood": "Ce n'est pas comme ça que je l'aurais dit, mais ça a l'air bien !", - "othersAreBetter": "Hm, il pourrait y avoir une meilleure façon de dire cela.", "holdForInfo": "Cliquez et maintenez pour obtenir des infos sur le mot.", "greenFeedback": "C'est ce que je mettrais !", "yellowFeedback": "Hm, vous pouvez essayer cela et voir si ça fonctionne ! Pour utiliser ce mot, cliquez simplement à nouveau dessus.", "redFeedback": "Je ne pense pas que ce soit correct...", "itInstructionsTitle": "Je peux vous aider à traduire !", "itInstructionsBody": "Vous pouvez cliquer et maintenir pour obtenir des infos sur le mot.", - "oneday": "Dernières 24 heures", - "oneweek": "Derniers 7 jours", - "onemonth": "Mois passé", "gaTooltip": "L2 à utiliser avec l'assistance grammaticale", "taTooltip": "L2 utilisation avec assistance à la traduction", "unTooltip": "Autre", @@ -3237,58 +3225,27 @@ "interactiveTranslatorAllowed": "Choix de l'étudiant", "interactiveTranslatorRequired": "Obligatoire", "notYetSet": "Pas encore défini", - "myLearning": "Mes analyses", "waTooltip": "L2 utilisation sans assistance", - "changeDateRange": "Changer la plage de dates", - "classDescription": "Description", - "addStudents": "Inviter des utilisateurs par lien ou code", - "copyClassLink": "Copier le lien d'invitation", - "copyClassCode": "Copier le code d'invitation", - "inviteStudentByUserName": "Inviter des utilisateurs par nom d'utilisateur", "languageSettings": "Paramètres de langue", "interactiveTranslator": "Assistance à la traduction", - "shareVideo": "Partager la vidéo", - "shareVideoDesc": "Activez cette option pour permettre aux étudiants de partager des vidéos dans les chats.", - "shareFiles": "Partager des fichiers", - "selectLanguageLevel": "Sélectionnez le niveau de langue", "noIdenticalLanguages": "Veuillez choisir des langues de base et cibles différentes", - "iWantALanguagePartnerFrom": "Vient de :", - "worldWide": "Dans le monde entier", - "noResults": "Aucun résultat ! Essayez d'élargir votre recherche.", "searchBy": "Rechercher par pays et langues", - "iWantAConversationPartner": "Je veux un partenaire de conversation qui", - "iWantALanguagePartnerWhoSpeaks": "Parle :", - "iWantALanguagePartnerWhoIsLearning": "Apprend :", "joinWithClassCode": "Rejoindre le cours", - "joinWithClassCodeHint": "Entrez le code d'invitation", - "languageLevelPreA1": "Vrai Débutant (Pre A1)", - "languageLevelA1": "Débutant (A1)", - "languageLevelA2": "Élémentaire (A2)", - "languageLevelB1": "Intermédiaire (B1)", - "languageLevelB2": "Intermédiaire supérieur (B2)", - "languageLevelC1": "Avancé (C1)", - "languageLevelC2": "Maîtrise (C2)", + "languageLevelPreA1": "Novice Bas (Pré A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice élevé (A2)", + "languageLevelB1": "Intermédiaire moyen (B1)", + "languageLevelB2": "Avancé faible (B2)", + "languageLevelC1": "Avancé moyen (C1)", + "languageLevelC2": "Supérieur (C2)", "changeTheNameOfTheClass": "Changer le nom", "changeTheNameOfTheChat": "Changer le nom du chat", - "askPangeaBot": "Demandez à Pangea Bot une définition contextuelle.", "sorryNoResults": "Désolé, aucun résultat.", "ignoreInThisText": "Ignorer", - "helpMeTranslate": "Oui !", - "needsItShortMessage": "Hors cible", "needsItMessage": "Attendez, ce n'est pas {targetLanguage} ! Avez-vous besoin d'aide pour la traduction ?", - "needsIgcMessage": "Ce message comporte une erreur de grammaire.", - "tokenTranslationTitle": "Un mot est dans votre langue de base.", - "spanTranslationDesc": "Voir les traductions possibles ci-dessous.", - "spanTranslationTitle": "Certains mots sont dans votre langue de base.", - "l1SpanAndGrammarTitle": "Hors de la langue cible", - "l1SpanAndGrammarDesc": "Cela pourrait être dans votre langue de base ou cela pourrait être une erreur de grammaire.", - "otherTitle": "Vous avez une erreur.", - "otherDesc": "Voir les corrections possibles ci-dessous.", "countryInformation": "Mon pays", - "myLanguages": "Mes langues de base et cibles", "targetLanguage": "Langue cible", "sourceLanguage": "Langue de base", - "languagesISpeak": "Langues que je parle", "updateLanguage": "Mes langues", "whatLanguageYouWantToLearn": "Quelle langue souhaitez-vous apprendre ?", "whatIsYourBaseLanguage": "Quelle est votre langue de base ?", @@ -3303,13 +3260,8 @@ "errorDisableLanguageAssistanceUserDesc": "Cliquez ici pour mettre à jour les paramètres d'assistance à la traduction et à la grammaire", "errorDisableITClassDesc": "L'assistance à la traduction est désactivée pour le cours dans lequel cette discussion a lieu.", "errorDisableIGCClassDesc": "L'assistance à la grammaire est désactivée pour le cours dans lequel cette discussion a lieu.", - "itIsDisabled": "La traduction interactive est désactivée", - "igcIsDisabled": "La vérification grammaticale interactive est désactivée", - "goToLearningSettings": "Aller aux paramètres d'apprentissage", "error405Title": "Langues non définies", "error405Desc": "Veuillez définir vos langues dans le menu principal > Paramètres d'apprentissage.", - "loginOrSignup": "Se connecter avec", - "iAgreeToThe": "Je suis d'accord avec le ", "termsAndConditions": "Termes et Conditions", "andCertifyIAmAtLeast13YearsOfAge": " et je certifie que j'ai au moins 16 ans.", "error502504Title": "Wow, il y a beaucoup d'étudiants en ligne !", @@ -3317,40 +3269,21 @@ "error404Title": "Erreur de traduction !", "error404Desc": "Le bot Pangea n'est pas sûr de comment traduire cela...", "errorPleaseRefresh": "Nous étudions le problème ! Veuillez recharger et réessayer.", - "toggleIT": "Traduction interactive", - "toggleIGC": "Vérification grammaticale interactive", - "toggleToolSettingsDescription": "Ici, vous pouvez basculer les paramètres de votre outil linguistique individuel.", "connectedToStaging": "Connecté à la mise en scène", "learningSettings": "Paramètres d'apprentissage", - "sendVoiceNotes": "Envoyer des notes vocales", - "sendVoiceNotesDesc": "Activez cette option pour permettre aux étudiants d'envoyer des notes vocales dans les chats.", - "chatTopic": "Sujet du chat", - "chatTopicDesc": "Définir un sujet de chat", - "inviteStudentByUserNameDesc": "Si votre étudiant a déjà un compte, vous pouvez le rechercher.", "participants": "Participants", - "almostPerfect": "Cela semble correct ! Voici ce que j'aurais dit.", - "prettyGood": "Assez bien ! Voici ce que j'aurais dit.", - "letMeThink": "Hmm, voyons comment tu as fait !", "clickMessageTitle": "Besoin d'aide ?", "clickMessageBody": "Cliquez sur un message pour accéder à des outils linguistiques comme la traduction, la lecture à voix haute et plus encore !", - "understandingMessagesTitle": "Définitions et traductions !", - "understandingMessagesBody": "Cliquez sur les mots soulignés pour voir leurs définitions. Traduisez avec les options de message (en haut à droite).", "allDone": "Terminé !", "vocab": "Vocabulaire", "low": "Nous avons la preuve que l'utilisateur ne comprend pas ces mots.", "medium": "Ces mots ont été utilisés. Il n'est pas clair si les mots sont entièrement compris ou non.", "high": "Nous avons la preuve que l'utilisateur comprend ces mots.", - "unknownProficiency": "Ces mots n'ont pas été utilisés dans Pangea Chat.", - "changeView": "Changer de vue.", - "clearAll": "Tout effacer ?", - "generateVocabulary": "Générer le vocabulaire à partir du titre et de la description", - "generatePrompts": "Générer des invites", "subscribe": "S'abonner", "getAccess": "Abonnez-vous maintenant !", "subscriptionDesc": "La messagerie est gratuite ! Abonnez-vous pour débloquer la traduction interactive, la vérification grammaticale et les analyses d'apprentissage.", "subscriptionManagement": "Gestion de l'abonnement", "currentSubscription": "Abonnement actuel", - "changeSubscription": "Modifier votre abonnement", "cancelSubscription": "Annuler votre abonnement", "selectYourPlan": "Sélectionnez votre plan", "subsciptionPlatformTooltip": "Veuillez vous connecter à votre appareil d'origine pour gérer votre plan d'abonnement", @@ -3359,9 +3292,6 @@ "paymentHistory": "Historique des paiements", "emptyChatDownloadWarning": "Impossible de télécharger une conversation vide", "update": "Mettre à jour", - "updateDesc": "Vous pouvez maintenant mettre à jour cette application de {localVersion} à {storeVersion}", - "maybeLater": "Peut-être plus tard", - "mainMenu": "Menu principal", "toggleImmersionMode": "Mode immersion", "toggleImmersionModeDesc": "Lorsqu'il est activé, tous les messages s'affichent dans votre langue cible. Ce paramètre est le plus utile lors des échanges linguistiques.", "itToggleDescription": "Cet outil d'apprentissage des langues identifiera les mots dans votre langue de base et vous aidera à les traduire dans votre langue cible. Bien que rare, l'IA peut faire des erreurs de traduction.", @@ -3376,212 +3306,13 @@ "definitionsToolDescription": "Lorsqu'il est activé, les mots soulignés en bleu peuvent être cliqués pour obtenir leurs définitions. Cliquez sur les messages pour accéder aux définitions.", "translationsToolDescrption": "Lorsqu'il est activé, cliquez sur un message et sur l'icône de traduction pour voir un message dans votre langue de base.", "welcomeBack": "Bon retour ! Si vous faisiez partie du pilote 2023-2024, veuillez nous contacter pour votre abonnement pilote spécial. Si vous êtes un enseignant qui a (ou dont l'institution a) acheté des licences pour votre classe, contactez-nous pour votre abonnement enseignant.", - "kickAllStudents": "Expulser tous les étudiants", - "kickAllStudentsConfirmation": "Êtes-vous sûr de vouloir expulser tous les étudiants ?", - "inviteAllStudents": "Inviter tous les étudiants", - "inviteAllStudentsConfirmation": "Êtes-vous sûr de vouloir inviter tous les étudiants ?", - "inviteUsersFromPangea": "Ajouter des administrateurs", - "redeemPromoCode": "Utiliser le code promo", - "enterPromoCode": "Entrer le code promo", "downloadTxtFile": "Télécharger le fichier texte", "downloadCSVFile": "Télécharger le fichier CSV", "promotionalSubscriptionDesc": "Vous avez actuellement un abonnement promotionnel à vie. Contactez support@pangea.chat pour obtenir de l'aide pour changer votre abonnement.", "originalSubscriptionPlatform": "Abonnement acheté via {purchasePlatform}", "oneWeekTrial": "Essai d'une semaine", "downloadXLSXFile": "Télécharger le fichier Excel", - "abDisplayName": "Abkhaze", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanais", - "amDisplayName": "Amharique", - "arDisplayName": "Arabe", - "anDisplayName": "Aragonais", - "hyDisplayName": "Arménien", - "asDisplayName": "Assamais", - "avDisplayName": "Avaric", - "aeDisplayName": "Vétéro-Avéstique", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaïdjanais", - "bmDisplayName": "Bambara", - "baDisplayName": "Bachkir", - "euDisplayName": "Basque", - "beDisplayName": "Biélorusse", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnien", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgare", - "myDisplayName": "Birman", - "caDisplayName": "Catalan, valencien", - "chDisplayName": "Chamorro", - "ceDisplayName": "Tchétchène", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinois", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornique", - "coDisplayName": "Corse", - "crDisplayName": "Cree", - "hrDisplayName": "Croate", - "csDisplayName": "Tchèque", - "daDisplayName": "Danois", - "dvDisplayName": "Divehi; Dhivehi; Maldivien;", - "nlDisplayName": "Néerlandais", - "enDisplayName": "Anglais", - "eoDisplayName": "espéranto", - "etDisplayName": "estonien", - "eeDisplayName": "Ewe", - "foDisplayName": "féroïen", - "fjDisplayName": "fidjien", - "fiDisplayName": "finnois", - "frDisplayName": "français", - "ffDisplayName": "Fula ; Pulaar ; Pular", - "glDisplayName": "galicien", - "kaDisplayName": "géorgien", - "deDisplayName": "allemand", - "elDisplayName": "grec moderne", - "gnDisplayName": "guarani", - "guDisplayName": "goudjrati", - "htDisplayName": "haïtien, créole haïtien", - "haDisplayName": "haoussa", - "heDisplayName": "hébreu (moderne)", - "hzDisplayName": "herero", - "hiDisplayName": "hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hongrois", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonésien", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandais", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandais", - "itDisplayName": "Italien", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonais", - "jvDisplayName": "Javanais", - "klDisplayName": "Kalaallisut, groenlandais", - "knDisplayName": "Kannada", - "krDisplayName": "Kanouri", - "ksDisplayName": "Cachemiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kirghiz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coréen", - "kuDisplayName": "Kurdes", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxembourgeois, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limbourgeois, Limbourgain, Limbourger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laos", - "ltDisplayName": "Lituanien", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letton", - "gvDisplayName": "Manx", - "mkDisplayName": "Macédonien", - "mgDisplayName": "Malgache", - "msDisplayName": "Malais", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltais", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallais", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norvégien Bokmål", - "ndDisplayName": "Ndebele du Nord", - "neDisplayName": "Népalais", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norvégien Nynorsk", - "noDisplayName": "Norvégien", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele du Sud", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwé, Ojibwa", - "cuDisplayName": "Vieux slave d'église, slavon d'église, slavon d'église, vieux bulgare, vieux slavon", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetien, Ossète", - "paDisplayName": "Pendjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persan", - "plDisplayName": "Polonais", - "psDisplayName": "Pachto, Pushto", - "ptDisplayName": "Portugais", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Roumain, Moldave", - "ruDisplayName": "Russe", - "saDisplayName": "Sanskrit (Sanskṛta)", - "scDisplayName": "Sarde", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami du Nord", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbe", - "gdDisplayName": "Gaélique écossais, gaélique", - "snDisplayName": "Shona", - "siDisplayName": "Cinghalais, Sinhalese", - "skDisplayName": "Slovaque", - "slDisplayName": "Slovène", - "soDisplayName": "Somali", - "stDisplayName": "Sotho du Sud", - "esDisplayName": "Espagnol", - "suDisplayName": "Soundanais", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Suédois", - "taDisplayName": "Tamoul", - "teDisplayName": "Télougou", - "tgDisplayName": "Tadjik", - "thDisplayName": "Thaïlandais", - "tiDisplayName": "Tigrigna", - "boDisplayName": "Tibétain standard, tibétain, central", - "tkDisplayName": "Turkmène", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Îles Tonga)", - "trDisplayName": "Turc", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitien", - "ugDisplayName": "Ouïghour, Uighur", - "ukDisplayName": "Ukrainien", - "urDisplayName": "Ourdou", - "uzDisplayName": "Ouzbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamien", - "voDisplayName": "Volapük", - "waDisplayName": "Wallon", - "cyDisplayName": "Gallois", - "woDisplayName": "Wolof", - "fyDisplayName": "Frison occidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Inconnu", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaïen", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multiple", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hébreu", - "jwDisplayName": "Javanais", - "moDisplayName": "Moldave", - "shDisplayName": "Serbo-croate", "wwCountryDisplayName": "Monde entier", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Îles Åland", @@ -3829,41 +3560,25 @@ "yeCountryDisplayName": "Yémen", "zmCountryDisplayName": "Zambie", "zwCountryDisplayName": "Zimbabwe", - "pay": "Payer", - "allPrivateChats": "Chats privés directs", - "unknownPrivateChat": "Chat privé inconnu", + "pay": "Finaliser l'achat", "invitedToSpace": "{user} vous a invité à rejoindre un cours : {space} ! Souhaitez-vous accepter ?", - "declinedInvitation": "Invitation refusée", - "acceptedInvitation": "Invitation acceptée", "youreInvited": "📩 Vous êtes invité !", "invitedToChat": "{user} vous a invité à rejoindre un chat : {name} ! Souhaitez-vous accepter ?", "monthlySubscription": "Mensuel", "yearlySubscription": "Annuel", "defaultSubscription": "Abonnement Pangea Chat", "freeTrial": "Essai gratuit", - "grammarAnalytics": "Analyse d'erreurs", "total": "Total : ", "noDataFound": "Aucune donnée trouvée", - "promoSubscriptionExpirationDesc": "Votre abonnement actuel est promotionnel et expire le {expiration}. Contactez support@pangea.chat pour obtenir de l'aide pour changer votre abonnement.", - "emptyChatNameWarning": "Veuillez entrer un nom pour cette discussion", "blurMeansTranslateTitle": "Pourquoi le message est-il flou ?", "blurMeansTranslateBody": "Pendant le mode immersion, les messages envoyés dans votre langue de base seront floutés pendant que Pangea Bot les traduit dans votre langue cible. Le mode immersion peut être activé ou désactivé dans les paramètres individuels et du cours.", - "someErrorTitle": "Hm, quelque chose ne va pas", - "someErrorBody": "Cela pourrait être une erreur ou quelque chose dans votre langue de base.", "bestCorrectionFeedback": "C'est correct !", "distractorFeedback": "Ce n'est pas tout à fait ça.", "bestAnswerFeedback": "C'est correct !", "definitionDefaultPrompt": "Que signifie ce mot ?", "practiceDefaultPrompt": "Quelle est la meilleure réponse ?", "correctionDefaultPrompt": "Quelle est la meilleure correction ?", - "itStartDefaultPrompt": "Voulez-vous de l'aide pour traduire ?", - "lockedChatWarning": "🔒 Ce chat a été verrouillé", - "lockChat": "Verrouiller le chat", - "suggestToChat": "Suggérer ce chat", - "suggestToChatDesc": "Les chats suggérés apparaîtront dans la liste des chats", "acceptSelection": "Accepter la correction", - "acceptSelectionAnyway": "Utiliser ceci quand même", - "makingActivity": "Création d'une activité", "why": "Pourquoi ?", "definition": "Définition", "exampleSentence": "Exemple de phrase", @@ -3871,128 +3586,55 @@ "reportMessageTitle": "{reportingUserId} a signalé un message de {reportedUserId} dans le chat {roomName}", "reportMessageBody": "Message : {reportedMessage}\nRaison : {reason}", "noTeachersFound": "Aucun enseignant trouvé pour signaler", - "viewArchive": "Voir l'archive", "trialExpiration": "Votre essai gratuit expire le {expiration}", "freeTrialDesc": "Les nouveaux utilisateurs bénéficient d'un essai gratuit d'une semaine de Pangea Chat", "activateTrial": "Essai gratuit de 7 jours", "successfullySubscribed": "Vous vous êtes abonné avec succès !", "clickToManageSubscription": "Cliquez ici pour gérer votre abonnement.", - "errorGettingAudio": "Erreur lors de la récupération de l'audio. Veuillez rafraîchir et réessayer.", "signUp": "S'inscrire", "pleaseChooseAtLeastChars": "Veuillez choisir au moins {min} caractères.", "noEmailWarning": "Veuillez entrer une adresse e-mail valide. Sinon, vous ne pourrez pas réinitialiser votre mot de passe. Si vous ne souhaitez pas, appuyez à nouveau sur le bouton pour continuer.", "pleaseEnterValidEmail": "Veuillez entrer une adresse e-mail valide.", "pleaseChooseAUsername": "Veuillez choisir un nom d'utilisateur", - "chooseAUsername": "Choisissez un nom d'utilisateur", "define": "Définir", "listen": "Écouter", - "addConversationBot": "Activer le bot de conversation", - "addConversationBotDesc": "Ajouter un bot à cette conversation", - "convoBotSettingsDescription": "Modifier le sujet de la conversation et la difficulté", - "enterAConversationTopic": "Entrez un sujet de conversation", - "conversationTopic": "Sujet de conversation", - "enableModeration": "Activer la modération", - "enableModerationDesc": "Activer la modération automatique pour examiner les messages avant qu'ils ne soient envoyés", - "conversationLanguageLevel": "Quel est le niveau de langue de cette conversation ?", - "showDefinition": "Afficher la définition", - "subscriptionPopupTitle": "Cette phrase pourrait contenir une erreur de grammaire...", - "subscriptionPopupDesc": "Abonnez-vous aujourd'hui pour débloquer la traduction et la correction grammaticale !", - "seeOptions": "Voir les options", - "continuedWithoutSubscription": "Continuer sans abonnement", "trialPeriodExpired": "Votre période d'essai a expiré", - "selectToDefine": "Cliquez sur un mot pour voir sa définition !", "translations": "traductions", "messageAudio": "audio du message", "definitions": "définitions", "subscribedToUnlockTools": "Abonnez-vous pour débloquer la traduction interactive, la vérification grammaticale, la lecture audio, les activités de pratique personnalisées et les analyses d'apprentissage !", "translationTooltip": "Traduire", - "audioTooltip": "Jouer l'audio", "speechToTextTooltip": "Transcription", - "certifyAge": "Je certifie avoir plus de {age} ans", "kickBotWarning": "Expulser le bot Pangea supprimera le bot de conversation de cette discussion.", - "joinToView": "Rejoignez cette salle pour voir les détails", "refresh": "Rafraîchir", - "autoPlayTitle": "Lecture automatique des messages", - "autoPlayDesc": "Lorsqu'elle est activée, la lecture audio des messages par synthèse vocale se fera automatiquement lors de la sélection.", "messageAnalytics": "Analyse des messages", "words": "Mots", "score": "Score", "accuracy": "Précision", "points": "Points", "noPaymentInfo": "Aucune information de paiement nécessaire !", - "conversationBotModeSelectDescription": "Activité de chat", - "conversationBotModeSelectOption_discussion": "Discussion", - "conversationBotModeSelectOption_custom": "Personnalisé", - "conversationBotModeSelectOption_conversation": "Conversation", - "conversationBotModeSelectOption_textAdventure": "Aventure textuelle", - "conversationBotModeSelectOption_storyGame": "Jeu d'histoire", - "conversationBotDiscussionZone_title": "Paramètres de discussion", - "conversationBotDiscussionZone_discussionTopicLabel": "Sujet de discussion", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Définir le sujet de discussion", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Mots-clés de discussion", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Définir les mots-clés de discussion", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Liste séparée par des virgules de mots-clés pour guider la discussion", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Envoyer une invite de discussion selon un calendrier", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Heures entre les invites de discussion", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Répondre à la réaction ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Réaction pour envoyer l'invite de discussion", - "conversationBotCustomZone_title": "Paramètres personnalisés", - "conversationBotCustomZone_customSystemPromptLabel": "Invite système", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Définir une invite système personnalisée", - "conversationBotCustomZone_customSystemPromptEmptyError": "Invite système personnalisée manquante", - "botConfig": "Paramètres du bot et des activités", - "botConfigNoPermissionTitle": "Pas d'autorisation", - "botConfigNoPermissionMessage": "Contactez l'administrateur de la salle pour modifier la configuration du bot", - "addConversationBotDialogTitleInvite": "Confirmer l'invitation du bot de conversation", - "addConversationBotButtonInvite": "Inviter", - "addConversationBotDialogInviteConfirmation": "Inviter", - "addConversationBotButtonTitleRemove": "Confirmer la suppression du bot de conversation", - "addConversationBotButtonRemove": "Supprimer", - "addConversationBotDialogRemoveConfirmation": "Supprimer", - "conversationBotConfigConfirmChange": "Confirmer", - "conversationBotStatus": "Inviter le bot", - "conversationBotTextAdventureZone_title": "Aventure Textuelle", - "conversationBotTextAdventureZone_instructionLabel": "Instructions du Maître du Jeu", - "conversationBotTextAdventureZone_instructionPlaceholder": "Définir les instructions du maître du jeu", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Instructions du maître du jeu manquantes", - "studentAnalyticsNotAvailable": "Données des étudiants non disponibles actuellement", - "roomDataMissing": "Certaines données peuvent manquer dans les salles auxquelles vous n'appartenez pas.", "updatePhoneOS": "Vous devrez peut-être mettre à jour la version du système d'exploitation de votre appareil.", "wordsPerMinute": "Mots par minute", "autoIGCToolName": "Exécuter automatiquement l'assistance à l'écriture Pangea", "autoIGCToolDescription": "Exécuter automatiquement l'assistance à la grammaire et à la traduction de Pangea Chat avant d'envoyer mon message.", - "runGrammarCorrection": "Vérifier le message", - "grammarCorrectionFailed": "Problèmes à résoudre", - "grammarCorrectionComplete": "Ça a l'air bon !", "tooltipInstructionsTitle": "Vous ne savez pas ce que cela fait ?", "tooltipInstructionsMobileBody": "Appuyez longuement sur les éléments pour voir les infobulles.", "tooltipInstructionsBrowserBody": "Survolez les éléments pour voir les infobulles.", "chatCapacity": "Capacité de chat", "roomFull": "Cette salle est déjà pleine.", - "topicNotSet": "Le sujet n'a pas été défini.", - "chatCapacityNotSet": "Cette discussion n'a pas de limite de capacité.", "chatCapacityHasBeenChanged": "Capacité de la discussion modifiée", "chatCapacitySetTooLow": "La capacité de la discussion doit être d'au moins {count}.", "chatCapacityExplanation": "La capacité de la discussion limite le nombre de membres autorisés dans une discussion.", - "chatExceedsCapacity": "Cette discussion dépasse sa capacité.", "tooManyRequest": "Trop de demandes, veuillez réessayer plus tard.", "enterNumber": "Veuillez entrer une valeur numérique entière.", "buildTranslation": "Construisez votre traduction à partir des choix ci-dessus", - "nonexistentSelection": "La sélection n'existe plus.", - "changeAnalyticsLanguage": "Changer la langue d'analyse", "practice": "Pratique", "noLanguagesSet": "Aucune langue définie", - "noActivitiesFound": "C'est suffisant pour le moment ! Revenez plus tard pour plus.", - "hintTitle": "Astuce :", "speechToTextBody": "Pour les messages vocaux, vous pouvez voir une transcription ainsi que le score de Mots Par Minute de l'orateur.", "versionNotFound": "Version non trouvée", "fetchingVersion": "Récupération de la version...", "versionFetchError": "Erreur lors de la récupération de la version", "versionText": "Version : {version}+{buildNumber}", - "languageButtonLabel": "Langue : {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Lecture automatique de la traduction", - "interactiveTranslatorAutoPlayDesc": "Lance le traducteur interactif sans demander.", - "changeAnalyticsView": "Changer la vue analytique", "l1TranslationBody": "Les messages dans votre langue de base ne seront pas traduits.", "deleteSubscriptionWarningTitle": "Vous avez un abonnement actif", "deleteSubscriptionWarningBody": "La suppression de votre compte n'annulera pas automatiquement votre abonnement.", @@ -4000,9 +3642,7 @@ "error520Title": "Veuillez réessayer.", "error520Desc": "Désolé, nous n'avons pas compris votre message...", "wordsUsed": "Mots utilisés", - "errorTypes": "Types d'erreurs", "level": "Niveau", - "canceledSend": "Envoi annulé", "morphsUsed": "Morphes utilisés", "translationChoicesBody": "Cliquez et maintenez une option pour un indice.", "grammar": "Grammaire", @@ -4012,7 +3652,6 @@ "reportContentIssueTitle": "Signaler un problème de contenu", "feedback": "Retour d'information facultatif", "reportContentIssueDescription": "Oh là là ! L'IA peut faciliter des expériences d'apprentissage personnalisées mais... hallucine aussi. Veuillez fournir vos commentaires et nous réessaierons.", - "changeContent": "Oh là là ! L'IA peut faciliter des expériences d'apprentissage personnalisées mais... hallucine aussi. Que devrait-elle être ?", "clickTheWordAgainToDeselect": "Cliquez sur le mot sélectionné pour le désélectionner.", "l2SupportNa": "Non disponible", "l2SupportAlpha": "Alpha", @@ -4246,7 +3885,6 @@ "grammarCopySPC": "Spécificité", "grammarCopyPARTTYPE": "Type Partitif", "grammarCopyINTREL": "Interrogatif-Relatif", - "grammarCopyNUMFORMpsor": "Numéro du Possesseur", "grammarCopyUNKNOWN": "Inconnu", "grammarCopyNUMBERPSOR": "Numéro du Possesseur", "grammarCopyPOSS": "Possessif", @@ -4292,28 +3930,14 @@ "grammarCopyVOICEdir": "Direct", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Réciproque", - "enterPrompt": "Veuillez entrer une invite système", - "selectBotLanguage": "Sélectionnez la langue du bot", - "chooseVoice": "Choisissez une voix", - "enterLanguageLevel": "Veuillez entrer un niveau de langue", - "enterDiscussionTopic": "Veuillez entrer un sujet de discussion", - "selectBotChatMode": "Sélectionnez le mode de chat", - "messageNotInTargetLang": "Message non dans la langue cible", "other": "Autre", "levelShort": "NIV {level}", - "botModeValidation": "Veuillez sélectionner un mode de chat", "clickBestOption": "Choisissez les meilleures options pour traduire votre message !", "completeActivitiesToUnlock": "Terminez au moins une activité pour déverrouiller la traduction !", - "botSettingsSubtitle": "Invitez le bot à modérer l'activité de chat", - "invitePeople": "Inviter des utilisateurs", "noCapacityLimit": "Aucune limite de capacité", "downloadGroupText": "Télécharger le texte du groupe", "notificationsOn": "Notifications activées", "notificationsOff": "Notifications désactivées", - "chatCanBeFoundViaSearch": "Le chat peut être trouvé via la recherche", - "requireCodeToJoin": "Code requis pour rejoindre", - "canFindInSearch": "Peut être trouvé dans la recherche", - "addChatToSpace": "Ajouter un chat", "createChatAndInviteUsers": "Créer un chat et inviter des utilisateurs", "updatedNewSpaceDescription": "Les cours vous permettent de consolider vos discussions et de créer des communautés privées ou publiques.", "joinWithCode": "Rejoindre avec un code", @@ -4349,39 +3973,19 @@ "constructUseCollected": "Collecté dans le chat", "constructUseNanDesc": "Non applicable", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Se connecter avec nom d'utilisateur et mot de passe", - "registrationEmailMessage": "Veuillez vérifier votre e-mail avec un lien envoyé là-bas. Dans certains cas, l'e-mail met jusqu'à 5 minutes pour arriver. Veuillez également vérifier votre dossier spam.", "enableTTSToolName": "Activation de la synthèse vocale", "enableTTSToolDescription": "Permet à l'application de générer une sortie de synthèse vocale pour des parties du texte dans votre langue cible.", - "couldNotFindTTS": "Nous n'avons pas pu trouver de moteur de synthèse vocale pour votre langue cible actuelle.", - "ttsInstructionsHyperlink": "Cliquez ici pour voir les instructions pour télécharger une nouvelle voix sur votre appareil.", - "createAnAccount": "Créer un compte", - "signIn": "Se connecter", - "signUpWithEmail": "S'inscrire avec Email", - "signUpWithGoogle": "S'inscrire avec Google", - "signUpWithApple": "S'inscrire avec Apple", "yourUsername": "Votre nom d'utilisateur", "yourEmail": "Votre e-mail", - "pleaseEnterAnEmail": "Veuillez saisir une adresse e-mail", - "signInWithGoogle": "Se connecter avec Google", - "signInWithApple": "Se connecter avec Apple", - "chooseYourAvatar": "Choisissez votre avatar", "iWantToLearn": "Je veux apprendre", - "letsStart": "Commençons", - "pleaseAgreeToTOS": "Veuillez accepter les Termes et Conditions", "pleaseEnterEmail": "Veuillez saisir une adresse e-mail valide.", - "pleaseSelectALanguage": "Veuillez sélectionner une langue", "myBaseLanguage": "Ma langue de base", - "clickWordsInstructions": "🕵️ Cliquez sur un mot pour plus de détails. 🧐", - "chooseBestDefinition": "Que signifie ce mot ?", "meaningSectionHeader": "Signification :", "formSectionHeader": "Formes utilisées dans les discussions :", - "noEmojiSelectedTooltip": "Aucun emoji sélectionné", "writingExercisesTooltip": "Écriture", "listeningExercisesTooltip": "Écoute", "readingExercisesTooltip": "Lecture", "meaningNotFound": "Signification introuvable.", - "formsNotFound": "Formes introuvables.", "chooseBaseForm": "Choisissez la forme de base", "notTheCodeError": "Désolé, ce n'est pas le code !", "totalXP": "XP total", @@ -4421,9 +4025,6 @@ "pickAnEmoji": "Quel est votre emoji préféré pour '{lemma}' ?", "chooseLemmaMeaningInstructionsBody": "Associez les significations avec les mots du message !", "doubleClickToEdit": "Double-cliquez pour modifier.", - "removeFeature": "Supprimer {feature}", - "chooseCorrectLabel": "Choisissez l'étiquette correcte.", - "levelPopupTitle": "Félicitations pour avoir atteint\nle niveau {level}", "activityPlannerTitle": "Planificateur d'activités", "topicLabel": "Sujet", "topicPlaceholder": "Choisissez un sujet...", @@ -4431,7 +4032,6 @@ "modePlaceholder": "Choisissez un mode...", "learningObjectiveLabel": "Objectif d'apprentissage", "learningObjectivePlaceholder": "Choisissez un objectif d'apprentissage...", - "mediaLabel": "Médias que les apprenants doivent partager", "languageOfInstructionsLabel": "Langue des instructions de l'activité", "targetLanguageLabel": "Langue cible", "cefrLevelLabel": "Niveau CEFR", @@ -4446,20 +4046,15 @@ "instructions": "Instructions", "numberOfLearners": "Nombre d'apprenants", "mustBeInteger": "Doit être un entier, par exemple 1, 2, 3, ...", - "noLemmasFound": "Il n'y a pas de vocabulaire avec plus de {xp} XP. Continuez à pratiquer !", "constructUsePvmDesc": "Produite en message vocal", - "lockedMorphFeature": "En attente d'être déverrouillé", "leaveSpaceDescription": "En quittant le cours, vous quitterez toutes les discussions qui s'y trouvent. Les autres utilisateurs verront que vous avez quitté le cours.", - "whatIsLemma": "Qu'est-ce que la lemme ?", "constructUseCorMmDesc": "Signification du message correct", "constructUseIncMmDesc": "Signification du message incorrect", "constructUseIgnMmDesc": "Signification du message ignoré", "clickForMeaningActivity": "Cliquez ici pour un défi de signification", "meaning": "Signification", "chatWith": "Groupe avec {displayname}", - "slightlyOffensive": "Légèrement offensant", "clickOnEmailLink": "Veuillez cliquer sur le lien dans l'email puis continuer.\n\nVérifiez votre dossier spam si l'email n'est pas arrivé.", - "whoIsAllowedToJoinThisChat": "Qui peut rejoindre cette discussion", "dontForgetPassword": "N'oubliez pas votre mot de passe !", "enableAutocorrectToolName": "Activer la correction automatique de l'appareil", "enableAutocorrectDescription": "Si votre appareil supporte la langue que vous apprenez, vous pouvez activer la correction automatique pour corriger les erreurs courantes en tapant.", @@ -4487,48 +4082,26 @@ "autocorrectNotAvailable": "Malheureusement, votre plateforme n'est pas actuellement prise en charge pour cette fonctionnalité. Restez à l'écoute pour de futures améliorations !", "pleaseUpdateApp": "Veuillez mettre à jour l'application pour continuer.", "chooseEmojiInstructionsBody": "Associez les emojis aux mots qu'ils représentent le mieux. Ne vous inquiétez pas ! Pas de pénalité si vous n'êtes pas d'accord. 😅", - "pickAnEmojiFor": "Choisissez un emoji pour {lemma}", "analyticsVocabListBody": "Voici tout votre vocabulaire ! À mesure que vous gagnez des XP pour chaque mot, ils passeront de la graine à la pleine floraison. Cliquez sur n'importe quel mot pour voir plus de détails.", "morphAnalyticsListBody": "Voici tous les concepts grammaticaux de la langue que vous apprenez ! Vous les débloquerez au fur et à mesure de vos rencontres lors de vos conversations. Cliquez pour plus de détails.", "knockSpaceSuccess": "Vous avez demandé à rejoindre ce cours ! Un administrateur répondra à votre demande lorsqu'il la recevra 😊", - "joinByCode": "Rejoindre par code", "chooseWordAudioInstructionsBody": "Écoutez le message complet. Ensuite, associez les audios aux mots.", "chooseMorphsInstructionsBody": "Cliquez sur les pièces du puzzle pour les questions de grammaire !", - "inviteAndLaunch": "Lancer et inviter", - "createOwnChat": "Créer votre propre chat", "pleaseEnterInt": "Veuillez entrer un nombre", "home": "Accueil", "join": "Rejoindre", "readingAssistanceOverviewBody": "Cliquez sur les boutons ci-dessous pour des mini-jeux sur la correspondance des emojis, des audios, des significations de mots et des concepts grammaticaux. Ou cliquez sur un mot pour plus de détails.", - "learnByTexting": "Apprendre par texto", - "levelSummaryTrigger": "Voir le résumé", "levelSummaryPopupTitle": "Résumé du niveau {level}", - "referFriends": "Recommander des amis", - "referFriendDialogTitle": "Invitez un ami à votre conversation", - "referFriendDialogDesc": "Avez-vous un ami enthousiaste à l'idée d'apprendre une nouvelle langue avec vous ? Copiez et envoyez ce lien d'invitation pour rejoindre et commencer à discuter avec vous dès aujourd'hui.", - "youUnlocked": "Vous avez débloqué", "resetInstructionTooltipsTitle": "Réinitialiser les astuces d'instructions", "resetInstructionTooltipsDesc": "Cliquez pour afficher les astuces d'instructions comme pour un nouvel utilisateur.", "selectForGrammar": "Sélectionnez une icône de grammaire pour les activités et les détails.", - "newChatActivityTitle": "Ajouter une activité amusante ?", - "newChatActivityDesc": "Faites de chaque chat de groupe une aventure avec Activity Planner ! Définissez des sujets et des objectifs captivants pour le groupe, et donnez vie aux conversations avec des images époustouflantes. Stimulez des discussions imaginatives et maintenez le plaisir sans effort !", - "exploreMore": "Explorer plus", "randomize": "Aléatoire", "clear": "Effacer", "makeYourOwnActivity": "Créez votre propre activité", "featuredActivities": "En vedette", - "goToChat": "Aller au chat", "save": "Enregistrer", - "selectActivity": "Sélectionner une activité", - "wordFocusListeningMultipleChoice": "Quel audio correspond au mot ?", "startChat": "Démarrer un chat", "translationProblem": "Problème de traduction", - "perfectTranslation": "Traduction parfaite !", - "greatJobTranslation": "Excellent travail avec cette traduction !", - "goodJobTranslation": "Bon travail sur cette traduction.", - "makingProgress": "Vous faites des progrès !", - "keepPracticing": "Continuez à pratiquer !", - "niceJob": "Bon travail !", "askToJoin": "Demander à rejoindre", "emptyChatWarningTitle": "Chat vide", "emptyChatWarningDesc": "Vous n'avez invité personne dans votre chat. Allez dans les paramètres du chat pour inviter vos contacts ou le Bot. Vous pouvez aussi faire cela plus tard.", @@ -4547,8 +4120,6 @@ "languageLevelC2Desc": "Je peux comprendre pratiquement tout ce que j'entends ou lis et m'exprimer de manière fluide et précise.", "newVocab": "Nouveaux vocabulaire", "newGrammar": "Nouveaux concepts grammaticaux", - "congratulationsOnReaching": "Vous avez atteint le niveau {level} !", - "seeDetails": "Voir les détails", "choosePracticeMode": "Cliquez sur l'un des boutons ci-dessus pour commencer une activité d'entraînement", "ban": "Bannir", "unban": "Débannir", @@ -4562,8 +4133,6 @@ "timesUsedWithAssistance": "Fois utilisé avec assistance", "shareInviteCode": "Partager le code d'invitation : {code}", "leaderboard": "Classement", - "welcomeUser": "Bienvenue {user}", - "joinSpaceOnboardingDesc": "Avez-vous un code ou un lien d'invitation vers un cours public ?", "skipForNow": "Passer pour l'instant", "permissions": "Autorisations", "spaceChildPermission": "Qui peut ajouter de nouvelles discussions à ce cours", @@ -4571,12 +4140,8 @@ "defaultOption": "Par défaut", "deleteChatDesc": "Voulez-vous vraiment supprimer cette conversation ? Elle sera supprimée pour tous les participants et tous les messages de la conversation ne seront plus disponibles pour la pratique ou l'analyse d'apprentissage.", "deleteSpaceDesc": "Le cours et toutes les conversations sélectionnées seront supprimés pour tous les participants et tous les messages de la conversation ne seront plus disponibles pour la pratique ou l'analyse d'apprentissage. Cette action ne peut pas être annulée.", - "chatWithActivities": "Chat avec activités", "launch": "Lancer", - "launchActivityToChats": "Lancer une activité dans les conversations", "searchChats": "Rechercher des conversations", - "selectChats": "Sélectionner des conversations", - "selectChatToStart": "Terminé ! Sélectionnez une conversation pour commencer", "maxFifty": "Maximum 50", "configureSpace": "Configurer le cours", "pinMessages": "Épingler les messages", @@ -4590,9 +4155,7 @@ "announcements": "Annonces", "activities": "Activités", "access": "Accès", - "botSettings": "Paramètres du bot", "activitySuggestionTimeoutMessage": "Nous travaillons dur pour générer plus d'activités pour vous, veuillez revenir dans une minute", - "accessSettingsWarning": "Oups ! Il semble que vous n'ayez pas la permission de définir les règles d'accès de cette salle. Vous devriez vérifier ces paramètres pour vous assurer qu'ils correspondent à vos besoins et parler à un administrateur de la salle si vous devez les modifier", "howSpaceCanBeFound": "Comment ce cours peut être trouvé", "private": "Privé", "cannotBeFoundInSearch": "Impossible à trouver dans la recherche", @@ -4605,16 +4168,6 @@ "canBeFoundViaKnock": "• demande de rejoindre et approbation de l'administrateur", "youHaveLeveledUp": "Vous avez monté de niveau !", "sendActivities": "Envoyer des activités", - "getStarted": "Commencer", - "getStartedBotChatDesc": "Discuter avec l'IA est un excellent point de départ, et les outils de lecture, d'écriture, d'écoute et de parole de Pangea facilitent tout !", - "getStartedCommunitiesDesc": "Apprendre avec une communauté est là où Pangea Chat brille !\nVous pouvez rejoindre votre classe, trouver un cours, ou même créer le vôtre !", - "getStartedFriendsDesc": "Avez-vous un ami qui veut apprendre avec vous ?", - "getStartedBotChatComplete": "Bravo ! Vous discutez avec le bot !", - "getStartedCommunitiesComplete": "Super, vous avez rejoint un cours !", - "getStartedComplete": "Vous avez terminé cette section !\nContinuez à explorer nos fonctionnalités incroyables en discutant avec des amis !", - "getStartedFriendsComplete": "Youpi ! Vous avez des amis ! 😉", - "getStartedBotChatButton": "Commencer à discuter !", - "getStartedFriendsButton": "Discuter avec un ami", "groupChat": "Chat de groupe", "directMessage": "Message direct", "newDirectMessage": "Nouveau message direct", @@ -4630,7 +4183,6 @@ "mySavedActivities": "Mes activités enregistrées", "noSavedActivities": "Aucune activité enregistrée", "saveActivity": "Enregistrer cette activité", - "yourSavedActivities": "Activités enregistrées", "failedToPlayVideo": "Échec de la lecture de la vidéo", "done": "Terminé", "inThisSpace": "Dans ce cours", @@ -4669,37 +4221,27 @@ "maximumActivityParticipants": "Chaque activité peut accueillir un maximum de {count} participant(s).", "pending": "En attente", "inactive": "Inactif", - "unjoinedActivityMessage": "Voulez-vous participer ? Choisissez un rôle ouvert !\nOu traînez et regardez le spectacle !", - "fullActivityMessage": "N'hésitez pas à regarder le spectacle ! Tant qu'il n'y a pas de rôles ouverts pour participer, vous pouvez voir le chat !", "confirmRole": "Confirmer le rôle", "openRoleLabel": "OUVERT", "joinedTheActivity": "👋 {username} a rejoint en tant que {role}", "finishedTheActivity": "🎯 {username} a terminé cette activité", - "endActivityTitle": "J'ai fini", - "endActivityDesc": "Avez-vous accompli les objectifs ?\nCeci est votre confirmation que vous vous retirez de la discussion. Mais ne vous inquiétez pas, le plaisir continue dans le chat ! N'hésitez pas à traîner et à profiter du spectacle jusqu'à ce que tout le monde clique sur 'Fini'.", "archiveToAnalytics": "Ajouter à mes activités terminées", "activitySummaryError": "Résumé des activités indisponible", "requestSummaries": "Demander des résumés", - "loadingActivitySummary": "Chargement du résumé de l'activité...", "generatingNewActivities": "Vous êtes le premier utilisateur de cette paire de langues ! Veuillez patienter une minute, nous préparons des activités rien que pour vous.", - "requestAccessTitle": "Souhaitez-vous demander l'accès à la vue analytique ?", + "requestAccessTitle": "Demander l'accès aux analyses ?", "requestAccessDesc": "Souhaitez-vous demander l'accès pour voir l'analyse des participants ?\n\nSi les participants acceptent, les administrateurs de ce cours pourront voir leurs :\n • vocabulaire total\n • concepts grammaticaux totaux\n • sessions d'activité terminées\n • concepts grammaticaux spécifiques utilisés, correctement et incorrectement\n\nIls ne pourront pas voir leurs :\n • messages dans les chats en dehors du cours\n • liste de vocabulaire", "requestAccess": "Demander l'accès ({count})", "analyticsInactiveTitle": "Les demandes aux utilisateurs inactifs n'ont pas pu être envoyées", "analyticsInactiveDesc": "Les utilisateurs inactifs qui ne se sont pas connectés depuis l'introduction de cette fonctionnalité ne verront pas votre demande.\n\nLe bouton Demander apparaîtra lorsqu'ils reviendront. Vous pouvez renvoyer la demande plus tard en cliquant sur le bouton Demander sous leur nom lorsqu'il sera disponible.", "accessRequestedTitle": "Demande d'accès à l'analyse", - "accessRequestedDesc": "Les administrateurs de « {space} » demandent à voir vos analyses d'apprentissage.\n\nSi vous acceptez, les administrateurs de ce cours pourront voir votre :\n • vocabulaire total\n • concepts grammaticaux totaux\n • sessions d'activité terminées\n • concepts grammaticaux spécifiques utilisés, correctement et incorrectement\n\nIls ne pourront pas voir vos :\n • messages dans les chats en dehors du cours\n • liste de vocabulaire", - "allowAccess": "Autoriser l'accès", - "denyAccess": "Refuser l'accès", + "accessRequestedDesc": "Demande d'admin(s) : {admin} \n\nLes admins de “{space}” demandent à voir vos analyses d'apprentissage.\n\nSi vous êtes d'accord, ils pourront voir votre :\n • vocabulaire total\n • concepts de grammaire totaux\n • sessions d'activité totales complétées\n • les concepts de grammaire spécifiques utilisés, correctement et incorrectement\n\nIls ne pourront pas voir votre :\n • messages dans les chats en dehors du cours\n • liste de vocabulaire", "adminRequestedAccess": "Les administrateurs ont demandé à voir vos analyses.", "lastUpdated": "Mis à jour\n{time}", "activityFinishedMessage": "Tout est terminé !", "endForAll": "Terminer pour tous", "newCourse": "Nouveau cours", - "newCourseSubtitle": "Quel plan de cours souhaitez-vous utiliser ?", - "failedToLoadCourses": "Échec du chargement des cours", "numModules": "{num} modules", - "numActivityPlans": "{num} plans d'activité", "coursePlan": "Plan de cours", "editCourseLater": "Vous pouvez modifier le titre du modèle, les descriptions et l'image du cours plus tard.", "newCourseAccess": "Par défaut, les cours sont privés et nécessitent l'approbation de l'administrateur pour rejoindre. Vous pouvez modifier ces paramètres à tout moment.", @@ -4713,17 +4255,11 @@ "accessDesc": "Vous pouvez rendre votre cours accessible au monde entier ! Ou, rendre votre cours privé et sécurisé.", "createGroupChatDesc": "Alors que les sessions d'activité commencent et se terminent, les discussions de groupe resteront ouvertes pour la communication de routine.", "deleteDesc": "Seuls les administrateurs peuvent supprimer un cours. Il s'agit d'une action destructive qui supprime tous les utilisateurs et supprime toutes les discussions sélectionnées dans le cours. Proceed with caution.", - "failedToLoadCourseInfo": "Échec du chargement des informations du cours", "noCourseFound": "Oh, ce cours a besoin d'un plan !\n\nLes plans de cours sont une séquence de sujets et d'activités de conversation.", "additionalParticipants": "+ {num} autres", - "activityNotFoundForCourse": "Cette activité n'a pas été trouvée dans le cours", - "courseChats": "Discussions du cours", - "myActivitySessions": "Mes sessions d'activité", "directMessages": "Messages directs", "whatNow": "Et maintenant ?", "chooseNextActivity": "Choisissez votre prochaine activité !", - "seeInstructions": "Voir les instructions", - "hideInstructions": "Cacher les instructions", "letsGo": "Allons-y", "chooseRole": "Choisissez un rôle !", "chooseRoleToParticipate": "Choisissez un rôle pour participer !", @@ -4733,23 +4269,15 @@ "inviteFriends": "Inviter des amis", "waitNotDone": "Attends, je n'ai pas fini !", "waitingForOthersToFinish": "En attente que les autres terminent...", - "saveToCompletedActivities": "Enregistrer dans les activités terminées", "generatingSummary": "Analyse de la conversation et génération des résultats", - "instructionsLanguage": "Langue des instructions", "findCourse": "Trouver un cours", - "activityCompletedDesc": "Votre activité terminée a été ajoutée aux analyses où vous pouvez revoir et pratiquer la langue utilisée.", "pingParticipantsNotification": "{user} cherche des utilisateurs pour rejoindre la session d'activité dans {room}", "course": "Cours", "courses": "Cours", "courseName": "Nom du cours", "createNewCourse": "Nouveau cours", - "publicCourses": "Cours publics", "goToCourse": "Aller au cours : {course}", "activityComplete": "Cette activité est terminée. Le résumé de l'activité devrait être disponible ci-dessous.", - "haventChattedMuch": "Il semble que vous n'ayez pas beaucoup discuté, essayez d'utiliser plus de mots de vocabulaire ! Si vous pensez avoir atteint votre objectif, vous pouvez terminer l'activité ci-dessous.", - "haveChatted": "Il semble que vous discutiez depuis un moment ! Si vous pensez avoir atteint votre objectif, terminez pour finir l'activité et nous générerons un résumé dans la conversation !", - "userDoneAndWaiting": "{num1}/{num2} participants ont terminé. Attendez que tout le monde finisse, et nous générerons un résumé dans la conversation !\n\nSi vous souhaitez rejoindre à nouveau la conversation, cliquez sur le bouton continuer dans le chat.", - "othersDoneAndWaiting": "{num1}/{num2} sont terminés. Avez-vous terminé votre objectif ?", "startNewSession": "Démarrer une nouvelle session", "joinOpenSession": "Rejoindre une session ouverte", "less": "moins", @@ -4759,7 +4287,6 @@ "openToJoin": "Ouvert pour rejoindre", "results": "Résultats", "activityDone": "Activité terminée !", - "moreLabel": "plus", "promoCodeInfo": "Les codes promo peuvent être saisis sur la page suivante", "editsComingSoon": "La possibilité de modifier les villes et les activités arrive bientôt.", "editing": "Modification", @@ -4775,13 +4302,10 @@ "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", - "chooseLanguage": "Choisissez une langue.", + "chooseLanguage": "Choisissez une langue cible.", "planTrip": "Planifiez votre voyage", "howAreYouTraveling": "Comment voyagez-vous ?", "unlockPrivateTrip": "Déverrouiller un voyage privé", @@ -4794,25 +4318,20 @@ "courseCode": "Quel est le mot de passe secret ?", "courseCodeHint": "Code ou lien du voyage", "unlockMyTrip": "Déverrouiller mon voyage", - "anyLevel": "Niveau quelconque", "signupOption": "Comment souhaitez-vous vous inscrire ?", "withApple": "Avec Apple", "withGoogle": "Avec Google", "withEmail": "Avec Email", "createAccount": "Créer un compte", - "noCoursesFound": "Aucun cours trouvé", "loginWithEmail": "Se connecter avec email", "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", - "allCefrLevels": "Tous les niveaux CEFR", "chatListTooltip": "Ici, vous trouverez vos messages directs ! Cliquez sur l'avatar d'un utilisateur et « démarrer une conversation » pour envoyer un message privé.", "directMessageBotTitle": "Message direct Pangea Bot", "feedbackTitle": "Retour d'activité", - "feedbackDesc": "Comment l'activité pourrait-elle être améliorée ? Si vous pouvez fournir quelques détails, nous ferons le changement !", "feedbackHint": "Votre retour", "feedbackButton": "Soumettre le retour", "directMessageBotDesc": "Parler aux humains est plus amusant mais... l'IA est toujours prête !", @@ -5329,30 +4848,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5368,18 +4863,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5404,18 +4887,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5452,38 +4923,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5492,62 +4935,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5584,10 +4983,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5596,14 +4991,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5612,46 +4999,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5660,10 +5011,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5720,18 +5067,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5740,14 +5075,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5776,18 +5103,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5796,42 +5111,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5840,14 +5123,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5868,26 +5143,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5908,10 +5163,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5944,25 +5195,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6019,34 +5251,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6075,778 +5279,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7839,14 +6275,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7858,14 +6286,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7897,10 +6317,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7909,18 +6325,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7929,14 +6333,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7961,38 +6357,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8038,10 +6406,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8066,10 +6430,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8094,10 +6454,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8106,66 +6462,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8186,42 +6486,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8246,154 +6522,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8410,18 +6538,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8442,14 +6558,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8466,10 +6574,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8482,14 +6586,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8498,14 +6594,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8533,26 +6621,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8581,18 +6649,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8629,10 +6689,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9565,10 +7621,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9749,34 +7801,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9789,10 +7813,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9801,14 +7821,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9825,22 +7837,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9988,14 +7984,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10004,34 +7992,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10040,54 +8000,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10096,10 +8020,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10116,10 +8036,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10291,26 +8207,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10339,10 +8235,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10399,30 +8291,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10451,18 +8327,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10579,14 +8447,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10599,10 +8459,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10611,14 +8467,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10635,14 +8483,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10651,22 +8491,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10679,18 +8503,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10707,22 +8519,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10731,30 +8531,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10827,18 +8603,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10895,18 +8659,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10935,30 +8687,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11011,18 +8747,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11071,46 +8799,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11175,10 +8863,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11350,14 +9034,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11385,14 +9061,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11405,10 +9073,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11444,19 +9108,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11481,14 +9140,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11497,14 +9148,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11557,10 +9200,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11573,18 +9212,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11597,14 +9224,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11645,26 +9264,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11692,10 +9299,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11706,36 +9309,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11772,10 +9345,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11840,18 +9409,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11916,10 +9473,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11940,10 +9493,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11960,10 +9509,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11972,10 +9517,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11988,10 +9529,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12016,16 +9553,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Inviter des amis à l'activité", - "inviteFriendsToActivityCourse": "Inviter des amis à l'activité et au cours", "feedbackRespDesc": "Revenez demain pour les mises à jour de l'activité.", "activityDropdownDesc": "Lorsque vous avez terminé cette activité, cliquez ci-dessous", - "activityAnalyticsListBody": "Voici vos activités terminées ! Après avoir terminé les activités, vous pouvez les voir ici.", "languageMismatchTitle": "Incompatibilité de langue", "languageMismatchDesc": "La langue cible ne correspond pas à la langue de cette activité. Mettre à jour votre langue cible ?", "reportWordIssueTooltip": "Signaler un problème d'information sur le mot", "tokenInfoFeedbackDialogTitle": "Retour d'information sur l'information du mot", - "tokenInfoFeedbackDialogDesc": "L'IA fait des erreurs. Veuillez décrire tout problème que vous avez trouvé avec les informations ci-dessus.", "noPublicCoursesFound": "Aucun cours public trouvé. Souhaitez-vous en créer un ?", "noCourseTemplatesFound": "Nous n'avons trouvé aucun cours pour votre langue cible. Vous pouvez discuter avec Pangea Bot en attendant, et revenir plus tard pour plus de cours.", "botActivityJoinFailMessage": "Pangea Bot met du temps à répondre. Veuillez réessayer plus tard, ou inviter un ami.", @@ -12033,14 +9566,6 @@ "leaveDesc": "Quitter cet espace et toutes les discussions qui s'y trouvent", "selectAll": "Tout sélectionner", "deselectAll": "Tout désélectionner", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12049,10 +9574,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12069,10 +9590,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12106,7 +9623,6 @@ "newMessageInPangeaChat": "💬 Nouveau message dans le chat Pangea", "shareCourse": "Partager le cours", "addCourse": "Ajouter un cours", - "joinCourseWithCode": "Rejoindre le cours avec un code", "joinPublicCourse": "Rejoindre un cours public", "vocabLevelsDesc": "C'est ici que les mots de vocabulaire seront placés une fois que vous les aurez améliorés !", "highlightVocabTooltip": "Mettez en surbrillance les mots de vocabulaire cibles ci-dessous en les envoyant ou en les pratiquant dans le chat", @@ -12130,10 +9646,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12142,7 +9654,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Aucun DM ou chat trouvé. Assurez-vous que votre recherche est correctement orthographiée.", + "activityAnalyticsTooltipBody": "Ce sont vos activités enregistrées pour révision et pratique.", + "numSavedActivities": "Nombre d'activités enregistrées", + "saveActivityTitle": "Enregistrer l'activité", + "saveActivityDesc": "Bon travail ! Enregistrez cette activité pour une révision et une pratique ultérieures", + "levelInfoTooltip": "Ici, vous pouvez voir tous les points que vous avez gagnés et comment !", + "alreadyInCourseWithID": "Vous êtes déjà dans un cours avec ce plan. Voulez-vous créer un cours avec le même plan ou aller au cours existant ?", + "goToExistingCourse": "Aller au cours existant", + "emojiView": "Vue emoji", + "feedbackDialogDesc": "Je fais aussi des erreurs ! Quelque chose pour m'aider à m'améliorer ?", + "contactHasBeenInvitedToTheCourse": "Le contact a été invité au cours", + "activityStatsButtonTooltip": "Informations sur l'activité", + "allow": "Autoriser", + "deny": "Refuser", + "enabledRenewal": "Activer le renouvellement de l'abonnement", + "subscriptionEndsOn": "L'abonnement se termine le", + "subscriptionRenewsOn": "L'abonnement se renouvelle le", + "waitForSubscriptionChanges": "Les modifications de votre abonnement peuvent prendre un moment à se refléter dans l'application.", + "subscribeReadingAssistance": "Abonnez-vous pour débloquer les outils de message", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharique", + "arDisplayName": "Arabe", + "asDisplayName": "Assamais", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaïdjanais", + "baDisplayName": "Bachkir", + "banDisplayName": "Balinais", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Biélorusse", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgare", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Inde)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosniaque", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Bouriate", + "caDisplayName": "Catalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurde central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corse", + "crhDisplayName": "Turc de Crimée", + "crsDisplayName": "Créole seselwa français", + "csDisplayName": "Tchèque", + "cvDisplayName": "Tchouvache", + "cyDisplayName": "Gallois", + "daDisplayName": "Danois", + "deDisplayName": "Allemand", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Anglais", + "enAUDisplayName": "Anglais (Australie)", + "enGBDisplayName": "Anglais (Royaume-Uni)", + "enINDisplayName": "Anglais (Inde)", + "enUSDisplayName": "Anglais (États-Unis)", + "eoDisplayName": "Espéranto", + "esDisplayName": "Espagnol", + "esESDisplayName": "Espagnol (Espagne)", + "esMXDisplayName": "Espagnol (Mexique)", + "euDisplayName": "Basque", + "faDisplayName": "Persan", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnois", + "filDisplayName": "Filipino", + "fjDisplayName": "Fidjien", + "foDisplayName": "Féroïen", + "frDisplayName": "Français", + "frCADisplayName": "Français (Canada)", + "frFRDisplayName": "Français (France)", + "fyDisplayName": "Frison occidental", + "gaDisplayName": "Irlandais", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaélique écossais", + "glDisplayName": "Galego", + "gnDisplayName": "Guarani", + "gomDisplayName": "Konkani de Goa", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaïen", + "heDisplayName": "Hébreu", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croate", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Créole haïtien", + "huDisplayName": "Hongrois", + "hyDisplayName": "Arménien", + "idDisplayName": "Indonésien", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandais", + "itDisplayName": "Italien", + "jaDisplayName": "Japonais", + "jvDisplayName": "Javanais", + "kaDisplayName": "Géorgien", + "kkDisplayName": "Kazakh", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Coréen", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (République Démocratique du Congo)", + "kuDisplayName": "Kurde", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgeois", + "lgDisplayName": "Ganda", + "liDisplayName": "Limbourgeois", + "lijDisplayName": "Ligurien", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituanien", + "ltgDisplayName": "Latgalien", + "luoDisplayName": "Luo (Kenya et Tanzanie)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letton", + "maiDisplayName": "Maïthili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgache", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macédonien", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malais", + "msArabDisplayName": "Malais (arabe)", + "msMYDisplayName": "Malais (Malaisie)", + "mtDisplayName": "Maltais", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmane", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvégien (Bokmål)", + "neDisplayName": "Népalais", + "newDisplayName": "Néwari", + "nlDisplayName": "Néerlandais", + "nlBEDisplayName": "Flamand", + "noDisplayName": "Norvégien", + "nrDisplayName": "Ndebele du Sud", + "nsoDisplayName": "Sotho du Nord", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Pendjabi", + "paArabDisplayName": "Pendjabi (Shahmukhi)", + "paINDisplayName": "Pendjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polonais", + "psDisplayName": "Pachto", + "ptDisplayName": "Portugais", + "ptBRDisplayName": "Portugais (Brésil)", + "ptPTDisplayName": "Portugais (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Roumain", + "roMDDisplayName": "Moldave", + "romDisplayName": "Romani", + "ruDisplayName": "Russe", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilien", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Cinghalais", + "skDisplayName": "Slovaque", + "slDisplayName": "Slovène", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanais", + "srDisplayName": "Serbe", + "srMEDisplayName": "Monténégrin", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho du Sud", + "suDisplayName": "Soundanais", + "svDisplayName": "Suédois", + "swDisplayName": "Swahili", + "szlDisplayName": "Silézien", + "taDisplayName": "Tamoul", + "teDisplayName": "Télougou", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadjik", + "thDisplayName": "Thaï", + "tiDisplayName": "Tigrigna", + "tkDisplayName": "Turkmène", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turc", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Ouïghour", + "ukDisplayName": "Ukrainien", + "urDisplayName": "Ourdou", + "urINDisplayName": "Ourdou (Inde)", + "urPKDisplayName": "Ourdou (Pakistan)", + "uzDisplayName": "Ouzbek", + "viDisplayName": "Vietnamien", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucatèque", + "yueDisplayName": "Cantonais", + "yueCNDisplayName": "Cantonais (Chine)", + "yueHKDisplayName": "Cantonais (Hong Kong)", + "zhDisplayName": "Chinois", + "zhCNDisplayName": "Chinois (Simplifié)", + "zhTWDisplayName": "Chinois (Traditionnel)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12209,6 +10907,7 @@ "notStartedActivitiesTitle": "Sessions ouvertes ({num})", "inProgressActivitiesTitle": "En cours ({num})", "completedActivitiesTitle": "Terminé ({num})", + "pickDifferentActivity": "Choisissez une activité différente", "inOngoingActivity": "Vous avez une activité en cours !", "@notStartedActivitiesTitle": { "type": "String", @@ -12234,10 +10933,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Votre langue cible ne correspond pas à ce message. Voulez-vous mettre à jour votre langue cible ?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Voici tout le monde dans ce cours. Cliquez sur l'avatar de n'importe quel utilisateur et \"démarrer une conversation\" pour envoyer un DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ce mot de vocabulaire sera définitivement supprimé de vos analyses", + "woman": "Femme", + "man": "Homme", + "otherGender": "Autre", + "unselectedGender": "Sélectionnez une option de genre", + "gender": "Genre", + "chatParticipantTooltip": "Ce sont tous les participants de ce chat. Cliquez sur l'avatar de n'importe quel utilisateur et \"démarrer une conversation\" pour envoyer un message direct.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Les outils d'apprentissage sont désactivés pour les messages qui ne sont pas dans votre langue cible.", + "vocabEmoji": "Émoji de vocabulaire", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Demander une régénération", + "optionalRegenerateReason": "(Optionnel) Raison", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Vous avez défini l'emoji pour {lemma} ! Nous utiliserons cet emoji pour représenter le mot dans les activités pratiques à l'avenir.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "En attente de la connexion", + "ssoDialogDesc": "Nous avons ouvert un nouvel onglet pour que vous puissiez vous connecter en toute sécurité.", + "ssoDialogHelpText": "🤔 Si vous n'avez pas vu le nouvel onglet, veuillez vérifier votre bloqueur de fenêtres contextuelles.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Désactiver les outils linguistiques", + "disableLanguageToolsDesc": "Souhaitez-vous désactiver l'assistance linguistique automatique ?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permission refusée. Activez les autorisations d'enregistrement pour enregistrer des messages audio.", + "genericWebRecordingError": "Une erreur s'est produite. Nous recommandons d'utiliser le navigateur Chrome lors de l'enregistrement de messages.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Pour la meilleure expérience avec cette application, veuillez agrandir la taille de votre écran.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Activités à débloquer pour le prochain sujet", "activitiesToUnlockTopicDesc": "Définissez le nombre d'activités pour débloquer le prochain sujet de cours", "@activitiesToUnlockTopicTitle": { @@ -12247,5 +11064,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Pratique de définition de vocabulaire correcte", + "constructUseIncLMDesc": "Pratique de définition de vocabulaire incorrecte", + "constructUseCorLADesc": "Pratique audio de vocabulaire correcte", + "constructUseIncLADesc": "Pratique audio de vocabulaire incorrecte", + "constructUseBonus": "Bonus pendant la pratique de vocabulaire", + "practiceVocab": "Pratiquer le vocabulaire", + "selectMeaning": "Sélectionner la signification", + "selectAudio": "Sélectionner l'audio correspondant", + "congratulations": "Félicitations !", + "anotherRound": "Un autre tour", + "noActivityRequest": "Aucune demande d'activité en cours.", + "quit": "Quitter", + "congratulationsYouveCompletedPractice": "Félicitations ! Vous avez terminé la session de pratique.", + "mustHave10Words": "Vous devez avoir au moins 10 mots de vocabulaire à pratiquer. Essayez de parler à un ami ou au Pangea Bot pour en découvrir plus !", + "botSettings": "Paramètres du bot", + "activitySettingsOverrideWarning": "Langue et niveau de langue déterminés par le plan d'activité", + "voice": "Voix", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 71f0b4121..0fbd10091 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -3386,26 +3386,14 @@ "commandHint_logoutall": "Logáil amach gach gléas gníomhach", "@commandHint_logoutall": {}, "customReaction": "Freagairt shaincheaptha", - "accountInformation": "Eolas cuntaim", - "addGroupDescription": "Cuir síos ar mhíniú ar chomhrá", - "addNewFriend": "Cuir cara nua leis", - "alreadyHaveAnAccount": "An bhfuil cuntas agat cheana?", - "createNewGroup": "Cruthaigh comhrá nua", - "editChatPermissions": "Cuir in eagar ceadanna an chomhrá", "writeAMessageLangCodes": "Clóscríobh i {l1} nó {l2}...", "requests": "Iarratais", - "allCorrect": "Sin é an chaoi a ndéarfainn é! Go deas!", - "newWayAllGood": "Níl sé sin mar a ndéarfainn é ach tá sé go maith!", - "othersAreBetter": "Hm, b'fhéidir go bhfuil bealach níos fearr ann le rá.", "holdForInfo": "Bain triail as agus coinnigh síos le haghaidh eolas faoin bhfocal.", "greenFeedback": "Sin é an rud a chuirfinn!", "yellowFeedback": "Hm, is féidir leat iarracht a dhéanamh é sin a rá agus féach cad a tharlóidh! Chun an focal seo a úsáid, cliceáil arís é.", "redFeedback": "Ní dóigh liom go bhfuil sé sin ceart...", "itInstructionsTitle": "Is féidir liom cabhrú leat aistriú!", "itInstructionsBody": "Is féidir leat roghanna a chliceáil agus a choinneáil síos le haghaidh eolas faoin bhfocal.", - "oneday": "An 24 uair deireanach", - "oneweek": "An seachtain deireanach", - "onemonth": "An mhí seo caite", "gaTooltip": "Úsáid L2 le cabhair gramadaí", "taTooltip": "Úsáid L2 le cabhair aistriúcháin", "unTooltip": "Eile", @@ -3415,58 +3403,27 @@ "interactiveTranslatorAllowed": "Rogha na Mac Léinn", "interactiveTranslatorRequired": "De dhíth", "notYetSet": "Níl socraithe fós", - "myLearning": "Mo Mhianadóireacht", "waTooltip": "Úsáid L2 gan chabhair", - "changeDateRange": "Athraigh raon dáta", - "classDescription": "Cur síos", - "addStudents": "Cuireadh úsáideoirí le nasc nó cód", - "copyClassLink": "Cóipeáil an nasc cuireadh", - "copyClassCode": "Cóipeáil an cód cuireadh", - "inviteStudentByUserName": "Cuireadh úsáideoirí le hainm úsáideora", "languageSettings": "Socruithe Teanga", "interactiveTranslator": "Cabhair Aistriúcháin", - "shareVideo": "Roinn Físeán", - "shareVideoDesc": "Múch é seo chun ligean do mhic léinn físeáin a roinnt i gcainteanna.", - "shareFiles": "Roinn Comhaid", - "selectLanguageLevel": "Roghnaigh leibhéal teanga", "noIdenticalLanguages": "Roghnaigh le do thoil teangacha bunúsacha agus spriocdhírithe difriúla", - "iWantALanguagePartnerFrom": "Tá sé ó:", - "worldWide": "Ar fud an domhain", - "noResults": "Níl torthaí! Déan do chuardach níos leithne.", "searchBy": "Cuardaigh de réir tír agus teangacha", - "iWantAConversationPartner": "Ba mhaith liom comhpháirtí comhrá a bhfuil", - "iWantALanguagePartnerWhoSpeaks": "Ag labhairt:", - "iWantALanguagePartnerWhoIsLearning": "Ag foghlaim:", "joinWithClassCode": "Cláraigh leis an gcód rang", - "joinWithClassCodeHint": "Cuir isteach an cód cuireadh", - "languageLevelPreA1": "Tús Mór (Pre A1)", - "languageLevelA1": "Tús Mór (A1)", - "languageLevelA2": "Bunúsach (A2)", - "languageLevelB1": "Meánleibhéal (B1)", - "languageLevelB2": "Meánleibhéal Uachtarach (B2)", - "languageLevelC1": "Ceadúnas Ardleibhéil (C1)", - "languageLevelC2": "Foirfeacht (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Tosaitheoir Ard (A2)", + "languageLevelB1": "Idirmheánach Lár (B1)", + "languageLevelB2": "Ard Íseal (B2)", + "languageLevelC1": "Ard Lár (C1)", + "languageLevelC2": "Sár (C2)", "changeTheNameOfTheClass": "Athraigh an t-ainm", "changeTheNameOfTheChat": "Athraigh ainm an chomhrá", - "askPangeaBot": "Iarr ar Pangea Bot le sainmhíniú comhthéacsúil.", "sorryNoResults": "Tá brón orm, níl torthaí ar fáil.", "ignoreInThisText": "Déan neamhaird", - "helpMeTranslate": "Sea!", - "needsItShortMessage": "Amar lasmuigh den sprioc", "needsItMessage": "Fan, níl sé {targetLanguage}! An bhfuil uait cabhair le haistriúchán?", - "needsIgcMessage": "Tá botún gramadaí sa teachtaireacht seo.", - "tokenTranslationTitle": "Tá focal i do theanga bhunúsach.", - "spanTranslationDesc": "Féach ar na haistriúcháin féideartha thíos.", - "spanTranslationTitle": "Tá roinnt focal i do theanga bhunúsach.", - "l1SpanAndGrammarTitle": "Amuigh den teanga sprioc", - "l1SpanAndGrammarDesc": "D'fhéadfadh sé a bheith i do theanga bhunúsach nó d'fhéadfadh sé a bheith ina earráid gramadaí.", - "otherTitle": "Tá earráid agat.", - "otherDesc": "Féach ar na ceartúcháin féideartha thíos.", "countryInformation": "Mo thír", - "myLanguages": "Mo theangacha bunúsacha agus sprioc", "targetLanguage": "Teanga Sprioc", "sourceLanguage": "Teanga bhunúsach", - "languagesISpeak": "Teangacha a labhraím", "updateLanguage": "Mo chuid teangacha", "whatLanguageYouWantToLearn": "Cén teanga ar mhaith leat foghlaim?", "whatIsYourBaseLanguage": "Cén teanga bhunúsach atá agat?", @@ -3481,13 +3438,8 @@ "errorDisableLanguageAssistanceUserDesc": "Cliceáil anseo chun socruithe cabhrach aistriúcháin agus gramadála a nuashonrú", "errorDisableITClassDesc": "Tá cabhair aistriúcháin dícheangailte don chúrsa ina bhfuil an comhrá seo.", "errorDisableIGCClassDesc": "Tá cabhair gramadála dícheangailte don chúrsa ina bhfuil an comhrá seo.", - "itIsDisabled": "Tá Aistriúchán Comhoibríoch dícheangailte", - "igcIsDisabled": "Tá Seiceáil Gramada Comhoibríoch dícheangailte", - "goToLearningSettings": "Téigh go Socruithe Foghlama", "error405Title": "Níor socraíodh teangacha", "error405Desc": "Le do thoil, socraigh do chuid teangacha sa Bhealach Príomh > Socruithe Foghlama.", - "loginOrSignup": "Cláraigh le", - "iAgreeToThe": "Aontaím leis an ", "termsAndConditions": "Tearmaí agus Coinníollacha", "andCertifyIAmAtLeast13YearsOfAge": " agus deimhním go bhfuil mé ar a laghad 16 bliain d'aois.", "error502504Title": "Wow, tá a lán daltaí ar líne!", @@ -3495,40 +3447,21 @@ "error404Title": "Earráid aistriúcháin!", "error404Desc": "Níl a fhios ag Bot Pangea conas é a aistriú...", "errorPleaseRefresh": "Táimid ag déileáil leis! Le do thoil, luchtú arís agus bain triail eile as.", - "toggleIT": "Aistriúchán Comhoiriúnach", - "toggleIGC": "Seiceáil Gramada Comhoiriúnach", - "toggleToolSettingsDescription": "Anseo is féidir leat do shocruithe uirlis teanga aonair a mhúchadh nó a mhúchadh.", "connectedToStaging": "Ceangailte le Staging", "learningSettings": "Socruithe Foghlama", - "sendVoiceNotes": "Seol Nótaí Gutha", - "sendVoiceNotesDesc": "Múch é seo ar siúl chun ligean do dhaltaí nótaí gutha a sheoladh i gcomhráite.", - "chatTopic": "Ábhar Comhrá", - "chatTopicDesc": "Socraigh ábhar comhrá", - "inviteStudentByUserNameDesc": "Más bhfuil cuntas ag do dhalta cheana féin, is féidir leat cuardach a dhéanamh orthu.", "participants": "Rannpháirtithe", - "almostPerfect": "Tá sé sin beagnach ceart! Seo cad a déarfainn mé.", - "prettyGood": "An-mhaith! Seo cad a déarfainn mé.", - "letMeThink": "Hmm, féachaimid ar conas a rinne tú!", "clickMessageTitle": "An bhfuil cabhair uait?", "clickMessageBody": "Cliceáil ar theachtaireacht le huirlisí teanga cosúil le haistriúchán, éisteacht arís agus níos mó!", - "understandingMessagesTitle": "Sainmhínithe agus aistriúcháin!", - "understandingMessagesBody": "Cliceáil ar fhocail faoi bhiorra le haghaidh sainmhínithe. Aistrigh le roghanna teachtaireachta (ar barr ar dheis).", "allDone": "Críoch!", "vocab": "Focloireacht", "low": "Tá fianaise againn nach dtuigeann an t-úsáideoir na focail seo.", "medium": "Tá na focail seo in úsáid. Níl sé soiléir an dtuigeann na focail go hiomlán nó nach bhfuil.", "high": "Tá fianaise againn go dtuigeann an t-úsáideoir na focail seo.", - "unknownProficiency": "Níl na focail seo in úsáid i gComhrá Pangea.", - "changeView": "Athraigh radharc.", - "clearAll": "Glan gach focal?", - "generateVocabulary": "Giniún foclóra ó teideal agus cur síos", - "generatePrompts": "Giniún spreagthaí", "subscribe": "Cláraigh", "getAccess": "Cláraigh anois!", "subscriptionDesc": "Tá teachtaireachtaí saor in aisce! Cláraigh chun rochtain a fháil ar aistriúchán idirghníomhach, seiceáil gramadach agus anailísíocht foghlama.", "subscriptionManagement": "Bainistíocht Síntiúis", "currentSubscription": "Síntiúis Reatha", - "changeSubscription": "Athraigh do shíntiúis", "cancelSubscription": "Cealaigh do shíntiúis", "selectYourPlan": "Roghnaigh Do Phlean", "subsciptionPlatformTooltip": "Cuir isteach do chuntas ar do ghléas bunaidh chun do phlean síntiúis a bhainistiú", @@ -3537,9 +3470,6 @@ "paymentHistory": "Stair Íocaíochta", "emptyChatDownloadWarning": "Ní féidir íoslódáil comhrá folamh", "update": "Nuashonraigh", - "updateDesc": "Is féidir leat an aip seo a nuashonrú anois ó {localVersion} go {storeVersion}", - "maybeLater": "B'fhéidir níos déanaí", - "mainMenu": "Bainisteoir Príomh", "toggleImmersionMode": "Mód Iomlánaithe", "toggleImmersionModeDesc": "Nuair a bhíonn sé cumasaithe, léirítear gach teachtaireacht i do theanga sprioc. Tá an socrú seo an-úsáideach i malartuithe teangacha.", "itToggleDescription": "Léireoidh an uirlis foghlama teanga seo focail i do theanga bhunúsach agus cabhróidh sé leat iad a aistriú go do theanga sprioc. Cé go bhfuil sé neamhchoitianta, d'fhéadfadh an AI botún a dhéanamh i d'aistriúchán.", @@ -3554,212 +3484,13 @@ "definitionsToolDescription": "Nuair a bhíonn sé cumasaithe, is féidir cliceáil ar fhocail faoi bhun línte gorma le haghaidh sainmhínithe. Cliceáil ar theachtaireachtaí chun rochtain a fháil ar shainmhínithe.", "translationsToolDescrption": "Nuair a bhíonn sé cumasaithe, cliceáil ar theachtaireacht agus ar an ngrian aistriúcháin chun teachtaireacht i do theanga bhunúsach a fheiceáil.", "welcomeBack": "Fáilte ar ais! Mura raibh tú rannpháirteach sa phainéal 2023-2024, déan teagmháil linn le haghaidh do shíntiús speisialta. Má tá tú múinteoir a cheannaigh ceadúnas do do rang, déan teagmháil linn le haghaidh do shíntiús múinteora.", - "kickAllStudents": "Cuir Gach Dalta As", - "kickAllStudentsConfirmation": "An bhfuil tú cinnte gur mhaith leat gach dalta a chur as?", - "inviteAllStudents": "Cuireadh Gach Dalta", - "inviteAllStudentsConfirmation": "An bhfuil tú cinnte gur mhaith leat gach dalta a thabhairt cuireadh?", - "inviteUsersFromPangea": "Cuir riarthóirí leis", - "redeemPromoCode": "Déan Éarlais ar Chód Promó", - "enterPromoCode": "Cuir isteach an Cód Promó", "downloadTxtFile": "Íoslódáil Comhad Téacs", "downloadCSVFile": "Íoslódáil Comhad CSV", "promotionalSubscriptionDesc": "Tá síntiús promóiseach saoil agat faoi láthair. Seol teachtaireacht chuig support@pangea.chat le haghaidh cabhrach maidir le do shíntiús a athrú.", "originalSubscriptionPlatform": "Síntiús ceannaíodh trí {purchasePlatform}", "oneWeekTrial": "Triail Seachtain amháin", "downloadXLSXFile": "Íoslódáil Comhad Excel", - "abDisplayName": "Abchais", - "aaDisplayName": "Afar", - "afDisplayName": "Afracais", - "akDisplayName": "Akan", - "sqDisplayName": "Albainis", - "amDisplayName": "Amharais", - "arDisplayName": "Araibis", - "anDisplayName": "Aragonaise", - "hyDisplayName": "Airmeinis", - "asDisplayName": "Aimsir", - "avDisplayName": "Avarais", - "aeDisplayName": "Avestais", - "ayDisplayName": "Aimarais", - "azDisplayName": "Asarbaiseáinis", - "bmDisplayName": "Bambara", - "baDisplayName": "Baiskir", - "euDisplayName": "Basca", - "beDisplayName": "Bealarúisis", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniach", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgáiris", - "myDisplayName": "Burmese", - "caDisplayName": "Catalóinis, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Chechen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Sínis", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Kornáis", - "coDisplayName": "Corsican", - "crDisplayName": "Cree", - "hrDisplayName": "Croatach", - "csDisplayName": "Seicis", - "daDisplayName": "Danmhargach", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Dúiséis", - "enDisplayName": "Béarla", - "eoDisplayName": "Esperanto", - "etDisplayName": "Eastóinis", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijian", - "fiDisplayName": "Fionlainnis", - "frDisplayName": "Fraincis", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galician", - "kaDisplayName": "Seoirsis", - "deDisplayName": "Gearmáinis", - "elDisplayName": "Gréigis, Nua-aimseartha", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gúiseará", - "htDisplayName": "Haitian, Creole Haitian", - "haDisplayName": "Hausa", - "heDisplayName": "Eabhrais (nua-aimseartha)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindí", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungáiris", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indinéiseach", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Gaeilge", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Íoslainnise", - "itDisplayName": "Iodáilis", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Seapáinis", - "jvDisplayName": "Iáinis", - "klDisplayName": "Kalaallisut, Greenlandic", - "knDisplayName": "Kannada", - "krDisplayName": "Kanúri", - "ksDisplayName": "Caismiris", - "kkDisplayName": "Casacais", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgeach, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Cóiréis", - "kuDisplayName": "Cúrdais", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Laidin", - "lbDisplayName": "Lugsamburgis, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgis, Limburgan, Limburger", - "lnDisplayName": "Lingála", - "loDisplayName": "Lao", - "ltDisplayName": "Liotuáinis", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Leatvís", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedóinis", - "mgDisplayName": "Malagasach", - "msDisplayName": "Maelainéis", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Máltais", - "miDisplayName": "Māori", - "mrDisplayName": "Maraitéiseach (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongóilise", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Nórais Bokmål", - "ndDisplayName": "Ndebele Thuaidh", - "neDisplayName": "Nepálach", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Nórais Nynorsk", - "noDisplayName": "Nórais", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele Theas", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Seandála Chaitliceach, Sláibis Chaitliceach, Seandála Chaitliceach, Seandála Búlgáiris, Seandála Slavach", - "omDisplayName": "Oromo", - "orDisplayName": "Oiréis", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persian", - "plDisplayName": "Polainnis", - "psDisplayName": "Pasáistí, Pushto", - "ptDisplayName": "Portaingéil", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rómáinis, Moldáivis, Moldovan", - "ruDisplayName": "Rúisis", - "saDisplayName": "Sanskrit (Saṃskṛta)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sáimis Thuaidh", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbís", - "gdDisplayName": "Gaeilge na hAlban, Gaeilge", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slóvaicis", - "slDisplayName": "Slóivéinis", - "soDisplayName": "Somálach", - "stDisplayName": "Sothó Theas", - "esDisplayName": "Spáinnis", - "suDisplayName": "Sundanese", - "swDisplayName": "Suaibéilí", - "ssDisplayName": "Swati", - "svDisplayName": "Sualainnis", - "taDisplayName": "Tamailís", - "teDisplayName": "Téalainnis", - "tgDisplayName": "Tajiceach", - "thDisplayName": "Téalainn", - "tiDisplayName": "Tigrinis", - "boDisplayName": "Tibéideach Caighdeánach, Tibéideach, Lár", - "tkDisplayName": "Turkmen", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Oileáin Tonga)", - "trDisplayName": "Turcach", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uighur, Uyghur", - "ukDisplayName": "Ucráinis", - "urDisplayName": "Urdais", - "uzDisplayName": "Uzbec", - "veDisplayName": "Venda", - "viDisplayName": "Vietnámis", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Cymraeg", - "woDisplayName": "Wolof", - "fyDisplayName": "Frísis Thiar", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Iídís", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Neamartha", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Il multiple", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Eabhrais", - "jwDisplayName": "Iámais", - "moDisplayName": "Moldáivis", - "shDisplayName": "Serbo-Corach", "wwCountryDisplayName": "Domhanda", "afCountryDisplayName": "An Afganastáin", "axCountryDisplayName": "Oileáin Åland", @@ -4007,41 +3738,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Íoc", - "allPrivateChats": "Comhráite díreacha", - "unknownPrivateChat": "Comhrá príobháideach anaithnid", + "pay": "Checkout", "invitedToSpace": "{user} thú cuireadh a thabhairt chun páirt a ghlacadh i gcúrsa: {space}! An bhfuil tú ag iarraidh glacadh leis?", - "declinedInvitation": "Diúltaíodh an cuireadh", - "acceptedInvitation": "Glacadh leis an gcuireadh", "youreInvited": "📩 Tá cuireadh agat!", "invitedToChat": "{user} thú cuireadh a thabhairt chun comhrá a bheith agat: {name}! An bhfuil tú ag iarraidh glacadh leis?", "monthlySubscription": "Míosúil", "yearlySubscription": "Bliantúil", "defaultSubscription": "Clár síntiús Pangea Chat", "freeTrial": "Triail saor in aisce", - "grammarAnalytics": "Earráid anailísíocht", "total": "Iomlán: ", "noDataFound": "Níor aimsíodh aon sonraí", - "promoSubscriptionExpirationDesc": "Tá do shíntiús reatha ina phromóisiún agus éiríonn sé as ar {expiration}. Seol teachtaireacht chuig support@pangea.chat le haghaidh cabhrach maidir le hathrú do shíntiús.", - "emptyChatNameWarning": "Cuir isteach ainm don chomhrá seo", "blurMeansTranslateTitle": "Cén fáth go bhfuil an teachtaireacht scáileáilte?", "blurMeansTranslateBody": "Fad is ea Mód Iomlánaithe ar siúl, beidh teachtaireachtaí a sheoltar i do theanga bhunúsach faoi dhálaí scagtha agus aistrithe ag Pangea Bot go do theanga sprioc. Is féidir Mód Iomlánaithe a chasadh ar siúl i socruithe aonair agus cúrsa.", - "someErrorTitle": "Hm, níl rud éigin ceart", - "someErrorBody": "D'fhéadfadh sé a bheith ina earráid nó rud éigin i do theanga bhunúsach.", "bestCorrectionFeedback": "Tá sé sin ceart!", "distractorFeedback": "Níl sé sin go hiomlán ceart.", "bestAnswerFeedback": "Tá sé sin ceart!", "definitionDefaultPrompt": "Cad is brí leis an bhfocal seo?", "practiceDefaultPrompt": "Cad é an freagra is fearr?", "correctionDefaultPrompt": "Cad é an ionad ceart?", - "itStartDefaultPrompt": "Ar mhaith leat cabhair a fháil le haistriúchán?", - "lockedChatWarning": "🔒 Tá an comhrá seo dúnta", - "lockChat": "Dún Comhrá", - "suggestToChat": "Mol an comhrá seo", - "suggestToChatDesc": "Leagann comhráite molta le feiceáil i liostaí comhrá", "acceptSelection": "Glac Leasú", - "acceptSelectionAnyway": "Úsáid é seo ar aon nós", - "makingActivity": "Ag déanamh gníomhaíochta", "why": "Cén fáth?", "definition": "Sainmhíniú", "exampleSentence": "Sampla Abairt", @@ -4049,128 +3764,55 @@ "reportMessageTitle": "Tá {reportingUserId} tuairisciú ar theachtaireacht ó {reportedUserId} sa chomhrá {roomName}", "reportMessageBody": "Teachtaireacht: {reportedMessage}\nCúis: {reason}", "noTeachersFound": "Níl múinteoirí le fáil le tuairisciú orthu", - "viewArchive": "Féach ar an gCartlann", "trialExpiration": "Críochnaíonn do thriail saor in aisce ar {expiration}", "freeTrialDesc": "Faigheann úsáideoirí nua triail saor in aisce ar feadh seachtain de Pangea Chat", "activateTrial": "Triail Saor in Aisce 7 Lá", "successfullySubscribed": "Tá tú cláraithe go rathúil!", "clickToManageSubscription": "Cliceáil anseo chun do shíntiús a bhainistiú.", - "errorGettingAudio": "Earráid ag fáil fuaime. Le do thoil, athraigh le do thoil agus bain triail eile.", "signUp": "Cláraigh", "pleaseChooseAtLeastChars": "Roghnaigh ar a laghad {min} carachtar.", "noEmailWarning": "Cuir isteach seoladh ríomhphoist bailí. Murach sin ní bheidh tú in ann do phasfhocal a athshocrú. Mura n-uaill, brúigh arís ar an gcnaipe chun leanúint ar aghaidh.", "pleaseEnterValidEmail": "Cuir isteach seoladh ríomhphoist bailí.", "pleaseChooseAUsername": "Roghnaigh ainm úsáideora le do thoil", - "chooseAUsername": "Roghnaigh ainm úsáideora", "define": "Sainmhínigh", "listen": "Éist", - "addConversationBot": "Cumasaigh Bot Comhrá", - "addConversationBotDesc": "Cuir bot leis an gcomhrá seo", - "convoBotSettingsDescription": "Cuir in eagar topaic an chomhrá agus deacracht", - "enterAConversationTopic": "Cuir topaic an chomhrá isteach", - "conversationTopic": "Topaic an chomhrá", - "enableModeration": "Cumasaigh bainistíocht", - "enableModerationDesc": "Cumasaigh bainistíocht uathoibríoch chun teachtaireachtaí a athbhreithniú sula gcuirtear iad i láthair", - "conversationLanguageLevel": "Cad é leibhéal teanga an chomhrá seo?", - "showDefinition": "Taispeáin sainmhíniú", - "subscriptionPopupTitle": "D'fhéadfadh botún gramadaí a bheith sa abairt seo...", - "subscriptionPopupDesc": "Cláraigh inniu chun aistriúchán agus ceartú gramadach a fháil!", - "seeOptions": "Féach roghanna", - "continuedWithoutSubscription": "Lean ar aghaidh gan síntiús a ghlacadh", "trialPeriodExpired": "Tá do thriail imithe", - "selectToDefine": "Cliceáil ar aon fhocal chun a shainmhíniú a fheiceáil!", "translations": "aistriúcháin", "messageAudio": "fuaim an teachtaireachta", "definitions": "sainmhíniú", "subscribedToUnlockTools": "Cláraigh chun aistriúchán idirghníomhach agus seiceáil gramadach, fuaimrian, gníomhaíochtaí cleachtadh pearsanta, agus anailísíocht foghlama a fháil!", "translationTooltip": "Aistriú", - "audioTooltip": "Seinn Fuaim", "speechToTextTooltip": "Trascríobh", - "certifyAge": "Deimhním go bhfuil mé os cionn {age} bliain d'aois", "kickBotWarning": "Beidh sé i gceist le buille Pangea Bot an bot comhrá a bhaint den chomhrá seo.", - "joinToView": "Cláraigh sa seomra seo chun sonraí a fheiceáil", "refresh": "Athnuachan", - "autoPlayTitle": "Seinn Uathoibríoch Teachtaireachtaí", - "autoPlayDesc": "Nuair a bheidh sé cumraithe, beidh fuaim téacs-go-huaire ag na teachtaireachtaí a sheinnfidh go huathoibríoch nuair a roghnófar iad.", "messageAnalytics": "Anailís ar Theachtaireachtaí", "words": "Focail", "score": "Scór", "accuracy": "Beachtas", "points": "Pointí", "noPaymentInfo": "Níl aon eolas íocaíochta de dhíth!", - "conversationBotModeSelectDescription": "Gníomhaíocht comhrá", - "conversationBotModeSelectOption_discussion": "Plé", - "conversationBotModeSelectOption_custom": "Saincheaptha", - "conversationBotModeSelectOption_conversation": "Comhrá", - "conversationBotModeSelectOption_textAdventure": "Eachtra Téacs", - "conversationBotModeSelectOption_storyGame": "Cluiche Scéil", - "conversationBotDiscussionZone_title": "Socrúí Comhrá", - "conversationBotDiscussionZone_discussionTopicLabel": "Ábhar Plé", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Socraigh ábhar an phlé", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Eochairfhocail an Phlé", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Socraigh eochairfhocail an phlé", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Liosta eochairfhocal le haghaidh treorach an phlé, scartha le véarsa", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Seolfaidh tú spreagadh an phlé ar sceideal", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Uaireanta idir spreagthaí an phlé", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Freagraíonn ar ghníomhú ar »", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Freagairt chun spreagadh an phlé a sheoladh", - "conversationBotCustomZone_title": "Socruithe Uathúla", - "conversationBotCustomZone_customSystemPromptLabel": "Preabchomhordú córas", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Socraigh preabchomhordú córas uathúil", - "conversationBotCustomZone_customSystemPromptEmptyError": "Níl preabchomhordú córas uathúil curtha isteach", - "botConfig": "Socruithe an bhot agus na gníomhaíochta", - "botConfigNoPermissionTitle": "Níl cead agat", - "botConfigNoPermissionMessage": "Déan teagmháil le riarthóir an tseomra chun socruithe an bhot a athrú", - "addConversationBotDialogTitleInvite": "Deimhnigh cuireadh a thabhairt don bhot comhrá", - "addConversationBotButtonInvite": "Cuireadh", - "addConversationBotDialogInviteConfirmation": "Cuireadh", - "addConversationBotButtonTitleRemove": "Deimhnigh bainistíocht an bhot comhrá", - "addConversationBotButtonRemove": "Bain", - "addConversationBotDialogRemoveConfirmation": "Bain", - "conversationBotConfigConfirmChange": "Deimhnigh", - "conversationBotStatus": "Cuireadh cuireadh bot", - "conversationBotTextAdventureZone_title": "Eachtra Téacs", - "conversationBotTextAdventureZone_instructionLabel": "Treoracha an Mháistir Cluiche", - "conversationBotTextAdventureZone_instructionPlaceholder": "Socraigh treoracha an mháistir cluiche", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Tá treoracha an mháistir cluiche ar iarraidh", - "studentAnalyticsNotAvailable": "Ní féidir sonraí na mac léinn a fháil faoi láthair", - "roomDataMissing": "D'fhéadfadh roinnt sonraí a bheith ar iarraidh ó na seomraí nach bhfuil tú ina bhall de.", "updatePhoneOS": "D'fhéadfadh go mbeadh ort do leagan OS a nuashonrú ar do ghléas.", "wordsPerMinute": "Focail in aghaidh na nóimead", "autoIGCToolName": "Rith cabhair scríbhneoireachta Pangea go huathoibríoch", "autoIGCToolDescription": "Rith uathoibríoch cabhair gramadaí agus aistriúcháin Pangea Chat sula seolfaidh mé mo theachtaireacht.", - "runGrammarCorrection": "Seiceáil teachtaireacht", - "grammarCorrectionFailed": "Ceisteanna le réiteach", - "grammarCorrectionComplete": "Tá sé go maith!", "tooltipInstructionsTitle": "Níl tú cinnte cad a dhéanann sé sin?", "tooltipInstructionsMobileBody": "Bain agus coinnigh ar na míreanna chun treoracha a fheiceáil.", "tooltipInstructionsBrowserBody": "Cliceáil agus coinnigh ar na míreanna chun treoracha a fheiceáil.", "chatCapacity": "Cumaisc comhrá", "roomFull": "Tá an seomra seo lán cheana.", - "topicNotSet": "Níl an téama socraithe.", - "chatCapacityNotSet": "Níl teorainn ar chumas an chomhrá seo.", "chatCapacityHasBeenChanged": "Athraíodh cumas an chomhrá", "chatCapacitySetTooLow": "Ní mór do chumas an chomhrá a bheith ar a laghad {count}.", "chatCapacityExplanation": "Cuireann cumas an chomhrá teorainn ar líon na mbaill a cheadaítear i gcomhrá.", - "chatExceedsCapacity": "Tá an comhrá seo os cionn a chumas.", "tooManyRequest": "Rogha ró-ard, déan iarracht arís níos déanaí.", "enterNumber": "Cuir luach uimhriúil iomlán isteach le do thoil.", "buildTranslation": "Tóg do aistriúchán ó na roghanna thuas", - "nonexistentSelection": "Níl an rogha ann níos mó.", - "changeAnalyticsLanguage": "Athraigh Teanga Anailíse", "practice": "Cleachtadh", "noLanguagesSet": "Níl aon teangacha socraithe", - "noActivitiesFound": "Tá sin go leor faoi láthair! Tar ar ais níos déanaí le haghaidh tuilleadh.", - "hintTitle": "Leideán:", "speechToTextBody": "Maidir le teachtaireachtaí gutha, is féidir leat trascríobh a fheiceáil chomh maith le scór Focal in aghaidh an Nóiméidí an chainteora.", "versionNotFound": "Níor aimsíodh leagan", "fetchingVersion": "Ag fáil leagan...", "versionFetchError": "Earráid ag fáil amach an leagan", "versionText": "Leagan: {version}+{buildNumber}", - "languageButtonLabel": "Teanga: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Aistriú uathoibríoch", - "interactiveTranslatorAutoPlayDesc": "Seolann an t-aistritheoir idirghníomhach gan iarraidh.", - "changeAnalyticsView": "Athraigh Amharc Anailíse", "l1TranslationBody": "Ní bheidh teachtaireachtaí i do theanga bhunúsach le haistriú.", "deleteSubscriptionWarningTitle": "Tá síntiús gníomhach agat", "deleteSubscriptionWarningBody": "Ní chuirfidh scriosadh do chuntais do shíntiús go huathoibríoch ar ceal.", @@ -4178,9 +3820,7 @@ "error520Title": "Déan iarracht arís le do thoil.", "error520Desc": "Tá brón orm, níor thuig muid do theachtaireacht...", "wordsUsed": "Focail Úsáidte", - "errorTypes": "Cineálacha Earráid", "level": "Leibhéal", - "canceledSend": "Seoladh curtha ar ceal", "morphsUsed": "Morpheanna Úsáidte", "translationChoicesBody": "Cliceáil agus coinnigh rogha le haghaidh leideanna.", "grammar": "Gairme", @@ -4190,7 +3830,6 @@ "reportContentIssueTitle": "Tuairisc a thabhairt ar fhadhb ábhar", "feedback": "Aiseolas roghnach", "reportContentIssueDescription": "Á, a Dhia! Is féidir le AI taithí foghlama phearsantaithe a sholáthar ach... déanann sé halóga freisin. Tabhair aon aiseolas atá agat agus déanfaimid iarracht arís.", - "changeContent": "Á, a Dhia! Is féidir le AI taithí foghlama phearsantaithe a sholáthar ach... déanann sé halóga freisin. Cad ba chóir dó a bheith?", "clickTheWordAgainToDeselect": "Cliceáil ar an bhfocal roghnaithe chun é a dhí-roghnú.", "l2SupportNa": "Níl sé ar fáil", "l2SupportAlpha": "Ailf", @@ -4424,7 +4063,6 @@ "grammarCopySPC": "Sonraíocht", "grammarCopyPARTTYPE": "Cineál Rannpháirtíochta", "grammarCopyINTREL": "Ceist-Relatív", - "grammarCopyNUMFORMpsor": "Uimhir an Úinéara", "grammarCopyUNKNOWN": "Dáiríre", "grammarCopyNUMBERPSOR": "Uimhir an Úinéara", "grammarCopyPOSS": "Seilbh", @@ -4470,28 +4108,14 @@ "grammarCopyVOICEdir": "Díreach", "grammarCopyVOICEinv": "Inmhéanach", "grammarCopyVOICErcp": "Comhoiriúnach", - "enterPrompt": "Cuir isteach treoir chóras le do thoil", - "selectBotLanguage": "Roghnaigh teanga an bhot", - "chooseVoice": "Roghnaigh guth", - "enterLanguageLevel": "Cuir isteach leibhéal teanga le do thoil", - "enterDiscussionTopic": "Cuir isteach ábhar plé le do thoil", - "selectBotChatMode": "Roghnaigh mód comhrá", - "messageNotInTargetLang": "Teachtaireacht nach bhfuil sa teanga sprioc", "other": "Eile", "levelShort": "LEIBHÉAL {level}", - "botModeValidation": "Roghnaigh mód comhrá le do thoil", "clickBestOption": "Roghnaigh na roghanna is fearr chun do theachtaireacht a aistriú!", "completeActivitiesToUnlock": "Críochnaigh ar a laghad gníomhaíocht amháin chun an t-aistriúchán a dhíghlasáil!", - "botSettingsSubtitle": "Cuireadh bot chun gníomhaíocht comhrá a bhainistiú", - "invitePeople": "Cuireadh úsáideoirí", "noCapacityLimit": "Gan teorainn acmhainne", "downloadGroupText": "Íoslódáil téacs an ghrúpa", "notificationsOn": "Fógraí ar siúl", "notificationsOff": "Fógraí as", - "chatCanBeFoundViaSearch": "Féadfaidh tú comhrá a aimsiú trí chuardach", - "requireCodeToJoin": "Teastaíonn cód chun páirt a ghlacadh", - "canFindInSearch": "Féadfaidh tú a aimsiú sa chuardach", - "addChatToSpace": "Cuir comhrá leis an spás", "createChatAndInviteUsers": "Cruthaigh comhrá agus cuireadh a thabhairt do úsáideoirí", "updatedNewSpaceDescription": "Ligeann cúrsaí duit do chomhráite a chur le chéile agus pobail phríobháideacha nó phoiblí a thógáil.", "joinWithCode": "Bí páirteach le cód", @@ -4527,39 +4151,19 @@ "constructUseCollected": "Bailithe i gcomhrá", "constructUseNanDesc": "Níl infheidhmithe", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Logáil isteach le hainm úsáideora agus pasfhocal", - "registrationEmailMessage": "Déan doiciméad do r-phost a fhíorú le nasc a sheoltar ann. I gcásanna áirithe, tógann sé suas le 5 nóiméad chun an r-phost a shroichint. Seiceáil do chliabh spam freisin.", "enableTTSToolName": "Cumasaíodh téacs-go-huaiseacht", "enableTTSToolDescription": "Ceadaigh don aip toradh téacs-go-huaiseacht a ghiniúint do chuid codanna den téacs i do theanga sprioc.", - "couldNotFindTTS": "Níorbh fhéidir linn inneall téacs-go-huaiseacht a fháil do do theanga sprioc reatha.", - "ttsInstructionsHyperlink": "Cliceáil anseo chun treoracha a fheiceáil maidir le híoslódáil guth nua ar do ghléas.", - "createAnAccount": "Cruthaigh cuntas", - "signIn": "Logáil isteach", - "signUpWithEmail": "Cláraigh le Ríomhphost", - "signUpWithGoogle": "Cláraigh le Google", - "signUpWithApple": "Cláraigh le Apple", "yourUsername": "Do chuid ainm úsáideora", "yourEmail": "Do r-phost", - "pleaseEnterAnEmail": "Cuir isteach seoladh r-phost le do thoil", - "signInWithGoogle": "Logáil isteach le Google", - "signInWithApple": "Logáil isteach le Apple", - "chooseYourAvatar": "Roghnaigh do híomhá phearsanta", "iWantToLearn": "Ba mhaith liom foghlaim", - "letsStart": "Tosaigh", - "pleaseAgreeToTOS": "Aontóidh le do thoil na Téarmaí agus na Coinníollacha", "pleaseEnterEmail": "Cuir isteach seoladh ríomhphoist bailí le do thoil.", - "pleaseSelectALanguage": "Roghnaigh teanga le do thoil", "myBaseLanguage": "Mo theanga bhunúsach", - "clickWordsInstructions": "🧑‍⚖️ Cliceáil ar aon fhocal le haghaidh sonraí. 🤐", - "chooseBestDefinition": "Cad a chiallaíonn an focal seo?", "meaningSectionHeader": "Ciall:", "formSectionHeader": "Foirmiúlachtaí a úsáidtear i gcomhráite:", - "noEmojiSelectedTooltip": "Níl emoji roghnaithe", "writingExercisesTooltip": "Scríobh", "listeningExercisesTooltip": "Éisteacht", "readingExercisesTooltip": "Léamh", "meaningNotFound": "Níor féidir an ciall a fháil.", - "formsNotFound": "Níor féidir na foirmeacha a fháil.", "chooseBaseForm": "Roghnaigh an fhoirm bhunúsach", "notTheCodeError": "Tá brón orm, ní é sin an cód!", "totalXP": "Gach XP", @@ -4599,9 +4203,6 @@ "pickAnEmoji": "Cad é an emoji is fearr leat do '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Comhoiriúnigh bríonna leis na focail sa teachtaireacht!", "doubleClickToEdit": "Cliceáil dé-uaire chun eagarthóireacht.", - "removeFeature": "Bain {feature}", - "chooseCorrectLabel": "Roghnaigh an lipéad ceart.", - "levelPopupTitle": "Comhghairdeas ar shroicheadh\nLeve {level}", "activityPlannerTitle": "Pleanálaí Gníomhaíochta", "topicLabel": "Ábhar", "topicPlaceholder": "Roghnaigh ábhar...", @@ -4609,7 +4210,6 @@ "modePlaceholder": "Roghnaigh mód...", "learningObjectiveLabel": "Cuspóir foghlama", "learningObjectivePlaceholder": "Roghnaigh cuspóir foghlama...", - "mediaLabel": "Meán a roinnfidh foghlaimeoirí", "languageOfInstructionsLabel": "Teanga na treoracha gníomhaíochta", "targetLanguageLabel": "Teanga sprioc", "cefrLevelLabel": "Leveál CEFR", @@ -4624,20 +4224,15 @@ "instructions": "Treoracha", "numberOfLearners": "Líon na bhfoghlaimeoirí", "mustBeInteger": "Ní mór a bheith ina uimhir iomlán m.sh. 1, 2, 3, ...", - "noLemmasFound": "Níl aon fhoclóir le níos mó ná {xp} XP. Lean ar aghaidh ag cleachtadh!", "constructUsePvmDesc": "Déanta i gceist guth", - "lockedMorphFeature": "Ag fanacht le bheith scaoilte", "leaveSpaceDescription": "Trí fhágáil an chúrsa, fágfaidh tú na comhráite go léir laistigh de. Feicfidh úsáideoirí eile go bhfuil tú imithe as an gcúrsa.", - "whatIsLemma": "Cad é an lemas?", "constructUseCorMmDesc": "Brí teachtaireachta ceart", "constructUseIncMmDesc": "Brí teachtaireachta mícheart", "constructUseIgnMmDesc": "Brí teachtaireachta neamhaird", "clickForMeaningActivity": "Cliceáil anseo le haghaidh Dúshlán Brí", "meaning": "Brí", "chatWith": "Grúpa le {displayname}", - "slightlyOffensive": "Leánnta beagáinín maslach", "clickOnEmailLink": "Cliceáil ar an nasc san r-phost le do thoil agus lean ar aghaidh.\n\nSeiceáil do chliabh spam má tá an r-phost fós gan teacht.", - "whoIsAllowedToJoinThisChat": "Cé atá ceadaithe chun páirt a ghlacadh sa chomhrá seo", "dontForgetPassword": "Ná déan dearmad ar do phasfhocal!", "enableAutocorrectToolName": "Cumasaigh uathoibriú ceartaitheoir an ghléis", "enableAutocorrectDescription": "Má tá do ghléas tacaíocht ag teanga atá tú ag foghlaim, is féidir leat uathoibriú ceartaitheoir an ghléis a chumasú chun earráidí coitianta a cheartú de réir mar a chlóscríontar.", @@ -4665,48 +4260,26 @@ "autocorrectNotAvailable": "Ar an drochuair, níl do chóras reatha tacaíocht don ghné seo faoi láthair. Fan ar an eolas le haghaidh forbairtí eile!", "pleaseUpdateApp": "Le do thoil, déan nuashonrú ar an aip chun leanúint ar aghaidh.", "chooseEmojiInstructionsBody": "Comhoiriúnigh na híomhánna le na focail is fearr a léiríonn iad. Ná bí buartha! Níl pointí caillte má aontaíonn tú nó nach n-aontaíonn tú. 😅", - "pickAnEmojiFor": "Roghnaigh íomhá éadaí do {lemma}", "analyticsVocabListBody": "Seo do gach focail atá agat! De réir mar a fhaigheann tú XP do gach focal, téann siad ó shíog go bláth iomlán. Cliceáil ar aon fhocal chun tuilleadh sonraí a fheiceáil.", "morphAnalyticsListBody": "Seo iad na coincheapa gramadaí go léir sa teanga atá tú ag foghlaim! Gheobhaidh tú iad de réir mar a thagann tú orthu agus tú ag comhrá. Cliceáil chun sonraí a fháil.", "knockSpaceSuccess": "Tá tú tar éis iarraidh a bheith páirteach sa chúrsa seo! Freagróidh riarthóir do iarratas nuair a fhaigheann sé é 😀", - "joinByCode": "Bí páirteach le cód", "chooseWordAudioInstructionsBody": "Éist leis an teachtaireacht iomlán. Ansin, déan comparáid idir na fuaimeanna agus na focail.", "chooseMorphsInstructionsBody": "Cliceáil ar na píosaí puzail le haghaidh ceisteanna gramadaí!", - "inviteAndLaunch": "Cuireadh agus tús", - "createOwnChat": "Cruthaigh do chat féin", "pleaseEnterInt": "Cuir isteach uimhir le do thoil", "home": "Baile", "join": "Bí páirteach", "readingAssistanceOverviewBody": "Cliceáil ar na cnaipeanna thíos le haghaidh cluichí beaga ar mheaitseáil íomhánna, fuaimeanna, brí na bhfocail, agus coincheapa gramadaí. Nó cliceáil ar aon fhocal le haghaidh sonraí.", - "learnByTexting": "Foghlaim trí theachtaireacht téacs", - "levelSummaryTrigger": "Féach ar achoimre", "levelSummaryPopupTitle": "Achoimre leibhéal {level}", - "referFriends": "Tagraigh cairde", - "referFriendDialogTitle": "Cuireadh a thabhairt do chara do do chomhrá", - "referFriendDialogDesc": "An bhfuil cara agat atá ar bís foghlaim teanga nua leat? Ansin, cóipeáil agus seol an nasc cuireadh seo chun páirt a ghlacadh agus comhrá a thosú leat inniu.", - "youUnlocked": "Tá tú tar éis oscailt", "resetInstructionTooltipsTitle": "Athshocraigh na téacsleabhair treorach", "resetInstructionTooltipsDesc": "Cliceáil chun na téacsleabhair treorach a thaispeáint ar nós do úsáideoir nua.", "selectForGrammar": "Roghnaigh deilbhín gramadach le haghaidh gníomhaíochtaí agus sonraí.", - "newChatActivityTitle": "Ar mhaith leat gníomhaíocht spraíúil a chur leis?", - "newChatActivityDesc": "Déan gach comhrá grúpa eachtra le Pleanálaí Gníomhaíochta! Socraigh topaicí agus cuspóirí suimiúla don ghrúpa, agus tabhair beocht don chomhrá le híomhánna álainn. Spreag pléanna samhlaíocha agus coinnigh an spraoi ag sileadh go héasca!", - "exploreMore": "Féach tuilleadh", "randomize": "Randamach", "clear": "Glan", "makeYourOwnActivity": "Cruthaigh do ghnó féin", "featuredActivities": "Réamh-mholta", - "goToChat": "Téigh go dtí an comhrá", "save": "Sábháil", - "selectActivity": "Roghnaigh gníomhaíocht", - "wordFocusListeningMultipleChoice": "Cén t-amhharc fuaime a oireann don fhocal?", "startChat": "Tosaigh comhrá", "translationProblem": "Fadhb aistriúcháin", - "perfectTranslation": "Aistriúchán foirfe!", - "greatJobTranslation": "Obair den scoth leis an aistriúchán seo!", - "goodJobTranslation": "Obair mhaith ar an aistriúchán seo.", - "makingProgress": "Tá tú ag dul chun cinn!", - "keepPracticing": "Coinnigh ag cleachtadh!", - "niceJob": "Obair den scoth!", "askToJoin": "Iarr le bheith páirteach", "emptyChatWarningTitle": "Tá an comhrá folamh", "emptyChatWarningDesc": "Níl aon duine á thabhairt cuireadh duit sa chomhrá seo. Téigh go Socruithe Comhrá chun do chairde nó an Bot a thabhairt cuireadh. Is féidir leat é seo a dhéanamh níos déanaí freisin.", @@ -4725,8 +4298,6 @@ "languageLevelC2Desc": "Is féidir liom beagnach gach rud a chloisteáil nó a léamh a thuiscint agus mé féin a chur in iúl go líofa agus go cruinn.", "newVocab": "Focail nua", "newGrammar": "Coincheapa gramadaí nua", - "congratulationsOnReaching": "Tá tú ar an leibhéal {level}!", - "seeDetails": "Féach ar shonraí", "choosePracticeMode": "Cliceáil ar cheann de na cnaipeanna thuas chun gníomhaíocht chleachtadh a thosú", "ban": "Cosaint", "unban": "Fuaireann", @@ -4740,8 +4311,6 @@ "timesUsedWithAssistance": "Uaireanta úsáide le cabhair", "shareInviteCode": "Roinn cód cuireadh: {code}", "leaderboard": "Bord na n-iomaitheoirí", - "welcomeUser": "Fáilte {user}", - "joinSpaceOnboardingDesc": "An bhfuil cód cuireadh nó nasc agat chuig cúrsa poiblí?", "skipForNow": "Scipeáil faoi láthair", "permissions": "Ceadanna", "spaceChildPermission": "Cé hiad is féidir leo cuntais nua a chur leis an gcúrsa seo", @@ -4749,12 +4318,8 @@ "defaultOption": "Réamhshocrú", "deleteChatDesc": "An bhfuil tú cinnte gur mhaith leat an comhrá seo a scriosadh? Scriosfar é do gach rannpháirtí agus ní bheidh aon teachtaireachtaí laistigh den chomhrá ar fáil níos mó le haghaidh cleachtadh nó anailís foghlama.", "deleteSpaceDesc": "Scriosfar an cúrsa agus aon chomhrá roghnaithe do gach rannpháirtí agus ní bheidh aon teachtaireachtaí laistigh den chomhrá ar fáil níos mó le haghaidh cleachtadh nó anailís foghlama. Ní féidir an gníomh seo a chur ar ceal.", - "chatWithActivities": "Comhrá le gníomhaíochtaí", "launch": "Seol", - "launchActivityToChats": "Seol gníomhaíocht chuig comhráite", "searchChats": "Cuardaigh comhráite", - "selectChats": "Roghnaigh comhráite", - "selectChatToStart": "Críochnaigh! Roghnaigh comhrá chun tús a chur", "maxFifty": "Max 50", "configureSpace": "Cumraigh cúrsa", "pinMessages": "Greamaigh teachtaireachtaí", @@ -4768,9 +4333,7 @@ "announcements": "Fógraí", "activities": "Gníomhaíochtaí", "access": "Rochtain", - "botSettings": "Socruithe bot", "activitySuggestionTimeoutMessage": "Táimid ag obair go dian chun tuilleadh gníomhaíochtaí a ghiniúint duit, seiceáil ar ais i nóiméad le do thoil", - "accessSettingsWarning": "Ádh mór! Is cosúil nach bhfuil cead agat rialacha Rochtana an tseomra seo a shocrú. Ba cheart duit na rialacha seo a sheiceáil chun a chinntiú go bhfuil siad mar atá uait agus labhairt le riarthóir seomra má tá athruithe uait", "howSpaceCanBeFound": "Conas is féidir an cúrsa seo a aimsiú", "private": "Príobháideach", "cannotBeFoundInSearch": "Ní féidir é a aimsiú sa chuardach", @@ -4783,16 +4346,6 @@ "canBeFoundViaKnock": "• iarratas chun páirt a ghlacadh agus ceadú riarthóra", "youHaveLeveledUp": "Tá tú tar éis leibhéal a bhaint amach!", "sendActivities": "Seol gníomhaíochtaí", - "getStarted": "Tosaigh", - "getStartedBotChatDesc": "Is áit iontach é comhrá le AI chun tús a chur agus déanann uirlisí léamh, scríobh, éisteacht agus labhairt Pangea éasca!", - "getStartedCommunitiesDesc": "Tá sé i bhféith an phobail foghlaim le Pangea Chat! \nIs féidir leat do rang a bheith páirteach, cúrsa a fháil, nó fiú do chuid féin a chruthú!", - "getStartedFriendsDesc": "An bhfuil cara agat a bhfuil fonn foghlama leat?", - "getStartedBotChatComplete": "Maith thú! Tá tú ag comhrá leis an mbot!", - "getStartedCommunitiesComplete": "Go hiontach, tá tú i do bhall den chúrsa!", - "getStartedComplete": "Tá tú críochnaithe leis an rannóg seo!\nLean ort ag iniúchadh ár ngnéithe iontacha trí bheith ag comhrá le cairde!", - "getStartedFriendsComplete": "Woohoo! Tá cairde agat! 😉", - "getStartedBotChatButton": "Tosaigh ag comhrá!", - "getStartedFriendsButton": "Comhrá le cara", "groupChat": "Comhrá Grúpa", "directMessage": "Teachtaireacht Dhíreach", "newDirectMessage": "Teachtaireacht Dhíreach Nua", @@ -4808,7 +4361,6 @@ "mySavedActivities": "Mo Gníomhaíochtaí Sábháilte", "noSavedActivities": "Níl aon ghníomhaíochtaí sábáilte", "saveActivity": "Sábháil an gníomhaíocht seo", - "yourSavedActivities": "Gníomhaíochtaí Sábháilte", "failedToPlayVideo": "Theip ar sheinm an fhíseáin", "done": "Déanta", "inThisSpace": "Sa chúrsa seo", @@ -4847,37 +4399,27 @@ "maximumActivityParticipants": "Is féidir le gach Gníomhaíocht a bheith ag max {count} rannpháirtí.", "pending": "Iontach", "inactive": "Neamhghníomhach", - "unjoinedActivityMessage": "An bhfuil tú ag iarraidh páirt a ghlacadh? Roghnaigh ról oscailte!\nNó caith suas agus féach ar an seó!", - "fullActivityMessage": "Mothaigh saor chun féachaint ar an seó! Cé nach bhfuil aon róil oscailte le páirt a ghlacadh, is féidir leat an comhrá a fheiceáil!", "confirmRole": "Deimhnigh ról", "openRoleLabel": "OSCAIL", "joinedTheActivity": "👋 {username} d'fháiltigh isteach mar {role}", "finishedTheActivity": "🎯 {username} chríochnaigh an gníomhaíocht seo", - "endActivityTitle": "Tá mé críochnaithe", - "endActivityDesc": "An ndearna tú na cuspóirí?\nSeo do dheimhniú go bhfuil tú ag dul siar ó theachtaireacht. Ach ná bí buartha, leanann an spraoi ar aghaidh sa chomhrá! Cuir suas agus bain sult as an seó go dtí go clicfidh gach duine ar 'Críochnaithe'.", "archiveToAnalytics": "Cuir leis na Gníomhaíochtaí Críochnaithe agam", "activitySummaryError": "Ní féidir achoimrigh gníomhaíochta a fháil", "requestSummaries": "Iarr achoimrigh", - "loadingActivitySummary": "Ag lódáil achoimre gníomhaíochta...", "generatingNewActivities": "Is tú an chéad úsáideoir den phair teanga seo! Tabhair cúpla nóiméad dúinn, táimid ag ullmhú gníomhaíochtaí díreach duitse.", - "requestAccessTitle": "Iarr ar rochtain ar anailísíocht a fháil?", + "requestAccessTitle": "An bhfuil tú ag iarraidh rochtain ar an anailís?", "requestAccessDesc": "Ar mhaith leat rochtain a fháil chun anailísíocht rannpháirtithe a fheiceáil?\n\nMura n-aontaíonn rannpháirtithe, beidh na riarthóirí den chúrsa seo in ann a fheiceáil:\n • an t-uimhir fhoclóra iomlán\n • na coincheapa gramadaí iomlána\n • na seisiúin gníomhaíochta iomlána a chríochnaigh\n • na coincheapa gramadaí sonracha a úsáid, i gceart agus i gceart mícheart\n\nNí bheidh siad in ann a fheiceáil:\n • teachtaireachtaí i gcomhráite lasmuigh den chúrsa\n • liosta fhoclóra", "requestAccess": "Iarr rochtain ({count})", "analyticsInactiveTitle": "Níor féidir iarratais ar úsáideoirí neamhghníomhacha a sheoladh", "analyticsInactiveDesc": "Ní fheicfidh úsáideoirí neamhghníomhacha nach ndearna siad logáil isteach ó thús na gné seo do do iarratas.\n\nTiocfaidh an cnaipe Iarr ar ais nuair a bheidh siad ar ais. Is féidir leat an iarraidh a sheoladh arís níos déanaí trí chliceáil ar an gcnaipe Iarr ar ais faoi a n-ainm nuair a bheidh sé ar fáil.", "accessRequestedTitle": "Iarratas ar rochtain ar anailísí", - "accessRequestedDesc": "Tá na riarthóirí de “{space}” ag iarraidh do chuid anailísí foghlama a fheiceáil.\n\nMura n-aontaíonn tú, beidh na riarthóirí den chúrsa seo in ann do chuid:\n • uimhreacha focail\n • coincheapa gramadaí\n • suímh gníomhaíochta críochnaithe\n • na coincheapa gramadaí ar leith a úsáid, go ceart agus go mícheart\n\nNí bheidh siad in ann do chuid a fheiceáil:\n • teachtaireachtaí i gcomhráite lasmuigh den chúrsa\n • liosta na bhfocal", - "allowAccess": "Ceadaigh Rochtain", - "denyAccess": "Diúltaigh Rochtain", + "accessRequestedDesc": "Ag iarraidh admin(í): {admin} \n\nTá admin ó “{space}” ag iarraidh rochtain a fháil ar do thuarascálacha foghlama.\n\nMás aontaíonn tú, beidh siad in ann do:\n • iomlán foclóra\n • iomlán coincheapa gramadaí\n • iomlán seisiúin gníomhaíochta a chríochnaigh\n • na coincheapa gramadaí ar leith a úsáidtear, go ceart agus go mícheart\n\nNí bheidh siad in ann do:\n • teachtaireachtaí i gcaibidlí lasmuigh den chúrsa\n • liosta foclóra", "adminRequestedAccess": "D'iarr na riarthóirí rochtain ar do chuid anailísí.", "lastUpdated": "Nuashonraithe\n{time}", "activityFinishedMessage": "Críochnaíodh go léir!", "endForAll": "Críochnaigh do gach duine", "newCourse": "Cúrsa Nua", - "newCourseSubtitle": "Cén plean cúrsa ar mhaith leat a úsáid?", - "failedToLoadCourses": "Níor éirigh le cúrsaí a luchtú", "numModules": "{num} modúl", - "numActivityPlans": "{num} plean gníomhaíochta", "coursePlan": "Plean Cúrsa", "editCourseLater": "Is féidir leat teideal an phlean, cur síos, agus íomhá an chúrsa a chur in eagar níos déanaí.", "newCourseAccess": "De réir réamhshocraithe, tá cúrsaí príobháideach agus iarrtar cead riarthóra chun páirt a ghlacadh. Is féidir leat na socruithe seo a chur in eagar ag am ar bith.", @@ -4891,17 +4433,11 @@ "accessDesc": "Is féidir leat do chúrsa a dhéanamh oscailte don domhan! Nó, déan do chúrsa príobháideach agus slán.", "createGroupChatDesc": "De réir mar a thosaíonn agus a chríochnaíonn seisiúin gníomhaíochta, fanfaidh comhráite grúpa oscailte le haghaidh cumarsáide rialta.", "deleteDesc": "Ní féidir le haon riarthóirí cúrsa a scriosadh ach amháin. Is gníomh díobhálach é seo a bhaint go léir na húsáideoirí agus a scriosadh na comhráite uile roghnaithe laistigh den chúrsa. Bí cúramach le do thoil.", - "failedToLoadCourseInfo": "Níor éirigh leis faisnéis an chúrsa a luchtú", "noCourseFound": "Ó, tá gá le plean don chúrsa seo!\n\nIs sraith téacs agus gníomhaíochtaí comhrá iad pleananna cúrsa.", "additionalParticipants": "+ {num} eile", - "activityNotFoundForCourse": "Níor aimsíodh an gníomhaíocht seo laistigh den chúrsa", - "courseChats": "Comhráite an Chúrsa", - "myActivitySessions": "Mo Sheisiúin Gníomhaíochta", "directMessages": "Teachtaireachtaí Díreacha", "whatNow": "Cad atá le déanamh anois?", "chooseNextActivity": "Roghnaigh do chéad ghníomhaíocht eile!", - "seeInstructions": "Féach Treoracha", - "hideInstructions": "Folaigh Treoracha", "letsGo": "Téimis", "chooseRole": "Roghnaigh ról!", "chooseRoleToParticipate": "Roghnaigh ról le bheith páirteach!", @@ -4911,23 +4447,15 @@ "inviteFriends": "Cuireadh cairde", "waitNotDone": "Fan, níl mé críochnaithe!", "waitingForOthersToFinish": "Ag fanacht ar na daoine eile chun críochnú...", - "saveToCompletedActivities": "Sábháil chuig gníomhaíochtaí críochnaithe", "generatingSummary": "Ag anailísiú comhrá agus torthaí a ghiniúint", - "instructionsLanguage": "Teanga treoracha", "findCourse": "Féach ar chúrsa", - "activityCompletedDesc": "Cuireadh do ghníomhaíocht chríochnaithe chuig anailísí, áit ar féidir leat athbhreithniú a dhéanamh agus cleachtadh a dhéanamh ar an teanga a úsáideadh.", "pingParticipantsNotification": "{user} ag lorg úsáideoirí chun rannpháirtíocht sa seisiún gníomhaíochta i {room}", "course": "Cúrsa", "courses": "Cúrsaí", "courseName": "Ainm an chúrsa", "createNewCourse": "Cúrsa nua", - "publicCourses": "Cúrsaí poiblí", "goToCourse": "Téigh go cúrsa: {course}", "activityComplete": "Tá an ghníomhaíocht seo críochnaithe. Ba chóir go mbeadh achoimre na gníomhaíochta ar fáil thíos.", - "haventChattedMuch": "Is cosúil nach bhfuil tú tar éis caint go leor, bain triail as roinnt focail nua! Mura bhfuil tú ag iarraidh do chuspóir a bhaint amach, is féidir leat an gníomhaíocht a chríochnú thíos.", - "haveChatted": "Tá cuma air go bhfuil tú ag comhrá le tamall! Mura bhfuil tú ag iarraidh do chuspóir a chríochnú, críochnaigh chun an gníomhaíocht a chríochnú agus cruthóimid achoimre duit sa chomhrá!", - "userDoneAndWaiting": "{num1}/{num2} rannpháirtithe críochnaigh. Fan go mbeidh gach duine críochnaithe, agus cruthóimid achoimre duit sa chomhrá! \n\nMás mian leat filleadh ar an gcomhrá, cliceáil ar an gcnaipe leanúint sa chomhrá.", - "othersDoneAndWaiting": "{num1}/{num2} críochnaigh. An bhfuil tú tar éis do chuspóir a bhaint amach?", "startNewSession": "Tús a chur le seisiún nua", "joinOpenSession": "Cláraigh le haghaidh seisiún oscailte", "less": "níos lú", @@ -4937,7 +4465,6 @@ "openToJoin": "Oscailte le bheith páirteach", "results": "Torthaí", "activityDone": "Gníomhaíocht déanta!", - "moreLabel": "níos mó", "promoCodeInfo": "Is féidir cód promo a chur isteach ar an leathanach eile", "editsComingSoon": "Tá an cumas eagarthóireachta ar chathracha agus ar ghníomhaíochtaí ag teacht go luath.", "editing": "Ag eagarthóireacht", @@ -4953,13 +4480,10 @@ "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", - "chooseLanguage": "Roghnaigh teanga.", + "chooseLanguage": "Roghnaigh teanga sprioc.", "planTrip": "Pleanáil do thuras", "howAreYouTraveling": "Conas atá tú ag taisteal?", "unlockPrivateTrip": "Díghlasáil turas príobháideach", @@ -4972,25 +4496,20 @@ "courseCode": "Cad é an pasfhocal rúnda?", "courseCodeHint": "Cód turais nó nasc", "unlockMyTrip": "Oscail mo thuras", - "anyLevel": "Aon leibhéal ar bith", "signupOption": "Conas ar mhaith leat clárú?", "withApple": "Le Apple", "withGoogle": "Le Google", "withEmail": "Le Ríomhphost", "createAccount": "Cruthaigh cuntas", - "noCoursesFound": "Níor aimsíodh aon chúrsaí", "loginWithEmail": "Logáil isteach le ríomhphost", "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", - "allCefrLevels": "Gach leibhéal CEFR", "chatListTooltip": "Anseo gheobhaidh tú do theachtaireachtaí díreacha! Cliceáil ar avatar aon úsáideora agus “tosaigh comhrá” chun DM a sheoladh.", "directMessageBotTitle": "Bot Teachtaireachta Díreacha Pangea", "feedbackTitle": "Aiseolas Gníomhaíochta", - "feedbackDesc": "Conas ba cheart feabhas a chur ar an ngníomhaíocht? Mura bhfuil aon sonraí agat, déanfaimid an t-athrú!", "feedbackHint": "Do chuid aiseolais", "feedbackButton": "Seol aiseolas", "directMessageBotDesc": "Tá comhrá le daoine níos spraíúla ach... tá AI i gcónaí réidh!", @@ -4998,35 +4517,11 @@ "playWithAI": "Imir le AI faoi láthair", "courseStartDesc": "Tá Bot Pangea réidh chun dul am ar bith!\n\n...ach is fearr foghlaim le cairde!", "@@locale": "ga", - "@@last_modified": "2026-01-06 13:02:48.899020", + "@@last_modified": "2026-01-07 14:29:21.686769", "@customReaction": { "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5042,18 +4537,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5078,18 +4561,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5126,38 +4597,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5166,62 +4609,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5258,10 +4657,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5270,14 +4665,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5286,46 +4673,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5334,10 +4685,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5394,18 +4741,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5414,14 +4749,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5450,18 +4777,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5470,42 +4785,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5514,14 +4797,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5542,26 +4817,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5582,10 +4837,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5618,25 +4869,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5693,34 +4925,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5749,778 +4953,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7513,14 +5949,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7532,14 +5960,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7571,10 +5991,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7583,18 +5999,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7603,14 +6007,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7635,38 +6031,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7712,10 +6080,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7740,10 +6104,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7768,10 +6128,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7780,66 +6136,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7860,42 +6160,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7920,154 +6196,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8084,18 +6212,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8116,14 +6232,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8140,10 +6248,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8156,14 +6260,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8172,14 +6268,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8207,26 +6295,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8255,18 +6323,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8303,10 +6363,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9239,10 +7295,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9423,34 +7475,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9463,10 +7487,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9475,14 +7495,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9499,22 +7511,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9662,14 +7658,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9678,34 +7666,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9714,54 +7674,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9770,10 +7694,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9790,10 +7710,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9965,26 +7881,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10013,10 +7909,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10073,30 +7965,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10125,18 +8001,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10253,14 +8121,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10273,10 +8133,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10285,14 +8141,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10309,14 +8157,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10325,22 +8165,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10353,18 +8177,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10381,22 +8193,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10405,30 +8205,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10501,18 +8277,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10569,18 +8333,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10609,30 +8361,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10685,18 +8421,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10745,46 +8473,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10849,10 +8537,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11024,14 +8708,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11059,14 +8735,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11079,10 +8747,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11118,19 +8782,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11155,14 +8814,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11171,14 +8822,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11231,10 +8874,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11247,18 +8886,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11271,14 +8898,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11319,26 +8938,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11366,10 +8973,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11380,36 +8983,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11446,10 +9019,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11514,18 +9083,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11590,10 +9147,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11614,10 +9167,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11634,10 +9183,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11646,10 +9191,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11662,10 +9203,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11690,16 +9227,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Cuireadh chun cairde a thabhairt chuig gníomhaíocht", - "inviteFriendsToActivityCourse": "Cuireadh chun cairde a thabhairt chuig gníomhaíocht agus cúrsa", "feedbackRespDesc": "Seiceáil ar ais amárach le haghaidh nuashonruithe ar ghníomhaíocht.", "activityDropdownDesc": "Nuair a bheidh tú críochnaithe leis an ngníomhaíocht seo, cliceáil thíos", - "activityAnalyticsListBody": "Seo iad do ghníomhaíochtaí críochnaithe! Tar éis duit na gníomhaíochtaí a chríochnú, is féidir leat iad a fheiceáil anseo.", "languageMismatchTitle": "Míchothrom na teangacha", "languageMismatchDesc": "Ní oireann do theanga sprioc an gníomhaíochta seo do theanga na gníomhaíochta. An bhfuil tú ag iarraidh do theanga sprioc a nuashonrú?", "reportWordIssueTooltip": "Tuairiscigh fadhb eolas focal", "tokenInfoFeedbackDialogTitle": "Aiseolas Eolas Focal", - "tokenInfoFeedbackDialogDesc": "Déantar bot AI botún. Déan cur síos ar aon fhadhbanna a fuair tú leis an eolas thuas.", "noPublicCoursesFound": "Níor aimsíodh cúrsaí poiblí. Ar mhaith leat ceann a chruthú?", "noCourseTemplatesFound": "Níor éirigh linn aon chúrsaí a aimsiú do do theanga sprioc. Is féidir leat comhrá a dhéanamh leis an Pangea Bot sa t-am ar fad, agus seiceáil ar ais níos déanaí le haghaidh tuilleadh cúrsaí.", "botActivityJoinFailMessage": "Tá Pangea Bot ag tógáil tamall le freagairt. Déan triail eile níos déanaí, nó cuireadh a thabhairt do chara.", @@ -11707,14 +9240,6 @@ "leaveDesc": "Fág an spás seo agus na comhráite go léir laistigh de", "selectAll": "Roghnaigh gach rud", "deselectAll": "Dí-roghnaigh gach rud", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11723,10 +9248,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11743,10 +9264,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11780,7 +9297,6 @@ "newMessageInPangeaChat": "🔊 Teachtaireacht nua i gComhrá Pangea", "shareCourse": "Comhroinn cúrsa", "addCourse": "Cuir cúrsa leis", - "joinCourseWithCode": "Cláraigh i gcúrsa le cód", "joinPublicCourse": "Cláraigh i gcúrsa poiblí", "vocabLevelsDesc": "Seo áit a dtéann focail fhocail a bhfuil leibhéal acu nuair a dhéantar iad a leibhéalú!", "highlightVocabTooltip": "Bain úsáid as na focail ghréasáin a bhfuiltear ag iarraidh a ghrúpáil thíos trína sheoladh nó trína chleachtadh sa chomhrá", @@ -11804,10 +9320,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11816,7 +9328,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Níl aon DMs nó comhoibrithe le fáil. Déan cinnte go bhfuil do chuardach litrithe go ceart.", + "activityAnalyticsTooltipBody": "Seo do gníomhaíochtaí sábháilte le haghaidh athbhreithnithe agus cleachtaidh.", + "numSavedActivities": "Uimhir na ngníomhaíochtaí sábháilte", + "saveActivityTitle": "Sábháil gníomhaíocht", + "saveActivityDesc": "Maith thú! Sábháil an gníomhaíocht seo le haghaidh athbhreithnithe agus cleachtaidh níos déanaí", + "levelInfoTooltip": "Anseo is féidir leat na pointí go léir atá tuillte agat a fheiceáil agus conas a fuair tú iad!", + "alreadyInCourseWithID": "Tá tú cheana féin i gcúrsa leis an bplean seo. Ar mhaith leat cúrsa a chruthú leis an bplean céanna, nó dul chuig an gcúrsa atá ann cheana?", + "goToExistingCourse": "Téigh chuig an gcúrsa atá ann cheana", + "emojiView": "Radharc emoji", + "feedbackDialogDesc": "Déanaim botúin freisin! An bhfuil aon rud a chabhróidh liom feabhsú?", + "contactHasBeenInvitedToTheCourse": "Cuireadh an teagmháil chuig an gcúrsa", + "activityStatsButtonTooltip": "Eolas gníomhaíochta", + "allow": "Ceadaigh", + "deny": "Diúltaigh", + "enabledRenewal": "Cuir Athnuachan Suibscríofa ar Siúl", + "subscriptionEndsOn": "Críochnaíonn an Suibscríobh Ar", + "subscriptionRenewsOn": "Athnuachan an Suibscríobh Ar", + "waitForSubscriptionChanges": "D'fhéadfadh go dtógfadh athruithe ar do shuibscríobh nóiméad chun léiriú a fháil sa aip.", + "subscribeReadingAssistance": "Suibscríobh chun uirlisí teachtaireachta a dhíghlasáil", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afracais", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Araibis", + "asDisplayName": "Asamais", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Aisearbaijianach", + "baDisplayName": "Bashkir", + "banDisplayName": "Bailínis", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Béarla Bhealarúiseach", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgáiris", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengálais", + "bnBDDisplayName": "Bengálais (An Bhanglaid)", + "bnINDisplayName": "Bengálais (An India)", + "brDisplayName": "Breton", + "bsDisplayName": "Boisniach", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalóin", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Cúrdach Lárnach", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsican", + "crhDisplayName": "Tuircis Chriomna", + "crsDisplayName": "Fraincis Creole Seselwa", + "csDisplayName": "Seicis", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Cymraeg", + "daDisplayName": "Danmhairgis", + "deDisplayName": "Gearmáinis", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Béarla", + "enAUDisplayName": "Béarla (An Astráil)", + "enGBDisplayName": "Béarla (An Ríocht Aontaithe)", + "enINDisplayName": "Béarla (An India)", + "enUSDisplayName": "Béarla (SAM)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spáinnis", + "esESDisplayName": "Spáinnis (An Spáinn)", + "esMXDisplayName": "Spáinnis (Meicsiceo)", + "euDisplayName": "Basque", + "faDisplayName": "Pearsis", + "ffDisplayName": "Fulah", + "fiDisplayName": "Fionlainnis", + "filDisplayName": "Filipíneach", + "fjDisplayName": "Fidil", + "foDisplayName": "Faoiseach", + "frDisplayName": "Fraincis", + "frCADisplayName": "Fraincis (Ceanada)", + "frFRDisplayName": "Fraincis (An Fhrainc)", + "fyDisplayName": "Frisian Thiar", + "gaDisplayName": "Gaeilge", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaeilge na hAlban", + "glDisplayName": "Gailís", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Concaine Goan", + "guDisplayName": "Gújaratí", + "haDisplayName": "Hausa", + "hawDisplayName": "Havaí", + "heDisplayName": "Heebréach", + "hiDisplayName": "Hiondú", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Cróitis", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Críochnaigh Haití", + "huDisplayName": "Ungáiris", + "hyDisplayName": "Airméinis", + "idDisplayName": "Indonéisis", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Oileán na hÍsiltíre", + "itDisplayName": "Iodáilis", + "jaDisplayName": "Seapáinis", + "jvDisplayName": "Seimíneach", + "kaDisplayName": "Géorgach", + "kkDisplayName": "Cásac", + "kmDisplayName": "Caiméireach", + "knDisplayName": "Kannada", + "koDisplayName": "Cóiréach", + "kokDisplayName": "Conchani", + "kriDisplayName": "Krio", + "ksDisplayName": "Caismirí", + "ktuDisplayName": "Kituba (Poblacht Dhaonlathach na Congó)", + "kuDisplayName": "Cúrdach", + "kyDisplayName": "Círgeach", + "laDisplayName": "Laidin", + "lbDisplayName": "Lucsamburgach", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgach", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Laitvis", + "ltgDisplayName": "Latgalian", + "luoDisplayName": "Luo (Ceanáda agus Tansáin)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Laitvis", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolian", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabic)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Máltais", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmiiseach", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Nórsach (Bokmål)", + "neDisplayName": "Neapaileach", + "newDisplayName": "Newari", + "nlDisplayName": "Ollainnis", + "nlBEDisplayName": "Flamand", + "noDisplayName": "Nórsach", + "nrDisplayName": "Deisceart Ndebele", + "nsoDisplayName": "Sotho Thuaidh", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polainnis", + "psDisplayName": "Pashto", + "ptDisplayName": "Portaingéilis", + "ptBRDisplayName": "Portaingéilis (an Bhrasaíl)", + "ptPTDisplayName": "Portaingéilis (an Phortaingéil)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rómáinis", + "roMDDisplayName": "Moldóivis", + "romDisplayName": "Romáinis", + "ruDisplayName": "Rúisis", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilias", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Síneach", + "skDisplayName": "Slóivéig", + "slDisplayName": "Slóivéineach", + "smDisplayName": "Samoan", + "snDisplayName": "Shóna", + "soDisplayName": "Somáilis", + "sqDisplayName": "Albáinis", + "srDisplayName": "Searbhais", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho Theas", + "suDisplayName": "Sundanese", + "svDisplayName": "Sualainnis", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamail", + "teDisplayName": "Telegu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Taisigh", + "thDisplayName": "Téalainnis", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turcméanach", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Tuircis", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uyghur", + "ukDisplayName": "Úcráinis", + "urDisplayName": "Úrdú", + "urINDisplayName": "Úrdú (An India)", + "urPKDisplayName": "Úrdú (An Phacastáin)", + "uzDisplayName": "Úisbéice", + "viDisplayName": "Vítneaimis", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonach", + "yueCNDisplayName": "Cantonach (An tSín)", + "yueHKDisplayName": "Cantonach (Hong Cong)", + "zhDisplayName": "Sínis", + "zhCNDisplayName": "Sínis (Simplí)", + "zhTWDisplayName": "Sínis (Traidisiúnta)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11883,6 +10581,7 @@ "notStartedActivitiesTitle": "Seisiúin oscailte ({num})", "inProgressActivitiesTitle": "Ag tarlú anois ({num})", "completedActivitiesTitle": "Críochnaithe ({num})", + "pickDifferentActivity": "Roghnaigh gníomhaíocht dhifriúil", "inOngoingActivity": "Tá gníomhaíocht ar siúl agat!", "@notStartedActivitiesTitle": { "type": "String", @@ -11908,10 +10607,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ní comhoiriúnach do theanga sprioc le haghaidh an teachtaireachta seo. An nuashonraigh do theanga sprioc?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Is é seo gach duine sa chúrsa seo. Cliceáil ar avatar aon úsáideora agus \"tús a chur le comhrá\" chun DM a sheoladh.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Déanfidh an focal foclóra seo a bhaint go buan ó do anailísí", + "woman": "Bean", + "man": "Duine", + "otherGender": "Duine eile", + "unselectedGender": "Roghnaigh rogha gnéis", + "gender": "Gnéis", + "chatParticipantTooltip": "Is iad seo go léir atá sa chomhrá seo. Cliceáil ar avatar aon úsáideora agus \"tosaigh comhrá\" chun DM a sheoladh.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Tá na huirlisí foghlama dí-úsáidte do theachtaireachtaí nach bhfuil i do theanga sprioc.", + "vocabEmoji": "Emoji foclóra", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Iarr ar athghiniúint", + "optionalRegenerateReason": "(Roghnach) Cúis", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Tá an emoji socraithe agat do {lemma}! Úsáidfimid an emoji seo chun an focal a chur in iúl i ngníomhaíochtaí cleachtais amach anseo.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Ag fanacht le síniú isteach a chríochnú", + "ssoDialogDesc": "Osclóimid cluaisín nua ionas gur féidir leat síniú isteach go sábháilte.", + "ssoDialogHelpText": "🤔 Má chonaic tú an cluaisín nua, seiceáil le do thoil do bhacadóir pop-up.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Díchur uirlisí teanga", + "disableLanguageToolsDesc": "Ar mhaith leat uirlisí cabhrach teanga uathoibríoch a díchur?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Diúltaíodh an cead. Gníomhachtaigh ceadanna taifeadta chun teachtaireachtaí guth a thaifeadadh.", + "genericWebRecordingError": "Tharla rud éigin mícheart. Molaimid úsáid a bhaint as brabhsálaí Chrome nuair a bhíonn teachtaireachtaí á gcur ar taifead.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Chun an taithí is fearr a fháil ag úsáid an iarratais seo, le do thoil leathnaigh do mhéid scáileáin.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Gníomhaíochtaí le hOscail an Topaic Seo chugainn", "activitiesToUnlockTopicDesc": "Socraigh an líon gníomhaíochtaí le hOscail an topaic chúrsa seo chugainn", "@activitiesToUnlockTopicTitle": { @@ -11921,5 +10738,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Cleachtadh ar shainmhíniú ceart foclóra", + "constructUseIncLMDesc": "Cleachtadh ar shainmhíniú mícheart foclóra", + "constructUseCorLADesc": "Cleachtadh ar chluastuiscint ceart foclóra", + "constructUseIncLADesc": "Cleachtadh ar chluastuiscint mícheart foclóra", + "constructUseBonus": "Bónas le linn cleachtaidh foclóra", + "practiceVocab": "Cleachtadh foclóra", + "selectMeaning": "Roghnaigh an bhrí", + "selectAudio": "Roghnaigh an chluastuiscint comhoiriúnach", + "congratulations": "Comhghairdeas!", + "anotherRound": "Ciorcal eile", + "noActivityRequest": "Níl aon iarratas gníomhaíochta reatha.", + "quit": "Dícheangail", + "congratulationsYouveCompletedPractice": "Comhghairdeas! Tá an seisiún cleachtaidh críochnaithe agat.", + "mustHave10Words": "Caithfidh go mbeidh 10 focal le haghaidh cleachtaidh agat ar a laghad. Bain triail as labhairt le cara nó le Pangea Bot chun tuilleadh a fháil amach!", + "botSettings": "Socruithe an Bhot", + "activitySettingsOverrideWarning": "Teanga agus leibhéal teanga a chinneadh de réir plean gníomhaíochta", + "voice": "Guth", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 8948862ad..75e246ad8 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -1,6 +1,6 @@ { "@@locale": "gl", - "@@last_modified": "2026-01-06 13:01:01.095511", + "@@last_modified": "2026-01-07 14:23:32.582541", "about": "Acerca de", "@about": { "type": "String", @@ -3379,26 +3379,14 @@ "checkList": "Lista de verificación", "displayNavigationRail": "Mostrar rail de navegación en móbil", "customReaction": "Reacción personalizada", - "accountInformation": "Información da conta", - "addGroupDescription": "Engadir unha descrición ao chat", - "addNewFriend": "Engadir novo amigo", - "alreadyHaveAnAccount": "Xa tes unha conta?", - "createNewGroup": "Crear un novo chat", - "editChatPermissions": "Editar permisos do chat", "writeAMessageLangCodes": "Escribe en {l1} ou {l2}...", "requests": "Solicitudes", - "allCorrect": "Así é como o diría! Gústame!", - "newWayAllGood": "Iso non é como o diría, pero parece bo!", - "othersAreBetter": "Hm, pode haber unha forma mellor de dicilo.", "holdForInfo": "Fai clic e mantén para obter información sobre a palabra.", "greenFeedback": "Iso é o que eu poñería!", "yellowFeedback": "Hm, podes probalo e ver se funciona! Para usar esta palabra, só fai clic de novo.", "redFeedback": "Creo que iso non é correcto...", "itInstructionsTitle": "¡Podo axudarche a traducir!", "itInstructionsBody": "Podes facer clic e manter as opcións para obter información sobre a palabra.", - "oneday": "Últimas 24 horas", - "oneweek": "Últimos 7 días", - "onemonth": "Mes pasado", "gaTooltip": "L2 con asistencia gramatical", "taTooltip": "L2 con asistencia de tradución", "unTooltip": "Outro", @@ -3408,58 +3396,27 @@ "interactiveTranslatorAllowed": "Opción do estudante", "interactiveTranslatorRequired": "Necesario", "notYetSet": "Aínda non establecido", - "myLearning": "As miñas análises", "waTooltip": "L2 sen asistencia", - "changeDateRange": "Cambiar intervalo de datas", - "classDescription": "Descrición", - "addStudents": "Invitar usuarios mediante enlace ou código", - "copyClassLink": "Copiar enlace de invitación", - "copyClassCode": "Copiar código de invitación", - "inviteStudentByUserName": "Invitar usuarios por nome de usuario", "languageSettings": "Configuracións de idioma", "interactiveTranslator": "Asistencia na tradución", - "shareVideo": "Compartir vídeo", - "shareVideoDesc": "Activa isto para permitir que os estudantes compartan vídeos nos chats.", - "shareFiles": "Compartir ficheiros", - "selectLanguageLevel": "Seleccionar nivel de idioma", "noIdenticalLanguages": "Por favor, escolla idiomas base e destino diferentes", - "iWantALanguagePartnerFrom": "É de:", - "worldWide": "En todo o mundo", - "noResults": "Non hai resultados! Intenta ampliar a túa busca.", "searchBy": "Buscar por país e idiomas", - "iWantAConversationPartner": "Quero un compañeiro de conversa que", - "iWantALanguagePartnerWhoSpeaks": "Fala:", - "iWantALanguagePartnerWhoIsLearning": "Está a aprender:", "joinWithClassCode": "Unirse ao curso", - "joinWithClassCodeHint": "Introduce o código de invitación", - "languageLevelPreA1": "Principiante verdadeiro (Pre A1)", - "languageLevelA1": "Principiante (A1)", - "languageLevelA2": "Elemental (A2)", - "languageLevelB1": "Intermedio (B1)", - "languageLevelB2": "Nivel avanzado (B2)", - "languageLevelC1": "Avanzado (C1)", - "languageLevelC2": "Maestría (C2)", + "languageLevelPreA1": "Novato Baixo (Pre A1)", + "languageLevelA1": "Novato Medio (A1)", + "languageLevelA2": "Novato Alto (A2)", + "languageLevelB1": "Intermedio Medio (B1)", + "languageLevelB2": "Avanzado Baixo (B2)", + "languageLevelC1": "Avanzado Medio (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Cambiar o nome", "changeTheNameOfTheChat": "Cambiar o nome do chat", - "askPangeaBot": "Pregunte ao Pangea Bot por unha definición contextual.", "sorryNoResults": "Desculpa, non hai resultados.", "ignoreInThisText": "Ignorar", - "helpMeTranslate": "¡Si!", - "needsItShortMessage": "Fóra de obxectivo", "needsItMessage": "Espera, iso non é {targetLanguage}! Necesitas axuda para traducir?", - "needsIgcMessage": "Esta mensaxe ten un erro gramatical.", - "tokenTranslationTitle": "Unha palabra está na túa lingua base.", - "spanTranslationDesc": "Véxanse as posibles traducións abaixo.", - "spanTranslationTitle": "Algúns palabras están na túa lingua base.", - "l1SpanAndGrammarTitle": "Fóra da lingua obxectivo", - "l1SpanAndGrammarDesc": "Isto podería estar na túa lingua base ou podería ser un erro gramatical.", - "otherTitle": "Tes un erro.", - "otherDesc": "Véxanse as correccións posibles abaixo.", "countryInformation": "O meu país", - "myLanguages": "As miñas linguas base e de destino", "targetLanguage": "Linguaxe de destino", "sourceLanguage": "Linguaxe base", - "languagesISpeak": "Linguas que falo", "updateLanguage": "As miñas linguas", "whatLanguageYouWantToLearn": "Que linguaxe queres aprender?", "whatIsYourBaseLanguage": "Cal é a tua linguaxe base?", @@ -3474,13 +3431,8 @@ "errorDisableLanguageAssistanceUserDesc": "Fai clic aquí para actualizar as configuracións de axuda de tradución e gramática", "errorDisableITClassDesc": "A axuda de tradución está desactivada para o curso neste que se atopa este chat.", "errorDisableIGCClassDesc": "A axuda de gramática está desactivada para o curso neste que se atopa este chat.", - "itIsDisabled": "A tradución interactiva está desactivada", - "igcIsDisabled": "A comprobación gramatical interactiva está desactivada", - "goToLearningSettings": "Ir a Configuración de Aprendizaxe", "error405Title": "Idiomas non configurados", "error405Desc": "Por favor, configure os seus idiomas no Menú Principal > Configuración de Aprendizaxe.", - "loginOrSignup": "Iniciar sesión con", - "iAgreeToThe": "Acepto os ", "termsAndConditions": "Termos e Condicións", "andCertifyIAmAtLeast13YearsOfAge": " e certifico que teño polo menos 16 anos de idade.", "error502504Title": "Vaya, hai moitos estudantes en liña!", @@ -3488,40 +3440,21 @@ "error404Title": "Erro de tradución!", "error404Desc": "O bot de Pangea non está seguro de como traducir iso...", "errorPleaseRefresh": "Estamos a investigalo! Por favor, actualice e intente de novo.", - "toggleIT": "Tradución Interactiva", - "toggleIGC": "Revisión de Gramática Interactiva", - "toggleToolSettingsDescription": "Aquí pode activar ou desactivar as súas configuracións individuais da ferramenta de idioma.", "connectedToStaging": "Conectado a Staging", "learningSettings": "Configuracións de Aprendizaxe", - "sendVoiceNotes": "Enviar Notas de Voz", - "sendVoiceNotesDesc": "Activa isto para permitir que os estudantes envíen notas de voz nos chats.", - "chatTopic": "Tema do chat", - "chatTopicDesc": "Establecer un tema de chat", - "inviteStudentByUserNameDesc": "Se o teu estudante xa ten unha conta, podes buscalo.", "participants": "Participantes", - "almostPerfect": "Parece correcto! Isto é o que tería dito.", - "prettyGood": "Bastante ben! Isto é o que tería dito.", - "letMeThink": "Hmm, vexamos como o fixeches!", "clickMessageTitle": "Necesitas axuda?", "clickMessageBody": "Fai clic nun mensaxe para ferramentas de idioma como tradución, reprodución e máis!", - "understandingMessagesTitle": "Definicións e traducións!", - "understandingMessagesBody": "Fai clic nas palabras subliñadas para obter definicións. Traducir con opcións de mensaxe (arriba a dereita).", "allDone": "Todo listo!", "vocab": "Vocabulario", "low": "Temos evidencias de que o usuario non entende estas palabras.", "medium": "Estas palabras foron usadas. Non está claro se as palabras se entenden completamente ou non.", "high": "Temos evidencias de que o usuario entende estas palabras.", - "unknownProficiency": "Estas palabras non foron usadas en Pangea Chat.", - "changeView": "Cambiar vistas.", - "clearAll": "Borrar todas as palabras?", - "generateVocabulary": "Xerar vocabulario a partir do título e da descrición", - "generatePrompts": "Xerar indicacións", "subscribe": "Suscríbete", "getAccess": "¡Suscríbete agora!", "subscriptionDesc": "A mensaxería é gratuíta! Suscríbete para desbloquear tradución interactiva, comprobación gramatical e análises de aprendizaxe.", "subscriptionManagement": "Xestión da suscrición", "currentSubscription": "Suscrición actual", - "changeSubscription": "Cambiar a túa suscrición", "cancelSubscription": "Cancelar a túa suscrición", "selectYourPlan": "Selecciona o teu plan", "subsciptionPlatformTooltip": "Por favor, inicia sesión no teu dispositivo orixinal para xestionar o teu plan de suscrición", @@ -3530,9 +3463,6 @@ "paymentHistory": "Historial de pagos", "emptyChatDownloadWarning": "Non se pode descargar un chat baleiro", "update": "Actualizar", - "updateDesc": "Agora podes actualizar esta aplicación de {localVersion} a {storeVersion}", - "maybeLater": "Quizais máis tarde", - "mainMenu": "Menú principal", "toggleImmersionMode": "Modo de inmersión", "toggleImmersionModeDesc": "Ao activarse, todos os mensaxes amosan na túa lingua obxectivo. Esta configuración é máis útil en intercambios de idiomas.", "itToggleDescription": "Esta ferramenta de aprendizaxe de idiomas identificará palabras na túa lingua base e axudarache a traducilas á túa lingua obxectivo. Aínda que é raro, a IA pode cometer erros de tradución.", @@ -3547,212 +3477,13 @@ "definitionsToolDescription": "Cando está activado, as palabras subliñadas en azul poden ser clicadas para obter definicións. Clica nas mensaxes para acceder ás definicións.", "translationsToolDescrption": "Cando está activado, clica nunha mensaxe e na icona de tradución para ver unha mensaxe na túa lingua base.", "welcomeBack": "¡Benvido de novo! Se formaches parte do piloto 2023-2024, contacta con nós para a túa subscrición especial de piloto. Se es profesor e a túa institución comprou licenzas para a túa clase, contacta con nós para a túa subscrición de profesor.", - "kickAllStudents": "Expulsar a todos os estudantes", - "kickAllStudentsConfirmation": "¿Estás seguro de que queres expulsar a todos os estudantes?", - "inviteAllStudents": "Invitar a todos os estudantes", - "inviteAllStudentsConfirmation": "¿Estás seguro de que queres invitar a todos os estudantes?", - "inviteUsersFromPangea": "Engadir administradores", - "redeemPromoCode": "Canjear código promocional", - "enterPromoCode": "Introduce o código promocional", "downloadTxtFile": "Descargar ficheiro de texto", "downloadCSVFile": "Descargar ficheiro CSV", "promotionalSubscriptionDesc": "Actualmente tes unha subscrición promocional de por vida. Envía unha mensaxe a support@pangea.chat para obter axuda para cambiar a túa subscrición.", "originalSubscriptionPlatform": "Subscripción adquirida a través de {purchasePlatform}", "oneWeekTrial": "Proba dunha semana", "downloadXLSXFile": "Descargar ficheiro Excel", - "abDisplayName": "Abxazo", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanés", - "amDisplayName": "Amárico", - "arDisplayName": "Árabe", - "anDisplayName": "Aragonés", - "hyDisplayName": "Arménico", - "asDisplayName": "Assamés", - "avDisplayName": "Avarico", - "aeDisplayName": "Véstico", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerí", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Eúscaro", - "beDisplayName": "Bielorruso", - "bnDisplayName": "Bengalí", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnio", - "brDisplayName": "Bretón", - "bgDisplayName": "Búlgaro", - "myDisplayName": "Birmano", - "caDisplayName": "Catalán, Valenciano", - "chDisplayName": "Chamorro", - "ceDisplayName": "Checheno", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinés", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornuñés", - "coDisplayName": "Corso", - "crDisplayName": "Cree", - "hrDisplayName": "Croata", - "csDisplayName": "Checo", - "daDisplayName": "Dinamarqués", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Holandés", - "enDisplayName": "Inglés", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonio", - "eeDisplayName": "Ewe", - "foDisplayName": "Feroés", - "fjDisplayName": "Fiyiano", - "fiDisplayName": "Finés", - "frDisplayName": "Francés", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galego", - "kaDisplayName": "Xeorxiano", - "deDisplayName": "Alemán", - "elDisplayName": "Grego, Moderno", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitiano, Criollo Haitiano", - "haDisplayName": "Hausa", - "heDisplayName": "Hebreo (moderno)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindú", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Húngaro", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesio", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandés", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandés", - "itDisplayName": "Italiano", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Xaponés", - "jvDisplayName": "Javanés", - "klDisplayName": "Kalaallisut, groenlandés", - "knDisplayName": "Canarés", - "krDisplayName": "Kanuri", - "ksDisplayName": "Cachemir", - "kkDisplayName": "Xaque", - "kmDisplayName": " Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Quirguiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreano", - "kuDisplayName": "Kurdo", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latín", - "lbDisplayName": "Luxemburgués, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgués, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiano", - "ltDisplayName": "Lituano", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letón", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedonio", - "mgDisplayName": "Malgaxe", - "msDisplayName": "Malayo", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltés", - "miDisplayName": "Maorí", - "mrDisplayName": "Maratí (Marāṭhī)", - "mhDisplayName": "Marshalés", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Noruegués Bokmål", - "ndDisplayName": "Ndebele do Norte", - "neDisplayName": "Nepalés", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Noruegués Nynorsk", - "noDisplayName": "Noruegués", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele do Sur", - "ocDisplayName": "Occitano", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Old Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persa", - "plDisplayName": "Polaco", - "psDisplayName": "Pastún, Pushto", - "ptDisplayName": "Portugués", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romeno, Moldavo", - "ruDisplayName": "Ruso", - "saDisplayName": "Sánscrito (Sánskṛta)", - "scDisplayName": "Sardo", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami do Norte", - "smDisplayName": "Samoano", - "sgDisplayName": "Sango", - "srDisplayName": "Serbio", - "gdDisplayName": "Gaélico escocés, gaélico", - "snDisplayName": "Shona", - "siDisplayName": "Cingalés, Singhales", - "skDisplayName": "Eslovaco", - "slDisplayName": "Esloveno", - "soDisplayName": "Somali", - "stDisplayName": "Sotho do Sur", - "esDisplayName": "Galego", - "suDisplayName": "Sundanés", - "swDisplayName": "Suaíli", - "ssDisplayName": "Swati", - "svDisplayName": "Sueco", - "taDisplayName": "Tamil", - "teDisplayName": "Télugu", - "tgDisplayName": "Tadzhik", - "thDisplayName": "Tailandés", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetano estándar, tibetano, centro", - "tkDisplayName": "Turcomano", - "tlDisplayName": "Tagalo", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Illas Tonga)", - "trDisplayName": "Turco", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tártaro", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiano", - "ugDisplayName": "Uigur, Uigur", - "ukDisplayName": "Ucraíno", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbeco", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamita", - "voDisplayName": "Volapük", - "waDisplayName": "Valón", - "cyDisplayName": "Galés", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisian Occidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Descoñecido", - "zuDisplayName": "Zulú", - "hawDisplayName": "Hawaiano", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Múltiple", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebreo", - "jwDisplayName": "Xaponés", - "moDisplayName": "Moldavo", - "shDisplayName": "Serbo-Croata", "wwCountryDisplayName": "Mundial", "afCountryDisplayName": "Afganistán", "axCountryDisplayName": "Illas Åland", @@ -4000,41 +3731,25 @@ "yeCountryDisplayName": "Iemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabue", - "pay": "Pagar", - "allPrivateChats": "Chats directos", - "unknownPrivateChat": "Chat privado descoñecido", + "pay": "Checkout", "invitedToSpace": "{user} invitouno a unirse a un curso: {space}! Queres aceptar?", - "declinedInvitation": "Invitación rexeitada", - "acceptedInvitation": "Invitación aceptada", "youreInvited": "📩 ¡Estás invitado!", "invitedToChat": "{user} invitouno a unirse a un chat: {name}! Queres aceptar?", "monthlySubscription": "Mensual", "yearlySubscription": "Anual", "defaultSubscription": "Suscripción a Pangea Chat", "freeTrial": "Proba gratuíta", - "grammarAnalytics": "Errores de análise", "total": "Total: ", "noDataFound": "Non se atoparon datos", - "promoSubscriptionExpirationDesc": "A túa suscripción actual é promocional e expira o {expiration}. Envía un mensaxe a support@pangea.chat para axuda en cambiar a túa suscripción.", - "emptyChatNameWarning": "Por favor, introduce un nome para este chat", "blurMeansTranslateTitle": "Por que a mensaxe está borrosa?", "blurMeansTranslateBody": "Mentres o Modo Inmersión está activado, as mensaxes enviadas na túa lingua base estarán borrosas mentres Pangea Bot as traduce ao teu idioma de destino. O Modo Inmersión pode activarse ou desactivarse nas configuracións individuais e do curso.", - "someErrorTitle": "Hm, algo non está ben", - "someErrorBody": "Podería ser un erro ou algo na túa lingua base.", "bestCorrectionFeedback": "¡Eso é correcto!", "distractorFeedback": "Non é del todo correcto.", "bestAnswerFeedback": "¡Eso é correcto!", "definitionDefaultPrompt": "¿Que significa esta palabra?", "practiceDefaultPrompt": "¿Cual é a mellor resposta?", "correctionDefaultPrompt": "¿Cual é a mellor substitución?", - "itStartDefaultPrompt": "Queres axuda para traducir?", - "lockedChatWarning": "🔒 Este chat foi bloqueado", - "lockChat": "Bloquear chat", - "suggestToChat": "Suxerir este chat", - "suggestToChatDesc": "Os chats suxeridos aparecerán nas listas de chat", "acceptSelection": "Aceptar corrección", - "acceptSelectionAnyway": "Usar isto de todos modos", - "makingActivity": "Creando actividade", "why": "Por que?", "definition": "Definición", "exampleSentence": "Exemplo de frase", @@ -4042,128 +3757,55 @@ "reportMessageTitle": "{reportingUserId} informou dunha mensaxe de {reportedUserId} no chat {roomName}", "reportMessageBody": "Mensaxe: {reportedMessage}\nRazón: {reason}", "noTeachersFound": "Non se atoparon profesores para informar", - "viewArchive": "Ver arquivo", "trialExpiration": "A túa proba gratuíta expira o {expiration}", "freeTrialDesc": "Os novos usuarios reciben unha proba gratuíta dunha semana de Pangea Chat", "activateTrial": "Proba gratuíta de 7 días", "successfullySubscribed": "¡Subscribícheste con éxito!", "clickToManageSubscription": "Fai clic aquí para xestionar a túa subscrición.", - "errorGettingAudio": "Erro ao obter o audio. Por favor, actualiza a páxina e inténtao de novo.", "signUp": " Rexístrate", "pleaseChooseAtLeastChars": "Por favor, escolla polo menos {min} caracteres.", "noEmailWarning": "Por favor, introduce unha dirección de correo electrónico válida. Se non, non poderás restablecer a túa contrasinal. Se non queres facelo, toca de novo no botón para continuar.", "pleaseEnterValidEmail": "Por favor, introduce unha dirección de correo electrónico válida.", "pleaseChooseAUsername": "Por favor, escolla un nome de usuario", - "chooseAUsername": "Escoller un nome de usuario", "define": "Definir", "listen": "Escoitar", - "addConversationBot": "Habilitar o Bot de Conversa", - "addConversationBotDesc": "Engade un bot a esta conversa", - "convoBotSettingsDescription": "Editar o tema e a dificultade da conversa", - "enterAConversationTopic": "Introduce un tema de conversa", - "conversationTopic": "Tema de conversa", - "enableModeration": "Habilitar moderación", - "enableModerationDesc": "Habilitar a moderación automática para revisar os mensaxes antes de que se envíen", - "conversationLanguageLevel": "Cal é o nivel de idioma desta conversa?", - "showDefinition": "Amosar definición", - "subscriptionPopupTitle": "Esta frase podería ter un erro gramatical...", - "subscriptionPopupDesc": "¡Suscríbete hoxe para desbloquear a tradución e corrección gramatical!", - "seeOptions": "Ver opcións", - "continuedWithoutSubscription": "Continuar sen suscribirse", "trialPeriodExpired": "O teu período de proba expirou", - "selectToDefine": "Fai clic en calquera palabra para ver a súa definición!", "translations": "traducións", "messageAudio": "áudio da mensaxe", "definitions": "definicións", "subscribedToUnlockTools": "¡Suscríbete para desbloquear traducións interactivas, revisión gramatical, reprodución de audio, actividades de práctica personalizadas e análises de aprendizaxe!", "translationTooltip": "Traducir", - "audioTooltip": "Reproducir audio", "speechToTextTooltip": "Transcripción", - "certifyAge": "Certifico que teño máis de {age} anos", "kickBotWarning": "Eliminar o Pangea Bot eliminará o bot de conversa deste chat.", - "joinToView": "Únete a esta sala para ver detalles", "refresh": "Actualizar", - "autoPlayTitle": "Reprodución automática de mensaxes", - "autoPlayDesc": "Cando está activado, o audio de texto a fala das mensaxes reproducirase automaticamente cando se seleccione.", "messageAnalytics": "Análise de mensaxes", "words": "Palabras", "score": "Puntuación", "accuracy": "Exactitude", "points": "Puntos", "noPaymentInfo": "Non é necesaria información de pagamento!", - "conversationBotModeSelectDescription": "Actividade de chat", - "conversationBotModeSelectOption_discussion": "Discusión", - "conversationBotModeSelectOption_custom": "Personalizado", - "conversationBotModeSelectOption_conversation": "Conversación", - "conversationBotModeSelectOption_textAdventure": "Aventura de texto", - "conversationBotModeSelectOption_storyGame": "Xogo de historia", - "conversationBotDiscussionZone_title": "Configuración de discusión", - "conversationBotDiscussionZone_discussionTopicLabel": "Tema de discusión", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Establecer tema de discusión", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Palabras clave de discusión", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Establecer palabras clave de discusión", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista separada por comas de palabras clave para guiar a discusión", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar aviso de discusión nun horario", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre avisos de discusión", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responde a reacción ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reacción para enviar aviso de discusión", - "conversationBotCustomZone_title": "Configuración personalizada", - "conversationBotCustomZone_customSystemPromptLabel": "Aviso do sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Establecer aviso personalizado do sistema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Falta o aviso personalizado do sistema", - "botConfig": "Configuración do bot e actividade", - "botConfigNoPermissionTitle": "Sen permiso", - "botConfigNoPermissionMessage": "Contacta co administrador da sala para cambiar a configuración do bot", - "addConversationBotDialogTitleInvite": "Confirmar invitación do bot de conversa", - "addConversationBotButtonInvite": "Invitar", - "addConversationBotDialogInviteConfirmation": "Invitar", - "addConversationBotButtonTitleRemove": "Confirmar a eliminación do bot de conversa", - "addConversationBotButtonRemove": "Eliminar", - "addConversationBotDialogRemoveConfirmation": "Eliminar", - "conversationBotConfigConfirmChange": "Confirmar", - "conversationBotStatus": "Invitar bot", - "conversationBotTextAdventureZone_title": "Aventura de texto", - "conversationBotTextAdventureZone_instructionLabel": "Instrucións do Xestor de Xogo", - "conversationBotTextAdventureZone_instructionPlaceholder": "Establecer instrucións do xestor de xogo", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Faltan instrucións do xestor de xogo", - "studentAnalyticsNotAvailable": "Datos do estudante actualmente non dispoñibles", - "roomDataMissing": "Algúnha información pode faltar nas salas nas que non es membro.", "updatePhoneOS": "Pode que necesites actualizar a versión do sistema operativo do teu dispositivo.", "wordsPerMinute": "Palabras por minuto", "autoIGCToolName": "Executar a asistencia de escritura Pangea automaticamente", "autoIGCToolDescription": "Executar automaticamente a asistencia de gramática e tradución de Pangea Chat antes de enviar a miña mensaxe.", - "runGrammarCorrection": "Verificar mensaxe", - "grammarCorrectionFailed": "Problemas a corrixir", - "grammarCorrectionComplete": "Parece ben!", "tooltipInstructionsTitle": "Non estás seguro de para que serve iso?", "tooltipInstructionsMobileBody": "Prema e mantén os elementos para ver as pistas.", "tooltipInstructionsBrowserBody": "Pasa o rato por riba dos elementos para ver as pistas.", "chatCapacity": "Capacidade de chat", "roomFull": "Esta sala xa está completa.", - "topicNotSet": "O tema non foi establecido.", - "chatCapacityNotSet": "Este chat non ten límite de capacidade.", "chatCapacityHasBeenChanged": "Capacidade de chat modificada", "chatCapacitySetTooLow": "A capacidade de chat debe ser polo menos {count}.", "chatCapacityExplanation": "A capacidade de chat limita o número de membros permitidos nun chat.", - "chatExceedsCapacity": "Este chat excede a súa capacidade.", "tooManyRequest": "Demasiadas solicitudes, por favor inténteo de novo máis tarde.", "enterNumber": "Por favor, introduce un valor numérico enteiro.", "buildTranslation": "Constrúe a túa tradución a partir das opcións anteriores", - "nonexistentSelection": "A selección xa non existe.", - "changeAnalyticsLanguage": "Cambiar o idioma de Analytics", "practice": "Practicar", "noLanguagesSet": "Non hai idiomas establecidos", - "noActivitiesFound": "Iso é suficiente por agora! Volve máis tarde para máis.", - "hintTitle": "Pista:", "speechToTextBody": "Para mensaxes de voz, podes ver unha transcrición así como a puntuación de Palabras por Minuto do orador.", "versionNotFound": "Versión non atopada", "fetchingVersion": "Obtendo a versión...", "versionFetchError": "Erro ao obter a versión", "versionText": "Versión: {version}+{buildNumber}", - "languageButtonLabel": "Idioma: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Reprodución automática da tradución", - "interactiveTranslatorAutoPlayDesc": "Inicia o tradutor interactivo sen preguntar.", - "changeAnalyticsView": "Cambiar a vista de análise", "l1TranslationBody": "Os mensaxes no teu idioma base non serán traducidos.", "deleteSubscriptionWarningTitle": "Tes unha subscrición activa", "deleteSubscriptionWarningBody": "Eliminar a túa conta non cancelará automaticamente a túa subscrición.", @@ -4171,9 +3813,7 @@ "error520Title": "Por favor, inténtao de novo.", "error520Desc": "Desculpa, non puidemos entender a túa mensaxe...", "wordsUsed": "Palabras utilizadas", - "errorTypes": "Tipos de erro", "level": "Nivel", - "canceledSend": "Envío cancelado", "morphsUsed": "Morfemas utilizados", "translationChoicesBody": "Fai clic e mantén unha opción para obter unha pista.", "grammar": "Gramática", @@ -4183,7 +3823,6 @@ "reportContentIssueTitle": "Informar problema de contido", "feedback": "Comentarios opcionais", "reportContentIssueDescription": "¡Vaya! A IA pode facilitar experiencias de aprendizaxe personalizadas pero... tamén alucina. Por favor, proporciona calquera comentario que teñas e intentaremos de novo.", - "changeContent": "¡Vaya! A IA pode facilitar experiencias de aprendizaxe personalizadas pero... tamén alucina. ¿Que debería ser?", "clickTheWordAgainToDeselect": "Fai clic na palabra seleccionada para desmarcarla.", "l2SupportNa": "Non dispoñible", "l2SupportAlpha": "Alpha", @@ -4417,7 +4056,6 @@ "grammarCopySPC": "Especificidade", "grammarCopyPARTTYPE": "Tipo partitivo", "grammarCopyINTREL": "Interrogativa-Relativa", - "grammarCopyNUMFORMpsor": "Número do poseedor", "grammarCopyUNKNOWN": "Descoñecido", "grammarCopyNUMBERPSOR": "Número do poseedor", "grammarCopyPOSS": "Posesivo", @@ -4463,28 +4101,14 @@ "grammarCopyVOICEdir": "Directo", "grammarCopyVOICEinv": "Inverso", "grammarCopyVOICErcp": "Recíproco", - "enterPrompt": "Por favor, introduce un aviso do sistema", - "selectBotLanguage": "Selecciona o idioma do bot", - "chooseVoice": "Escolla unha voz", - "enterLanguageLevel": "Por favor, introduce un nivel de idioma", - "enterDiscussionTopic": "Por favor, introduce un tema de discusión", - "selectBotChatMode": "Selecciona o modo de chat", - "messageNotInTargetLang": "Mensaxe non no idioma obxectivo", "other": "Outro", "levelShort": "NIV {level}", - "botModeValidation": "Por favor, selecciona un modo de chat", "clickBestOption": "Escolla as mellores opcións para traducir a túa mensaxe!", "completeActivitiesToUnlock": "Completa polo menos unha actividade para desbloquear a tradución!", - "botSettingsSubtitle": "Invita ao bot a moderar a actividade do chat", - "invitePeople": "Invitar usuarios", "noCapacityLimit": "Sen límite de capacidade", "downloadGroupText": "Descargar texto do grupo", "notificationsOn": "Notificacións activadas", "notificationsOff": "Notificacións desactivadas", - "chatCanBeFoundViaSearch": "O chat pódese atopar mediante busca", - "requireCodeToJoin": "Requírese código para unirse", - "canFindInSearch": "Pódese atopar na busca", - "addChatToSpace": "Engadir chat ao espazo", "createChatAndInviteUsers": "Crear chat e invitar usuarios", "updatedNewSpaceDescription": "Os cursos permiten consolidar os teus chats e crear comunidades privadas ou públicas.", "joinWithCode": "Unirse con código", @@ -4520,39 +4144,19 @@ "constructUseCollected": "Recollido no chat", "constructUseNanDesc": "Non aplicable", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Iniciar sesión con nome de usuario e contrasinal", - "registrationEmailMessage": "Por favor, verifica o teu correo electrónico cunha ligazón enviada alí. En algunhas ocasións, o correo pode tardar ata 5 minutos en chegar. Tamén revisa a túa carpeta de spam.", "enableTTSToolName": "Texto a fala activado", "enableTTSToolDescription": "Permite que a aplicación xere saída de texto a fala para partes do texto na túa lingua obxectivo.", - "couldNotFindTTS": "Non puidemos atopar un motor de texto a fala para a túa lingua obxectivo actual.", - "ttsInstructionsHyperlink": "Fai clic aquí para ver as instrucións para descargar unha nova voz no teu dispositivo.", - "createAnAccount": "Crear unha conta", - "signIn": "Iniciar sesión", - "signUpWithEmail": " Rexístrate con correo electrónico", - "signUpWithGoogle": "Rexístrate con Google", - "signUpWithApple": "Rexístrate con Apple", "yourUsername": "O teu nome de usuario", "yourEmail": "O teu correo electrónico", - "pleaseEnterAnEmail": "Por favor, introduce un enderezo de correo electrónico", - "signInWithGoogle": "Iniciar sesión con Google", - "signInWithApple": "Iniciar sesión con Apple", - "chooseYourAvatar": "Elixe o teu avatar", "iWantToLearn": "Quero aprender", - "letsStart": "Comecemos", - "pleaseAgreeToTOS": "Por favor, acepta os Termos e Condicións", "pleaseEnterEmail": "Por favor, introduce unha dirección de correo electrónico válida.", - "pleaseSelectALanguage": "Por favor, selecciona un idioma", "myBaseLanguage": "O meu idioma base", - "clickWordsInstructions": "🧻 Fai clic en calquera palabra para detalles. 🤐", - "chooseBestDefinition": "Que significa esta palabra?", "meaningSectionHeader": "Significado:", "formSectionHeader": "Formas usadas en chats:", - "noEmojiSelectedTooltip": "Non se seleccionou ningún emoji", "writingExercisesTooltip": "Escritura", "listeningExercisesTooltip": "Escucha", "readingExercisesTooltip": "Lectura", "meaningNotFound": "Non se puido atopar o significado.", - "formsNotFound": "Non se puideron atopar as formas.", "chooseBaseForm": "Elixe a forma base", "notTheCodeError": "Perdón, iso non é o código!", "totalXP": "Total de XP", @@ -4592,9 +4196,6 @@ "pickAnEmoji": "Cal é o teu emoji favorito para '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "¡Coincide os significados coas palabras na mensaxe!", "doubleClickToEdit": "Fai dobre clic para editar.", - "removeFeature": "Eliminar {feature}", - "chooseCorrectLabel": "Elixe a etiqueta correcta.", - "levelPopupTitle": "Parabéns por chegar ao\nNível {level}", "activityPlannerTitle": "Planificador de actividades", "topicLabel": "Tema", "topicPlaceholder": "Elixe un tema...", @@ -4602,7 +4203,6 @@ "modePlaceholder": "Elixe un modo...", "learningObjectiveLabel": "Obxectivo de aprendizaxe", "learningObjectivePlaceholder": "Elixe un obxectivo de aprendizaxe...", - "mediaLabel": "Medios que os alumnos deben compartir", "languageOfInstructionsLabel": "Idioma das instrucións da actividade", "targetLanguageLabel": "Idioma obxectivo", "cefrLevelLabel": "Nivel CEFR", @@ -4617,20 +4217,15 @@ "instructions": "Instrucións", "numberOfLearners": "Número de alumnos", "mustBeInteger": "Debe ser un número enteiro, por exemplo, 1, 2, 3, ...", - "noLemmasFound": "Non hai vocabulario con máis de {xp} puntos de experiencia. ¡Sigue practicando!", "constructUsePvmDesc": "Producido en mensaxe de voz", - "lockedMorphFeature": "Esperando ser desbloqueado", "leaveSpaceDescription": "Ao saír do curso, abandonarás todos os chats dentro del. Outros usuarios verán que saíste do curso.", - "whatIsLemma": "¿Qué é a lema?", "constructUseCorMmDesc": "Significado correcto da mensaxe", "constructUseIncMmDesc": "Significado incorrecto da mensaxe", "constructUseIgnMmDesc": "Significado da mensaxe ignorada", "clickForMeaningActivity": "Preme aquí para un Desafío de Significado", "meaning": "Significado", "chatWith": "Grupo con {displayname}", - "slightlyOffensive": "Lixeiramente ofensivo", "clickOnEmailLink": "Prema no enlace do correo electrónico e logo continúe.\n\nRevisa a carpeta de spam se o correo non chegou.", - "whoIsAllowedToJoinThisChat": "Quen pode unirse a este chat", "dontForgetPassword": "¡Non esquezas a túa contrasinal!", "enableAutocorrectToolName": "Habilitar autocorrección do dispositivo", "enableAutocorrectDescription": "Se o teu dispositivo soporta a lingua que estás a aprender, podes habilitar a autocorrección para corrixir erros comúns mentres escribes.", @@ -4658,48 +4253,26 @@ "autocorrectNotAvailable": "Lamentablemente, a túa plataforma actualmente non é compatible con esta función. ¡Mantente atento para máis desenvolvementos!", "pleaseUpdateApp": "Actualiza a aplicación para continuar.", "chooseEmojiInstructionsBody": "Combina emojis coas palabras que mellor as representan. Non te preocupes! Non hai puntos en contra por discrepar. 😅", - "pickAnEmojiFor": "Elixe un emoji para {lemma}", "analyticsVocabListBody": "Esta é toda a túa vocabulario! Á medida que gañas XP por cada palabra, pasará de semente a flor completa. Fai clic en calquera palabra para ver máis detalles.", "morphAnalyticsListBody": "Estes son todos os conceptos gramaticais na lingua que estás aprendendo! Desbloquearásos ao atopalos mentres chateas. Fai clic para detalles.", "knockSpaceSuccess": "Solicitaches unirte a este curso! Un administrador responderache cando o reciba 😊", - "joinByCode": "Unirse por código", "chooseWordAudioInstructionsBody": "Escoita a mensaxe completa. Logo combina os audios coas palabras.", "chooseMorphsInstructionsBody": "Fai clic nas pezas do puzzle para preguntas de gramática!", - "inviteAndLaunch": "Invitar e lanzar", - "createOwnChat": "Crea o teu propio chat", "pleaseEnterInt": "Por favor, introduce un número", "home": "Inicio", "join": "Unirse", "readingAssistanceOverviewBody": "Fai clic nos botóns de abaixo para mini-xogos de combinación de emojis, audios, significados de palabras e conceptos gramaticais. Ou fai clic en calquera palabra para máis detalles.", - "learnByTexting": "Aprende enviando mensaxes", - "levelSummaryTrigger": "Ver resumo", "levelSummaryPopupTitle": "Resumo do nivel {level}", - "referFriends": "Recomendar a amigos", - "referFriendDialogTitle": "Invita a un amigo á túa conversa", - "referFriendDialogDesc": "Tes un amigo que está entusiasmado por aprender un idioma novo contigo? Entón copia e envía este enlace de invitación para unirte e comezar a chatear contigo hoxe.", - "youUnlocked": "Desbloqueaches", "resetInstructionTooltipsTitle": "Restablecer dicas de instrución", "resetInstructionTooltipsDesc": "Fai clic para amosar as dicas de instrución como se fose un novo usuario.", "selectForGrammar": "Selecciona un icono de gramática para actividades e detalles.", - "newChatActivityTitle": "Engadir unha actividade divertida?", - "newChatActivityDesc": "Fai que cada chat de grupo sexa unha aventura con Activity Planner! Establece temas e obxectivos atractivos para o grupo, e dá vida ás conversas con imaxes impresionantes. Fomenta discusións imaxinativas e mantén a diversión sen esforzo!", - "exploreMore": "Explora máis", "randomize": "Aleatorizar", "clear": "Limpar", "makeYourOwnActivity": "Crea a túa propia actividade", "featuredActivities": "Destacadas", - "goToChat": "Ir ao chat", "save": "Gardar", - "selectActivity": "Seleccionar actividade", - "wordFocusListeningMultipleChoice": "Cal audio coincide coa palabra?", "startChat": "Comezar un chat", "translationProblem": "Problema de tradución", - "perfectTranslation": "Tradución perfecta!", - "greatJobTranslation": "Moi bo traballo con esta tradución!", - "goodJobTranslation": "Bo traballo nesta tradución.", - "makingProgress": "Estás a progresar!", - "keepPracticing": "Segue practicando!", - "niceJob": "Bo traballo!", "askToJoin": "Pide unirte", "emptyChatWarningTitle": "O chat está baleiro", "emptyChatWarningDesc": "Non invitaches a ninguén ao teu chat. Vai a Configuración do chat para convidar aos teus contactos ou ao Bot. Tamén podes facelo despois.", @@ -4718,8 +4291,6 @@ "languageLevelC2Desc": "Podo entender case todo o que escoito ou leo e expresarme con fluidez e precisión.", "newVocab": "Novo vocabulario", "newGrammar": "Novos conceptos de gramática", - "congratulationsOnReaching": "¡Chegaches ao nivel {level}!", - "seeDetails": "Ver detalles", "choosePracticeMode": "Preme nun dos botóns de arriba para comezar unha actividade de práctica", "ban": "Bane", "unban": "Desbanear", @@ -4733,8 +4304,6 @@ "timesUsedWithAssistance": "Veces usado con axuda", "shareInviteCode": "Compartir código de invitación: {code}", "leaderboard": "Clasificación", - "welcomeUser": "Benvido {user}", - "joinSpaceOnboardingDesc": "Tes un código ou enlace de invitación a un curso público?", "skipForNow": "Omitir por agora", "permissions": "Permisos", "spaceChildPermission": "Quen pode engadir novas conversas a este curso", @@ -4742,12 +4311,8 @@ "defaultOption": "Predeterminado", "deleteChatDesc": "Estás seguro de que queres eliminar esta conversa? Será eliminada para todos os participantes e todos os mensaxes dentro da conversa xa non estarán dispoñibles para práctica ou análise de aprendizaxe.", "deleteSpaceDesc": "O curso e calquera conversa seleccionada serán eliminados para todos os participantes e todos os mensaxes dentro da conversa xa non estarán dispoñibles para práctica ou análise de aprendizaxe. Esta acción non se pode deshacer.", - "chatWithActivities": "Conversar con actividades", "launch": "Iniciar", - "launchActivityToChats": "Iniciar actividade nas conversas", "searchChats": "Buscar conversas", - "selectChats": "Seleccionar conversas", - "selectChatToStart": "¡Completo! Selecciona unha conversa para comezar", "maxFifty": "Máximo 50", "configureSpace": "Configurar o curso", "pinMessages": "Fixar mensaxes", @@ -4761,9 +4326,7 @@ "announcements": "Anuncios", "activities": "Actividades", "access": "Acceso", - "botSettings": "Configuración do bot", "activitySuggestionTimeoutMessage": "Estamos traballando duro para xerar máis actividades para ti, por favor, comproba nun minuto", - "accessSettingsWarning": "¡Ups! Semella que non tes permiso para establecer as regras de acceso desta sala. Debes revisalas para asegurarte de que son o que necesitas e falar cun administrador da sala se precisas cambialas", "howSpaceCanBeFound": "Como se pode atopar este curso", "private": "Privado", "cannotBeFoundInSearch": "Non se pode atopar na busca", @@ -4776,16 +4339,6 @@ "canBeFoundViaKnock": "• solicitude para unirse e aprobación do administrador", "youHaveLeveledUp": "¡Subiches de nivel!", "sendActivities": "Enviar actividades", - "getStarted": "Comezar", - "getStartedBotChatDesc": "Conversar con IA é un excelente lugar para comezar e as ferramentas de lectura, escritura, escoita e fala de Pangea facilítano!", - "getStartedCommunitiesDesc": "Aprender con unha comunidade é onde brilla Pangea Chat!\nPodes unirte á túa clase, atopar un curso ou incluso crear o teu propio!", - "getStartedFriendsDesc": "Tes un amigo que quere aprender contigo?", - "getStartedBotChatComplete": "Ben feito! Estás a conversar co bot!", - "getStartedCommunitiesComplete": " xenial, uniches a un curso!", - "getStartedComplete": "Remataste esta sección!\nSegue explorando as nosas increíbles funcións conversando con amigos!", - "getStartedFriendsComplete": "Woohoo! Tes amigos! 😉", - "getStartedBotChatButton": "Comezar a conversar!", - "getStartedFriendsButton": "Conversar cun amigo", "groupChat": "Chat de grupo", "directMessage": "Mensaxe directa", "newDirectMessage": "Nova mensaxe directa", @@ -4801,7 +4354,6 @@ "mySavedActivities": "As miñas actividades gardadas", "noSavedActivities": "Non hai actividades gardadas", "saveActivity": "Gardar esta actividade", - "yourSavedActivities": "Actividades gardadas", "failedToPlayVideo": "Non se puido reproducir o vídeo", "done": "Rematado", "inThisSpace": "Neste curso", @@ -4840,37 +4392,27 @@ "maximumActivityParticipants": "Cada actividade pode ter un máximo de {count} participante(s).", "pending": "Pendiente", "inactive": "Inactivo", - "unjoinedActivityMessage": "¿Queres participar? ¡Elixe un rol aberto!\nOu pásate a ver o espectáculo!", - "fullActivityMessage": "¡Séntete libre de ver o espectáculo! Mentres non haxa roles abertos para participar, podes ver o chat!", "confirmRole": "Confirmar rol", "openRoleLabel": "ABERTO", "joinedTheActivity": "👋 {username} uniuse como {role}", "finishedTheActivity": "🎯 {username} rematou esta actividade", - "endActivityTitle": "Remate", - "endActivityDesc": "¿Remataste os obxectivos?\nEsta é a túa confirmación de que te afastas de escribir. Pero non te preocupes, a diversión continúa no chat! Podes pasar o rato e gozar do espectáculo ata que todos fagan clic en 'Rematado'.", "archiveToAnalytics": "Engadir ás miñas actividades rematadas", "activitySummaryError": "Resúmenes de actividade non dispoñibles", "requestSummaries": "Solicitar resúmenes", - "loadingActivitySummary": "Cargando resumo da actividade...", "generatingNewActivities": "Es o primeiro usuario nesta parella de idiomas! Por favor, dame un minuto, estamos preparando actividades só para ti.", - "requestAccessTitle": "¿Querés solicitar acceso para ver as análises?", + "requestAccessTitle": "Solicitar acceso á analítica?", "requestAccessDesc": "¿Queres solicitar acceso para ver as análises dos participantes?\n\nSe os participantes están de acordo, os administradores deste curso poderán ver:\n • vocabulario total\n • conceptos gramaticais totais\n • sesións de actividade completadas\n • os conceptos gramaticais específicos utilizados, correctos e incorrectos\n\nNon poderán ver:\n • mensaxes en chats fóra do curso\n • lista de vocabulario", "requestAccess": "Solicitar acceso ({count})", "analyticsInactiveTitle": "As solicitudes a usuarios inactivos non se puideron enviar", "analyticsInactiveDesc": "Os usuarios inactivos que non iniciaron sesión desde que se introduciu esta función non verán a túa solicitude.\n\nO botón de Solicitar aparecerá unha vez que regresen. Podes reenviar a solicitude máis tarde facendo clic no botón de Solicitar baixo o seu nome cando estea dispoñible.", "accessRequestedTitle": "Solicitude de acceso a análises", - "accessRequestedDesc": "Os administradores de “{space}” están a solicitar ver as túas análises de aprendizaxe.\n\nSe aceptas, os administradores deste curso poderán ver a túa:\n • vocabulario total\n • conceptos gramaticais totais\n • sesións de actividade completadas\n • conceptos gramaticais específicos utilizados, correctamente e incorrectamente\n\nNon poderán ver a túa:\n • mensaxes en chats fóra do curso\n • lista de vocabulario", - "allowAccess": "Permitir acceso", - "denyAccess": "Denegar acceso", + "accessRequestedDesc": "Solicitando admin(s): {admin} \n\nOs administradores de “{space}” están solicitando ver a túa analítica de aprendizaxe.\n\nSe estás de acordo, poderán ver o teu:\n • vocabulario total\n • conceptos gramaticais totais\n • total de sesións de actividade completadas\n • os conceptos gramaticais específicos utilizados, correctamente e incorrectamente\n\nNon poderán ver o teu:\n • mensaxes en chats fóra do curso\n • lista de vocabulario", "adminRequestedAccess": "Os administradores solicitaron ver as túas análises.", "lastUpdated": "Actualizado\n{time}", "activityFinishedMessage": "¡Todo terminado!", "endForAll": "Rematar para todos", "newCourse": "Novo curso", - "newCourseSubtitle": "Que plan de curso queres usar?", - "failedToLoadCourses": "Non se puideron cargar os cursos", "numModules": "{num} módulos", - "numActivityPlans": "{num} plans de actividade", "coursePlan": "Plan de curso", "editCourseLater": "Podes editar o título da plantilla, as descricións e a imaxe do curso máis tarde.", "newCourseAccess": "Por defecto, os cursos son privados e requiren a aprobación do administrador para unirse. Podes editar estas configuracións en calquera momento.", @@ -4884,17 +4426,11 @@ "accessDesc": "Podes facer que o teu curso sexa aberto ao mundo! Ou, facer que o teu curso sexa privado e seguro.", "createGroupChatDesc": "Mentres as sesións de actividade comezan e rematan, os chats de grupo permanecerán abertos para comunicación de rutina.", "deleteDesc": "Só os administradores poden eliminar un curso. Esta é unha acción destructiva que elimina a todos os usuarios e elimina todos os chats seleccionados dentro do curso. Procede con precaución.", - "failedToLoadCourseInfo": "Non se puido cargar a información do curso", "noCourseFound": "Oh, este curso necesita un plan!\n\nOs plans de curso son unha secuencia de temas e actividades de conversa.", "additionalParticipants": "+ {num} outros", - "activityNotFoundForCourse": "Non se atopou esta actividade dentro do curso", - "courseChats": "Chats do curso", - "myActivitySessions": "As miñas sesións de actividade", "directMessages": "Mensaxes directas", "whatNow": "E agora?", "chooseNextActivity": "Elixe a túa próxima actividade!", - "seeInstructions": "Ver instrucións", - "hideInstructions": "Agochar instrucións", "letsGo": "Vamos alá", "chooseRole": "Elixe un papel!", "chooseRoleToParticipate": "Elixe un papel para participar!", @@ -4904,23 +4440,15 @@ "inviteFriends": "Invitar amigos", "waitNotDone": "Espera, aínda non rematei!", "waitingForOthersToFinish": "Agardando que o resto remate...", - "saveToCompletedActivities": "Gardar nas actividades completadas", "generatingSummary": "Analizando o chat e xerando resultados", - "instructionsLanguage": "Idioma das instrucións", "findCourse": "Atopa un curso", - "activityCompletedDesc": "A túa actividade completada engadiuse ás análises onde podes revisar e practicar a lingua que usaches.", "pingParticipantsNotification": "{user} está a buscar usuarios para unirse á sesión de actividade en {room}", "course": "Curso", "courses": "Cursos", "courseName": "Nome do curso", "createNewCourse": "Novo curso", - "publicCourses": "Cursos públicos", "goToCourse": "Ir ao curso: {course}", "activityComplete": "Esta actividade foi completada. O resumo da actividade debería estar dispoñible a continuación.", - "haventChattedMuch": "Parece que non conversaches moito, tenta usar algunhas palabras de vocabulario! Se sentes que completaches o teu obxectivo, podes rematar a actividade a continuación.", - "haveChatted": "Parece que estiveches a conversar durante un tempo! Se sentes que completaches o teu obxectivo, remata para rematar a actividade e xeraremos un resumo na conversa!", - "userDoneAndWaiting": "{num1}/{num2} participantes remataron. Agarda a que rematen todos, e xeraremos un resumo na conversa! \n\nSe queres unirte de novo á conversa, clica no botón de continuar na conversa.", - "othersDoneAndWaiting": "{num1}/{num2} remataron. Remataste o teu obxectivo?", "startNewSession": "Comezar nova sesión", "joinOpenSession": "Unirse á sesión aberta", "less": "menos", @@ -4930,7 +4458,6 @@ "openToJoin": "Aberto para unirse", "results": "Resultados", "activityDone": "Actividade Rematada!", - "moreLabel": "máis", "promoCodeInfo": "Os códigos promocionais poden introducirse na seguinte páxina", "editsComingSoon": "A capacidade de editar cidades e actividades chegará pronto.", "editing": "Editando", @@ -4946,13 +4473,10 @@ "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", - "chooseLanguage": "Elixe un idioma.", + "chooseLanguage": "Elixe unha lingua de destino.", "planTrip": "Planifica a túa viaxe", "howAreYouTraveling": "Como estás viaxando?", "unlockPrivateTrip": "Desbloquea unha viaxe privada", @@ -4965,25 +4489,20 @@ "courseCode": "Cal é a contrasinal secreta?", "courseCodeHint": "Código ou enlace da viaxe", "unlockMyTrip": "Desbloquear a miña viaxe", - "anyLevel": "Calquera nivel", "signupOption": "Como queres rexistrarte?", "withApple": "Con Apple", "withGoogle": "Con Google", "withEmail": "Con correo electrónico", "createAccount": "Crear conta", - "noCoursesFound": "Non se atoparon cursos", "loginWithEmail": "Iniciar sesión con correo electrónico", "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", - "allCefrLevels": "Todos os niveis CEFR", "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.", "directMessageBotTitle": "Mensaxe directa ao Pangea Bot", "feedbackTitle": "Retroalimentación da actividade", - "feedbackDesc": "Como se debería mellorar a actividade? Se podes proporcionar algúns detalles, faremos o cambio!", "feedbackHint": "A túa retroalimentación", "feedbackButton": "Enviar retroalimentación", "directMessageBotDesc": "Falar con humanos é máis divertido pero... a IA está sempre lista!", @@ -5002,30 +4521,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5041,18 +4536,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5077,18 +4560,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5125,38 +4596,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5165,62 +4608,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5257,10 +4656,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5269,14 +4664,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5285,46 +4672,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5333,10 +4684,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5393,18 +4740,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5413,14 +4748,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5449,18 +4776,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5469,42 +4784,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5513,14 +4796,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5541,26 +4816,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5581,10 +4836,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5617,25 +4868,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5692,34 +4924,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5748,778 +4952,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7512,14 +5948,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7531,14 +5959,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7570,10 +5990,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7582,18 +5998,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7602,14 +6006,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7634,38 +6030,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7711,10 +6079,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7739,10 +6103,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7767,10 +6127,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7779,66 +6135,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7859,42 +6159,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7919,154 +6195,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8083,18 +6211,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8115,14 +6231,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8139,10 +6247,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8155,14 +6259,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8171,14 +6267,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8206,26 +6294,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8254,18 +6322,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8302,10 +6362,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9238,10 +7294,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9422,34 +7474,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9462,10 +7486,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9474,14 +7494,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9498,22 +7510,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9661,14 +7657,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9677,34 +7665,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9713,54 +7673,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9769,10 +7693,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9789,10 +7709,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9964,26 +7880,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10012,10 +7908,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10072,30 +7964,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10124,18 +8000,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10252,14 +8120,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10272,10 +8132,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10284,14 +8140,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10308,14 +8156,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10324,22 +8164,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10352,18 +8176,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10380,22 +8192,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10404,30 +8204,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10500,18 +8276,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10568,18 +8332,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10608,30 +8360,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10684,18 +8420,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10744,46 +8472,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10848,10 +8536,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11023,14 +8707,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11058,14 +8734,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11078,10 +8746,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11117,19 +8781,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11154,14 +8813,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11170,14 +8821,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11230,10 +8873,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11246,18 +8885,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11270,14 +8897,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11318,26 +8937,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11365,10 +8972,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11379,36 +8982,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11445,10 +9018,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11513,18 +9082,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11589,10 +9146,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11613,10 +9166,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11633,10 +9182,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11645,10 +9190,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11661,10 +9202,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11689,16 +9226,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invitar amigos á actividade", - "inviteFriendsToActivityCourse": "Invitar amigos á actividade e ao curso", "feedbackRespDesc": "Volva a consultar mañá para actualizacións da actividade.", "activityDropdownDesc": "Cando remates con esta actividade, clica abaixo", - "activityAnalyticsListBody": "Estes son as túas actividades rematadas! Despois de rematar as actividades, podes velas aquí.", "languageMismatchTitle": "Incompatibilidade de idioma", "languageMismatchDesc": "O teu idioma obxectivo non coincide co idioma desta actividade. Queres actualizar o teu idioma obxectivo?", "reportWordIssueTooltip": "Informar de problema coa información da palabra", "tokenInfoFeedbackDialogTitle": "Retroalimentación da información da palabra", - "tokenInfoFeedbackDialogDesc": "A IA comete erros. Por favor, describe calquera problema que atopes coa información anterior.", "noPublicCoursesFound": "Non se atoparon cursos públicos. Queres crear un?", "noCourseTemplatesFound": "Non puidemos atopar cursos para o teu idioma obxectivo. Mentres tanto, podes chatear co Pangea Bot, e volver a consultar máis tarde para máis cursos.", "botActivityJoinFailMessage": "O Pangea Bot tarda un pouco en responder. Tenta de novo máis tarde, ou invita a un amigo.", @@ -11706,14 +9239,6 @@ "leaveDesc": "Saír deste espazo e de todos os chats dentro del", "selectAll": "Seleccionar todo", "deselectAll": "Desmarcar todo", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11722,10 +9247,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11742,10 +9263,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11779,7 +9296,6 @@ "newMessageInPangeaChat": "🗨️ Novo mensaxe en Pangea Chat", "shareCourse": "Compartir curso", "addCourse": "Engadir un curso", - "joinCourseWithCode": "Unirse ao curso con código", "joinPublicCourse": "Unirse ao curso público", "vocabLevelsDesc": "Aquí é onde as palabras de vocabulario irán unha vez que as mellores de nivel!", "highlightVocabTooltip": "Destaca as palabras de vocabulario obxectivo abaixo enviándoas ou practicando con elas no chat", @@ -11803,10 +9319,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11815,7 +9327,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Non se atoparon DMs ou chats. Asegúrate de que a túa busca está escrita correctamente.", + "activityAnalyticsTooltipBody": "Estas son as túas actividades gardadas para revisión e práctica.", + "numSavedActivities": "Número de actividades gardadas", + "saveActivityTitle": "Gardar actividade", + "saveActivityDesc": "Bo traballo! Garda esta actividade para revisión e práctica posteriores", + "levelInfoTooltip": "Aquí podes ver todos os puntos que gañaches e como!", + "alreadyInCourseWithID": "Xa estás nun curso con este plan. Queres crear un curso co mesmo plan ou ir ao curso existente?", + "goToExistingCourse": "Ir ao curso existente", + "emojiView": "Vista de emoji", + "feedbackDialogDesc": "Eu tamén cometo erros! Algo que me axude a mellorar?", + "contactHasBeenInvitedToTheCourse": "O contacto foi convidado ao curso", + "activityStatsButtonTooltip": "Información da actividade", + "allow": "Permitir", + "deny": "Denegar", + "enabledRenewal": "Activar a renovación da subscrición", + "subscriptionEndsOn": "A subscrición finaliza o", + "subscriptionRenewsOn": "A subscrición renova o", + "waitForSubscriptionChanges": "Os cambios na túa subscrición poden tardar un momento en reflectirse na aplicación.", + "subscribeReadingAssistance": "Subscríbete para desbloquear ferramentas de mensaxes", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikáans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhárico", + "arDisplayName": "Árabe", + "asDisplayName": "Asamés", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaiyano", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinés", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorruso", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Búlgaro", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalí", + "bnBDDisplayName": "Bengalí (Bangladesh)", + "bnINDisplayName": "Bengalí (India)", + "brDisplayName": "Bretón", + "bsDisplayName": "Bósnio", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalán", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Curdo Central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsián", + "crhDisplayName": "Turco Crimeo", + "crsDisplayName": "Francés Criollo Seselwa", + "csDisplayName": "Checo", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Galés", + "daDisplayName": "Danés", + "deDisplayName": "Alemán", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglés", + "enAUDisplayName": "Inglés (Australia)", + "enGBDisplayName": "Inglés (Reino Unido)", + "enINDisplayName": "Inglés (India)", + "enUSDisplayName": "Inglés (EE. UU.)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Español", + "esESDisplayName": "Español (España)", + "esMXDisplayName": "Español (México)", + "euDisplayName": "Vasco", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finés", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijiano", + "foDisplayName": "Faroés", + "frDisplayName": "Francés", + "frCADisplayName": "Francés (Canadá)", + "frFRDisplayName": "Francés (Francia)", + "fyDisplayName": "Frisón occidental", + "gaDisplayName": "Irlandés", + "gaaDisplayName": "Ga", + "gdDisplayName": "Galego escocés", + "glDisplayName": "Galego", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Konkani de Goa", + "guDisplayName": "Gujarate", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiiano", + "heDisplayName": "Hebreo", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croata", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Criollo haitiano", + "huDisplayName": "Húngaro", + "hyDisplayName": "Armenio", + "idDisplayName": "Indonesio", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandés", + "itDisplayName": "Italiano", + "jaDisplayName": "Xaponés", + "jvDisplayName": "Xavanés", + "kaDisplayName": "Xeorxiano", + "kkDisplayName": "Cazaque", + "kmDisplayName": "Khmer", + "knDisplayName": "Canarés", + "koDisplayName": "Coreano", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Cachemiro", + "ktuDisplayName": "Kituba (República Democrática do Congo)", + "kuDisplayName": "Kurdo", + "kyDisplayName": "Quirguiz", + "laDisplayName": "Latín", + "lbDisplayName": "Luxemburgués", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgués", + "lijDisplayName": "Ligurio", + "lmoDisplayName": "Lombardo", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituano", + "ltgDisplayName": "Latgaliano", + "luoDisplayName": "Luo (Kenia e Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letón", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgache", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonio", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Árabe)", + "msMYDisplayName": "Malay (Malaisia)", + "mtDisplayName": "Maltés", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birman", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Noruegués (Bokmål)", + "neDisplayName": "Nepalí", + "newDisplayName": "Newari", + "nlDisplayName": "Neerlandés", + "nlBEDisplayName": "Flandrés", + "noDisplayName": "Noruegués", + "nrDisplayName": "Ndebele do Sur", + "nsoDisplayName": "Sotho do Norte", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitano", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polaco", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugués", + "ptBRDisplayName": "Portugués (Brasil)", + "ptPTDisplayName": "Portugués (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romaniano", + "roMDDisplayName": "Moldavo", + "romDisplayName": "Romani", + "ruDisplayName": "Ruso", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sánscrito", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliano", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Cingalés", + "skDisplayName": "Eslovaco", + "slDisplayName": "Esloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somalí", + "sqDisplayName": "Albanés", + "srDisplayName": "Serbio", + "srMEDisplayName": "Montenegrino", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho do Sur", + "suDisplayName": "Sundanés", + "svDisplayName": "Sueco", + "swDisplayName": "Suahili", + "szlDisplayName": "Silesio", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Taxico", + "thDisplayName": "Tailandés", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turcomano", + "tlDisplayName": "Tagalo", + "tnDisplayName": "Tswana", + "trDisplayName": "Turco", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tártaro", + "ugDisplayName": "Uigur", + "ukDisplayName": "Ucraniano", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Paquistán)", + "uzDisplayName": "Uzbeco", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonés", + "yueCNDisplayName": "Cantonés (China)", + "yueHKDisplayName": "Cantonés (Hong Kong)", + "zhDisplayName": "Chinés", + "zhCNDisplayName": "Chinés (Simplificado)", + "zhTWDisplayName": "Chinés (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11882,6 +10580,7 @@ "notStartedActivitiesTitle": "Sesións abertas ({num})", "inProgressActivitiesTitle": "Acontecendo agora ({num})", "completedActivitiesTitle": "Feito ({num})", + "pickDifferentActivity": "Elixe unha actividade diferente", "inOngoingActivity": "¡Tes unha actividade en curso!", "@notStartedActivitiesTitle": { "type": "String", @@ -11907,10 +10606,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "A súa lingua de destino non coincide con este mensaxe. Actualizar a súa lingua de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Isto é todo o mundo neste curso. Fai clic na avatar de calquera usuario e \"comeza a conversa\" para enviar un DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Esta palabra de vocabulario será eliminada permanentemente das túas análises", + "woman": "Muller", + "man": "Home", + "otherGender": "Outro", + "unselectedGender": "Selecciona unha opción de xénero", + "gender": "Xénero", + "chatParticipantTooltip": "Isto é todo o mundo nesta conversa. Fai clic na avatar de calquera usuario e \"comeza a conversa\" para enviar un DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "As ferramentas de aprendizaxe están desactivadas para mensaxes que non están na túa lingua de destino.", + "vocabEmoji": "Emoji de vocabulario", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Solicitar rexeneración", + "optionalRegenerateReason": "(Opcional) Razón", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Estableciches o emoji para {lemma}! Usaremos este emoji para representar a palabra nas actividades prácticas a partir de agora.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Agardando a finalización do inicio de sesión", + "ssoDialogDesc": "Abrimos unha nova pestana para que poidas iniciar sesión de forma segura.", + "ssoDialogHelpText": "🤔 Se non ves a nova pestana, por favor, verifica o teu bloqueador de ventás emerxentes.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desactivar ferramentas de idioma", + "disableLanguageToolsDesc": "Gustaríache desactivar a asistencia automática de idioma?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permiso denegado. Habilita os permisos de gravación para gravar mensaxes de audio.", + "genericWebRecordingError": "Algo saíu mal. Recoméndase usar o navegador Chrome ao gravar mensaxes.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Para a mellor experiencia ao usar esta aplicación, por favor, amplía o tamaño da túa pantalla.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Actividades para Desbloquear o Próximo Tema", "activitiesToUnlockTopicDesc": "Establece o número de actividades para desbloquear o próximo tema do curso", "@activitiesToUnlockTopicTitle": { @@ -11920,5 +10737,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Práctica correcta da definición de vocabulario", + "constructUseIncLMDesc": "Práctica incorrecta da definición de vocabulario", + "constructUseCorLADesc": "Práctica correcta do audio de vocabulario", + "constructUseIncLADesc": "Práctica incorrecta do audio de vocabulario", + "constructUseBonus": "Bonificación durante a práctica de vocabulario", + "practiceVocab": "Practica de vocabulario", + "selectMeaning": "Selecciona o significado", + "selectAudio": "Selecciona o audio correspondente", + "congratulations": "Parabéns!", + "anotherRound": "Outra ronda", + "noActivityRequest": "Non hai solicitudes de actividade actuais.", + "quit": "Saír", + "congratulationsYouveCompletedPractice": "Parabéns! Completaches a sesión de práctica.", + "mustHave10Words": "Debes ter polo menos 10 palabras de vocabulario para practicálas. Intenta falar cun amigo ou co Pangea Bot para descubrir máis!", + "botSettings": "Configuración do Bot", + "activitySettingsOverrideWarning": "Idioma e nivel de idioma determinados polo plan de actividade", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index 7486dff15..06e395102 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:22.903727", + "@@last_modified": "2026-01-07 14:24:41.103817", "about": "אודות", "@about": { "type": "String", @@ -1964,26 +1964,14 @@ "commandHint_logoutall": "התנתק מכל המכשירים הפעילים", "displayNavigationRail": "הצג מסילת ניווט במובייל", "customReaction": "תגובה מותאמת אישית", - "accountInformation": "מידע על החשבון", - "addGroupDescription": "הוסף תיאור לשיחה", - "addNewFriend": "הוסף חבר חדש", - "alreadyHaveAnAccount": "כבר יש לך חשבון?", - "createNewGroup": "צור שיחה חדשה", - "editChatPermissions": "ערוך הרשאות שיחה", "writeAMessageLangCodes": "הקליד ב-{l1} או {l2}...", "requests": "בקשות", - "allCorrect": "כך הייתי אומר את זה! יפה!", - "newWayAllGood": "זה לא איך הייתי אומר את זה אבל זה נראה טוב!", - "othersAreBetter": "הממ, אולי יש דרך יותר טובה לומר את זה.", "holdForInfo": "לחץ והחזק למידע על המילה.", "greenFeedback": "זה מה שהייתי שם!", "yellowFeedback": "הממ, תנסה את זה ולראות אם זה עובד! כדי להשתמש במילה זו, פשוט לחץ עליה שוב.", "redFeedback": "אני לא חושב שזה נכון...", "itInstructionsTitle": "אני יכול לעזור לך לתרגם!", "itInstructionsBody": "אתה יכול ללחוץ ולהחזיק אפשרויות למידע על המילה.", - "oneday": "ה-24 שעות האחרונות", - "oneweek": "ה-7 ימים האחרונים", - "onemonth": "חודש אחרון", "gaTooltip": "שימוש ב-L2 עם סיוע דקדוקי", "taTooltip": "שימוש ב-L2 עם סיוע תרגום", "unTooltip": "אחר", @@ -1993,58 +1981,27 @@ "interactiveTranslatorAllowed": "בחירת תלמיד", "interactiveTranslatorRequired": "נדרש", "notYetSet": "עוד לא הוגדר", - "myLearning": "האנליטיקה שלי", "waTooltip": "שימוש ב-L2 ללא סיוע", - "changeDateRange": "שנה טווח תאריכים", - "classDescription": "תיאור", - "addStudents": "הזמן משתמשים באמצעות קישור או קוד", - "copyClassLink": "העתק קישור הזמנה", - "copyClassCode": "העתק קוד הזמנה", - "inviteStudentByUserName": "הזמן משתמשים באמצעות שם משתמש", "languageSettings": "הגדרות שפה", "interactiveTranslator": "סיוע בתרגום", - "shareVideo": "שתף וידאו", - "shareVideoDesc": "הפעל אפשרות זו כדי לאפשר לתלמידים לשתף וידאו בצ'אט.", - "shareFiles": "שתף קבצים", - "selectLanguageLevel": "בחר רמת שפה", "noIdenticalLanguages": "אנא בחר שפות בסיסיות ומטרה שונות", - "iWantALanguagePartnerFrom": "מאת:", - "worldWide": "בכל העולם", - "noResults": "אין תוצאות! נסה להרחיב את החיפוש.", "searchBy": "חפש לפי מדינה ושפות", - "iWantAConversationPartner": "אני רוצה שותף לשיחה ש", - "iWantALanguagePartnerWhoSpeaks": "מדבר:", - "iWantALanguagePartnerWhoIsLearning": "לומד:", "joinWithClassCode": "הצטרף לקורס", - "joinWithClassCodeHint": "הזן קוד הזמנה", - "languageLevelPreA1": "מתחיל אמיתי (Pre A1)", - "languageLevelA1": "מתחיל (A1)", - "languageLevelA2": "יסודי (A2)", - "languageLevelB1": "בינוני (B1)", - "languageLevelB2": "בינוני עליון (B2)", - "languageLevelC1": "מתקדם (C1)", - "languageLevelC2": "שליטה (C2)", + "languageLevelPreA1": "מתחיל נמוך (פרה A1)", + "languageLevelA1": "מתחיל בינוני (A1)", + "languageLevelA2": "מתחיל גבוה (A2)", + "languageLevelB1": "בינוני בינוני (B1)", + "languageLevelB2": "מתקדם נמוך (B2)", + "languageLevelC1": "מתקדם בינוני (C1)", + "languageLevelC2": "מעל (C2)", "changeTheNameOfTheClass": "שנה את השם", "changeTheNameOfTheChat": "שנה את שם הצ'אט", - "askPangeaBot": "שאל את בוט פנגיאה להגדרה הקשרית.", "sorryNoResults": "סליחה, אין תוצאות.", "ignoreInThisText": "התעלם", - "helpMeTranslate": "כן!", - "needsItShortMessage": "מחוץ למטרה", "needsItMessage": "חכה, זה לא {targetLanguage}! האם אתה צריך עזרה בתרגום?", - "needsIgcMessage": "הודעה זו מכילה שגיאת דקדוק.", - "tokenTranslationTitle": "מילה היא בשפת הבסיס שלך.", - "spanTranslationDesc": "ראה תרגומים אפשריים למטה.", - "spanTranslationTitle": "כמה מילים הן בשפת הבסיס שלך.", - "l1SpanAndGrammarTitle": "מחוץ לשפת היעד", - "l1SpanAndGrammarDesc": "זה יכול להיות בשפת הבסיס שלך או שזו טעות דקדוק.", - "otherTitle": "יש לך שגיאה.", - "otherDesc": "ראה תיקונים אפשריים למטה.", "countryInformation": "ארצי", - "myLanguages": "שפות הבסיס והיעד שלי", "targetLanguage": "שפת היעד", "sourceLanguage": "שפת הבסיס", - "languagesISpeak": "שפות שאני מדבר", "updateLanguage": "שפותיי", "whatLanguageYouWantToLearn": "איזה שפה אתה רוצה ללמוד?", "whatIsYourBaseLanguage": "מה שפת הבסיס שלך?", @@ -2059,13 +2016,8 @@ "errorDisableLanguageAssistanceUserDesc": "לחץ כאן לעדכון הגדרות עזרה בתרגום ועזרה בדקדוק", "errorDisableITClassDesc": "עזרה בתרגום מושבתת עבור הקורס שבו נמצא הצ'אט הזה.", "errorDisableIGCClassDesc": "עזרה בדקדוק מושבתת עבור הקורס שבו נמצא הצ'אט הזה.", - "itIsDisabled": "תרגום אינטראקטיבי מושבת", - "igcIsDisabled": "בדיקת דקדוק אינטראקטיבית מושבתת", - "goToLearningSettings": "עבור להגדרות הלמידה", "error405Title": "שפות לא מוגדרות", "error405Desc": "אנא הגדר את שפותיך בתפריט הראשי > הגדרות למידה.", - "loginOrSignup": "התחבר עם", - "iAgreeToThe": "אני מסכים ל-", "termsAndConditions": "תנאים והגבלות", "andCertifyIAmAtLeast13YearsOfAge": "ומאשר שאני בן לפחות 16 שנים.", "error502504Title": "וואו, יש הרבה תלמידים באינטרנט!", @@ -2073,40 +2025,21 @@ "error404Title": "שגיאת תרגום!", "error404Desc": "בוט פנגיאה לא בטוח איך לתרגם את זה...", "errorPleaseRefresh": "אנחנו בודקים את זה! אנא טען מחדש ונסה שוב.", - "toggleIT": "תרגום אינטראקטיבי", - "toggleIGC": "בדיקת דקדוק אינטראקטיבית", - "toggleToolSettingsDescription": "כאן תוכל להפעיל או לכבות את הגדרות כלי השפה האישיים שלך.", "connectedToStaging": "מחובר לסביבת בדיקה", "learningSettings": "הגדרות למידה", - "sendVoiceNotes": "שלח הודעות קוליות", - "sendVoiceNotesDesc": "הפעל את זה כדי לאפשר לתלמידים לשלוח הודעות קוליות בצ'אט.", - "chatTopic": "נושא הצ'אט", - "chatTopicDesc": "הגדר נושא לצ'אט", - "inviteStudentByUserNameDesc": "אם לתלמיד שלך יש כבר חשבון, תוכל לחפש אותו.", "participants": "משתתפים", - "almostPerfect": "זה נראה נכון! הנה מה שהייתי אומר.", - "prettyGood": "די טוב! הנה מה שהייתי אומר.", - "letMeThink": "הממ, בוא נראה איך עשית!", "clickMessageTitle": "צריך עזרה?", "clickMessageBody": "לחץ על הודעה לקבלת כלים לשפה כמו תרגום, השמעה חוזרת ועוד!", - "understandingMessagesTitle": "הגדרות ופירושים!", - "understandingMessagesBody": "לחץ על מילים מודגשות כדי לקבל הגדרות. תרגם עם אפשרויות ההודעה (מעלה מימין).", "allDone": "סיימת!", "vocab": "אוצר מילים", "low": "יש לנו ראיות שהמשתמש לא מבין את המילים האלה.", "medium": "המילים האלה שומשו. לא ברור אם המשתמש מבין אותן במלואן או לא.", "high": "יש לנו ראיות שהמשתמש מבין את המילים האלה.", - "unknownProficiency": "המילים האלה לא שומשו ב-Pangea Chat.", - "changeView": "החלף תצוגות.", - "clearAll": "נקה את כל המילים?", - "generateVocabulary": "צור אוצר מילים מתוך כותרת ותיאור", - "generatePrompts": "צור הנחיות", "subscribe": "הירשם", "getAccess": "הירשם עכשיו!", "subscriptionDesc": "הודעות חינם! הירשם כדי לפתוח תרגום אינטראקטיבי, בדיקת דקדוק וניתוחי למידה.", "subscriptionManagement": "ניהול מנוי", "currentSubscription": "המנוי הנוכחי", - "changeSubscription": "שנה את המנוי שלך", "cancelSubscription": "בטל את המנוי שלך", "selectYourPlan": "בחר את התוכנית שלך", "subsciptionPlatformTooltip": "אנא היכנס למכשיר המקורי שלך כדי לנהל את תכנית המנוי שלך", @@ -2115,9 +2048,6 @@ "paymentHistory": "היסטוריית תשלומים", "emptyChatDownloadWarning": "לא ניתן להוריד שיחה ריקה", "update": "עדכון", - "updateDesc": "עכשיו תוכל לעדכן את האפליקציה מ-{localVersion} ל-{storeVersion}", - "maybeLater": "אולי מאוחר יותר", - "mainMenu": "תפריט ראשי", "toggleImmersionMode": "מצב הטמעה", "toggleImmersionModeDesc": "כאשר מופעל, כל ההודעות מוצגות בשפת היעד שלך. הגדרה זו שימושית במיוחד בהחלפות שפות.", "itToggleDescription": "כלי זה ללימוד שפות יזהה מילים בשפת הבסיס שלך ויעזור לתרגמן לשפת היעד שלך. לעיתים נדירות, ה-AI עלול לטעות בתרגום.", @@ -2132,212 +2062,13 @@ "definitionsToolDescription": "כאשר מופעל, מילים שמודגשות בכחול ניתנות ללחיצה לקבלת הגדרות. לחץ על ההודעות כדי לגשת להגדרות.", "translationsToolDescrption": "כאשר מופעל, לחץ על הודעה ואיקון התרגום כדי לראות הודעה בשפת הבסיס שלך.", "welcomeBack": "ברוכים השבים! אם היית חלק מניסוי 2023-2024, אנא צור איתנו קשר לקבלת המנוי המיוחד שלך לניסוי. אם אתה מורה שרכש (או המוסד שלך רכש) רישיונות לכיתה שלך, צור איתנו קשר למנוי המורה שלך.", - "kickAllStudents": "הדח את כל התלמידים", - "kickAllStudentsConfirmation": "האם אתה בטוח שברצונך לדחוף את כל התלמידים?", - "inviteAllStudents": "הזמן את כל התלמידים", - "inviteAllStudentsConfirmation": "האם אתה בטוח שברצונך להזמין את כל התלמידים?", - "inviteUsersFromPangea": "הוסף מנהלים", - "redeemPromoCode": "מימוש קוד קידום מכירות", - "enterPromoCode": "הזן קוד קידום מכירות", "downloadTxtFile": "הורד קובץ טקסט", "downloadCSVFile": "הורד קובץ CSV", "promotionalSubscriptionDesc": "יש לך כרגע מנוי קידום מכירות לכל החיים. שלח הודעה ל-support@pangea.chat לעזרה בשינוי המנוי שלך.", "originalSubscriptionPlatform": "המנוי נרכש דרך {purchasePlatform}", "oneWeekTrial": "ניסיון לשבוע אחד", "downloadXLSXFile": "הורד קובץ אקסל", - "abDisplayName": "אבחזית", - "aaDisplayName": "אפר", - "afDisplayName": "אפריקאנס", - "akDisplayName": "אקאן", - "sqDisplayName": "אלבנית", - "amDisplayName": "אמהרית", - "arDisplayName": "ערבית", - "anDisplayName": "ארגונזית", - "hyDisplayName": "ארמנית", - "asDisplayName": "אסאמית", - "avDisplayName": "אברית", - "aeDisplayName": "אובסטית", - "ayDisplayName": "איימארית", - "azDisplayName": "אזרית", - "bmDisplayName": "במבארה", - "baDisplayName": "באשקירית", - "euDisplayName": "בסקית", - "beDisplayName": "בלארוסית", - "bnDisplayName": "בנגלית", - "bhDisplayName": "ביהארית", - "biDisplayName": "ביסלאמה", - "bsDisplayName": "בוסנית", - "brDisplayName": "ברטונית", - "bgDisplayName": "בולגרית", - "myDisplayName": "בורמזית", - "caDisplayName": "קטלאנית, ולנסיאנית", - "chDisplayName": "צ'אמורו", - "ceDisplayName": "צ'צ'נית", - "nyDisplayName": "צ'יצ'וואה, צ'ואה, ניאנז'ה", - "zhDisplayName": "סינית", - "cvDisplayName": "צ'ובאש", - "kwDisplayName": "קורניש", - "coDisplayName": "קורסיקנית", - "crDisplayName": "קרי", - "hrDisplayName": "קרואטית", - "csDisplayName": "צ'כית", - "daDisplayName": "דנית", - "dvDisplayName": "דיווהי; דיבהי; מלדיבית;", - "nlDisplayName": "הולנדית", - "enDisplayName": "אנגלית", - "eoDisplayName": "אספרנטו", - "etDisplayName": "אסטונית", - "eeDisplayName": "אווה", - "foDisplayName": "פרואזית", - "fjDisplayName": "פיגיאנית", - "fiDisplayName": "פינית", - "frDisplayName": "צרפתית", - "ffDisplayName": "פולה; פולה; פולאר; פולאר", - "glDisplayName": "גאלית", - "kaDisplayName": "גאורגית", - "deDisplayName": "גרמנית", - "elDisplayName": "יוונית, מודרנית", - "gnDisplayName": "גוארני", - "guDisplayName": "גוג'ראטי", - "htDisplayName": "האיטית, קריאולית היספנית", - "haDisplayName": "הוסה", - "heDisplayName": "עברית (מודרנית)", - "hzDisplayName": "הררו", - "hiDisplayName": "הינדי", - "hoDisplayName": "הירי מוטו", - "huDisplayName": "הונגרית", - "iaDisplayName": "אינטרלינגואה", - "idDisplayName": "אינדונזית", - "ieDisplayName": "אינטרלינגואי", - "gaDisplayName": "אירית", - "igDisplayName": "יגבו", - "ikDisplayName": "אינופיאק", - "ioDisplayName": "עִידוֹ", - "isDisplayName": "איסלנדית", - "itDisplayName": "איטלקית", - "iuDisplayName": "אינוקטיטוט", - "jaDisplayName": "יפנית", - "jvDisplayName": "ג'אוונית", - "klDisplayName": "קאלאליסוט, גרינלנדית", - "knDisplayName": "קנאדה", - "krDisplayName": "קנורי", - "ksDisplayName": "קשמירית", - "kkDisplayName": "קזחית", - "kmDisplayName": "חמרית", - "kiDisplayName": "קיקויו, גיקויו", - "rwDisplayName": "קיניארוואנדה", - "kyDisplayName": "קירגיזית, קירגיז", - "kvDisplayName": "קומי", - "kgDisplayName": "קונגו", - "koDisplayName": "קוריאנית", - "kuDisplayName": "כורדית", - "kjDisplayName": "קוואניאמה, קואניאמה", - "laDisplayName": "לטינית", - "lbDisplayName": "לוקסמבורגית, לוצברש", - "lgDisplayName": "וגאנדה", - "liDisplayName": "לימבורגית, לימבורגאנית, לימבורגר", - "lnDisplayName": "ינגאלה", - "loDisplayName": "לאו", - "ltDisplayName": "ליטאית", - "luDisplayName": "לובה-קטנגה", - "lvDisplayName": "לטבית", - "gvDisplayName": "מאנקס", - "mkDisplayName": "מקדונית", - "mgDisplayName": "מאלאגאסית", - "msDisplayName": "מליתית", - "mlDisplayName": "מליאלאם", - "mtDisplayName": "מלטזית", - "miDisplayName": "מאורי", - "mrDisplayName": "מראטית (מראטה)", - "mhDisplayName": "מרשלית", - "mnDisplayName": "מונגולית", - "naDisplayName": "נאורואית", - "nvDisplayName": "נאוואחו, נאוואחו", - "nbDisplayName": "נורווגית בוקמול", - "ndDisplayName": "נורד נדבלה", - "neDisplayName": "נפאלית", - "ngDisplayName": "נדונגה", - "nnDisplayName": "נורווגית נינורסק", - "noDisplayName": "נורווגית", - "iiDisplayName": "נוסו", - "nrDisplayName": "דרום נדבלה", - "ocDisplayName": "אוקסיטנית", - "ojDisplayName": "אוג'יבווה, אוג'יבווה", - "cuDisplayName": "שפת הכנסייה העתיקה, סלאבית הכנסייה, סלאבית עתיקה, בולגרית עתיקה, סלאבית עתיקה", - "omDisplayName": "אורומו", - "orDisplayName": "אוריה", - "osDisplayName": "אוסתית, אוסתית", - "paDisplayName": "פנג'אבי, פנג'אבי", - "piDisplayName": "פאלי", - "faDisplayName": "פרסית", - "plDisplayName": "פולנית", - "psDisplayName": "פשטו, פושטו", - "ptDisplayName": "פורטוגזית", - "quDisplayName": "קצ'ואה", - "rmDisplayName": "רומאנש", - "rnDisplayName": "קירונדי", - "roDisplayName": "רומנית, מולדבית, מולדובנית", - "ruDisplayName": "רוסית", - "saDisplayName": "סנסקריט (סנסקריטה)", - "scDisplayName": "סרדינית", - "sdDisplayName": "סינדי", - "seDisplayName": "סמי צפוני", - "smDisplayName": "סמואן", - "sgDisplayName": "סנגו", - "srDisplayName": "סרבית", - "gdDisplayName": "גאלית סקוטית, גאלית", - "snDisplayName": "שונה", - "siDisplayName": "סינהלה, סינהלה", - "skDisplayName": "סלובקית", - "slDisplayName": "סלובנית", - "soDisplayName": "סומלית", - "stDisplayName": "סות' דרומית", - "esDisplayName": "ספרדית", - "suDisplayName": "סונדאנזית", - "swDisplayName": "שווילית", - "ssDisplayName": "סוואטי", - "svDisplayName": "שוודית", - "taDisplayName": "טמילית", - "teDisplayName": "טלוגית", - "tgDisplayName": "טג'יקית", - "thDisplayName": "תאית", - "tiDisplayName": "טיגרינית", - "boDisplayName": "טיבטית תקנית, טיבטית, מרכזית", - "tkDisplayName": "טורקמנית", - "tlDisplayName": "תגלאג", - "tnDisplayName": "צ'ואנה", - "toDisplayName": "טונגה (איי טונגה)", - "trDisplayName": "טורקית", - "tsDisplayName": "צונגה", - "ttDisplayName": "טטרית", - "twDisplayName": "טווי", - "tyDisplayName": "טהיטית", - "ugDisplayName": "אויגור, אויגור", - "ukDisplayName": "אוקראיני", - "urDisplayName": "אורדו", - "uzDisplayName": "אוזבקי", - "veDisplayName": "ונדה", - "viDisplayName": "וייטנאמי", - "voDisplayName": "ולאפוק", - "waDisplayName": "ולון", - "cyDisplayName": "וולשי", - "woDisplayName": "ולוף", - "fyDisplayName": "פריזית מערבית", - "xhDisplayName": "חוסה", - "yiDisplayName": "יידיש", - "yoDisplayName": "יורובה", - "zaDisplayName": "זואנג, צואנג", "unkDisplayName": "לא ידוע", - "zuDisplayName": "זולו", - "hawDisplayName": "הוואי", - "hmnDisplayName": "המונג", - "multiDisplayName": "רב-שכבתי", - "cebDisplayName": "סבו", - "dzDisplayName": "זונקה", - "iwDisplayName": "עברית", - "jwDisplayName": "ג'אוונזי", - "moDisplayName": "מולדבי", - "shDisplayName": "סרבו-קרואטי", "wwCountryDisplayName": "עולם רחב", "afCountryDisplayName": "אפגניסטן", "axCountryDisplayName": "איי אלנד", @@ -2585,41 +2316,25 @@ "yeCountryDisplayName": "תימן", "zmCountryDisplayName": "זמביה", "zwCountryDisplayName": "זימבבואה", - "pay": "שלם", - "allPrivateChats": "שיחות פרטיות ישירות", - "unknownPrivateChat": "שיחה פרטית לא ידועה", + "pay": "Checkout", "invitedToSpace": "{user} הזמין אותך להצטרף לקורס: {space}! האם ברצונך לקבל?", - "declinedInvitation": "הזמנה נדחתה", - "acceptedInvitation": "ההזמנה התקבלה", "youreInvited": "📩 אתה מוזמן!", "invitedToChat": "{user} הזמין אותך להצטרף לשיחה: {name}! האם תרצה/י לקבל?", "monthlySubscription": "חודשי", "yearlySubscription": "שנתי", "defaultSubscription": "מנוי Pangea Chat", "freeTrial": "ניסיון חינם", - "grammarAnalytics": "אנליטיקת שגיאות", "total": "סה\"כ: ", "noDataFound": "לא נמצאו נתונים", - "promoSubscriptionExpirationDesc": "המנוי הנוכחי שלך הוא מבצעי ומסתיים ב-{expiration}. לשליחת הודעה לתמיכה, כתוב ל-support@pangea.chat.", - "emptyChatNameWarning": "אנא הזן שם לשיחה זו", "blurMeansTranslateTitle": "מדוע ההודעה מטושטשת?", "blurMeansTranslateBody": "כאשר מצב הטמעה פעיל, הודעות שנשלחות בשפת היסוד שלך יהיו מטושטשות בזמן ש-Pangea Bot מתרגם אותן לשפת היעד שלך. מצב הטמעה ניתן להפעיל או לכבות בהגדרות הפרטיות והקורס.", - "someErrorTitle": "הו, משהו לא בסדר", - "someErrorBody": "זה יכול להיות שגיאה או משהו בשפת היסוד שלך.", "bestCorrectionFeedback": "זה נכון!", "distractorFeedback": "זה לא בדיוק נכון.", "bestAnswerFeedback": "זה נכון!", "definitionDefaultPrompt": "מה המשמעות של מילה זו?", "practiceDefaultPrompt": "מה התשובה הטובה ביותר?", "correctionDefaultPrompt": "מה ההחלפה הטובה ביותר?", - "itStartDefaultPrompt": "האם תרצה עזרה בתרגום?", - "lockedChatWarning": "🔒 שיחה זו הוגבלה", - "lockChat": "נעול שיחה", - "suggestToChat": "הצע שיחה זו", - "suggestToChatDesc": "שיחות מוצעות יופיעו ברשימות השיחות", "acceptSelection": "קבל תיקון", - "acceptSelectionAnyway": "השתמש בזה בכל זאת", - "makingActivity": "מבצע פעילות", "why": "למה?", "definition": "הגדרה", "exampleSentence": "משפט דוגמה", @@ -2627,128 +2342,55 @@ "reportMessageTitle": "{reportingUserId} דיווחה על הודעה מ-{reportedUserId} בשיחה {roomName}", "reportMessageBody": "הודעה: {reportedMessage}\nסיבה: {reason}", "noTeachersFound": "לא נמצאו מורים לדווח אליהם", - "viewArchive": "צפה בארכיון", "trialExpiration": "המבחן החינמי שלך יפוג ב-{expiration}", "freeTrialDesc": "משתמשים חדשים מקבלים ניסיון חינם של שבוע ב-Pangea Chat", "activateTrial": "ניסיון חינם ל-7 ימים", "successfullySubscribed": "נרשמת בהצלחה!", "clickToManageSubscription": "לחץ כאן כדי לנהל את המנוי שלך.", - "errorGettingAudio": "שגיאה בהבאת הקול. אנא רענן ונסה שוב.", "signUp": "הירשם", "pleaseChooseAtLeastChars": "אנא בחר לפחות {min} תווים.", "noEmailWarning": "אנא הזן כתובת דוא\"ל תקינה. אחרת לא תוכל לאפס את הסיסמה שלך. אם אינך רוצה, לחץ שוב על הכפתור כדי להמשיך.", "pleaseEnterValidEmail": "אנא הזן כתובת דוא\"ל תקינה.", "pleaseChooseAUsername": "אנא בחר שם משתמש", - "chooseAUsername": "בחר שם משתמש", "define": "הגדר", "listen": "האזן", - "addConversationBot": "הפעל בוט שיחה", - "addConversationBotDesc": "הוסף בוט לשיחה זו", - "convoBotSettingsDescription": "ערוך נושא שיחה וקושי", - "enterAConversationTopic": "הזן נושא שיחה", - "conversationTopic": "נושא שיחה", - "enableModeration": "הפעל פיקוח", - "enableModerationDesc": "הפעל פיקוח אוטומטי לסקירת ההודעות לפני שליחתן", - "conversationLanguageLevel": "מה רמת השפה של שיחה זו?", - "showDefinition": "הצג הגדרה", - "subscriptionPopupTitle": "משפט זה עלול להכיל טעות דקדוק...", - "subscriptionPopupDesc": "הירשם היום כדי לפתוח תרגום ותיקון דקדוק!", - "seeOptions": "ראה אפשרויות", - "continuedWithoutSubscription": "המשך ללא מנוי", "trialPeriodExpired": "תקופת הניסיון שלך תמה", - "selectToDefine": "לחץ על כל מילה כדי לראות את ההגדרה שלה!", "translations": "תרגומים", "messageAudio": "קול ההודעה", "definitions": "הגדרות", "subscribedToUnlockTools": "הירשם כדי לפתוח תרגום אינטראקטיבי ובדיקת דקדוק, השמעת קול, פעילויות תרגול מותאמות אישית וניתוחי למידה!", "translationTooltip": "תרגם", - "audioTooltip": "נגן קול", "speechToTextTooltip": "תמלול", - "certifyAge": "אני מאשר שאני בן {age} ומעלה", "kickBotWarning": "הסרת בוט פנגיאה תסיר את בוט השיחה משיחה זו.", - "joinToView": "הצטרף לחדר זה כדי לצפות בפרטים", "refresh": "רענן", - "autoPlayTitle": "נגן אוטומטית הודעות", - "autoPlayDesc": "כאשר מופעל, קול הטקסט להאזנה של ההודעות ינוגן אוטומטית כאשר נבחר.", "messageAnalytics": "אנליטיקת הודעות", "words": "מילים", "score": "ניקוד", "accuracy": "דיוק", "points": "נקודות", "noPaymentInfo": "אין צורך במידע תשלום!", - "conversationBotModeSelectDescription": "פעילות שיחה", - "conversationBotModeSelectOption_discussion": "דיון", - "conversationBotModeSelectOption_custom": "מותאם אישית", - "conversationBotModeSelectOption_conversation": "שיחה", - "conversationBotModeSelectOption_textAdventure": "הרפתקה בטקסט", - "conversationBotModeSelectOption_storyGame": "משחק סיפור", - "conversationBotDiscussionZone_title": "הגדרות דיון", - "conversationBotDiscussionZone_discussionTopicLabel": "נושא הדיון", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "הגדר נושא לדיון", - "conversationBotDiscussionZone_discussionKeywordsLabel": "מילות מפתח לדיון", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "הגדר מילות מפתח לדיון", - "conversationBotDiscussionZone_discussionKeywordsHintText": "רשימת מילות מפתח מופרדות בפסיקים להכוונת הדיון", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "שלח הודעת דיון בלוח זמנים", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "שעות בין הודעות הדיון", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "מגיב על תגובה ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "תגובה לשליחת הודעת דיון", - "conversationBotCustomZone_title": "הגדרות מותאמות", - "conversationBotCustomZone_customSystemPromptLabel": "הודעת מערכת", - "conversationBotCustomZone_customSystemPromptPlaceholder": "הגדר הודעת מערכת מותאמת", - "conversationBotCustomZone_customSystemPromptEmptyError": "חסרה הודעת מערכת מותאמת", - "botConfig": "הגדרות בוט ופעילות", - "botConfigNoPermissionTitle": "אין הרשאה", - "botConfigNoPermissionMessage": "פנה למנהל החדר לשינוי הגדרות הבוט", - "addConversationBotDialogTitleInvite": "אשר הזמנת בוט שיחה", - "addConversationBotButtonInvite": "הזמן", - "addConversationBotDialogInviteConfirmation": "הזמנה", - "addConversationBotButtonTitleRemove": "אשר הסרת בוט שיחה", - "addConversationBotButtonRemove": "הסר", - "addConversationBotDialogRemoveConfirmation": "הסר", - "conversationBotConfigConfirmChange": "אשר", - "conversationBotStatus": "הזמן בוט", - "conversationBotTextAdventureZone_title": "הרפתקה טקסטואלית", - "conversationBotTextAdventureZone_instructionLabel": "הוראות למנהל המשחק", - "conversationBotTextAdventureZone_instructionPlaceholder": "הגדר הוראות למנהל המשחק", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "חסרות הוראות למנהל המשחק", - "studentAnalyticsNotAvailable": "נתוני תלמידים אינם זמינים כרגע", - "roomDataMissing": "חלק מהנתונים עשויים להחסר מחדרים שאינך חבר בהם.", "updatePhoneOS": "ייתכן שתצטרך לעדכן את גרסת מערכת ההפעלה של המכשיר שלך.", "wordsPerMinute": "מילים בדקה", "autoIGCToolName": "הרץ אוטומטית את עזר הכתיבה של פאנגיאה", "autoIGCToolDescription": "הרץ אוטומטית את עזר הכתיבה של דקדוק ותרגום של פאנגיאה לפני שליחת ההודעה שלי.", - "runGrammarCorrection": "בדוק הודעה", - "grammarCorrectionFailed": "בעיות שיש לטפל בהן", - "grammarCorrectionComplete": "נראה טוב!", "tooltipInstructionsTitle": "לא בטוח מה זה עושה?", "tooltipInstructionsMobileBody": "החזק והחלק על פריטים כדי לצפות בטיפים.", "tooltipInstructionsBrowserBody": "החלק מעל פריטים כדי לצפות בטיפים.", "chatCapacity": "קיבולת שיחה", "roomFull": "החדר מלא כבר.", - "topicNotSet": "הנושא לא הוגדר.", - "chatCapacityNotSet": "לשיחה זו אין מגבלת קיבולת.", "chatCapacityHasBeenChanged": "קיבולת השיחה שונתה", "chatCapacitySetTooLow": "קיבולת השיחה חייבת להיות לפחות {count}.", "chatCapacityExplanation": "קיבולת שיחה מגבילה את מספר החברים המורשים בשיחה.", - "chatExceedsCapacity": "שיחה זו חורגת מקיבולת שלה.", "tooManyRequest": "יותר מדי בקשות, אנא נסה שוב מאוחר יותר.", "enterNumber": "אנא הזן ערך מספר שלם.", "buildTranslation": "בנה את התרגום שלך מהאפשרויות למעלה", - "nonexistentSelection": "הבחירה כבר לא קיימת.", - "changeAnalyticsLanguage": "שנה שפת ניתוח הנתונים", "practice": "תרגול", "noLanguagesSet": "לא הוגדרו שפות", - "noActivitiesFound": "זה מספיק לעכשיו! חזור מאוחר יותר לעוד.", - "hintTitle": "רמז:", "speechToTextBody": "להודעות קוליות, תוכל לראות תמלול וגם את ניקוד מילות לדקה של הדובר.", "versionNotFound": "הגרסה לא נמצאה", "fetchingVersion": "מבצע טעינת גרסה...", "versionFetchError": "שגיאה בטעינת הגרסה", "versionText": "גרסה: {version}+{buildNumber}", - "languageButtonLabel": "שפה: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "הפעל תרגום אוטומטי", - "interactiveTranslatorAutoPlayDesc": "משיק את המתרגם האינטראקטיבי מבלי לשאול.", - "changeAnalyticsView": "שנה תצוגת ניתוח הנתונים", "l1TranslationBody": "הודעות בשפת היסוד שלך לא יתורגמו.", "deleteSubscriptionWarningTitle": "יש לך מנוי פעיל", "deleteSubscriptionWarningBody": "מחיקת החשבון שלך לא תבטל אוטומטית את המנוי שלך.", @@ -2756,9 +2398,7 @@ "error520Title": "אנא נסה שוב.", "error520Desc": "סליחה, לא הצלחנו להבין את ההודעה שלך...", "wordsUsed": "מילים בשימוש", - "errorTypes": "סוגי שגיאות", "level": "רמה", - "canceledSend": "שליחה בוטלה", "morphsUsed": "מורפמות בשימוש", "translationChoicesBody": "לחץ והחזק אפשרות לקבלת רמז.", "grammar": "דקדוק", @@ -2768,7 +2408,6 @@ "reportContentIssueTitle": "דווח על בעיית תוכן", "feedback": "משוב אופציונלי", "reportContentIssueDescription": "אוי ואבוי! בינה מלאכותית יכולה לסייע בחוויות למידה מותאמות אישית אך... גם הוזה. אנא ספק כל משוב שיש לך ואנחנו ננסה שוב.", - "changeContent": "אוי ואבוי! בינה מלאכותית יכולה לסייע בחוויות למידה מותאמות אישית אך... גם הוזה. מה צריך להיות?", "clickTheWordAgainToDeselect": "לחץ על המילה שנבחרה כדי לבטל את הבחירה.", "l2SupportNa": "לא זמין", "l2SupportAlpha": "אלפא", @@ -3002,7 +2641,6 @@ "grammarCopySPC": "ספציפיות", "grammarCopyPARTTYPE": "סוג חלקי", "grammarCopyINTREL": "שאלה-יחס", - "grammarCopyNUMFORMpsor": "מספר מחזיק", "grammarCopyUNKNOWN": "לא ידוע", "grammarCopyNUMBERPSOR": "מספר מחזיק", "grammarCopyPOSS": "קנייני", @@ -3048,28 +2686,14 @@ "grammarCopyVOICEdir": "ישיר", "grammarCopyVOICEinv": "הפוך", "grammarCopyVOICErcp": "הדדי", - "enterPrompt": "אנא הזן הודעת מערכת", - "selectBotLanguage": "בחר שפת בוט", - "chooseVoice": "בחר קול", - "enterLanguageLevel": "אנא הזן רמת שפה", - "enterDiscussionTopic": "אנא הזן נושא לדיון", - "selectBotChatMode": "בחר מצב שיחה", - "messageNotInTargetLang": "ההודעה אינה בשפת היעד", "other": "אחר", "levelShort": "רמה {level}", - "botModeValidation": "אנא בחר מצב שיחה", "clickBestOption": "בחר את האפשרויות הטובות ביותר לתרגום ההודעה שלך!", "completeActivitiesToUnlock": "השלם לפחות פעילות אחת כדי לפתוח את התרגום!", - "botSettingsSubtitle": "הזמן בוט לניהול פעילות השיחה", - "invitePeople": "הזמן משתמשים", "noCapacityLimit": "אין מגבלת קיבולת", "downloadGroupText": "הורד טקסט מקבוצה", "notificationsOn": "התראות מופעלות", "notificationsOff": "ההתראות כבויות", - "chatCanBeFoundViaSearch": "ניתן למצוא את הצ'אט באמצעות חיפוש", - "requireCodeToJoin": "דרוש קוד להצטרפות", - "canFindInSearch": "ניתן למצוא בחיפוש", - "addChatToSpace": "הוסף צ'אט", "createChatAndInviteUsers": "צור צ'אט והזמן משתמשים", "updatedNewSpaceDescription": "קורסים מאפשרים לך לאחד את השיחות שלך ולבנות קהילות פרטיות או ציבוריות.", "joinWithCode": "הצטרף עם קוד", @@ -3105,39 +2729,19 @@ "constructUseCollected": "אסוף בצ'אט", "constructUseNanDesc": "לא רלוונטי", "xpIntoLevel": "{currentXP} / {maxXP} נקודות ניסיון", - "signInWithUsername": "התחבר עם שם משתמש וסיסמה", - "registrationEmailMessage": "אנא אשר את הדוא\"ל שלך עם קישור שנשלח לשם. במקרים מסוימים, הדוא\"ל מגיע עד 5 דקות. אנא בדוק גם את תיקיית הספאם שלך.", "enableTTSToolName": "הפעל טקסט לדיבור", "enableTTSToolDescription": "אפשר לאפליקציה לייצר פלט טקסט לדיבור לחלקי טקסט בשפת היעד שלך.", - "couldNotFindTTS": "לא הצלחנו למצוא מנוע טקסט לדיבור לשפת היעד הנוכחית שלך.", - "ttsInstructionsHyperlink": "לחץ כאן לצפייה בהוראות להורדת קול חדש במכשיר שלך.", - "createAnAccount": "צור חשבון", - "signIn": "התחבר", - "signUpWithEmail": "הירשם עם דוא\"ל", - "signUpWithGoogle": "הירשם עם Google", - "signUpWithApple": "הירשם עם Apple", "yourUsername": "שם המשתמש שלך", "yourEmail": "הדוא\"ל שלך", - "pleaseEnterAnEmail": "אנא הזן כתובת דוא\"ל", - "signInWithGoogle": "התחבר עם Google", - "signInWithApple": "התחבר עם Apple", - "chooseYourAvatar": "בחר את האווטאר שלך", "iWantToLearn": "אני רוצה ללמוד", - "letsStart": "בוא נתחיל", - "pleaseAgreeToTOS": "אנא הסכים לתנאים ולהתניות", "pleaseEnterEmail": "אנא הזן כתובת דוא\"ל תקינה.", - "pleaseSelectALanguage": "אנא בחר שפה", "myBaseLanguage": "שפת היסוד שלי", - "clickWordsInstructions": "🧻 הקש על כל מילה לפרטים. 🤐", - "chooseBestDefinition": "מה המשמעות של מילה זו?", "meaningSectionHeader": "משמעות:", "formSectionHeader": "צורות בשימוש בשיחות:", - "noEmojiSelectedTooltip": "לא נבחר אימוג'י", "writingExercisesTooltip": "כתיבה", "listeningExercisesTooltip": "האזנה", "readingExercisesTooltip": "קריאה", "meaningNotFound": "לא נמצא משמעות.", - "formsNotFound": "לא נמצאו צורות.", "chooseBaseForm": "בחר את הצורה הבסיסית", "notTheCodeError": "סליחה, זה לא הקוד!", "totalXP": "ניסיון כולל", @@ -3177,9 +2781,6 @@ "pickAnEmoji": "איזה אימוג'י אתה הכי אוהב ל-'{lemma}'?", "chooseLemmaMeaningInstructionsBody": "התאם בין המשמעויות למילים בהודעה!", "doubleClickToEdit": "לחץ פעמיים כדי לערוך.", - "removeFeature": "הסר את {feature}", - "chooseCorrectLabel": "בחר את התווית הנכונה.", - "levelPopupTitle": "ברכות על ההגעה ל\nרמה {level}", "activityPlannerTitle": "מתכנן פעילויות", "topicLabel": "נושא", "topicPlaceholder": "בחר נושא...", @@ -3187,7 +2788,6 @@ "modePlaceholder": "בחר מצב...", "learningObjectiveLabel": "מטרה ללמידה", "learningObjectivePlaceholder": "בחר מטרה ללמידה...", - "mediaLabel": "מדיה שהלומדים צריכים לשתף", "languageOfInstructionsLabel": "שפת ההוראות לפעילות", "targetLanguageLabel": "שפת היעד", "cefrLevelLabel": "רמת CEFR", @@ -3202,20 +2802,15 @@ "instructions": "הוראות", "numberOfLearners": "מספר הלומדים", "mustBeInteger": "Must be an integer e.g. 1, 2, 3, ...", - "noLemmasFound": "אין אוצר מילים עם יותר מ-{xp} נקודות ניסיון. המשך לתרגל!", "constructUsePvmDesc": "מיוצר בהודעת קול", - "lockedMorphFeature": "מחכה לפתיחה", "leaveSpaceDescription": "על ידי יציאה מהקורס, תעזוב את כל השיחות בתוכו. משתמשים אחרים יראו שהיית בחוץ.", - "whatIsLemma": "מהו היסוד?", "constructUseCorMmDesc": "משמעות ההודעה הנכונה", "constructUseIncMmDesc": "משמעות ההודעה השגויה", "constructUseIgnMmDesc": "משמעות ההודעה שהתעלמו ממנה", "clickForMeaningActivity": "לחץ כאן לאתגר משמעות", "meaning": "משמעות", "chatWith": "קבוצה עם {displayname}", - "slightlyOffensive": "קצת פוגעני", "clickOnEmailLink": "אנא לחץ על הקישור במייל והמשך.\n\nבדוק את תיקיית הספאם אם המייל לא הגיע.", - "whoIsAllowedToJoinThisChat": "מי מורשה להצטרף לשיחה זו", "dontForgetPassword": "אל תשכח את הסיסמה שלך!", "enableAutocorrectToolName": "הפעל תיקון אוטומטי במכשיר", "enableAutocorrectDescription": "אם המכשיר שלך תומך בשפה שלומדים, תוכל להפעיל תיקון אוטומטי כדי לתקן שגיאות נפוצות בזמן ההקלדה.", @@ -3243,48 +2838,26 @@ "autocorrectNotAvailable": "לצערנו הפלטפורמה שלך כרגע לא נתמכת לתכונה זו. המשך לעקוב לפיתוח עתידי!", "pleaseUpdateApp": "אנא עדכן את האפליקציה כדי להמשיך.", "chooseEmojiInstructionsBody": "התאם את האימוג'ים למילים שהם מייצגים הכי טוב. אל תדאג! אין נקודות על אי הסכמה. 😅", - "pickAnEmojiFor": "בחר אימוג'י ל-{lemma}", "analyticsVocabListBody": "זה כל אוצר המילים שלך! ככל שתצבור XP עבור כל מילה, היא תעבור מזרע לפריחה מלאה. לחץ על כל מילה כדי לראות פרטים נוספים.", "morphAnalyticsListBody": "אלו כל מושגי הדקדוק בשפה שאתה לומד! תפתח אותם ככל שתפגוש אותם במהלך השיחה. לחץ לפרטים.", "knockSpaceSuccess": "ביקשת להצטרף לקורס זה! מנהל יענה לבקשתך כאשר יקבל אותה 😀", - "joinByCode": "הצטרף באמצעות קוד", "chooseWordAudioInstructionsBody": "האזן להודעה המלאה. לאחר מכן, התאם את ההקלטות למילים.", "chooseMorphsInstructionsBody": "לחץ על חלקי הפאזל לשאלות דקדוק!", - "inviteAndLaunch": "הזמן והשקה", - "createOwnChat": "צור את השיחה שלך", "pleaseEnterInt": "אנא הזן מספר", "home": "בית", "join": "הצטרף", "readingAssistanceOverviewBody": "לחץ על הכפתורים למטה למשחקי מיני על התאמת אימוג'י, אודיו, משמעויות מילים ומושגים דקדוקיים. או לחץ על כל מילה לפרטים.", - "learnByTexting": "למד באמצעות הודעות טקסט", - "levelSummaryTrigger": "הצג סיכום", "levelSummaryPopupTitle": "סיכום רמה {level}", - "referFriends": "הפנה חברים", - "referFriendDialogTitle": "הזמן חבר לשיחה שלך", - "referFriendDialogDesc": "האם יש לך חבר שמתלהב ללמוד שפה חדשה איתך? העתק ושלח את קישור ההזמנה הזה כדי להצטרף ולהתחיל לשוחח איתך היום.", - "youUnlocked": "שיחררת", "resetInstructionTooltipsTitle": "אפס טיפים להנחיות", "resetInstructionTooltipsDesc": "לחץ כדי להציג טיפים להנחיות כמו למשתמש חדש.", "selectForGrammar": "בחר אייקון דקדוק לפעילויות ולפרטים.", - "newChatActivityTitle": "רוצה להוסיף פעילות כיפית?", - "newChatActivityDesc": "הפוך כל שיחת קבוצה להרפתקה עם מתכנן הפעילויות! קבע נושאים ומטרות מרתקים לקבוצה, והחיה את השיחות עם תמונות מרהיבות. הדלק שיחות דמיוניות ושמור על הכיף זורם בקלות!", - "exploreMore": "חפש עוד", "randomize": "אקראי", "clear": "נקה", "makeYourOwnActivity": "צור את הפעילות שלך", "featuredActivities": "פעילויות מובילות", - "goToChat": "עבור לשיחה", "save": "שמור", - "selectActivity": "בחר פעילות", - "wordFocusListeningMultipleChoice": "איזה אודיו תואם את המילה?", "startChat": "התחל שיחה", "translationProblem": "בעיה בתרגום", - "perfectTranslation": "תרגום מושלם!", - "greatJobTranslation": "עבודה מצוינת עם התרגום הזה!", - "goodJobTranslation": "עבודה טובה על התרגום הזה.", - "makingProgress": "אתה מתקדם!", - "keepPracticing": "המשך לתרגל!", - "niceJob": "עבודה יפה!", "askToJoin": "בקש להצטרף", "emptyChatWarningTitle": "השיחה ריקה", "emptyChatWarningDesc": "לא הזמנת אף אחד לשיחה שלך. עבור להגדרות שיחה כדי להזמין את אנשי הקשר שלך או את הבוט. אפשר גם לעשות זאת מאוחר יותר.", @@ -3303,8 +2876,6 @@ "languageLevelC2Desc": "אני יכול להבין כמעט הכל שנשמע או נקרא ולבטא את עצמי בזרימה ובדיוק.", "newVocab": "מילים חדשות", "newGrammar": "מושגים דקדוקיים חדשים", - "congratulationsOnReaching": "הגעת לרמה {level}!", - "seeDetails": "ראה פרטים", "choosePracticeMode": "לחץ על אחד מהכפתורים למעלה כדי להתחיל פעילות תרגול", "ban": "חסום", "unban": "בטל חסימה", @@ -3318,8 +2889,6 @@ "timesUsedWithAssistance": "פעמים בשימוש עם סיוע", "shareInviteCode": "שתף קוד הזמנה: {code}", "leaderboard": "טבלת מובילים", - "welcomeUser": "ברוך הבא {user}", - "joinSpaceOnboardingDesc": "האם יש לך קוד הזמנה או קישור לקורס ציבורי?", "skipForNow": "דלג לעכשיו", "permissions": "הרשאות", "spaceChildPermission": "מי יכול להוסיף שיחות חדשות לקורס זה", @@ -3327,12 +2896,8 @@ "defaultOption": "ברירת מחדל", "deleteChatDesc": "האם אתה בטוח שברצונך למחוק שיחה זו? היא תימחק לכל המשתתפים וכל ההודעות בתוך השיחה לא יהיו זמינות עוד לתרגול או לניתוחי למידה.", "deleteSpaceDesc": "הקורס וכל השיחות שנבחרו יימחקו לכל המשתתפים וכל ההודעות בתוך השיחה לא יהיו זמינות עוד לתרגול או לניתוחי למידה. פעולה זו אינה ניתנת לביטול.", - "chatWithActivities": "שוחח עם פעילויות", "launch": "הפעל", - "launchActivityToChats": "הפעל פעילות לשיחות", "searchChats": "חפש שיחות", - "selectChats": "בחר שיחות", - "selectChatToStart": "הושלם! בחר שיחה להתחלה", "maxFifty": "מקסימום 50", "configureSpace": "הגדר קורס", "pinMessages": "נעץ הודעות", @@ -3346,9 +2911,7 @@ "announcements": "הודעות", "activities": "פעילויות", "access": "גישה", - "botSettings": "הגדרות בוט", "activitySuggestionTimeoutMessage": "אנחנו עובדים קשה ליצירת עוד פעילויות בשבילך, אנא חזור בעוד דקה", - "accessSettingsWarning": "אופס! נראה שאין לך הרשאה להגדיר את כללי הגישה של החדר הזה. עליך לבדוק את ההגדרות ולפנות למנהל החדר אם תרצה לשנות אותן", "howSpaceCanBeFound": "איך ניתן למצוא את הקורס הזה", "private": "פרטי", "cannotBeFoundInSearch": "לא ניתן למצוא בחיפוש", @@ -3361,16 +2924,6 @@ "canBeFoundViaKnock": "• בקשה להצטרף ואישור מנהל", "youHaveLeveledUp": "עלית רמה!", "sendActivities": "שלח פעילויות", - "getStarted": "התחל", - "getStartedBotChatDesc": "שיחה עם בינה מלאכותית היא מקום מצוין להתחיל, וכלי קריאה, כתיבה, הקשבה ודיבור של פאנגיאה מקלים על זה!", - "getStartedCommunitiesDesc": "למידה עם קהילה היא המקום שבו פאנגיאה צ'אט זוהרת!\nאתה יכול להצטרף לכיתה שלך, למצוא קורס, או אפילו ליצור את שלך!", - "getStartedFriendsDesc": "יש לך חבר שרוצה ללמוד איתך?", - "getStartedBotChatComplete": "כל הכבוד! אתה משוחח עם הבוט!", - "getStartedCommunitiesComplete": "מעולה, הצטרפת לקורס!", - "getStartedComplete": "סיימת את החלק הזה!\nהמשך לחקור את הפיצ'רים המדהימים שלנו על ידי שיחה עם חברים!", - "getStartedFriendsComplete": "יווו! יש לך חברים! 😏", - "getStartedBotChatButton": "התחל לשוחח!", - "getStartedFriendsButton": "שוחח עם חבר", "groupChat": "שיחת קבוצה", "directMessage": "הודעה ישירה", "newDirectMessage": "הודעה ישירה חדשה", @@ -3386,7 +2939,6 @@ "mySavedActivities": "הפעילויות שמורים שלי", "noSavedActivities": "אין פעילויות שמורות", "saveActivity": "שמור פעילות זו", - "yourSavedActivities": "פעילויות שמורות", "failedToPlayVideo": "נכשלה ההפעלה של הווידאו", "done": "הושלם", "inThisSpace": "במקום זה", @@ -3425,37 +2977,27 @@ "maximumActivityParticipants": "לכל פעילות יכול להיות עד {count} משתתף/ים.", "pending": "בהמתנה", "inactive": "לא פעיל", - "unjoinedActivityMessage": "האם תרצה להשתתף? בחר תפקיד פתוח!\nאו תתארגן ותצפה בהופעה!", - "fullActivityMessage": "הרגיש חופשי לצפות בהופעה! למרות שאין תפקידים פתוחים להשתתפות, תוכל לצפות בצ'אט!", "confirmRole": "אשר תפקיד", "openRoleLabel": "פתוח", "joinedTheActivity": "👋 {username} הצטרף כ-{role}", "finishedTheActivity": "🎯 {username} סיים את הפעילות הזו", - "endActivityTitle": "סיימתי", - "endActivityDesc": "האם השלמת את המטרות?\nזהו האישור שלך לכך שאתה מפסיק לשלוח הודעות. אבל אל תדאג, הכיף ממשיך בצ'אט! תוכל להישאר וליהנות מההצגה עד שכולם ילחצו על 'סיום'.", "archiveToAnalytics": "הוסף לפעילויות שהושלמו שלי", "activitySummaryError": "סיכומי הפעילות אינם זמינים", "requestSummaries": "בקש סיכומים", - "loadingActivitySummary": "טוען סיכום פעילות...", "generatingNewActivities": "אתה המשתמש הראשון בזוג שפות זה! אנא המתן דקה, אנו מכינים פעילויות במיוחד בשבילך.", - "requestAccessTitle": "לבקש גישה לצפייה בנתוני אנליטיקה?", + "requestAccessTitle": "לבקש גישה לניתוחי נתונים?", "requestAccessDesc": "האם תרצה לבקש גישה לצפייה בנתוני המשתתפים?\n\nאם המשתתפים יסכימו, מנהלי הקורס יוכלו לצפות ב:\n • אוצר מילים כולל\n • מושגי דקדוק כוללים\n • סך כל מפגשי הפעילות שהושלמו\n • המושגים הדקדוקיים הספציפיים שהשתמשו בהם, נכון ולא נכון\n\nהם לא יוכלו לצפות ב:\n • הודעות בצ'אט מחוץ לקורס\n • רשימת אוצר מילים", "requestAccess": "בקש גישה ({count})", "analyticsInactiveTitle": "בקשות למשתמשים לא פעילים לא נשלחות", "analyticsInactiveDesc": "משתמשים לא פעילים שלא התחברו מאז הוספת תכונה זו לא יראו את הבקשה שלך.\n\nכפתור הבקשה יופיע כאשר הם יחזרו. תוכל לשלוח את הבקשה מחדש מאוחר יותר על ידי לחיצה על כפתור הבקשה תחת שמם כאשר הוא זמין.", "accessRequestedTitle": "בקשת גישה לנתוני אנליטיקה", - "accessRequestedDesc": "מנהליו של “{space}” מבקשים לצפות בנתוני הלמידה שלך.\n\nאם תסכים, מנהלי הקורס יוכלו לצפות ב:\n • אוצר מילים כולל\n • מושגי דקדוק כוללים\n • סך כל מפגשי הפעילות שהושלמו\n • המושגים הדקדוקיים הספציפיים שהשתמשו בהם, נכון ולא נכון\n\nהם לא יוכלו לצפות ב:\n • הודעות בצ'אט מחוץ לקורס\n • רשימת אוצר מילים", - "allowAccess": "הענק גישה", - "denyAccess": "סרב גישה", + "accessRequestedDesc": "מבקשים מנהל(ים): {admin} \n\nמנהלים מ“{space}” מבקשים לראות את ניתוחי הלמידה שלך.\n\nאם אתה מסכים, הם יוכלו לראות את:\n • אוצר המילים הכולל שלך\n • מושגי הדקדוק הכוללים\n • מספר המפגשים שהושלמו\n • מושגי הדקדוק הספציפיים שהשתמשת בהם, נכון ולא נכון\n\nהם לא יוכלו לראות את:\n • הודעות בצ'אטים מחוץ לקורס\n • רשימת אוצר המילים", "adminRequestedAccess": "המנהלים ביקשו לצפות בנתוני האנליטיקה שלך.", "lastUpdated": "עודכן\n{time}", "activityFinishedMessage": "הכל מוכן!", "endForAll": "סיום לכולם", "newCourse": "קורס חדש", - "newCourseSubtitle": "באיזה תכנית קורס תרצה להשתמש?", - "failedToLoadCourses": "נכשל בטעינת קורסים", "numModules": "{num} מודולים", - "numActivityPlans": "{num} תכניות פעילות", "coursePlan": "תכנית קורס", "editCourseLater": "אתה יכול לערוך את כותרת התבנית, תיאורים ותמונת הקורס מאוחר יותר.", "newCourseAccess": "ברירת מחדל, קורסים הם פרטיים ודורשים אישור מנהל להצטרפות. תוכל לערוך הגדרות אלה בכל עת.", @@ -3469,17 +3011,11 @@ "accessDesc": "אתה יכול להפוך את הקורס שלך לגלוי לעולם! או, להפוך את הקורס לפרטי ומאובטח.", "createGroupChatDesc": "בעוד שמפגשי הפעילות מתחילים ומסתיימים, שיחות קבוצתיות יישארו פתוחות לתקשורת שוטפת.", "deleteDesc": "רק מנהלים יכולים למחוק קורס. זוהי פעולה הרסנית שמסירה את כל המשתמשים ומוחקת את כל השיחות שנבחרו בתוך הקורס. המשך בזהירות.", - "failedToLoadCourseInfo": "נכשל בטעינת פרטי הקורס", "noCourseFound": "אה, הקורס הזה צריך תכנית!\n\nתכניות קורס הן רצף של נושאים ופעילויות שיחה.", "additionalParticipants": "+ {num} אחרים", - "activityNotFoundForCourse": "הפעילות לא נמצאה במסגרת הקורס", - "courseChats": "שיחות קורס", - "myActivitySessions": "מפגשי הפעילות שלי", "directMessages": "הודעות ישירות", "whatNow": "מה עכשיו?", "chooseNextActivity": "בחר את הפעילות הבאה שלך!", - "seeInstructions": "ראה הוראות", - "hideInstructions": "הסתר הוראות", "letsGo": "בוא נתחיל", "chooseRole": "בחר תפקיד!", "chooseRoleToParticipate": "בחר תפקיד להשתתפות!", @@ -3489,23 +3025,15 @@ "inviteFriends": "הזמן חברים", "waitNotDone": "חכה, אני לא סיימתי!", "waitingForOthersToFinish": "מחכה לשאר לסיים...", - "saveToCompletedActivities": "שמור לפעילויות שהושלמו", "generatingSummary": "אנליזת שיחה ויצירת תוצאות", - "instructionsLanguage": "שפת ההוראות", "findCourse": "מצא קורס", - "activityCompletedDesc": "הפעילות שהשלמת הוספה לניתוחים שבה תוכל לסקור ולתרגל את השפה שהשתמשת בה.", "pingParticipantsNotification": "{user} מחפש משתמשים להצטרף למפגש הפעילות ב-{room}", "course": "קורס", "courses": "קורסים", "courseName": "שם הקורס", "createNewCourse": "קורס חדש", - "publicCourses": "קורסים ציבוריים", "goToCourse": "עבור לקורס: {course}", "activityComplete": "הפעילות הזו הושלמה. סיכום הפעילות אמור להיות זמין למטה.", - "haventChattedMuch": "נראה שלא שוחחת הרבה, נסה להשתמש בעוד מילות אוצר מילים! אם אתה מרגיש שהשלמת את היעד שלך, תוכל לסיים את הפעילות למטה.", - "haveChatted": "נראה שאתה משוחח כבר זמן מה! אם אתה מרגיש שהשלמת את היעד שלך, סיים את הפעילות וניצור עבורך סיכום בצ'אט!", - "userDoneAndWaiting": "{num1}/{num2} משתתפים סיימו. חכה שכולם יסיימו, וניצור עבורך סיכום בצ'אט! \n\nאם תרצה להצטרף מחדש לשיחה, לחץ על כפתור ההמשך בצ'אט.", - "othersDoneAndWaiting": "{num1}/{num2} סיימו. האם השלמת את היעד שלך?", "startNewSession": "התחל מפגש חדש", "joinOpenSession": "הצטרף למפגש פתוח", "less": "פחות", @@ -3515,7 +3043,6 @@ "openToJoin": "פתוח להצטרפות", "results": "תוצאות", "activityDone": "הפעילות הושלמה!", - "moreLabel": "עוד", "promoCodeInfo": "קודי קידום ניתן להזין בעמוד הבא", "editsComingSoon": "היכולת לערוך ערים ופעילויות תגיע בקרוב.", "editing": "עורך", @@ -3531,13 +3058,10 @@ "courseSavedSuccessfully": "הקורס נשמר בהצלחה", "addCoursePlan": "הוסף תכנית קורס", "activityStatsButtonInstruction": "לחץ כאן כדי לצפות בסטטיסטיקות הפעילות שלך ולסגור את הפעילות בסיום", - "readingAnalyticsDesc": "לחץ על תרגול בכל הודעה לפעילויות קריאה.", - "speakingAnalyticsDesc": "הקלט הודעות קוליות לתרגול דיבור.", - "audioAnalyticsDesc": "לחץ על תרגול בכל הודעה לפעילויות שמיעה.", "loginToAccount": "התחבר לחשבוני", "appDescription": "למד שפה\nבזמן שליחת הודעות לחברים שלך.", "languages": "שפות", - "chooseLanguage": "בחר שפה.", + "chooseLanguage": "בחר שפה יעד.", "planTrip": "תכנן את הטיול שלך", "howAreYouTraveling": "איך אתה מטייל?", "unlockPrivateTrip": "פתח טיול פרטי", @@ -3550,25 +3074,20 @@ "courseCode": "מה הסיסמה הסודית?", "courseCodeHint": "קוד טיול או קישור", "unlockMyTrip": "פתח את הטיול שלי", - "anyLevel": "כל רמה", "signupOption": "איך תרצה להירשם?", "withApple": "עם Apple", "withGoogle": "עם Google", "withEmail": "עם אימייל", "createAccount": "צור חשבון", - "noCoursesFound": "לא נמצאו קורסים", "loginWithEmail": "התחבר עם אימייל", "usernameOrEmail": "שם משתמש או אימייל", "email": "אימייל", "forgotPassword": "שכחת סיסמה?", - "writingAnalyticsDesc": "שלח הודעות לתרגול הכתיבה.", "endActivity": "סיים פעילות", "allLanguages": "כל השפות", - "allCefrLevels": "כל רמות ה-CEFR", "chatListTooltip": "כאן תמצאו את ההודעות הישירות שלכם! לחצו על אייקון של משתמש כלשהו ו״התחל שיחה״ כדי לשלוח הודעה פרטית.", "directMessageBotTitle": "הודעה ישירה לבוט פנגיאה", "feedbackTitle": "משוב על הפעילות", - "feedbackDesc": "איך ניתן לשפר את הפעילות? אם תוכל לספק פרטים, נעשה את השינוי!", "feedbackHint": "המשוב שלך", "feedbackButton": "שלח משוב", "directMessageBotDesc": "לדבר עם בני אדם זה יותר כיף אבל... בינה מלאכותית תמיד מוכנה!", @@ -6054,30 +5573,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6093,18 +5588,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6129,18 +5612,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6177,38 +5648,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6217,62 +5660,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6309,10 +5708,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6321,14 +5716,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6337,46 +5724,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6385,10 +5736,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6445,18 +5792,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6465,14 +5800,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6501,18 +5828,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6521,42 +5836,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6565,14 +5848,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6593,26 +5868,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6633,10 +5888,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6669,25 +5920,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6744,34 +5976,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6800,778 +6004,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8564,14 +7000,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8583,14 +7011,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8622,10 +7042,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8634,18 +7050,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8654,14 +7058,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8686,38 +7082,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8763,10 +7131,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8791,10 +7155,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8819,10 +7179,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8831,66 +7187,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8911,42 +7211,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8971,154 +7247,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9135,18 +7263,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9167,14 +7283,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9191,10 +7299,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9207,14 +7311,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9223,14 +7319,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9258,26 +7346,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9306,18 +7374,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9354,10 +7414,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10290,10 +8346,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10474,34 +8526,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10514,10 +8538,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10526,14 +8546,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10550,22 +8562,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10713,14 +8709,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10729,34 +8717,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10765,54 +8725,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10821,10 +8745,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10841,10 +8761,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11016,26 +8932,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11064,10 +8960,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11124,30 +9016,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11176,18 +9052,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11304,14 +9172,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11324,10 +9184,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11336,14 +9192,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11360,14 +9208,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11376,22 +9216,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11404,18 +9228,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11432,22 +9244,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11456,30 +9256,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11552,18 +9328,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11620,18 +9384,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11660,30 +9412,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11736,18 +9472,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11796,46 +9524,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11900,10 +9588,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12075,14 +9759,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12110,14 +9786,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12130,10 +9798,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12169,19 +9833,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12206,14 +9865,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12222,14 +9873,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12282,10 +9925,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12298,18 +9937,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12322,14 +9949,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12370,26 +9989,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12417,10 +10024,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12431,36 +10034,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12497,10 +10070,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12565,18 +10134,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12641,10 +10198,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12665,10 +10218,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12685,10 +10234,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12697,10 +10242,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12713,10 +10254,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12741,16 +10278,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Прочествайте дяни приятели", - "inviteFriendsToActivityCourse": "Прочествайте дяни приятели и курс", "feedbackRespDesc": "Повращайте наповращане за приятие на активности завтра", "activityDropdownDesc": "Когато ви завершите свою активность, нажмите на подобно", - "activityAnalyticsListBody": "Донесте ваши повникнившите активности! Потовайте на ничого после като завершите активности", "languageMismatchTitle": "Неподолятность езика", "languageMismatchDesc": "Ваше потелно е неподолятно на езика на этото активность. Измените наше потелно езика?", "reportWordIssueTooltip": "Оповещайте за проблема информация за слово", "tokenInfoFeedbackDialogTitle": "Оповещайте за информация за слово", - "tokenInfoFeedbackDialogDesc": "АИ черепа правиться. Пожалуйста, описайте какие найдения на вина напроводили наповедение наповедение", "noPublicCoursesFound": "Не найдено ничего програмов програмирования. Истечене описание на програматарана?", "noCourseTemplatesFound": "Не можемо найти какие картощеки за вашето потелно езика. В передните можете диаконате с Пангеа Бот в тезината, и последно повернете кампанията", "botActivityJoinFailMessage": "Бот Пангеа Бот повика на последование. Пожалуйста, попробвайте наповедение на познание на поверкатели, или прочисли приятел", @@ -12758,14 +10291,6 @@ "leaveDesc": "Отийдите спасаемость и вси контакты в ней", "selectAll": "Выбрати все", "deselectAll": "Отмените все", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12774,10 +10299,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12794,10 +10315,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12831,7 +10348,6 @@ "newMessageInPangeaChat": "📩 הודעה חדשה בצ'אט פאנגיאה", "shareCourse": "שתף קורס", "addCourse": "הוסף קורס", - "joinCourseWithCode": "הצטרף לקורס עם קוד", "joinPublicCourse": "הצטרף לקורס ציבורי", "vocabLevelsDesc": "זה המקום שבו מילות אוצר המילים יופיעו לאחר שהעלית את רמתן!", "highlightVocabTooltip": "הדגש את המילים היעד למטה על ידי שליחתם או תרגול איתן בצ'אט", @@ -12855,10 +10371,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12867,7 +10379,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "לא נמצאו הודעות ישירות או צ'אטים. ודא שהחיפוש שלך כתוב נכון.", + "activityAnalyticsTooltipBody": "אלה הפעילויות ששמרת לצורך סקירה ותרגול.", + "numSavedActivities": "מספר הפעילויות השמורות", + "saveActivityTitle": "שמור פעילות", + "saveActivityDesc": "עבודה טובה! שמור את הפעילות הזו לסקירה ותרגול מאוחר יותר", + "levelInfoTooltip": "כאן תוכל לראות את כל הנקודות שהרווחת ואיך!", + "alreadyInCourseWithID": "אתה כבר בקורס עם תוכנית זו. האם אתה רוצה ליצור קורס עם אותה תוכנית, או לעבור לקורס הקיים?", + "goToExistingCourse": "עבור לקורס הקיים", + "emojiView": "תצוגת אימוג'י", + "feedbackDialogDesc": "גם אני עושה טעויות! יש משהו שיכול לעזור לי להשתפר?", + "contactHasBeenInvitedToTheCourse": "הקשר הוזמן לקורס", + "activityStatsButtonTooltip": "מידע על פעילות", + "allow": "אפשר", + "deny": "סירב", + "enabledRenewal": "אפשר חידוש מנוי", + "subscriptionEndsOn": "המנוי מסתיים ב", + "subscriptionRenewsOn": "המנוי מתחדש ב", + "waitForSubscriptionChanges": "שינויים במנוי שלך עשויים לקחת רגע להופיע באפליקציה.", + "subscribeReadingAssistance": "הירשם כדי לפתוח כלים להודעות", + "aceDisplayName": "אכינזי", + "achDisplayName": "אצ'ולי", + "afDisplayName": "אפריקאנס", + "akDisplayName": "אקן", + "alzDisplayName": "אלור", + "amDisplayName": "אמהרית", + "arDisplayName": "ערבית", + "asDisplayName": "אסאם", + "awaDisplayName": "אוואדי", + "ayDisplayName": "איימרה", + "azDisplayName": "אזרבייג'נית", + "baDisplayName": "באשקיר", + "banDisplayName": "בלינזי", + "bbcDisplayName": "בטאק טובה", + "beDisplayName": "בלארוסית", + "bemDisplayName": "במבה", + "bewDisplayName": "בטאווי", + "bgDisplayName": "בולגרית", + "bhoDisplayName": "בהוג'פורי", + "bikDisplayName": "ביקול", + "bmDisplayName": "במברה", + "bnDisplayName": "בנגלית", + "bnBDDisplayName": "בנגלית (בנגלדש)", + "bnINDisplayName": "בנגלית (הודו)", + "brDisplayName": "ברטונית", + "bsDisplayName": "בוסנית", + "btsDisplayName": "בטאק סימלונגון", + "btxDisplayName": "בטאק קארו", + "buaDisplayName": "בוריאט", + "caDisplayName": "קטלאנית", + "cebDisplayName": "סבוואנו", + "cggDisplayName": "צ'יגה", + "chmDisplayName": "מרי", + "ckbDisplayName": "כורדית מרכזית", + "cnhDisplayName": "חכאה צ'ין", + "coDisplayName": "קורסיקנית", + "crhDisplayName": "טורקית קרימאית", + "crsDisplayName": "צרפתית קריאולית ססלווה", + "csDisplayName": "צ'כי", + "cvDisplayName": "צ'ובש", + "cyDisplayName": "וולשית", + "daDisplayName": "דנית", + "deDisplayName": "גרמנית", + "dinDisplayName": "דינקה", + "doiDisplayName": "דוגרי", + "dovDisplayName": "דומבה", + "dzDisplayName": "דזונגקה", + "eeDisplayName": "אֵוֵה", + "enDisplayName": "אנגלית", + "enAUDisplayName": "אנגלית (אוסטרליה)", + "enGBDisplayName": "אנגלית (בריטניה)", + "enINDisplayName": "אנגלית (הודו)", + "enUSDisplayName": "אנגלית (ארה\"ב)", + "eoDisplayName": "אספרנטו", + "esDisplayName": "ספרדית", + "esESDisplayName": "ספרדית (ספרד)", + "esMXDisplayName": "ספרדית (מקסיקו)", + "euDisplayName": "בסקית", + "faDisplayName": "פרסית", + "ffDisplayName": "פולה", + "fiDisplayName": "פינית", + "filDisplayName": "פיליפיני", + "fjDisplayName": "פיג'י", + "foDisplayName": "פארואזי", + "frDisplayName": "צרפתית", + "frCADisplayName": "צרפתית (קנדה)", + "frFRDisplayName": "צרפתית (צרפת)", + "fyDisplayName": "פריזית מערבית", + "gaDisplayName": "אירית", + "gaaDisplayName": "גה", + "gdDisplayName": "גאלית סקוטית", + "glDisplayName": "גליציאנית", + "gnDisplayName": "גואראני", + "gomDisplayName": "קונקני גואני", + "guDisplayName": "גוג'ראטי", + "haDisplayName": "האוסה", + "hawDisplayName": "הוואי", + "heDisplayName": "עברית", + "hiDisplayName": "הינדי", + "hilDisplayName": "היליגיינון", + "hmnDisplayName": "המונג", + "hneDisplayName": "צ'אטיסגרי", + "hrDisplayName": "קרואטי", + "hrxDisplayName": "הונסריק", + "htDisplayName": "קריאולית האיטית", + "huDisplayName": "הונגרי", + "hyDisplayName": "ארמני", + "idDisplayName": "אינדונזי", + "igDisplayName": "איגבו", + "iloDisplayName": "אילוקו", + "isDisplayName": "איסלנדי", + "itDisplayName": "איטלקית", + "jaDisplayName": "יפנית", + "jvDisplayName": "ג'אווה", + "kaDisplayName": "גאורגית", + "kkDisplayName": "קזחית", + "kmDisplayName": "חמר", + "knDisplayName": "קנדה", + "koDisplayName": "קוריאנית", + "kokDisplayName": "קונקני", + "kriDisplayName": "קריו", + "ksDisplayName": "קשמירי", + "ktuDisplayName": "קיטובה (הרפובליקה הדמוקרטית של קונגו)", + "kuDisplayName": "כורדית", + "kyDisplayName": "קירגיזית", + "laDisplayName": "לטינית", + "lbDisplayName": "לוקסמבורגית", + "lgDisplayName": "גאנדה", + "liDisplayName": "לימבורגית", + "lijDisplayName": "ליגורית", + "lmoDisplayName": "לומברדית", + "lnDisplayName": "לינגלה", + "loDisplayName": "לאו", + "ltDisplayName": "ליטאית", + "ltgDisplayName": "לטגלית", + "luoDisplayName": "לואו (קניה וטנזניה)", + "lusDisplayName": "מיזו", + "lvDisplayName": "לטבית", + "maiDisplayName": "מאיתילי", + "makDisplayName": "מקאסר", + "mgDisplayName": "מלגשי", + "miDisplayName": "מאורי", + "minDisplayName": "מיננגקאבאו", + "mkDisplayName": "מקדוני", + "mlDisplayName": "מליאלאם", + "mnDisplayName": "מונגולית", + "mniDisplayName": "מניפורי", + "mrDisplayName": "מרטהי", + "msDisplayName": "מלאי", + "msArabDisplayName": "מלאי (ערבי)", + "msMYDisplayName": "מלאי (מלזיה)", + "mtDisplayName": "מלטזית", + "mwrDisplayName": "מרווארי", + "myDisplayName": "בורמזית", + "nanDisplayName": "מין נאן", + "nbDisplayName": "נורווגית (בוקמל)", + "neDisplayName": "נפאלית", + "newDisplayName": "ניוארי", + "nlDisplayName": "הולנדית", + "nlBEDisplayName": "פלמית", + "noDisplayName": "נורווגית", + "nrDisplayName": "דרום נדבל", + "nsoDisplayName": "סוטו צפוני", + "nusDisplayName": "נואר", + "nyDisplayName": "ניאנג'ה", + "ocDisplayName": "אוקסיטנית", + "omDisplayName": "אורומו", + "orDisplayName": "אודיה", + "paDisplayName": "פנג'אבי", + "paArabDisplayName": "פנג'אבי (שאהמוקי)", + "paINDisplayName": "פנג'אבי (גורמוקי)", + "pagDisplayName": "פנגסינאן", + "pamDisplayName": "פאמפנגה", + "papDisplayName": "פאפיאמנטו", + "plDisplayName": "פולנית", + "psDisplayName": "פשטו", + "ptDisplayName": "פורטוגזית", + "ptBRDisplayName": "פורטוגזית (ברזיל)", + "ptPTDisplayName": "פורטוגזית (פורטוגל)", + "quDisplayName": "קצ'ואה", + "rajDisplayName": "ראג'סטאני", + "rnDisplayName": "רונדי", + "roDisplayName": "רומנית", + "roMDDisplayName": "מולדובנית", + "romDisplayName": "רומאני", + "ruDisplayName": "רוסית", + "rwDisplayName": "קיניארוואנדה", + "saDisplayName": "סנסקריט", + "satDisplayName": "סנטאלי", + "scnDisplayName": "סיציליאנית", + "sdDisplayName": "סינדי", + "sgDisplayName": "סנגו", + "shnDisplayName": "שאן", + "siDisplayName": "סינהלה", + "skDisplayName": "סלובקית", + "slDisplayName": "סלובנית", + "smDisplayName": "סמואן", + "snDisplayName": "שונה", + "soDisplayName": "סומלי", + "sqDisplayName": "אלבנית", + "srDisplayName": "סרבית", + "srMEDisplayName": "מונטנגרי", + "ssDisplayName": "סוואטי", + "stDisplayName": "סוטו דרומי", + "suDisplayName": "סונדנזי", + "svDisplayName": "שבדית", + "swDisplayName": "סווהילי", + "szlDisplayName": "סלזי", + "taDisplayName": "טמילית", + "teDisplayName": "טלוגו", + "tetDisplayName": "טטום", + "tgDisplayName": "טג'יקית", + "thDisplayName": "תאית", + "tiDisplayName": "טיגריניה", + "tkDisplayName": "טורקמנית", + "tlDisplayName": "טגלוג", + "tnDisplayName": "צוואנה", + "trDisplayName": "טורקית", + "tsDisplayName": "צונגה", + "ttDisplayName": "טטרית", + "ugDisplayName": "אויגור", + "ukDisplayName": "אוקראינית", + "urDisplayName": "אורדו", + "urINDisplayName": "אורדו (הודו)", + "urPKDisplayName": "אורדו (פקיסטן)", + "uzDisplayName": "אוזבקית", + "viDisplayName": "וייטנאמית", + "wuuDisplayName": "וו", + "xhDisplayName": "חוסה", + "yiDisplayName": "יידיש", + "yoDisplayName": "יורובה", + "yuaDisplayName": "יוקאטקו", + "yueDisplayName": "קנטונזית", + "yueCNDisplayName": "קנטונזית (סין)", + "yueHKDisplayName": "קנטונזית (הונג קונג)", + "zhDisplayName": "סינית", + "zhCNDisplayName": "סינית (מפושטת)", + "zhTWDisplayName": "סינית (מסורתית)", + "zuDisplayName": "זולו", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12934,6 +11632,7 @@ "notStartedActivitiesTitle": "סשנים פתוחים ({num})", "inProgressActivitiesTitle": "מתרחש עכשיו ({num})", "completedActivitiesTitle": "בוצע ({num})", + "pickDifferentActivity": "בחר פעילות שונה", "inOngoingActivity": "יש לך פעילות מתמשכת!", "@notStartedActivitiesTitle": { "type": "String", @@ -12959,10 +11658,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "שפת היעד שלך אינה תואמת את ההודעה הזו. האם לעדכן את שפת היעד שלך?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "אלה כולם בקורס הזה. לחץ על התמונה של כל משתמש ו\"התחל שיחה\" כדי לשלוח הודעה פרטית.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "מילת הווקב הזו תוסר לצמיתות מהאנליטיקה שלך", + "woman": "אישה", + "man": "גבר", + "otherGender": "אחר", + "unselectedGender": "בחר אפשרות מגדר", + "gender": "מגדר", + "chatParticipantTooltip": "אלה כולם בצ'אט הזה. לחץ על התמונה של כל משתמש ו\"התחל שיחה\" כדי לשלוח הודעה פרטית.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "כלי הלמידה מושבתים עבור הודעות שאינן בשפת היעד שלך.", + "vocabEmoji": "אימוג'י אוצר מילים", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "בקש חידוש", + "optionalRegenerateReason": "(אופציונלי) סיבה", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "הגדרת את האימוג'י עבור {lemma}! נשתמש באימוג'י הזה כדי לייצג את המילה בפעילויות תרגול מעתה ואילך.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "ממתינים להשלים את הכניסה", + "ssoDialogDesc": "פתחנו לשונית חדשה כדי שתוכל להיכנס בצורה מאובטחת.", + "ssoDialogHelpText": "🤔 אם לא ראית את הלשונית החדשה, אנא בדוק את חוסם הפופ-אפ שלך.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "כבה כלים לשפה", + "disableLanguageToolsDesc": "האם תרצה לכבות את העזרה האוטומטית בשפה?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "ההרשאה נדחתה. אפשר הרשאות הקלטה כדי להקליט הודעות קול.", + "genericWebRecordingError": "משהו השתבש. אנו ממליצים להשתמש בדפדפן כרום כאשר מקליטים הודעות.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "כדי לקבל את החוויה הטובה ביותר בשימוש באפליקציה זו, אנא הרחיבו את גודל המסך שלכם.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "פעילויות לפתיחת נושא הבא", "activitiesToUnlockTopicDesc": "קבע את מספר הפעילויות לפתיחת נושא הקורס הבא", "@activitiesToUnlockTopicTitle": { @@ -12972,5 +11789,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "תרגול הגדרה נכונה של אוצר מילים", + "constructUseIncLMDesc": "תרגול הגדרה שגויה של אוצר מילים", + "constructUseCorLADesc": "תרגול שמע נכון של אוצר מילים", + "constructUseIncLADesc": "תרגול שמע שגוי של אוצר מילים", + "constructUseBonus": "בונוס במהלך תרגול אוצר מילים", + "practiceVocab": "תרגל אוצר מילים", + "selectMeaning": "בחר את המשמעות", + "selectAudio": "בחר את השמע התואם", + "congratulations": "מזל טוב!", + "anotherRound": "סיבוב נוסף", + "noActivityRequest": "אין בקשת פעילות נוכחית.", + "quit": "צא", + "congratulationsYouveCompletedPractice": "מזל טוב! סיימת את מושב האימון.", + "mustHave10Words": "עליך שיהיו לפחות 10 מילים לאוצר מילים כדי לתרגל אותן. נסה לדבר עם חבר או עם פנגיאה בוט כדי לגלות עוד!", + "botSettings": "הגדרות בוט", + "activitySettingsOverrideWarning": "שפה ורמת שפה נקבעות על ידי תוכנית הפעילות", + "voice": "קול", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index d71d2fccf..f0a80fd80 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -3350,28 +3350,16 @@ "commandHint_logoutall": "सभी सक्रिय डिवाइस से लॉगआउट करें", "displayNavigationRail": "मोबाइल पर नेविगेशन रेल दिखाएँ", "customReaction": "कस्टम प्रतिक्रिया", - "accountInformation": "खाता जानकारी", - "addGroupDescription": "एक चैट विवरण जोड़ें", - "addNewFriend": "नया मित्र जोड़ें", - "alreadyHaveAnAccount": "क्या आपके पास पहले से खाता है?", - "createNewGroup": "नई चैट बनाएं", - "editChatPermissions": "चैट अनुमतियों को संपादित करें", "ignore": "ब्लॉक करें", "ignoredUsers": "ब्लॉक किए गए उपयोगकर्ता", "writeAMessageLangCodes": "टाइप करें {l1} या {l2}...", "requests": "अनुरोध", - "allCorrect": "ऐसे ही मैं कहूंगा! अच्छा!", - "newWayAllGood": "यह मैं वैसे नहीं कहता लेकिन यह अच्छा दिखता है!", - "othersAreBetter": "हम्म, शायद कहने का बेहतर तरीका हो सकता है।", "holdForInfo": "शब्द जानकारी के लिए क्लिक करें और होल्ड करें।", "greenFeedback": "यह वही है जो मैं डालूंगा!", "yellowFeedback": "हम्म, आप इसे आज़मा सकते हैं और देख सकते हैं कि यह काम करता है या नहीं! इस शब्द का उपयोग करने के लिए, बस इसे फिर से क्लिक करें।", "redFeedback": "मुझे नहीं लगता कि यह सही है...", "itInstructionsTitle": "मैं आपकी अनुवाद में मदद कर सकता हूँ!", "itInstructionsBody": "आप शब्द जानकारी के लिए विकल्पों पर क्लिक कर सकते हैं और होल्ड कर सकते हैं।", - "oneday": "पिछले 24 घंटे", - "oneweek": "पिछले 7 दिन", - "onemonth": "पिछला महीना", "gaTooltip": "व्याकरण सहायता के साथ L2 का उपयोग करें", "taTooltip": "अनुवाद सहायता के साथ L2 का उपयोग करें", "unTooltip": "अन्य", @@ -3381,58 +3369,27 @@ "interactiveTranslatorAllowed": "छात्र विकल्प", "interactiveTranslatorRequired": "आवश्यक", "notYetSet": "अभी तक सेट नहीं किया गया है", - "myLearning": "मेरे विश्लेषण", "waTooltip": "बिना सहायता के L2 उपयोग", - "changeDateRange": "तिथि सीमा बदलें", - "classDescription": "विवरण", - "addStudents": "लिंक या कोड द्वारा उपयोगकर्ताओं को आमंत्रित करें", - "copyClassLink": "आमंत्रण लिंक कॉपी करें", - "copyClassCode": "आमंत्रण कोड कॉपी करें", - "inviteStudentByUserName": "उपयोगकर्ता नाम से छात्रों को आमंत्रित करें", "languageSettings": "भाषा सेटिंग्स", "interactiveTranslator": "अनुवाद सहायता", - "shareVideo": "वीडियो साझा करें", - "shareVideoDesc": "छात्रों को चैट में वीडियो साझा करने की अनुमति देने के लिए इसे चालू करें।", - "shareFiles": "फ़ाइलें साझा करें", - "selectLanguageLevel": "भाषा स्तर चुनें", "noIdenticalLanguages": "कृपया अलग आधार और लक्ष्य भाषाएँ चुनें", - "iWantALanguagePartnerFrom": "से है:", - "worldWide": "सभी दुनिया में", - "noResults": "कोई परिणाम नहीं! अपनी खोज का विस्तार करने का प्रयास करें।", "searchBy": "देश और भाषाओं द्वारा खोजें", - "iWantAConversationPartner": "मैं एक बातचीत साथी चाहता हूँ जो", - "iWantALanguagePartnerWhoSpeaks": "बोलता है:", - "iWantALanguagePartnerWhoIsLearning": "सीख रहा है:", "joinWithClassCode": "कोर्स में शामिल हों", - "joinWithClassCodeHint": "आमंत्रण कोड दर्ज करें", - "languageLevelPreA1": "सच्चा शुरुआतकर्ता (Pre A1)", - "languageLevelA1": "शुरुआती (A1)", - "languageLevelA2": "मूलभूत (A2)", - "languageLevelB1": "मध्यम (B1)", - "languageLevelB2": "उच्च मध्यम (B2)", - "languageLevelC1": "उन्नत (C1)", - "languageLevelC2": "माहिर (C2)", + "languageLevelPreA1": "नवीनतम निम्न (पूर्व A1)", + "languageLevelA1": "नवोदित मध्य (A1)", + "languageLevelA2": "नवीन उच्च (A2)", + "languageLevelB1": "मध्यम मध्य (B1)", + "languageLevelB2": "उन्नत निम्न (B2)", + "languageLevelC1": "उन्नत मध्य (C1)", + "languageLevelC2": "श्रेष्ठ (C2)", "changeTheNameOfTheClass": "नाम बदलें", "changeTheNameOfTheChat": "चैट का नाम बदलें", - "askPangeaBot": "पांगेआ बॉट से संदर्भात्मक परिभाषा पूछें।", "sorryNoResults": "माफ़ कीजिए, कोई परिणाम नहीं।", "ignoreInThisText": "इसे अनदेखा करें", - "helpMeTranslate": "हाँ!", - "needsItShortMessage": "लक्ष्य से बाहर", "needsItMessage": "रुको, यह {targetLanguage} नहीं है! क्या आपको अनुवाद में मदद चाहिए?", - "needsIgcMessage": "इस संदेश में व्याकरण की त्रुटि है।", - "tokenTranslationTitle": "एक शब्द आपके मूल भाषा में है।", - "spanTranslationDesc": "नीचे संभावित अनुवाद देखें।", - "spanTranslationTitle": "कुछ शब्द आपके मूल भाषा में हैं।", - "l1SpanAndGrammarTitle": "लक्ष्य भाषा के बाहर", - "l1SpanAndGrammarDesc": "यह आपके मूल भाषा में हो सकता है या यह व्याकरण की त्रुटि हो सकती है।", - "otherTitle": "आपकी एक त्रुटि है।", - "otherDesc": "संभव सुधार नीचे देखें।", "countryInformation": "मेरा देश", - "myLanguages": "मेरी मूल और लक्ष्य भाषाएँ", "targetLanguage": "लक्ष्य भाषा", "sourceLanguage": "मूल भाषा", - "languagesISpeak": "मैं जो भाषाएँ बोलता हूँ", "updateLanguage": "मेरी भाषाएँ", "whatLanguageYouWantToLearn": "आप कौन सी भाषा सीखना चाहते हैं?", "whatIsYourBaseLanguage": "आपकी मूल भाषा क्या है?", @@ -3447,13 +3404,8 @@ "errorDisableLanguageAssistanceUserDesc": "अनुवाद सहायता और व्याकरण सहायता सेटिंग्स अपडेट करने के लिए यहां क्लिक करें", "errorDisableITClassDesc": "इस चैट के कक्षा के लिए अनुवाद सहायता बंद कर दी गई है।", "errorDisableIGCClassDesc": "इस चैट के कक्षा के लिए व्याकरण सहायता बंद कर दी गई है।", - "itIsDisabled": "इंटरैक्टिव अनुवाद अक्षम है", - "igcIsDisabled": "इंटरैक्टिव व्याकरण जाँच अक्षम है", - "goToLearningSettings": "सीखने की सेटिंग्स पर जाएं", "error405Title": "भाषाएँ सेट नहीं हैं", "error405Desc": "कृपया अपने भाषाओं को मेनू > सीखने की सेटिंग्स में सेट करें।", - "loginOrSignup": "साइन इन करें", - "iAgreeToThe": "मैं सहमत हूँ ", "termsAndConditions": "शर्तें और नियम", "andCertifyIAmAtLeast13YearsOfAge": " और प्रमाणित करता हूँ कि मेरी उम्र कम से कम 16 वर्ष है।", "error502504Title": "वाह, बहुत सारे छात्र ऑनलाइन हैं!", @@ -3461,40 +3413,21 @@ "error404Title": "अनुवाद त्रुटि!", "error404Desc": "पांगेआ बॉट को यह अनुवाद करने का तरीका नहीं पता...", "errorPleaseRefresh": "हम इसे देख रहे हैं! कृपया पुनः लोड करें और फिर से प्रयास करें।", - "toggleIT": "इंटरैक्टिव अनुवाद", - "toggleIGC": "इंटरैक्टिव व्याकरण जाँच", - "toggleToolSettingsDescription": "यहाँ आप अपने व्यक्तिगत भाषा उपकरण सेटिंग्स को टॉगल कर सकते हैं।", "connectedToStaging": "स्टेजिंग से जुड़ा हुआ", "learningSettings": "सीखने की सेटिंग्स", - "sendVoiceNotes": "वॉयस नोट भेजें", - "sendVoiceNotesDesc": "छात्रों को चैट में वॉयस नोट भेजने की अनुमति देने के लिए इसे चालू करें।", - "chatTopic": "चैट विषय", - "chatTopicDesc": "एक चैट विषय सेट करें", - "inviteStudentByUserNameDesc": "यदि आपका छात्र पहले से ही खाता है, तो आप उन्हें खोज सकते हैं।", "participants": "प्रतिभागी", - "almostPerfect": "यह सही लगता है! यहाँ मैं क्या कहता।", - "prettyGood": "बहुत अच्छा! यहाँ मैं क्या कहता।", - "letMeThink": "हम्म, देखें कि आपने कैसे किया!", "clickMessageTitle": "क्या मदद चाहिए?", "clickMessageBody": "भाषा उपकरण जैसे अनुवाद, प्लेबैक और अधिक के लिए एक संदेश पर क्लिक करें!", - "understandingMessagesTitle": "परिभाषाएँ और अनुवाद!", - "understandingMessagesBody": "डिफ़िनिशन के लिए रेखांकित शब्दों पर क्लिक करें। संदेश विकल्पों के साथ अनुवाद करें (ऊपरी दाहिने कोने में)।", "allDone": "सभी हो गया!", "vocab": "शब्दावली", "low": "हमें सबूत है कि उपयोगकर्ता इन शब्दों को नहीं समझता है।", "medium": "इन शब्दों का उपयोग किया गया है। यह स्पष्ट नहीं है कि शब्द पूरी तरह से समझे गए हैं या नहीं।", "high": "हमें सबूत है कि उपयोगकर्ता इन शब्दों को समझता है।", - "unknownProficiency": "इन शब्दों का पंगेआ चैट में उपयोग नहीं किया गया है।", - "changeView": "दृश्य बदलें।", - "clearAll": "सभी शब्द साफ़ करें?", - "generateVocabulary": "शीर्षक और विवरण से शब्दावली उत्पन्न करें", - "generatePrompts": "प्रेरणाएँ उत्पन्न करें", "subscribe": "सदस्यता लें", "getAccess": "अभी सदस्यता लें!", "subscriptionDesc": "संदेश भेजना मुफ्त है! इंटरैक्टिव अनुवाद, व्याकरण जांच और सीखने के विश्लेषण को अनलॉक करने के लिए सदस्यता लें।", "subscriptionManagement": "सदस्यता प्रबंधन", "currentSubscription": "वर्तमान सदस्यता", - "changeSubscription": "अपनी सदस्यता बदलें", "cancelSubscription": "अपनी सदस्यता रद्द करें", "selectYourPlan": "अपना योजना चुनें", "subsciptionPlatformTooltip": "कृपया अपनी मूल डिवाइस में लॉगिन करें ताकि आप अपनी सदस्यता योजना का प्रबंधन कर सकें।", @@ -3503,9 +3436,6 @@ "paymentHistory": "भुगतान इतिहास", "emptyChatDownloadWarning": "खाली चैट डाउनलोड नहीं कर सकते", "update": "अपडेट करें", - "updateDesc": "अब आप इस ऐप को {localVersion} से {storeVersion} में अपडेट कर सकते हैं", - "maybeLater": "शायद बाद में", - "mainMenu": "मुख्य मेनू", "toggleImmersionMode": "इमर्शन मोड", "toggleImmersionModeDesc": "जब सक्षम किया जाता है, तो सभी संदेश आपके लक्षित भाषा में दिखाए जाते हैं। यह सेटिंग भाषा विनिमय में सबसे अधिक उपयोगी है।", "itToggleDescription": "यह भाषा सीखने का उपकरण आपके मूल भाषा के शब्दों की पहचान करेगा और उन्हें आपके लक्षित भाषा में अनुवाद करने में मदद करेगा। हालांकि दुर्लभ है, AI अनुवाद में त्रुटि कर सकता है।", @@ -3520,212 +3450,13 @@ "definitionsToolDescription": "जब सक्षम किया जाता है, तो नीले रंग में रेखांकित शब्दों पर क्लिक करके परिभाषाएँ देखी जा सकती हैं। परिभाषाएँ देखने के लिए संदेश पर क्लिक करें।", "translationsToolDescrption": "जब सक्षम हो, एक संदेश पर क्लिक करें और अनुवाद आइकन पर क्लिक करें ताकि आप अपने मूल भाषा में संदेश देख सकें।", "welcomeBack": "वापस स्वागत है! यदि आप 2023-2024 पायलट का हिस्सा थे, तो कृपया अपनी विशेष पायलट सदस्यता के लिए हमसे संपर्क करें। यदि आप एक शिक्षक हैं जिन्होंने (या जिनके संस्थान ने) अपनी कक्षा के लिए लाइसेंस खरीदे हैं, तो कृपया अपनी शिक्षक सदस्यता के लिए हमसे संपर्क करें।", - "kickAllStudents": "सभी छात्रों को निकालें", - "kickAllStudentsConfirmation": "क्या आप सुनिश्चित हैं कि आप सभी छात्रों को निकालना चाहते हैं?", - "inviteAllStudents": "सभी छात्रों को आमंत्रित करें", - "inviteAllStudentsConfirmation": "क्या आप सुनिश्चित हैं कि आप सभी छात्रों को आमंत्रित करना चाहते हैं?", - "inviteUsersFromPangea": "एडमिन जोड़ें", - "redeemPromoCode": "प्रोमो कोड रिडीम करें", - "enterPromoCode": "प्रोमो कोड दर्ज करें", "downloadTxtFile": "टेक्स्ट फ़ाइल डाउनलोड करें", "downloadCSVFile": "CSV फ़ाइल डाउनलोड करें", "promotionalSubscriptionDesc": "आपके पास वर्तमान में एक जीवनकाल प्रचार सदस्यता है। अपनी सदस्यता बदलने में मदद के लिए support@pangea.chat पर संदेश भेजें।", "originalSubscriptionPlatform": "खरीदी गई सदस्यता {purchasePlatform} के माध्यम से", "oneWeekTrial": "एक सप्ताह का परीक्षण", "downloadXLSXFile": "एक्सेल फ़ाइल डाउनलोड करें", - "abDisplayName": "अख़्ज़ाक़", - "aaDisplayName": "आफ़ार", - "afDisplayName": "अफ़्रीकीज़", - "akDisplayName": "अकान", - "sqDisplayName": "अल्बानियाई", - "amDisplayName": "अम्हारिक", - "arDisplayName": "अरबी", - "anDisplayName": "अर्गोनिज़", - "hyDisplayName": "आर्मेनियाई", - "asDisplayName": "असमिया", - "avDisplayName": "अवरिक", - "aeDisplayName": "अवेस्टिक", - "ayDisplayName": "अयमारा", - "azDisplayName": "अज़रबैजानी", - "bmDisplayName": "बामबारा", - "baDisplayName": "बाश्किर", - "euDisplayName": "बास्क", - "beDisplayName": "बेलारूसी", - "bnDisplayName": "बंगाली", - "bhDisplayName": "बिहारी", - "biDisplayName": "बिस्लामा", - "bsDisplayName": "बोस्नियाई", - "brDisplayName": "ब्रेटोन", - "bgDisplayName": "बुल्गारियाई", - "myDisplayName": "बर्मी", - "caDisplayName": "कातालान, वेल्शियन", - "chDisplayName": "चामोर्रो", - "ceDisplayName": "चेचन", - "nyDisplayName": "चिचेवा, चेव, नियांजा", - "zhDisplayName": "चीनी", - "cvDisplayName": "चुवाश", - "kwDisplayName": "कॉर्निश", - "coDisplayName": "कोर्सिकन", - "crDisplayName": "क्रि", - "hrDisplayName": "क्रोएशियाई", - "csDisplayName": "चेक", - "daDisplayName": "डेनिश", - "dvDisplayName": "डिवेही; धिवेही; मालदीवियन;", - "nlDisplayName": "डच", - "enDisplayName": "अंग्रेज़ी", - "eoDisplayName": "एस्पेरांतो", - "etDisplayName": "एस्तोनियाई", - "eeDisplayName": "यू", - "foDisplayName": "फारोइस", - "fjDisplayName": "फिजियन", - "fiDisplayName": "फिनिश", - "frDisplayName": "फ्रेंच", - "ffDisplayName": "फुला; फुलाह; पुलार; पुलार", - "glDisplayName": "गैलिशियन", - "kaDisplayName": "जॉर्जियाई", - "deDisplayName": "जर्मन", - "elDisplayName": "यूनानी, आधुनिक", - "gnDisplayName": "गुआरानी", - "guDisplayName": "गुजराती", - "htDisplayName": "हैतीयन, हैतीयन क्रियोल", - "haDisplayName": "हौसा", - "heDisplayName": "हिब्रू (आधुनिक)", - "hzDisplayName": "हेररो", - "hiDisplayName": "हिंदी", - "hoDisplayName": "हिरी मोटु", - "huDisplayName": "हंगेरियन", - "iaDisplayName": "इंटरलिंगुआ", - "idDisplayName": "इंडोनेशियाई", - "ieDisplayName": "इंटरलिंगुए", - "gaDisplayName": "आयरिश", - "igDisplayName": "इग्बो", - "ikDisplayName": "इनुपियाक", - "ioDisplayName": "इडो", - "isDisplayName": "आइसलैंडिक", - "itDisplayName": "इतालवी", - "iuDisplayName": "इनुक्टिटुट", - "jaDisplayName": "जापानी", - "jvDisplayName": "जावानीस", - "klDisplayName": "कल्लालिसुत, ग्रीनलैंडिक", - "knDisplayName": "कन्नड़", - "krDisplayName": "कानुरी", - "ksDisplayName": "कश्मीरी", - "kkDisplayName": "कज़ाख़", - "kmDisplayName": "खमेर", - "kiDisplayName": "किकुयू, गिकुयू", - "rwDisplayName": "किन्यारवांडा", - "kyDisplayName": "किर्गिज़, किर्गिज़", - "kvDisplayName": "कोमी", - "kgDisplayName": "कोंगो", - "koDisplayName": "कोरियन", - "kuDisplayName": "कुर्दी", - "kjDisplayName": "क्वान्यामा, कुआन्यामा", - "laDisplayName": "लैटिन", - "lbDisplayName": "लक्ज़मबर्गिश, लेज़बुर्गिश", - "lgDisplayName": "लुगांडा", - "liDisplayName": "लिंबर्गिश, लिमबर्गान, लिमबर्गर", - "lnDisplayName": "लिंगाला", - "loDisplayName": "लाओ", - "ltDisplayName": "लिथुआनियाई", - "luDisplayName": "लूबा-कांतंगा", - "lvDisplayName": "लातवियाई", - "gvDisplayName": "मैनक्स", - "mkDisplayName": "मेसिडोनियन", - "mgDisplayName": "मालागासी", - "msDisplayName": "मलय", - "mlDisplayName": "मलयालम", - "mtDisplayName": "माल्टीज़", - "miDisplayName": "माओरी", - "mrDisplayName": "मराठी (मराठी)", - "mhDisplayName": "मार्शलज़", - "mnDisplayName": "मंगोलियाई", - "naDisplayName": "नाउरू", - "nvDisplayName": "नावाजो, नवाहो", - "nbDisplayName": "नार्वेजियन बोकमाल", - "ndDisplayName": "उत्तर नडेबले", - "neDisplayName": "नेपाली", - "ngDisplayName": "डोंगा", - "nnDisplayName": "नार्वेजियन निनोरस्क", - "noDisplayName": "नार्वेजियन", - "iiDisplayName": "नुओसु", - "nrDisplayName": "दक्षिण नडेबले", - "ocDisplayName": "ऑक्सिटान", - "ojDisplayName": "ओजिब्वे, ओजिब्वा", - "cuDisplayName": "पुराना चर्च स्लावोनिक, चर्च स्लाविक, चर्च स्लावोनिक, पुराना बल्गेरियाई, पुराना स्लावोनिक", - "omDisplayName": "ओरोमो", - "orDisplayName": "ओड़िया", - "osDisplayName": "ओसेटियन, ओसेटिक", - "paDisplayName": "पंजाबी, पंजाबी", - "piDisplayName": "पाली", - "faDisplayName": "फारसी", - "plDisplayName": "पोलिश", - "psDisplayName": "पश्तो, पश्तो", - "ptDisplayName": "पुर्तगाली", - "quDisplayName": "क्वेचुआ", - "rmDisplayName": "रोमान्श", - "rnDisplayName": "किरुंडी", - "roDisplayName": "रोमानियाई, मोल्दावियन, मोल्दोवन", - "ruDisplayName": "रूसी", - "saDisplayName": "संस्कृत (संस्कृत)", - "scDisplayName": "सार्डीनियन", - "sdDisplayName": "सिंधी", - "seDisplayName": "उत्तर सामी", - "smDisplayName": "समोअन", - "sgDisplayName": "संगो", - "srDisplayName": "सर्बियन", - "gdDisplayName": "स्कॉटिश गेलिक, गेलिक", - "snDisplayName": "शोना", - "siDisplayName": "सिंहला, सिन्हाला", - "skDisplayName": "स्लोवाक", - "slDisplayName": "स्लोवेन", - "soDisplayName": "सोमाली", - "stDisplayName": "दक्षिण सोथो", - "esDisplayName": "स्पेनिश", - "suDisplayName": "सुंडानी", - "swDisplayName": "स्वाहिली", - "ssDisplayName": "स्वाती", - "svDisplayName": "स्वीडिश", - "taDisplayName": "तमिल", - "teDisplayName": "तेलुगु", - "tgDisplayName": "ताजिक", - "thDisplayName": "थाई", - "tiDisplayName": "तिग्रिन्या", - "boDisplayName": "तिब्बती मानक, तिब्बती, केंद्रीय", - "tkDisplayName": "तुर्कमेन", - "tlDisplayName": "टैगालोग", - "tnDisplayName": "ट्स्वाना", - "toDisplayName": "टोंगा (टोंगा द्वीपसमूह)", - "trDisplayName": "तुर्की", - "tsDisplayName": "ट्सोंगा", - "ttDisplayName": "तातार", - "twDisplayName": "ट्वि", - "tyDisplayName": "ताहितियन", - "ugDisplayName": "उइगर, उइगुर", - "ukDisplayName": "यूक्रेनी", - "urDisplayName": "उर्दू", - "uzDisplayName": "उज़बेक", - "veDisplayName": "वेनडा", - "viDisplayName": "वियतनामी", - "voDisplayName": "वोलापुक", - "waDisplayName": "वालून", - "cyDisplayName": "वेल्श", - "woDisplayName": "वोलॉफ", - "fyDisplayName": "पश्चिमी फ्रिसियन", - "xhDisplayName": "खोसा", - "yiDisplayName": "यिदिश", - "yoDisplayName": "योरूबा", - "zaDisplayName": "झुआंग, चुआंग", "unkDisplayName": "अज्ञात", - "zuDisplayName": "ज़ुलु", - "hawDisplayName": "हवाइयन", - "hmnDisplayName": "मंगोलियाई", - "multiDisplayName": "मल्टी", - "cebDisplayName": "सेबुआनो", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "हिब्रू", - "jwDisplayName": "जावानीस", - "moDisplayName": "मोल्डावियन", - "shDisplayName": "सर्बो-क्रोएशियन", "wwCountryDisplayName": "विश्वव्यापी", "afCountryDisplayName": "अफगानिस्तान", "axCountryDisplayName": "आलैंड द्वीपसमूह", @@ -3973,41 +3704,25 @@ "yeCountryDisplayName": "यमन", "zmCountryDisplayName": "ज़ाम्बिया", "zwCountryDisplayName": "ज़िम्बाब्वे", - "pay": "भुगतान करें", - "allPrivateChats": "प्रत्यक्ष चैट", - "unknownPrivateChat": "अज्ञात निजी चैट", + "pay": "चेकआउट", "invitedToSpace": "{user} ने आपको एक कोर्स में शामिल होने के लिए आमंत्रित किया है: {space}! क्या आप स्वीकार करना चाहेंगे?", - "declinedInvitation": "आमंत्रण अस्वीकार कर दिया", - "acceptedInvitation": "स्वीकृत निमंत्रण", "youreInvited": "डाक भेजा गया! आप आमंत्रित हैं!", "invitedToChat": "{user} ने आपको चैट में शामिल होने के लिए आमंत्रित किया है: {name}! क्या आप स्वीकार करना चाहेंगे?", "monthlySubscription": "मासिक", "yearlySubscription": "वार्षिक", "defaultSubscription": "पैंजिया चैट सदस्यता", "freeTrial": "मुफ्त परीक्षण", - "grammarAnalytics": "त्रुटि विश्लेषण", "total": "कुल: ", "noDataFound": "कोई डेटा नहीं मिला", - "promoSubscriptionExpirationDesc": "आपकी वर्तमान सदस्यता प्रचारात्मक है और {expiration} को समाप्त हो जाएगी। सहायता के लिए support@pangea.chat पर संदेश भेजें।", - "emptyChatNameWarning": "कृपया इस चैट के लिए एक नाम दर्ज करें", "blurMeansTranslateTitle": "संदेश धुंधला क्यों है?", "blurMeansTranslateBody": "जब इमर्शन मोड चालू होता है, तो आपके मूल भाषा में भेजे गए संदेश धुंधले हो जाएंगे जबकि पैंजिया बॉट उन्हें आपके लक्षित भाषा में अनुवाद करता है। इमर्शन मोड को व्यक्तिगत और कोर्स सेटिंग्स में टॉगल किया जा सकता है।", - "someErrorTitle": "हम्म, कुछ सही नहीं है", - "someErrorBody": "यह एक त्रुटि हो सकती है या आपके मूल भाषा में कुछ समस्या हो सकती है।", "bestCorrectionFeedback": "यह सही है!", "distractorFeedback": "यह सही नहीं है।", "bestAnswerFeedback": "यह सही है!", "definitionDefaultPrompt": "इस शब्द का क्या अर्थ है?", "practiceDefaultPrompt": "सबसे अच्छा उत्तर क्या है?", "correctionDefaultPrompt": "सबसे अच्छा प्रतिस्थापन क्या है?", - "itStartDefaultPrompt": "क्या आप अनुवाद में मदद चाहते हैं?", - "lockedChatWarning": "🔒 यह चैट लॉक कर दी गई है", - "lockChat": "चैट लॉक करें", - "suggestToChat": "इस चैट का सुझाव दें", - "suggestToChatDesc": "सुझाए गए चैट चैट सूचियों में दिखाई देंगे", "acceptSelection": "सही को स्वीकार करें", - "acceptSelectionAnyway": "इसे फिर भी उपयोग करें", - "makingActivity": "गतिविधि बना रहा है", "why": "क्यों?", "definition": "परिभाषा", "exampleSentence": "उदाहरण वाक्य", @@ -4015,128 +3730,55 @@ "reportMessageTitle": "{reportingUserId} ने {reportedUserId} से एक संदेश रिपोर्ट किया है, जो {roomName} में है", "reportMessageBody": "संदेश: {reportedMessage}\nकारण: {reason}", "noTeachersFound": "रिपोर्ट करने के लिए कोई शिक्षक नहीं मिले", - "viewArchive": "आर्काइव देखें", "trialExpiration": "आपका मुफ्त ट्रायल {expiration} को समाप्त हो जाएगा", "freeTrialDesc": "नए उपयोगकर्ताओं को पैंजिया चैट का एक सप्ताह का मुफ्त ट्रायल मिलता है", "activateTrial": "मुफ्त 7-दिन का ट्रायल", "successfullySubscribed": "आपने सफलतापूर्वक सदस्यता ली है!", "clickToManageSubscription": "अपनी सदस्यता प्रबंधित करने के लिए यहां क्लिक करें।", - "errorGettingAudio": "ऑडियो प्राप्त करने में त्रुटि। कृपया रिफ्रेश करें और पुनः प्रयास करें।", "signUp": "साइन अप करें", "pleaseChooseAtLeastChars": "कृपया कम से कम {min} वर्ण चुनें।", "noEmailWarning": "कृपया एक मान्य ईमेल पता दर्ज करें। अन्यथा आप अपना पासवर्ड रीसेट नहीं कर पाएंगे। यदि आप नहीं चाहते हैं, तो फिर से बटन पर टैप करें।", "pleaseEnterValidEmail": "कृपया एक मान्य ईमेल पता दर्ज करें।", "pleaseChooseAUsername": "कृपया एक उपयोगकर्ता नाम चुनें", - "chooseAUsername": "एक उपयोगकर्ता नाम चुनें", "define": "परिभाषित करें", "listen": "सुनें", - "addConversationBot": "संवाद बॉट सक्षम करें", - "addConversationBotDesc": "इस चैट में एक बॉट जोड़ें", - "convoBotSettingsDescription": "संवाद विषय और कठिनाई संपादित करें", - "enterAConversationTopic": "एक संवाद विषय दर्ज करें", - "conversationTopic": "संवाद विषय", - "enableModeration": "मॉडरेशन सक्षम करें", - "enableModerationDesc": "संदेश भेजने से पहले स्वचालित मॉडरेशन सक्षम करें", - "conversationLanguageLevel": "इस संवाद का भाषा स्तर क्या है?", - "showDefinition": "परिभाषा दिखाएँ", - "subscriptionPopupTitle": "क्या इस वाक्य में व्याकरण की गलती हो सकती है...", - "subscriptionPopupDesc": "आज ही सदस्यता लें ताकि अनुवाद और व्याकरण सुधार को अनलॉक किया जा सके!", - "seeOptions": "विकल्प देखें", - "continuedWithoutSubscription": "सदस्यता के बिना जारी रखें", "trialPeriodExpired": "आपका परीक्षण अवधि समाप्त हो गई है", - "selectToDefine": "किसी भी शब्द पर क्लिक करें ताकि उसकी परिभाषा देखें!", "translations": "अनुवाद", "messageAudio": "संदेश ऑडियो", "definitions": "परिभाषाएँ", "subscribedToUnlockTools": "इंटरैक्टिव अनुवाद और व्याकरण जांच, ऑडियो प्लेबैक, व्यक्तिगत अभ्यास गतिविधियों, और सीखने के विश्लेषण को अनलॉक करने के लिए सदस्यता लें!", "translationTooltip": "अनुवाद करें", - "audioTooltip": "ऑडियो चलाएँ", "speechToTextTooltip": "प्रतिलेख", - "certifyAge": "मैं प्रमाणित करता हूँ कि मेरी उम्र {age} वर्ष से अधिक है", "kickBotWarning": "पांगेआ बॉट को निकालने से इस चैट से बातचीत बॉट हटा दिया जाएगा।", - "joinToView": "विवरण देखने के लिए इस कमरे में शामिल हों", "refresh": "रिफ्रेश करें", - "autoPlayTitle": "ऑटो प्ले संदेश", - "autoPlayDesc": "जब सक्षम हो, तो संदेशों का टेक्स्ट-टू-स्पीच ऑडियो स्वचालित रूप से चलेगा जब चुना जाएगा।", "messageAnalytics": "संदेश विश्लेषण", "words": "शब्द", "score": "अंक", "accuracy": "सटीकता", "points": "अंक", "noPaymentInfo": "कोई भुगतान जानकारी आवश्यक नहीं!", - "conversationBotModeSelectDescription": "चैट गतिविधि", - "conversationBotModeSelectOption_discussion": "चर्चा", - "conversationBotModeSelectOption_custom": "कस्टम", - "conversationBotModeSelectOption_conversation": "संवाद", - "conversationBotModeSelectOption_textAdventure": "पाठ साहसिक", - "conversationBotModeSelectOption_storyGame": "कहानी खेल", - "conversationBotDiscussionZone_title": "चर्चा सेटिंग्स", - "conversationBotDiscussionZone_discussionTopicLabel": "चर्चा विषय", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "चर्चा विषय सेट करें", - "conversationBotDiscussionZone_discussionKeywordsLabel": "चर्चा कीवर्ड", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "चर्चा कीवर्ड सेट करें", - "conversationBotDiscussionZone_discussionKeywordsHintText": "चर्चा का मार्गदर्शन करने के लिए कीवर्ड की अल्पविराम से अलग सूची", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "निर्धारित समय पर चर्चा प्रांप्ट भेजें", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "चर्चा प्रांप्ट के बीच घंटे", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "प्रतिक्रिया पर प्रतिक्रिया ⚙️", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "चर्चा प्रॉम्प्ट भेजने के लिए प्रतिक्रिया", - "conversationBotCustomZone_title": "कस्टम सेटिंग्स", - "conversationBotCustomZone_customSystemPromptLabel": "सिस्टम प्रॉम्प्ट", - "conversationBotCustomZone_customSystemPromptPlaceholder": "कस्टम सिस्टम प्रॉम्प्ट सेट करें", - "conversationBotCustomZone_customSystemPromptEmptyError": "कस्टम सिस्टम प्रॉम्प्ट गायब है", - "botConfig": "बॉट और गतिविधि सेटिंग्स", - "botConfigNoPermissionTitle": "अनुमति नहीं", - "botConfigNoPermissionMessage": "बॉट कॉन्फ़िगरेशन बदलने के लिए रूम एडमिन से संपर्क करें", - "addConversationBotDialogTitleInvite": "संवाद बॉट आमंत्रित करने की पुष्टि करें", - "addConversationBotButtonInvite": "आमंत्रित करें", - "addConversationBotDialogInviteConfirmation": "आमंत्रित करें", - "addConversationBotButtonTitleRemove": "संवाद बॉट हटाने की पुष्टि करें", - "addConversationBotButtonRemove": "हटाएँ", - "addConversationBotDialogRemoveConfirmation": "हटाएँ", - "conversationBotConfigConfirmChange": "पुष्टि करें", - "conversationBotStatus": "बॉट आमंत्रित करें", - "conversationBotTextAdventureZone_title": "टेक्स्ट एडवेंचर", - "conversationBotTextAdventureZone_instructionLabel": "गेम मास्टर निर्देश", - "conversationBotTextAdventureZone_instructionPlaceholder": "गेम मास्टर निर्देश सेट करें", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "खेल मास्टर निर्देशों की अनुपस्थिति", - "studentAnalyticsNotAvailable": "छात्र डेटा वर्तमान में उपलब्ध नहीं है", - "roomDataMissing": "कुछ डेटा कमरे से गायब हो सकता है जिनके आप सदस्य नहीं हैं।", "updatePhoneOS": "आपको अपने डिवाइस का OS संस्करण अपडेट करने की आवश्यकता हो सकती है।", "wordsPerMinute": "मिनट में शब्द", "autoIGCToolName": "स्वचालित रूप से पैंजिया लेखन सहायता चलाएँ", "autoIGCToolDescription": "मेरे संदेश भेजने से पहले स्वचालित रूप से पैंजिया चैट व्याकरण और अनुवाद लेखन सहायता चलाएँ।", - "runGrammarCorrection": "संदेश जांचें", - "grammarCorrectionFailed": "संबंधित मुद्दे", - "grammarCorrectionComplete": "अच्छा दिख रहा है!", "tooltipInstructionsTitle": "क्या यह करता है, इसके बारे में सुनिश्चित नहीं?", "tooltipInstructionsMobileBody": "आइटम को दबाकर रखें और टूलटिप देखने के लिए होवर करें।", "tooltipInstructionsBrowserBody": "आइटम पर होवर करें और टूलटिप देखने के लिए होवर करें।", "chatCapacity": "चैट क्षमता", "roomFull": "यह कमरा पहले ही क्षमता पर है।", - "topicNotSet": "विषय सेट नहीं किया गया है।", - "chatCapacityNotSet": "इस चैट की कोई क्षमता सीमा नहीं है।", "chatCapacityHasBeenChanged": "चैट क्षमता बदल गई है", "chatCapacitySetTooLow": "चैट क्षमता कम से कम {count} होनी चाहिए।", "chatCapacityExplanation": "चैट क्षमता उस सदस्यों की संख्या को सीमित करती है जो एक चैट में अनुमति प्राप्त हैं।", - "chatExceedsCapacity": "यह चैट इसकी क्षमता से अधिक है।", "tooManyRequest": "बहुत अधिक अनुरोध, कृपया बाद में पुनः प्रयास करें।", "enterNumber": "कृपया एक पूर्ण संख्या मान दर्ज करें।", "buildTranslation": "ऊपर दिए गए विकल्पों से अपना अनुवाद बनाएं", - "nonexistentSelection": "चयन अब मौजूद नहीं है।", - "changeAnalyticsLanguage": "विश्लेषण भाषा बदलें", "practice": "अभ्यास", "noLanguagesSet": "कोई भाषाएँ सेट नहीं हैं", - "noActivitiesFound": "अब के लिए यह काफी है! अधिक के लिए बाद में वापस आएं।", - "hintTitle": "संकेत:", "speechToTextBody": "आवाज संदेशों के लिए, आप ट्रांसक्रिप्ट के साथ-साथ वक्ता के शब्द प्रति मिनट स्कोर को भी देख सकते हैं।", "versionNotFound": "संस्करण नहीं मिला", "fetchingVersion": "संस्करण प्राप्त किया जा रहा है...", "versionFetchError": "संस्करण प्राप्त करने में त्रुटि", "versionText": "संस्करण: {version}+{buildNumber}", - "languageButtonLabel": "भाषा: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "स्वचालित अनुवाद चलाएँ", - "interactiveTranslatorAutoPlayDesc": "बिना पूछे इंटरैक्टिव ट्रांसलेटर लॉन्च करता है।", - "changeAnalyticsView": "विश्लेषण दृश्य बदलें", "l1TranslationBody": "आपकी मूल भाषा में संदेश का अनुवाद नहीं किया जाएगा।", "deleteSubscriptionWarningTitle": "आपकी एक सक्रिय सदस्यता है", "deleteSubscriptionWarningBody": "आपका खाता हटाने से आपकी सदस्यता अपने आप रद्द नहीं होगी।", @@ -4144,9 +3786,7 @@ "error520Title": "कृपया पुनः प्रयास करें।", "error520Desc": "माफ़ कीजिए, हम आपका संदेश समझ नहीं सके...", "wordsUsed": "शब्दों का उपयोग किया गया", - "errorTypes": "त्रुटि प्रकार", "level": "स्तर", - "canceledSend": "रद्द किया गया भेजना", "morphsUsed": "मॉर्फ़ का उपयोग किया गया", "translationChoicesBody": "एक विकल्प पर क्लिक करें और होल्ड करें ताकि संकेत मिल सके।", "grammar": "व्याकरण", @@ -4156,7 +3796,6 @@ "reportContentIssueTitle": "सामग्री समस्या रिपोर्ट करें", "feedback": "वैकल्पिक प्रतिक्रिया", "reportContentIssueDescription": "अरे! AI व्यक्तिगत सीखने के अनुभव को सुविधाजनक बना सकता है लेकिन... यह भी भ्रांतियां पैदा कर सकता है। कृपया अपनी कोई भी प्रतिक्रिया दें और हम फिर से प्रयास करेंगे।", - "changeContent": "अरे! AI व्यक्तिगत सीखने के अनुभव को सुविधाजनक बना सकता है लेकिन... यह भी भ्रांतियां पैदा कर सकता है। इसे क्या होना चाहिए?", "clickTheWordAgainToDeselect": "इसे अनचुनने के लिए चुने गए शब्द पर फिर से क्लिक करें।", "l2SupportNa": "उपलब्ध नहीं", "l2SupportAlpha": "अल्फा", @@ -4390,7 +4029,6 @@ "grammarCopySPC": "विशेषता", "grammarCopyPARTTYPE": "भागात्मक प्रकार", "grammarCopyINTREL": "प्रश्नवाचक-संबंधी", - "grammarCopyNUMFORMpsor": "स्वामित्वकर्ता का संख्या", "grammarCopyUNKNOWN": "अज्ञात", "grammarCopyNUMBERPSOR": "स्वामित्वकर्ता का संख्या", "grammarCopyPOSS": "स्वामित्वसूचक", @@ -4436,28 +4074,14 @@ "grammarCopyVOICEdir": "प्रत्यक्ष", "grammarCopyVOICEinv": "विपरीत", "grammarCopyVOICErcp": "परस्पर", - "enterPrompt": "कृपया सिस्टम प्रॉम्प्ट दर्ज करें", - "selectBotLanguage": "बॉट भाषा चुनें", - "chooseVoice": "एक आवाज चुनें", - "enterLanguageLevel": "कृपया एक भाषा स्तर दर्ज करें", - "enterDiscussionTopic": "कृपया चर्चा विषय दर्ज करें", - "selectBotChatMode": "चैट मोड चुनें", - "messageNotInTargetLang": "संदेश लक्ष्य भाषा में नहीं है", "other": "अन्य", "levelShort": "LVL {level}", - "botModeValidation": "कृपया एक चैट मोड चुनें", "clickBestOption": "अपना संदेश अनुवाद करने के लिए सबसे अच्छा विकल्प चुनें!", "completeActivitiesToUnlock": "अनुवाद को अनलॉक करने के लिए कम से कम एक गतिविधि पूरी करें!", - "botSettingsSubtitle": "चैट गतिविधि को नियंत्रित करने के लिए बॉट को आमंत्रित करें", - "invitePeople": "उपयोगकर्ताओं को आमंत्रित करें", "noCapacityLimit": "कोई क्षमता सीमा नहीं", "downloadGroupText": "समूह टेक्स्ट डाउनलोड करें", "notificationsOn": "सूचनाएँ चालू हैं", "notificationsOff": "सूचनाएँ बंद हैं", - "chatCanBeFoundViaSearch": "चैट खोज के माध्यम से पाया जा सकता है", - "requireCodeToJoin": "शामिल होने के लिए कोड आवश्यक है", - "canFindInSearch": "खोज में पाया जा सकता है", - "addChatToSpace": "चैट जोड़ें", "createChatAndInviteUsers": "चैट बनाएं और उपयोगकर्ताओं को आमंत्रित करें", "updatedNewSpaceDescription": "कोर्स आपको अपने चैट को समेकित करने और निजी या सार्वजनिक समुदाय बनाने की अनुमति देते हैं।", "joinWithCode": "कोड के साथ जुड़ें", @@ -4493,39 +4117,19 @@ "constructUseCollected": "चैट में संग्रहित", "constructUseNanDesc": "लागू नहीं", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "यूजरनेम और पासवर्ड के साथ साइन इन करें", - "registrationEmailMessage": "कृपया अपने ईमेल की पुष्टि करें वहां भेजे गए लिंक के साथ। कुछ मामलों में, ईमेल पहुंचने में 5 मिनट तक लग सकते हैं। कृपया अपने स्पैम फ़ोल्डर की भी जांच करें।", "enableTTSToolName": "टेक्स्ट-टू-स्पीच सक्षम करें", "enableTTSToolDescription": "एप्लिकेशन को आपके लक्षित भाषा में टेक्स्ट-टू-स्पीच आउटपुट बनाने की अनुमति दें।", - "couldNotFindTTS": "हमें आपके वर्तमान लक्षित भाषा के लिए टेक्स्ट-टू-स्पीच इंजन नहीं मिल सका।", - "ttsInstructionsHyperlink": "यहाँ क्लिक करें अपने डिवाइस पर नई आवाज़ डाउनलोड करने के निर्देश देखने के लिए।", - "createAnAccount": "एक खाता बनाएं", - "signIn": "साइन इन करें", - "signUpWithEmail": "ईमेल के साथ साइन अप करें", - "signUpWithGoogle": "गूगल के साथ साइन अप करें", - "signUpWithApple": "एप्पल के साथ साइन अप करें", "yourUsername": "आपका उपयोगकर्ता नाम", "yourEmail": "आपका ईमेल", - "pleaseEnterAnEmail": "कृपया एक ईमेल पता दर्ज करें", - "signInWithGoogle": "गूगल के साथ साइन इन करें", - "signInWithApple": "एप्पल के साथ साइन इन करें", - "chooseYourAvatar": "अपना अवतार चुनें", "iWantToLearn": "मैं सीखना चाहता हूँ", - "letsStart": "चलो शुरू करते हैं", - "pleaseAgreeToTOS": "कृपया नियम और शर्तों से सहमत हों", "pleaseEnterEmail": "कृपया एक मान्य ईमेल पता दर्ज करें।", - "pleaseSelectALanguage": "कृपया एक भाषा चुनें", "myBaseLanguage": "मेरी मूल भाषा", - "clickWordsInstructions": "🧻 किसी भी शब्द पर क्लिक करें विवरण के लिए।🤐", - "chooseBestDefinition": "इस शब्द का अर्थ क्या है?", "meaningSectionHeader": "अर्थ:", "formSectionHeader": "चैट में उपयोग किए गए फॉर्म:", - "noEmojiSelectedTooltip": "कोई इमोजी चयनित नहीं है", "writingExercisesTooltip": "लेखन", "listeningExercisesTooltip": "सुनना", "readingExercisesTooltip": "पढ़ना", "meaningNotFound": "अर्थ नहीं मिल सका।", - "formsNotFound": "फॉर्म नहीं मिल सके।", "chooseBaseForm": "मूल फॉर्म चुनें", "notTheCodeError": "माफ़ कीजिए, यह कोड नहीं है!", "totalXP": "कुल XP", @@ -4565,9 +4169,6 @@ "pickAnEmoji": "'{lemma}' के लिए आपका पसंदीदा इमोजी कौन सा है?", "chooseLemmaMeaningInstructionsBody": "संदेश में शब्दों के साथ अर्थ मिलाएँ!", "doubleClickToEdit": "संपादित करने के लिए डबल-क्लिक करें।", - "removeFeature": "{feature} को हटाएँ", - "chooseCorrectLabel": "सही लेबल चुनें।", - "levelPopupTitle": "बधाई हो आपने स्तर {level} तक पहुँच लिया है", "activityPlannerTitle": "गतिविधि योजनाकार", "topicLabel": "विषय", "topicPlaceholder": "एक विषय चुनें...", @@ -4575,7 +4176,6 @@ "modePlaceholder": "एक मोड चुनें...", "learningObjectiveLabel": "अधिगम उद्देश्य", "learningObjectivePlaceholder": "एक अधिगम उद्देश्य चुनें...", - "mediaLabel": "मीडिया जिसे शिक्षार्थियों को साझा करना चाहिए", "languageOfInstructionsLabel": "गतिविधि निर्देशों की भाषा", "targetLanguageLabel": "लक्षित भाषा", "cefrLevelLabel": "CEFR स्तर", @@ -4590,20 +4190,15 @@ "instructions": "निर्देश", "numberOfLearners": "सीखने वालों की संख्या", "mustBeInteger": "यह एक पूर्णांक होना चाहिए जैसे 1, 2, 3, ...", - "noLemmasFound": "यहां {xp} से अधिक XP वाली शब्दावली नहीं है। अभ्यास जारी रखें!", "constructUsePvmDesc": "आवाज संदेश में उत्पादित", - "lockedMorphFeature": "अनलॉक होने की प्रतीक्षा में", "leaveSpaceDescription": "कोर्स छोड़ने पर, आप इसमें सभी चैट छोड़ देंगे। अन्य उपयोगकर्ता देखेंगे कि आपने कोर्स छोड़ दिया है।", - "whatIsLemma": "लेम्मा क्या है?", "constructUseCorMmDesc": "सही संदेश का अर्थ", "constructUseIncMmDesc": "गलत संदेश का अर्थ", "constructUseIgnMmDesc": "अवहेलना किए गए संदेश का अर्थ", "clickForMeaningActivity": "यहां क्लिक करें अर्थ चुनौती के लिए", "meaning": "अर्थ", "chatWith": "{displayname} के साथ समूह", - "slightlyOffensive": "थोड़ा आक्रामक", "clickOnEmailLink": "कृपया ईमेल में लिंक पर क्लिक करें और फिर आगे बढ़ें।\n\nयदि ईमेल नहीं आया है तो अपने स्पैम फ़ोल्डर की जाँच करें।", - "whoIsAllowedToJoinThisChat": "कौन इस चैट में शामिल होने की अनुमति है", "dontForgetPassword": "अपना पासवर्ड न भूलें!", "enableAutocorrectToolName": "डिवाइस ऑटोकरेक्ट सक्षम करें", "enableAutocorrectDescription": "यदि आपका डिवाइस उस भाषा का समर्थन करता है जिसे आप सीख रहे हैं, तो आप सामान्य त्रुटियों को ठीक करने के लिए डिवाइस ऑटोकरेक्ट सक्षम कर सकते हैं।", @@ -4631,48 +4226,26 @@ "autocorrectNotAvailable": "दुर्भाग्यवश, आपका प्लेटफ़ॉर्म इस सुविधा के लिए वर्तमान में समर्थित नहीं है। आगे के विकास के लिए जुड़े रहें!", "pleaseUpdateApp": "कृपया ऐप को अपडेट करें ताकि आप जारी रख सकें।", "chooseEmojiInstructionsBody": "इमोजी को उनके सबसे अच्छे प्रतिनिधित्व वाले शब्दों के साथ मिलाएं। चिंता मत करें! असहमत होने पर कोई अंक नहीं कटेगा। 😅", - "pickAnEmojiFor": "{lemma} के लिए एक इमोजी चुनें", "analyticsVocabListBody": "यह आपका सभी शब्दावली है! जैसे ही आप प्रत्येक शब्द के लिए XP कमाते हैं, वे अंकुर से पूर्ण खिलने तक पहुंचेंगे। अधिक विवरण देखने के लिए किसी भी शब्द पर क्लिक करें।", "morphAnalyticsListBody": "ये सभी व्याकरण अवधारणाएँ हैं जो आप सीख रहे हैं! आप इन्हें चैट करते समय अनलॉक करेंगे। विवरण के लिए क्लिक करें।", "knockSpaceSuccess": "आपने इस कोर्स में शामिल होने का अनुरोध किया है! जब उन्हें यह प्राप्त होगा तो एक व्यवस्थापक आपकी प्रतिक्रिया देगा 😄", - "joinByCode": "कोड द्वारा शामिल हों", "chooseWordAudioInstructionsBody": "पूर्ण संदेश सुनें। फिर ऑडियो को शब्दों के साथ मिलाएं।", "chooseMorphsInstructionsBody": "व्याकरण प्रश्नों के लिए पज़ल टुकड़ों पर क्लिक करें!", - "inviteAndLaunch": "आमंत्रित करें और लॉन्च करें", - "createOwnChat": "अपनी खुद की चैट बनाएं", "pleaseEnterInt": "कृपया एक संख्या दर्ज करें", "home": "होम", "join": "शामिल हों", "readingAssistanceOverviewBody": "मिनी-खेलों के लिए नीचे दिए गए बटनों पर क्लिक करें, जैसे इमोजी, ऑडियो, शब्द अर्थ, और व्याकरण अवधारणाओं का मिलान। या किसी भी शब्द पर क्लिक करें विवरण के लिए।", - "learnByTexting": "टेक्स्ट करके सीखें", - "levelSummaryTrigger": "सारांश देखें", "levelSummaryPopupTitle": "स्तर {level} का सारांश", - "referFriends": "मित्रों को संदर्भित करें", - "referFriendDialogTitle": "अपनी बातचीत में मित्र को आमंत्रित करें", - "referFriendDialogDesc": "क्या आपका कोई मित्र है जो आपके साथ नई भाषा सीखने के लिए उत्साहित है? तो इस निमंत्रण लिंक को कॉपी करें और भेजें ताकि वे जुड़ सकें और आज ही बातचीत शुरू कर सकें।", - "youUnlocked": "आपने अनलॉक किया है", "resetInstructionTooltipsTitle": "निर्देश टूलटिप्स रीसेट करें", "resetInstructionTooltipsDesc": "कृपया निर्देश टूलटिप्स दिखाने के लिए क्लिक करें जैसे कि एक नए उपयोगकर्ता के लिए।", "selectForGrammar": "गतिविधियों और विवरण के लिए एक व्याकरण आइकन चुनें।", - "newChatActivityTitle": "क्या आप एक मजेदार गतिविधि जोड़ना चाहते हैं?", - "newChatActivityDesc": "एक्शन प्लानर के साथ हर समूह चैट को रोमांच बनाएं! समूह के लिए आकर्षक विषय और उद्देश्य सेट करें, और शानदार चित्रों के साथ बातचीत को जीवंत बनाएं। कल्पनाशील चर्चा को प्रोत्साहित करें और मज़ा बिना रुके चलता रहे!", - "exploreMore": "और खोजें", "randomize": "यादृच्छिक करें", "clear": "साफ़ करें", "makeYourOwnActivity": "अपनी खुद की गतिविधि बनाएं", "featuredActivities": "विशेषताएँ", - "goToChat": "चैट पर जाएं", "save": "सहेजें", - "selectActivity": "गतिविधि चुनें", - "wordFocusListeningMultipleChoice": "कौन सा ऑडियो शब्द से मेल खाता है?", "startChat": "चैट शुरू करें", "translationProblem": "अनुवाद समस्या", - "perfectTranslation": "पूर्ण अनुवाद!", - "greatJobTranslation": "इस अनुवाद के साथ शानदार काम!", - "goodJobTranslation": "इस अनुवाद पर अच्छा काम।", - "makingProgress": "आप प्रगति कर रहे हैं!", - "keepPracticing": "प्रैक्टिस जारी रखें!", - "niceJob": "शानदार काम!", "askToJoin": "शामिल होने के लिए पूछें", "emptyChatWarningTitle": "चैट खाली है", "emptyChatWarningDesc": "आपने अपने चैट में किसी को आमंत्रित नहीं किया है। संपर्क या बॉट को आमंत्रित करने के लिए चैट सेटिंग्स पर जाएं। आप इसे बाद में भी कर सकते हैं।", @@ -4691,8 +4264,6 @@ "languageLevelC2Desc": "मैं लगभग हर सुना या पढ़ा गया को समझ सकता हूँ और अपने आप को प्रवाहपूर्ण और सटीक रूप से व्यक्त कर सकता हूँ।", "newVocab": "नई शब्दावली", "newGrammar": "नई व्याकरण अवधारणाएँ", - "congratulationsOnReaching": "आप स्तर {level} तक पहुँच गए हैं!", - "seeDetails": "विवरण देखें", "choosePracticeMode": "प्रैक्टिस गतिविधि शुरू करने के लिए ऊपर दिए गए बटनों में से किसी एक पर क्लिक करें", "ban": "बैन करें", "unban": "अनबैन करें", @@ -4706,8 +4277,6 @@ "timesUsedWithAssistance": "सहायता के साथ उपयोग किए गए समय", "shareInviteCode": "आमंत्रण कोड साझा करें: {code}", "leaderboard": "लीडरबोर्ड", - "welcomeUser": "स्वागत है {user}", - "joinSpaceOnboardingDesc": "क्या आपके पास सार्वजनिक कोर्स के लिए कोई आमंत्रण कोड या लिंक है?", "skipForNow": "अभी के लिए छोड़ें", "permissions": "अनुमतियां", "spaceChildPermission": "यह कोर्स में नए चैट जोड़ने वाला कौन है", @@ -4715,12 +4284,8 @@ "defaultOption": "डिफ़ॉल्ट", "deleteChatDesc": "क्या आप सुनिश्चित हैं कि आप इस चैट को हटाना चाहते हैं? यह सभी प्रतिभागियों के लिए हटा दिया जाएगा और चैट के सभी संदेश अब अभ्यास या सीखने के विश्लेषण के लिए उपलब्ध नहीं होंगे।", "deleteSpaceDesc": "कोर्स और कोई भी चयनित चैट सभी प्रतिभागियों के लिए हटा दी जाएगी और चैट के सभी संदेश अब अभ्यास या सीखने के विश्लेषण के लिए उपलब्ध नहीं होंगे। इस क्रिया को पूर्ववत नहीं किया जा सकता।", - "chatWithActivities": "गतिविधियों के साथ चैट", "launch": "लॉन्च करें", - "launchActivityToChats": "चैट में गतिविधि शुरू करें", "searchChats": "चैट खोजें", - "selectChats": "चैट चुनें", - "selectChatToStart": "पूर्ण! शुरू करने के लिए एक चैट चुनें", "maxFifty": "अधिकतम 50", "configureSpace": "कोर्स कॉन्फ़िगर करें", "pinMessages": "संदेश पिन करें", @@ -4734,9 +4299,7 @@ "announcements": "घोषणाएँ", "activities": "गतिविधियाँ", "access": "पहुँच", - "botSettings": "बॉट सेटिंग्स", "activitySuggestionTimeoutMessage": "हम आपके लिए और गतिविधियाँ बनाने में मेहनत कर रहे हैं, कृपया एक मिनट में वापस जांचें", - "accessSettingsWarning": "उफ़! ऐसा लगता है कि आपके पास इस कमरे के एक्सेस नियम सेट करने की अनुमति नहीं है। आपको इन्हें जांचना चाहिए कि ये आपकी आवश्यकताओं के अनुरूप हैं या नहीं, और यदि आपको इन्हें बदलने की आवश्यकता हो तो कमरे के व्यवस्थापक से बात करें", "howSpaceCanBeFound": "यह कोर्स कैसे पाया जा सकता है", "private": "निजी", "cannotBeFoundInSearch": "खोज में नहीं मिल सकता", @@ -4749,16 +4312,6 @@ "canBeFoundViaKnock": "• जुड़ने का अनुरोध और व्यवस्थापक की स्वीकृति", "youHaveLeveledUp": "आप स्तर ऊपर हो गए हैं!", "sendActivities": "गतिविधियाँ भेजें", - "getStarted": "शुरू करें", - "getStartedBotChatDesc": "एआई के साथ चैटिंग शुरू करने का एक शानदार स्थान है और पांगेआ पढ़ना, लिखना, सुनना और बोलने के उपकरण इसे आसान बनाते हैं!", - "getStartedCommunitiesDesc": "एक समुदाय के साथ सीखना वह जगह है जहां पांगेआ चैट चमकता है!\nआप अपनी कक्षा में शामिल हो सकते हैं, एक कोर्स खोज सकते हैं, या अपना खुद का बना सकते हैं!", - "getStartedFriendsDesc": "क्या आपका कोई मित्र है जो आपके साथ सीखना चाहता है?", - "getStartedBotChatComplete": "शाबाश! आप बॉट के साथ चैट कर रहे हैं!", - "getStartedCommunitiesComplete": "शानदार, आप एक कोर्स में शामिल हो गए हैं!", - "getStartedComplete": "आपने इस अनुभाग को पूरा कर लिया है!\nमित्रों के साथ चैट करके हमारे अद्भुत फीचर्स का अन्वेषण जारी रखें!", - "getStartedFriendsComplete": "वाह! आपके पास दोस्त हैं! 😊", - "getStartedBotChatButton": "चैट शुरू करें!", - "getStartedFriendsButton": "एक मित्र के साथ चैट करें", "groupChat": "समूह चैट", "directMessage": "प्रत्यक्ष संदेश", "newDirectMessage": "नया प्रत्यक्ष संदेश", @@ -4774,7 +4327,6 @@ "mySavedActivities": "मेरी सहेजी गई गतिविधियां", "noSavedActivities": "कोई सहेजी गई गतिविधि नहीं", "saveActivity": "इस गतिविधि को सहेजें", - "yourSavedActivities": "सहेजी गई गतिविधियां", "failedToPlayVideo": "वीडियो चलाने में विफल", "done": "पूर्ण", "inThisSpace": "इस कोर्स में", @@ -4813,37 +4365,27 @@ "maximumActivityParticipants": "प्रत्येक गतिविधि में अधिकतम {count} प्रतिभागी हो सकते हैं।", "pending": "लंबित", "inactive": "निष्क्रिय", - "unjoinedActivityMessage": "क्या आप भाग लेना चाहते हैं? एक खुली भूमिका चुनें!\nया शो देखें और आराम करें!", - "fullActivityMessage": "शो देखने के लिए स्वतंत्र महसूस करें! जबकि भाग लेने के लिए कोई खुली भूमिका नहीं है, आप चैट देख सकते हैं!", "confirmRole": "भूमिका की पुष्टि करें", "openRoleLabel": "खुली", "joinedTheActivity": "👋 {username} ने {role} के रूप में भाग लिया", "finishedTheActivity": "🎯 {username} ने इस गतिविधि को पूरा किया", - "endActivityTitle": "मैं समाप्त हूँ", - "endActivityDesc": "क्या आपने उद्देश्यों को पूरा किया?\nयह आपकी पुष्टि है कि आप संदेश भेजना बंद कर रहे हैं। लेकिन चिंता मत करें, चैट में मज़ा जारी है! जब तक सभी 'पूर्ण' पर क्लिक नहीं करते, तब तक आराम से रहिए और शो का आनंद लीजिए।", "archiveToAnalytics": "मेरी पूरी हुई गतिविधियों में जोड़ें", "activitySummaryError": "गतिविधि सारांश उपलब्ध नहीं है", "requestSummaries": "सारांश अनुरोध करें", - "loadingActivitySummary": "गतिविधि सारांश लोड हो रहा है...", "generatingNewActivities": "आप इस भाषा जोड़े के पहले उपयोगकर्ता हैं! कृपया एक मिनट दें, हम आपके लिए गतिविधियों की तैयारी कर रहे हैं।", - "requestAccessTitle": "विश्लेषण दृश्य पहुंच का अनुरोध करें?", + "requestAccessTitle": "विश्लेषण पहुंच का अनुरोध करें?", "requestAccessDesc": "क्या आप प्रतिभागियों के विश्लेषण देखने के लिए पहुंच का अनुरोध करना चाहेंगे?\n\nयदि प्रतिभागी सहमत हैं, तो इस कोर्स के व्यवस्थापक उनकी देख सकेंगे:\n • कुल शब्दावली\n • कुल व्याकरण अवधारणाएँ\n • कुल गतिविधि सत्र पूरे किए गए\n • उपयोग किए गए विशिष्ट व्याकरण अवधारणाएँ, सही और गलत\n\nवे अपनी देख नहीं सकेंगे:\n • कोर्स के बाहर चैट में संदेश\n • शब्दावली सूची", "requestAccess": "अनुरोध करें ({count})", "analyticsInactiveTitle": "निष्क्रिय उपयोगकर्ताओं को अनुरोध नहीं भेजा जा सका", "analyticsInactiveDesc": "निष्क्रिय उपयोगकर्ता जिन्होंने इस सुविधा के शुरू होने के बाद लॉग इन नहीं किया है, वे आपका अनुरोध नहीं देखेंगे।\n\nजैसे ही वे वापस आएंगे, अनुरोध बटन दिखाई देगा। आप बाद में उनके नाम के नीचे अनुरोध बटन पर क्लिक करके पुनः अनुरोध भेज सकते हैं।", "accessRequestedTitle": "विश्लेषण पहुंच का अनुरोध", - "accessRequestedDesc": "\"{space}\" के व्यवस्थापक आपकी सीखने की विश्लेषण देखने का अनुरोध कर रहे हैं।\n\nयदि आप सहमत हैं, तो इस कोर्स के व्यवस्थापक आपकी देख सकेंगे:\n • कुल शब्दावली\n • कुल व्याकरण अवधारणाएँ\n • कुल गतिविधि सत्र पूरे किए गए\n • उपयोग किए गए विशिष्ट व्याकरण अवधारणाएँ, सही और गलत\n\nवे आपकी देख नहीं सकेंगे:\n • कोर्स के बाहर चैट में संदेश\n • शब्दावली सूची", - "allowAccess": "पहुँच की अनुमति दें", - "denyAccess": "पहुँच अस्वीकार करें", + "accessRequestedDesc": "प्रशासक(ओं) का अनुरोध: {admin} \n\n“{space}” से प्रशासक आपके शिक्षण विश्लेषण को देखने का अनुरोध कर रहे हैं।\n\nयदि आप सहमत हैं, तो वे आपके:\n • कुल शब्दावली\n • कुल व्याकरण अवधारणाएँ\n • कुल गतिविधि सत्र पूर्ण किए गए\n • विशिष्ट व्याकरण अवधारणाएँ, सही और गलत दोनों, देख सकेंगे\n\nवे आपके:\n • पाठ्यक्रम के बाहर चैट में संदेश\n • शब्दावली सूची नहीं देख सकेंगे", "adminRequestedAccess": "व्यवस्थापकों ने आपकी विश्लेषण देखने का अनुरोध किया है।", "lastUpdated": "अद्यतन\n{time}", "activityFinishedMessage": "सभी समाप्त!", "endForAll": "सभी के लिए समाप्त करें", "newCourse": "नई कोर्स", - "newCourseSubtitle": "आप किस कोर्स योजना का उपयोग करना चाहेंगे?", - "failedToLoadCourses": "कोर्स लोड करने में विफल", "numModules": "{num} मॉड्यूल", - "numActivityPlans": "{num} गतिविधि योजनाएँ", "coursePlan": "कोर्स योजना", "editCourseLater": "आप बाद में टेम्पलेट का शीर्षक, विवरण और कोर्स छवि संपादित कर सकते हैं।", "newCourseAccess": "डिफ़ॉल्ट रूप से, कोर्स निजी होते हैं और शामिल होने के लिए व्यवस्थापक अनुमोदन की आवश्यकता होती है। आप इन सेटिंग्स को कभी भी संपादित कर सकते हैं।", @@ -4857,17 +4399,11 @@ "accessDesc": "आप अपने कोर्स को दुनिया के लिए खोल सकते हैं! या, अपने कोर्स को निजी और सुरक्षित बना सकते हैं।", "createGroupChatDesc": "जहां गतिविधि सत्र शुरू और समाप्त होते हैं, वहीं समूह चैट नियमित संचार के लिए खुली रहेगी।", "deleteDesc": "केवल व्यवस्थापक ही कोर्स हटा सकते हैं। यह एक विनाशकारी क्रिया है जो सभी उपयोगकर्ताओं को हटा देती है और कोर्स के भीतर सभी चुनी गई चैट को हटा देती है। सावधानी से आगे बढ़ें।", - "failedToLoadCourseInfo": "कोर्स जानकारी लोड करने में विफल", "noCourseFound": "अरे, इस कोर्स के लिए एक योजना की आवश्यकता है!\n\nकोर्स योजनाएँ विषयों और बातचीत गतिविधियों का एक क्रम हैं।", "additionalParticipants": "+ {num} अन्य", - "activityNotFoundForCourse": "यह गतिविधि कोर्स के भीतर नहीं मिली", - "courseChats": "कोर्स चैट्स", - "myActivitySessions": "मेरी गतिविधि सत्र", "directMessages": "प्रत्यक्ष संदेश", "whatNow": "अब क्या?", "chooseNextActivity": "अपनी अगली गतिविधि चुनें!", - "seeInstructions": "निर्देश देखें", - "hideInstructions": "निर्देश छुपाएँ", "letsGo": "चलो शुरू करें", "chooseRole": "एक भूमिका चुनें!", "chooseRoleToParticipate": "भाग लेने के लिए भूमिका चुनें!", @@ -4877,23 +4413,15 @@ "inviteFriends": "मित्रों को आमंत्रित करें", "waitNotDone": "रुको, मैं अभी पूरा नहीं किया हूँ!", "waitingForOthersToFinish": "बाकियों के समाप्त होने का इंतजार कर रहा हूँ...", - "saveToCompletedActivities": "पूर्ण गतिविधियों में सहेजें", "generatingSummary": "चैट का विश्लेषण कर रहे हैं और परिणाम उत्पन्न कर रहे हैं", - "instructionsLanguage": "निर्देश भाषा", "findCourse": "कोर्स खोजें", - "activityCompletedDesc": "आपकी पूरी की गई गतिविधि को विश्लेषण में जोड़ा गया है जहां आप उपयोग की गई भाषा की समीक्षा और अभ्यास कर सकते हैं।", "pingParticipantsNotification": "{user} गतिविधि सत्र में शामिल होने के लिए उपयोगकर्ताओं की तलाश कर रहा है {room}", "course": "कोर्स", "courses": "कोर्स", "courseName": "कोर्स का नाम", "createNewCourse": "नया कोर्स", - "publicCourses": "सार्वजनिक कोर्स", "goToCourse": "कोर्स पर जाएं: {course}", "activityComplete": "यह गतिविधि पूरी हो गई है। गतिविधि का सारांश नीचे उपलब्ध होना चाहिए।", - "haventChattedMuch": "ऐसा लगता है कि आपने बहुत अधिक चैट नहीं की है, कुछ और शब्दावली का उपयोग करने का प्रयास करें! यदि आप महसूस करते हैं कि आपने अपना उद्देश्य पूरा कर लिया है, तो आप नीचे गतिविधि समाप्त कर सकते हैं।", - "haveChatted": "ऐसा लगता है कि आप कुछ समय से चैट कर रहे हैं! यदि आप महसूस करते हैं कि आपने अपना उद्देश्य पूरा कर लिया है, तो गतिविधि समाप्त करने के लिए समाप्त करें पर क्लिक करें और हम चैट में आपका सारांश उत्पन्न करेंगे!", - "userDoneAndWaiting": "{num1}/{num2} प्रतिभागी समाप्त हो गए हैं। सभी के समाप्त होने का इंतजार करें, और हम चैट में आपका सारांश उत्पन्न करेंगे! \n\nयदि आप बातचीत में फिर से शामिल होना चाहते हैं, तो चैट में जारी रखें बटन पर क्लिक करें।", - "othersDoneAndWaiting": "{num1}/{num2} समाप्त हो गए हैं। क्या आपने अपना उद्देश्य पूरा कर लिया है?", "startNewSession": "नई सत्र शुरू करें", "joinOpenSession": "खुले सत्र में शामिल हों", "less": "कम", @@ -4903,7 +4431,6 @@ "openToJoin": "शामिल होने के लिए खुला", "results": "परिणाम", "activityDone": "गतिविधि पूरी हुई!", - "moreLabel": "और", "promoCodeInfo": "प्रोमो कोड अगली पृष्ठ पर दर्ज किया जा सकता है", "editsComingSoon": "शहरों और गतिविधियों को संपादित करने की क्षमता जल्द ही आ रही है।", "editing": "संपादन", @@ -4919,13 +4446,10 @@ "courseSavedSuccessfully": "कोर्स सफलतापूर्वक सहेजा गया", "addCoursePlan": "कोर्स योजना जोड़ें", "activityStatsButtonInstruction": "यहां क्लिक करें अपनी गतिविधि आँकड़े देखने के लिए और समाप्त होने पर गतिविधि को बंद करने के लिए", - "readingAnalyticsDesc": "पढ़ने की गतिविधियों के लिए प्रत्येक संदेश पर अभ्यास पर क्लिक करें।", - "speakingAnalyticsDesc": "बोलने का अभ्यास करने के लिए आवाज़ संदेश रिकॉर्ड करें।", - "audioAnalyticsDesc": "सुनने की गतिविधियों के लिए प्रत्येक संदेश पर अभ्यास पर क्लिक करें।", "loginToAccount": "मेरे खाते में लॉगिन करें", "appDescription": "एक भाषा सीखें\nजब आप अपने दोस्तों को मैसेज कर रहे हों।", "languages": "भाषाएँ", - "chooseLanguage": "एक भाषा चुनें।", + "chooseLanguage": "लक्षित भाषा चुनें।", "planTrip": "अपनी यात्रा की योजना बनाएं", "howAreYouTraveling": "आप कैसे यात्रा कर रहे हैं?", "unlockPrivateTrip": "एक निजी यात्रा अनलॉक करें", @@ -4938,25 +4462,20 @@ "courseCode": "गुप्त पासवर्ड क्या है?", "courseCodeHint": "यात्रा कोड या लिंक", "unlockMyTrip": "मेरी यात्रा अनलॉक करें", - "anyLevel": "कोई भी स्तर", "signupOption": "आप साइन अप कैसे करना चाहते हैं?", "withApple": "एप्पल के साथ", "withGoogle": "गूगल के साथ", "withEmail": "ईमेल के साथ", "createAccount": "खाता बनाएं", - "noCoursesFound": "कोई कोर्स नहीं मिला", "loginWithEmail": "ईमेल से लॉगिन करें", "usernameOrEmail": "यूजरनेम या ईमेल", "email": "ईमेल", "forgotPassword": "पासवर्ड भूल गए?", - "writingAnalyticsDesc": "लेखन का अभ्यास करने के लिए संदेश भेजें।", "endActivity": "क्रिया समाप्त करें", "allLanguages": "सभी भाषाएँ", - "allCefrLevels": "सभी CEFR स्तर", "chatListTooltip": "यहाँ आप अपने सीधे संदेश पाएंगे! किसी भी उपयोगकर्ता के अवतार पर क्लिक करें और “संवाद शुरू करें” पर क्लिक करें ताकि आप एक डीएम भेज सकें।", "directMessageBotTitle": "डायरेक्ट मैसेज पैंजिया बॉट", "feedbackTitle": "क्रिया प्रतिक्रिया", - "feedbackDesc": "क्रिया में सुधार कैसे किया जाए? यदि आप कुछ विवरण प्रदान कर सकते हैं, तो हम बदलाव करेंगे!", "feedbackHint": "आपकी प्रतिक्रिया", "feedbackButton": "प्रतिक्रिया भेजें", "directMessageBotDesc": "मानवों से बात करना अधिक मजेदार है लेकिन... एआई हमेशा तैयार है!", @@ -4964,7 +4483,7 @@ "playWithAI": "अभी के लिए एआई के साथ खेलें", "courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!", "@@locale": "hi", - "@@last_modified": "2026-01-06 13:02:39.726780", + "@@last_modified": "2026-01-07 14:28:46.662693", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6090,30 +5609,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6129,18 +5624,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6165,18 +5648,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6213,38 +5684,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6253,62 +5696,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6345,10 +5744,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6357,14 +5752,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6373,46 +5760,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6421,10 +5772,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6481,18 +5828,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6501,14 +5836,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6537,18 +5864,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6557,42 +5872,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6601,14 +5884,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6629,26 +5904,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6669,10 +5924,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6705,25 +5956,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6780,34 +6012,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6836,778 +6040,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8600,14 +7036,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8619,14 +7047,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8658,10 +7078,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8670,18 +7086,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8690,14 +7094,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8722,38 +7118,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8799,10 +7167,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8827,10 +7191,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8855,10 +7215,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8867,66 +7223,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8947,42 +7247,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9007,154 +7283,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9171,18 +7299,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9203,14 +7319,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9227,10 +7335,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9243,14 +7347,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9259,14 +7355,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9294,26 +7382,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9342,18 +7410,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9390,10 +7450,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10326,10 +8382,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10510,34 +8562,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10550,10 +8574,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10562,14 +8582,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10586,22 +8598,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10749,14 +8745,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10765,34 +8753,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10801,54 +8761,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10857,10 +8781,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10877,10 +8797,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11052,26 +8968,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11100,10 +8996,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11160,30 +9052,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11212,18 +9088,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11340,14 +9208,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11360,10 +9220,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11372,14 +9228,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11396,14 +9244,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11412,22 +9252,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11440,18 +9264,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11468,22 +9280,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11492,30 +9292,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11588,18 +9364,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11656,18 +9420,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11696,30 +9448,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11772,18 +9508,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11832,46 +9560,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11936,10 +9624,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12111,14 +9795,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12146,14 +9822,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12166,10 +9834,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12205,19 +9869,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12242,14 +9901,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12258,14 +9909,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12318,10 +9961,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12334,18 +9973,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12358,14 +9985,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12406,26 +10025,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12453,10 +10060,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12467,36 +10070,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12533,10 +10106,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12601,18 +10170,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12677,10 +10234,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12701,10 +10254,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12721,10 +10270,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12733,10 +10278,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12749,10 +10290,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12777,16 +10314,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "मित्रों को गतिविधि में आमंत्रित करें", - "inviteFriendsToActivityCourse": "मित्रों को गतिविधि और कोर्स में आमंत्रित करें", "feedbackRespDesc": "कल फिर से जांचें गतिविधि अपडेट के लिए।", "activityDropdownDesc": "जब आप इस गतिविधि को पूरा कर लें, तो नीचे क्लिक करें", - "activityAnalyticsListBody": "ये आपकी पूरी की गई गतिविधियां हैं! गतिविधियों को पूरा करने के बाद, आप उन्हें यहां देख सकते हैं।", "languageMismatchTitle": "भाषा मेल नहीं खाती", "languageMismatchDesc": "आपकी लक्षित भाषा इस गतिविधि की भाषा से मेल नहीं खाती। क्या आप अपनी लक्षित भाषा अपडेट करना चाहेंगे?", "reportWordIssueTooltip": "शब्द जानकारी समस्या रिपोर्ट करें", "tokenInfoFeedbackDialogTitle": "शब्द जानकारी प्रतिक्रिया", - "tokenInfoFeedbackDialogDesc": "एआई गलतियां करता है। कृपया ऊपर दी गई जानकारी में कोई भी समस्या बताएं।", "noPublicCoursesFound": "कोई सार्वजनिक कोर्स नहीं मिला। क्या आप एक बनाना चाहेंगे?", "noCourseTemplatesFound": "हम आपकी लक्षित भाषा के लिए कोई कोर्स नहीं ढूंढ सके। आप इस बीच Pangea Bot के साथ चैट कर सकते हैं, और बाद में अधिक कोर्स के लिए वापस जांच सकते हैं।", "botActivityJoinFailMessage": "Pangea Bot प्रतिक्रिया देने में समय ले रहा है। कृपया बाद में पुनः प्रयास करें, या एक मित्र को आमंत्रित करें।", @@ -12794,14 +10327,6 @@ "leaveDesc": "इस स्थान और इसके सभी चैट छोड़ें", "selectAll": "सभी चुनें", "deselectAll": "सभी अनचुनें", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12810,10 +10335,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12830,10 +10351,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12867,7 +10384,6 @@ "newMessageInPangeaChat": "💬 पांगेआ चैट में नया संदेश", "shareCourse": "कोर्स साझा करें", "addCourse": "कोर्स जोड़ें", - "joinCourseWithCode": "कोड के साथ कोर्स में शामिल हों", "joinPublicCourse": "सार्वजनिक कोर्स में शामिल हों", "vocabLevelsDesc": "यहां वे शब्द जाएंगे जब आप उन्हें स्तर देंगे!", "highlightVocabTooltip": "नीचे लक्षित शब्दों को हाइलाइट करें, उन्हें चैट में भेजकर या उनके साथ अभ्यास करके।", @@ -12891,10 +10407,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12903,7 +10415,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "कोई डीएम या चैट नहीं मिली। सुनिश्चित करें कि आपकी खोज सही ढंग से लिखी गई है।", + "activityAnalyticsTooltipBody": "ये आपकी समीक्षा और अभ्यास के लिए सहेजी गई गतिविधियाँ हैं।", + "numSavedActivities": "सहेजी गई गतिविधियों की संख्या", + "saveActivityTitle": "गतिविधि सहेजें", + "saveActivityDesc": "अच्छा काम! इस गतिविधि को बाद की समीक्षा और अभ्यास के लिए सहेजें", + "levelInfoTooltip": "यहाँ आप सभी अंक देख सकते हैं जो आपने कमाए हैं और कैसे!", + "alreadyInCourseWithID": "आप पहले से ही इस योजना के साथ एक पाठ्यक्रम में हैं। क्या आप उसी योजना के साथ एक पाठ्यक्रम बनाना चाहते हैं, या मौजूदा पाठ्यक्रम में जाना चाहते हैं?", + "goToExistingCourse": "मौजूदा पाठ्यक्रम पर जाएं", + "emojiView": "इमोजी दृश्य", + "feedbackDialogDesc": "मैं भी गलतियाँ करता हूँ! मुझे सुधारने में मदद करने के लिए कुछ है?", + "contactHasBeenInvitedToTheCourse": "संपर्क को पाठ्यक्रम में आमंत्रित किया गया है", + "activityStatsButtonTooltip": "गतिविधि जानकारी", + "allow": "अनुमति दें", + "deny": "अस्वीकृत करें", + "enabledRenewal": "सदस्यता नवीनीकरण सक्षम करें", + "subscriptionEndsOn": "सदस्यता समाप्त होती है", + "subscriptionRenewsOn": "सदस्यता नवीनीकरण होती है", + "waitForSubscriptionChanges": "आपकी सदस्यता में परिवर्तन ऐप में परिलक्षित होने में कुछ समय ले सकते हैं।", + "subscribeReadingAssistance": "संदेश उपकरणों को अनलॉक करने के लिए सदस्यता लें", + "aceDisplayName": "अचिनीज़", + "achDisplayName": "अकोली", + "afDisplayName": "अफ्रीकांस", + "akDisplayName": "अकान", + "alzDisplayName": "अलूर", + "amDisplayName": "अम्हारिक", + "arDisplayName": "अरबी", + "asDisplayName": "असमिया", + "awaDisplayName": "अवधी", + "ayDisplayName": "ऐमारा", + "azDisplayName": "अज़रबैजानी", + "baDisplayName": "बाश्किर", + "banDisplayName": "बालिनीज़", + "bbcDisplayName": "बाटक टोबा", + "beDisplayName": "बेलारूसी", + "bemDisplayName": "बेम्बा", + "bewDisplayName": "बेटावी", + "bgDisplayName": "बुल्गारियाई", + "bhoDisplayName": "भोजपुरी", + "bikDisplayName": "बिकोल", + "bmDisplayName": "बाम्बारा", + "bnDisplayName": "বাংলা", + "bnBDDisplayName": "বাংলা (বাংলাদেশ)", + "bnINDisplayName": "বাংলা (ভারত)", + "brDisplayName": "ব্রেটন", + "bsDisplayName": "বোসনিয়ান", + "btsDisplayName": "বাতাক সিমালুংগুন", + "btxDisplayName": "বাতাক কারো", + "buaDisplayName": "বুরিয়াত", + "caDisplayName": "কাতালান", + "cebDisplayName": "সেবুয়ানো", + "cggDisplayName": "चिगा", + "chmDisplayName": "मारी", + "ckbDisplayName": "केंद्रीय कुर्दिश", + "cnhDisplayName": "हखा चिन", + "coDisplayName": "कोर्सिकन", + "crhDisplayName": "क्राइमियन तुर्की", + "crsDisplayName": "सेसेल्वा क्रेओल फ्रेंच", + "csDisplayName": "चेक", + "cvDisplayName": "चुवाश", + "cyDisplayName": "वेल्श", + "daDisplayName": "डेनिश", + "deDisplayName": "जर्मन", + "dinDisplayName": "डिंका", + "doiDisplayName": "डोगरी", + "dovDisplayName": "डोम्बे", + "dzDisplayName": "जोंगखा", + "eeDisplayName": "एवे", + "enDisplayName": "अंग्रेज़ी", + "enAUDisplayName": "अंग्रेज़ी (ऑस्ट्रेलिया)", + "enGBDisplayName": "अंग्रेज़ी (यूके)", + "enINDisplayName": "अंग्रेज़ी (भारत)", + "enUSDisplayName": "अंग्रेज़ी (अमेरिका)", + "eoDisplayName": "एस्पेरांटो", + "esDisplayName": "स्पेनिश", + "esESDisplayName": "स्पेनिश (स्पेन)", + "esMXDisplayName": "स्पेनिश (मैक्सिको)", + "euDisplayName": "बास्क", + "faDisplayName": "फारसी", + "ffDisplayName": "फुलाह", + "fiDisplayName": "फिनिश", + "filDisplayName": "फिलिपिनो", + "fjDisplayName": "फिजियन", + "foDisplayName": "फरोइस", + "frDisplayName": "फ्रेंच", + "frCADisplayName": "फ्रेंच (कनाडा)", + "frFRDisplayName": "फ्रेंच (फ्रांस)", + "fyDisplayName": "पश्चिमी फ्रिसियन", + "gaDisplayName": "आयरिश", + "gaaDisplayName": "गा", + "gdDisplayName": "स्कॉटिश गैलिक", + "glDisplayName": "गैलिशियन", + "gnDisplayName": "गुआरानी", + "gomDisplayName": "गोअन कोंकणी", + "guDisplayName": "गुजराती", + "haDisplayName": "हौसा", + "hawDisplayName": "हवाईयन", + "heDisplayName": "हिब्रू", + "hiDisplayName": "हिंदी", + "hilDisplayName": "हिलिगायनन", + "hmnDisplayName": "ह्मोंग", + "hneDisplayName": "छत्तीसगढ़ी", + "hrDisplayName": "क्रोएशियाई", + "hrxDisplayName": "हंसरिक", + "htDisplayName": "हैती क्रियोल", + "huDisplayName": "हंगेरियन", + "hyDisplayName": "आर्मेनियाई", + "idDisplayName": "इंडोनेशियाई", + "igDisplayName": "इग्बो", + "iloDisplayName": "इलोको", + "isDisplayName": "आइसलैंडिक", + "itDisplayName": "इतालवी", + "jaDisplayName": "जापानी", + "jvDisplayName": "जावानीज़", + "kaDisplayName": "जॉर्जियन", + "kkDisplayName": "कज़ाख", + "kmDisplayName": "खमेर", + "knDisplayName": "कन्नड़", + "koDisplayName": "कोरियाई", + "kokDisplayName": "कोंकणी", + "kriDisplayName": "क्रियो", + "ksDisplayName": "कश्मीरी", + "ktuDisplayName": "कितुबा (डेमोक्रेटिक रिपब्लिक ऑफ कांगो)", + "kuDisplayName": "कुर्दिश", + "kyDisplayName": "किर्गिज़", + "laDisplayName": "लैटिन", + "lbDisplayName": "लक्समबर्गिश", + "lgDisplayName": "गांडा", + "liDisplayName": "लिम्बुर्गिश", + "lijDisplayName": "लिगुरियन", + "lmoDisplayName": "लोम्बार्ड", + "lnDisplayName": "लिंगाला", + "loDisplayName": "लाओ", + "ltDisplayName": "लिथुआनियाई", + "ltgDisplayName": "लात्गालियाई", + "luoDisplayName": "लुओ (केन्या और तंजानिया)", + "lusDisplayName": "मिजो", + "lvDisplayName": "लात्वियाई", + "maiDisplayName": "मैथिली", + "makDisplayName": "मकासर", + "mgDisplayName": "मलागासी", + "miDisplayName": "माओरी", + "minDisplayName": "मिनांगकाबाऊ", + "mkDisplayName": "मैसेडोनियन", + "mlDisplayName": "मलयालम", + "mnDisplayName": "मंगोलियन", + "mniDisplayName": "मणिपुरी", + "mrDisplayName": "मराठी", + "msDisplayName": "मलय", + "msArabDisplayName": "मलय (अरबी)", + "msMYDisplayName": "मलय (मलेशिया)", + "mtDisplayName": "माल्टीज़", + "mwrDisplayName": "मारवाड़ी", + "myDisplayName": "बर्मी", + "nanDisplayName": "मिन नान", + "nbDisplayName": "नॉर्वेजियन (बोकमाल)", + "neDisplayName": "नेपाली", + "newDisplayName": "न्यूवारी", + "nlDisplayName": "डच", + "nlBEDisplayName": "फ्लेमिश", + "noDisplayName": "नॉर्वेजियन", + "nrDisplayName": "दक्षिण नडेबेल", + "nsoDisplayName": "उत्तर सोथो", + "nusDisplayName": "न्यूर", + "nyDisplayName": "न्यांजा", + "ocDisplayName": "ओसिटान", + "omDisplayName": "ओरोमो", + "orDisplayName": "उड़िया", + "paDisplayName": "पंजाबी", + "paArabDisplayName": "पंजाबी (शाहमुखी)", + "paINDisplayName": "पंजाबी (गुरमुखी)", + "pagDisplayName": "पैंगासिनन", + "pamDisplayName": "पाम्पांगा", + "papDisplayName": "पापियामेंटो", + "plDisplayName": "पोलिश", + "psDisplayName": "पश्तो", + "ptDisplayName": "पुर्तगाली", + "ptBRDisplayName": "पुर्तगाली (ब्राज़ील)", + "ptPTDisplayName": "पुर्तगाली (पुर्तगाल)", + "quDisplayName": "केचुआ", + "rajDisplayName": "राजस्थानी", + "rnDisplayName": "रुंडी", + "roDisplayName": "रोमानियाई", + "roMDDisplayName": "मोल्डोवान", + "romDisplayName": "रोमानी", + "ruDisplayName": "रूसी", + "rwDisplayName": "किन्यारवांडा", + "saDisplayName": "संस्कृत", + "satDisplayName": "संताली", + "scnDisplayName": "सिसिलियन", + "sdDisplayName": "सिंधी", + "sgDisplayName": "सांगो", + "shnDisplayName": "शान", + "siDisplayName": "सिंहली", + "skDisplayName": "स्लोवाक", + "slDisplayName": "स्लोवेनियन", + "smDisplayName": "सामोअन", + "snDisplayName": "शोना", + "soDisplayName": "सोमाली", + "sqDisplayName": "अल्बानियाई", + "srDisplayName": "सर्बियाई", + "srMEDisplayName": "मॉन्टेनेग्रीन", + "ssDisplayName": "स्वाती", + "stDisplayName": "दक्षिणी सोथो", + "suDisplayName": "सुंडानीस", + "svDisplayName": "स्वीडिश", + "swDisplayName": "स्वाहिली", + "szlDisplayName": "सिलेशियन", + "taDisplayName": "तमिल", + "teDisplayName": "तेलुगु", + "tetDisplayName": "टेटम", + "tgDisplayName": "ताजिक", + "thDisplayName": "थाई", + "tiDisplayName": "तिग्रिन्या", + "tkDisplayName": "तुर्कमेन", + "tlDisplayName": "तागालोग", + "tnDisplayName": "त्स्वाना", + "trDisplayName": "तुर्की", + "tsDisplayName": "त्सोंगा", + "ttDisplayName": "तातार", + "ugDisplayName": "उइघुर", + "ukDisplayName": "यूक्रेनी", + "urDisplayName": "उर्दू", + "urINDisplayName": "उर्दू (भारत)", + "urPKDisplayName": "उर्दू (पाकिस्तान)", + "uzDisplayName": "उज़्बेक", + "viDisplayName": "वियतनामी", + "wuuDisplayName": "वू", + "xhDisplayName": "ज़ोसा", + "yiDisplayName": "यिडिश", + "yoDisplayName": "योरूबा", + "yuaDisplayName": "युकाटेको", + "yueDisplayName": "कैंटोनीज़", + "yueCNDisplayName": "कैंटोनीज़ (चीन)", + "yueHKDisplayName": "कैंटोनीज़ (हांगकांग)", + "zhDisplayName": "चीनी", + "zhCNDisplayName": "चीनी (सरलीकृत)", + "zhTWDisplayName": "चीनी (परंपरागत)", + "zuDisplayName": "जुलु", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12970,6 +11668,7 @@ "notStartedActivitiesTitle": "खुले सत्र ({num})", "inProgressActivitiesTitle": "अब हो रहा है ({num})", "completedActivitiesTitle": "पूरा हुआ ({num})", + "pickDifferentActivity": "एक अलग गतिविधि चुनें", "inOngoingActivity": "आपके पास एक चल रही गतिविधि है!", "@notStartedActivitiesTitle": { "type": "String", @@ -12995,10 +11694,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "आपकी लक्षित भाषा इस संदेश से मेल नहीं खाती। क्या आप अपनी लक्षित भाषा अपडेट करना चाहेंगे?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "यह इस पाठ्यक्रम में सभी लोग हैं। किसी भी उपयोगकर्ता के अवतार पर क्लिक करें और \"वार्तालाप शुरू करें\" पर क्लिक करें ताकि एक डीएम भेज सकें।", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "यह शब्द आपके विश्लेषण से स्थायी रूप से हटा दिया जाएगा", + "woman": "महिला", + "man": "पुरुष", + "otherGender": "अन्य", + "unselectedGender": "एक लिंग विकल्प चुनें", + "gender": "लिंग", + "chatParticipantTooltip": "यह इस चैट में सभी लोग हैं। किसी भी उपयोगकर्ता के अवतार पर क्लिक करें और \"वार्तालाप शुरू करें\" पर क्लिक करें ताकि एक डीएम भेजा जा सके।", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "लर्निंग टूल्स उन संदेशों के लिए बंद हैं जो आपकी लक्षित भाषा में नहीं हैं।", + "vocabEmoji": "शब्दावली इमोजी", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "पुनर्जनन का अनुरोध करें", + "optionalRegenerateReason": "(वैकल्पिक) कारण", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "आपने {lemma} के लिए इमोजी सेट किया है! हम आगे के अभ्यास गतिविधियों में इस इमोजी का उपयोग करेंगे।", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "साइन इन पूरा होने की प्रतीक्षा कर रहे हैं", + "ssoDialogDesc": "हमने एक नया टैब खोला है ताकि आप सुरक्षित रूप से साइन इन कर सकें।", + "ssoDialogHelpText": "🤔 यदि आपने नया टैब नहीं देखा, तो कृपया अपने पॉपअप ब्लॉकर की जांच करें।", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "भाषा उपकरणों को निष्क्रिय करें", + "disableLanguageToolsDesc": "क्या आप स्वचालित भाषा सहायता को निष्क्रिय करना चाहेंगे?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "अनुमति अस्वीकृत। ऑडियो संदेश रिकॉर्ड करने के लिए रिकॉर्डिंग अनुमतियाँ सक्षम करें।", + "genericWebRecordingError": "कुछ गलत हो गया। हम संदेश रिकॉर्ड करते समय क्रोम ब्राउज़र का उपयोग करने की सिफारिश करते हैं।", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "इस एप्लिकेशन का सर्वोत्तम अनुभव प्राप्त करने के लिए, कृपया अपनी स्क्रीन का आकार बढ़ाएँ।", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "अगले विषय को अनलॉक करने के लिए गतिविधियाँ", "activitiesToUnlockTopicDesc": "अगले पाठ्यक्रम विषय को अनलॉक करने के लिए गतिविधियों की संख्या निर्धारित करें", "@activitiesToUnlockTopicTitle": { @@ -13008,5 +11825,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "सही शब्दावली परिभाषा अभ्यास", + "constructUseIncLMDesc": "गलत शब्दावली परिभाषा अभ्यास", + "constructUseCorLADesc": "सही शब्दावली ऑडियो अभ्यास", + "constructUseIncLADesc": "गलत शब्दावली ऑडियो अभ्यास", + "constructUseBonus": "शब्दावली अभ्यास के दौरान बोनस", + "practiceVocab": "शब्दावली का अभ्यास करें", + "selectMeaning": "अर्थ चुनें", + "selectAudio": "मेल खाने वाला ऑडियो चुनें", + "congratulations": "बधाई हो!", + "anotherRound": "एक और राउंड", + "noActivityRequest": "कोई वर्तमान गतिविधि अनुरोध नहीं है।", + "quit": "बंद करें", + "congratulationsYouveCompletedPractice": "बधाई हो! आपने अभ्यास सत्र पूरा कर लिया है।", + "mustHave10Words": "आपके पास उन्हें अभ्यास करने के लिए कम से कम 10 शब्द होने चाहिए। अधिक जानने के लिए किसी मित्र या Pangea Bot से बात करने की कोशिश करें!", + "botSettings": "बॉट सेटिंग्स", + "activitySettingsOverrideWarning": "भाषा और भाषा स्तर गतिविधि योजना द्वारा निर्धारित किया गया है", + "voice": "स्वर", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 6d68adfba..a60833d29 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -1,6 +1,6 @@ { "@@locale": "hr", - "@@last_modified": "2026-01-06 13:01:21.058681", + "@@last_modified": "2026-01-07 14:24:33.836325", "about": "Informacije", "@about": { "type": "String", @@ -3134,26 +3134,14 @@ "commandHint_logoutall": "Odjavi sve aktivne uređaje", "displayNavigationRail": "Prikaži navigacijsku traku na mobitelu", "customReaction": "Prilagođena reakcija", - "accountInformation": "Informacije o računu", - "addGroupDescription": "Dodaj opis chata", - "addNewFriend": "Dodaj novog prijatelja", - "alreadyHaveAnAccount": "Već imate račun?", - "createNewGroup": "Stvori novi chat", - "editChatPermissions": "Uredi dozvole za chat", "writeAMessageLangCodes": "Upišite na {l1} ili {l2}...", "requests": "Zahtjevi", - "allCorrect": "Tako bih to rekao! Super!", - "newWayAllGood": "Nisam baš tako rekao, ali izgleda dobro!", - "othersAreBetter": "Hm, možda postoji bolji način da se to kaže.", "holdForInfo": "Kliknite i držite za informacije o riječi.", "greenFeedback": "To bih ja stavio!", "yellowFeedback": "Hm, možete pokušati s tim i vidjeti hoće li uspjeti! Da biste koristili ovu riječ, jednostavno je kliknite ponovno.", "redFeedback": "Mislim da to nije to...", "itInstructionsTitle": "Mogu vam pomoći s prijevodom!", "itInstructionsBody": "Možete kliknuti i držati odabire za informacije o riječi.", - "oneday": "Posljednja 24 sata", - "oneweek": "Zadnjih 7 dana", - "onemonth": "Prošli mjesec", "gaTooltip": "L2 korištenje s gramatičkom pomoći", "taTooltip": "L2 korištenje s prijevodnom pomoći", "unTooltip": "Ostalo", @@ -3163,58 +3151,27 @@ "interactiveTranslatorAllowed": "Izbor učenika", "interactiveTranslatorRequired": "Obavezno", "notYetSet": "Još nije postavljeno", - "myLearning": "Moja analiza", "waTooltip": "L2 korištenje bez pomoći", - "changeDateRange": "Promijeni raspon datuma", - "classDescription": "Opis", - "addStudents": "Pozovi korisnike putem poveznice ili koda", - "copyClassLink": "Kopiraj poveznicu za pozivnicu", - "copyClassCode": "Kopiraj kod za pozivnicu", - "inviteStudentByUserName": "Pozovi korisnike po korisničkom imenu", "languageSettings": "Postavke jezika", "interactiveTranslator": "Pomoć pri prevođenju", - "shareVideo": "Podijeli video", - "shareVideoDesc": "Uključite ovo kako biste omogućili učenicima dijeljenje videa u chatovima.", - "shareFiles": "Dijeli datoteke", - "selectLanguageLevel": "Odaberite razinu jezika", "noIdenticalLanguages": "Molimo odaberite različite izvornu i ciljnu jezike", - "iWantALanguagePartnerFrom": "Je iz:", - "worldWide": "Cijeli svijet", - "noResults": "Nema rezultata! Pokušajte proširiti pretraživanje.", "searchBy": "Pretraži po zemlji i jezicima", - "iWantAConversationPartner": "Želim partnera za razgovor koji", - "iWantALanguagePartnerWhoSpeaks": "Govori:", - "iWantALanguagePartnerWhoIsLearning": "Uči:", "joinWithClassCode": "Pridruži se tečaju", - "joinWithClassCodeHint": "Unesite pozivni kod", - "languageLevelPreA1": "Potpuni početnik (Pre A1)", - "languageLevelA1": "Početnik (A1)", - "languageLevelA2": "Osnovno (A2)", - "languageLevelB1": "Srednja razina (B1)", - "languageLevelB2": "Viša srednja razina (B2)", - "languageLevelC1": "Napredno (C1)", - "languageLevelC2": "Majstorski (C2)", + "languageLevelPreA1": "Novak Nizak (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Početni Visoki (A2)", + "languageLevelB1": "Srednji Srednji (B1)", + "languageLevelB2": "Napredni Niski (B2)", + "languageLevelC1": "Napredni Srednji (C1)", + "languageLevelC2": "Superiorni (C2)", "changeTheNameOfTheClass": "Promijeni ime", "changeTheNameOfTheChat": "Promijeni ime chata", - "askPangeaBot": "Pitaj Pangea Bota za kontekstualnu definiciju.", "sorryNoResults": "Oprostite, nema rezultata.", "ignoreInThisText": "Ignoriraj", - "helpMeTranslate": "Da!", - "needsItShortMessage": "Izvan cilja", "needsItMessage": "Čekaj, to nije {targetLanguage}! Trebate li pomoć s prevođenjem?", - "needsIgcMessage": "Ova poruka ima gramatičku pogrešku.", - "tokenTranslationTitle": "Riječ je na vašem osnovnom jeziku.", - "spanTranslationDesc": "Pogledajte moguće prijevode ispod.", - "spanTranslationTitle": "Neke riječi su na vašem osnovnom jeziku.", - "l1SpanAndGrammarTitle": "Izvan ciljnog jezika", - "l1SpanAndGrammarDesc": "Ovo bi moglo biti na vašem osnovnom jeziku ili može biti gramatička pogreška.", - "otherTitle": "Imate pogrešku.", - "otherDesc": "Pogledajte moguće ispravke ispod.", "countryInformation": "Moja zemlja", - "myLanguages": "Moji osnovni i ciljni jezici", "targetLanguage": "Ciljani jezik", "sourceLanguage": "Osnovni jezik", - "languagesISpeak": "Jezici koje govorim", "updateLanguage": "Moji jezici", "whatLanguageYouWantToLearn": "Koji jezik želiš naučiti?", "whatIsYourBaseLanguage": "Koji je tvoj osnovni jezik?", @@ -3229,13 +3186,8 @@ "errorDisableLanguageAssistanceUserDesc": "Kliknite ovdje za ažuriranje postavki pomoći pri prevođenju i gramatici", "errorDisableITClassDesc": "Pomoć pri prevođenju je isključena za tečaj u kojem se nalazi ovaj chat.", "errorDisableIGCClassDesc": "Pomoć pri gramatici je isključena za tečaj u kojem se nalazi ovaj chat.", - "itIsDisabled": "Interaktivno prevođenje je onemogućeno", - "igcIsDisabled": "Interaktivno provjeravanje gramatici je onemogućeno", - "goToLearningSettings": "Idi na Postavke učenja", "error405Title": "Jezici nisu postavljeni", "error405Desc": "Molimo postavite svoje jezike u Glavnom izborniku > Postavke učenja.", - "loginOrSignup": "Prijavite se s", - "iAgreeToThe": "Slažem se s ", "termsAndConditions": "Uvjetima i odredbama", "andCertifyIAmAtLeast13YearsOfAge": " i potvrđujem da imam najmanje 16 godina.", "error502504Title": "Vau, puno je učenika online!", @@ -3243,40 +3195,21 @@ "error404Title": "Greška u prijevodu!", "error404Desc": "Pangea Bot nije siguran kako to prevesti...", "errorPleaseRefresh": "Radimo na tome! Molimo osvježite i pokušajte ponovno.", - "toggleIT": "Interaktivni prijevod", - "toggleIGC": "Interaktivna provjera gramatike", - "toggleToolSettingsDescription": "Ovdje možete uključiti ili isključiti postavke pojedinačnih jezičnih alata.", "connectedToStaging": "Povezano sa Stagingom", "learningSettings": "Postavke učenja", - "sendVoiceNotes": "Pošalji glasovne bilješke", - "sendVoiceNotesDesc": "Uključite ovo da biste omogućili učenicima slanje glasovnih bilješki u chatovima.", - "chatTopic": "Tema chata", - "chatTopicDesc": "Postavite temu chata", - "inviteStudentByUserNameDesc": "Ako vaš student već ima račun, možete ga potražiti.", "participants": "Sudionici", - "almostPerfect": "Izgleda da je to točno! Evo što bih ja rekao.", - "prettyGood": "Prilično dobro! Evo što bih ja rekao.", - "letMeThink": "Hmm, pogledajmo kako si prošao!", "clickMessageTitle": "Trebaš pomoć?", "clickMessageBody": "Klikni na poruku za jezične alate poput prijevoda, reprodukcije i više!", - "understandingMessagesTitle": "Definicije i prijevodi!", - "understandingMessagesBody": "Klikni na podvučene riječi za definicije. Prevedi s opcijama poruka (gore desno).", "allDone": "Sve gotovo!", "vocab": "Vokabular", "low": "Imamo dokaze da korisnik ne razumije ove riječi.", "medium": "Ove riječi su korištene. Nije jasno jesu li riječi potpuno shvaćene ili ne.", "high": "Imamo dokaze da korisnik razumije ove riječi.", - "unknownProficiency": "Ove riječi nisu korištene u Pangea Chatu.", - "changeView": "Promijeni prikaz.", - "clearAll": "Očistiti sve riječi?", - "generateVocabulary": "Generiraj vokabular iz naslova i opisa", - "generatePrompts": "Generiraj poticaje", "subscribe": "Pretplatite se", "getAccess": "Pretplatite se sada!", "subscriptionDesc": "Poruke su besplatne! Pretplatite se za otključavanje interaktivnog prevođenja, provjere gramatike i analitike učenja.", "subscriptionManagement": "Upravljanje pretplatom", "currentSubscription": "Trenutna pretplata", - "changeSubscription": "Promijeni svoju pretplatu", "cancelSubscription": "Otkaži pretplatu", "selectYourPlan": "Odaberite svoj plan", "subsciptionPlatformTooltip": "Prijavite se na svoj originalni uređaj za upravljanje svojom pretplatom", @@ -3285,9 +3218,6 @@ "paymentHistory": "Povijest plaćanja", "emptyChatDownloadWarning": "Ne možete preuzeti prazan chat", "update": "Ažuriraj", - "updateDesc": "Sada možete ažurirati ovu aplikaciju s {localVersion} na {storeVersion}", - "maybeLater": "Možda kasnije", - "mainMenu": "Glavni izbornik", "toggleImmersionMode": "Način uranjanja", "toggleImmersionModeDesc": "Kad je uključen, sve poruke prikazuju se na vašem ciljanom jeziku. Ova postavka je najkorisnija u razmjenama jezika.", "itToggleDescription": "Ovaj alat za učenje jezika identificirat će riječi u vašem osnovnom jeziku i pomoći vam da ih prevedete na ciljani jezik. Iako rijetko, AI može napraviti pogreške u prijevodu.", @@ -3302,212 +3232,13 @@ "definitionsToolDescription": "Kad je omogućeno, riječi podvučene plavom bojom mogu se kliknuti za definicije. Kliknite na poruke za pristup definicijama.", "translationsToolDescrption": "Kad je omogućeno, kliknite na poruku i ikonu prijevoda da biste vidjeli poruku na vašem osnovnom jeziku.", "welcomeBack": "Dobro došli nazad! Ako ste sudjelovali u pilot projektu 2023-2024, kontaktirajte nas za vašu posebnu pilot pretplatu. Ako ste učitelj koji je (ili vaša institucija je) kupio licence za vašu razred, kontaktirajte nas za učiteljevu pretplatu.", - "kickAllStudents": "Izbaci sve učenike", - "kickAllStudentsConfirmation": "Jeste li sigurni da želite izbaciti sve učenike?", - "inviteAllStudents": "Pozovi sve učenike", - "inviteAllStudentsConfirmation": "Jeste li sigurni da želite pozvati sve učenike?", - "inviteUsersFromPangea": "Dodaj administratore", - "redeemPromoCode": "Iskoristi promotivni kod", - "enterPromoCode": "Unesite promotivni kod", "downloadTxtFile": "Preuzmi tekstualnu datoteku", "downloadCSVFile": "Preuzmi CSV datoteku", "promotionalSubscriptionDesc": "Trenutno imate doživotnu promotivnu pretplatu. Pošaljite poruku na support@pangea.chat za pomoć pri promjeni pretplate.", "originalSubscriptionPlatform": "Pretplata kupljena putem {purchasePlatform}", "oneWeekTrial": "Tjedan dana probnog razdoblja", "downloadXLSXFile": "Preuzmi Excel datoteku", - "abDisplayName": "Abhazijski", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanski", - "amDisplayName": "Amharski", - "arDisplayName": "Arapski", - "anDisplayName": "Aragonski", - "hyDisplayName": "Armenski", - "asDisplayName": "Asamski", - "avDisplayName": "Avarski", - "aeDisplayName": "Vestenski avestanski", - "ayDisplayName": "Ajmarski", - "azDisplayName": "Azerbejdžanski", - "bmDisplayName": "Bambara", - "baDisplayName": "Baškirski", - "euDisplayName": "Baskijski", - "beDisplayName": "Bjeloruski", - "bnDisplayName": "Bengalski", - "bhDisplayName": "Biharski", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosanski", - "brDisplayName": "Breton", - "bgDisplayName": "Bugarski", - "myDisplayName": "Burmanski", - "caDisplayName": "Katalonski, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Čečenski", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kineski", - "cvDisplayName": "Čuvaš", - "kwDisplayName": "Kornski", - "coDisplayName": "Korsikanski", - "crDisplayName": "Cree", - "hrDisplayName": "Hrvatski", - "csDisplayName": "Češki", - "daDisplayName": "Danski", - "dvDisplayName": "Divehi; Dhivehi; Maldivski;", - "nlDisplayName": "Nizozemski", - "enDisplayName": "Engleski", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonski", - "eeDisplayName": "Ewe", - "foDisplayName": "Farski", - "fjDisplayName": "Fijian", - "fiDisplayName": "Finski", - "frDisplayName": "Francuski", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicijski", - "kaDisplayName": "Gruzijski", - "deDisplayName": "Njemački", - "elDisplayName": "Grčki, moderni", - "gnDisplayName": "Gvarani", - "guDisplayName": "Gudžarati", - "htDisplayName": "Haitski, Haitijski kreolski", - "haDisplayName": "Hausanski", - "heDisplayName": "Hebrejski (moderni)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Mađarski", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonezijski", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irski", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandски", - "itDisplayName": "Talijanski", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japanski", - "jvDisplayName": "Javanski", - "klDisplayName": "Kalaallisut, grenlandski", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmirski", - "kkDisplayName": "Kazahstanski", - "kmDisplayName": "Khmerski", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizki, Kirgiski", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korejski", - "kuDisplayName": "Kurdski", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latinski", - "lbDisplayName": "Luksemburški, Letzeburgesch", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburški, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laoski", - "ltDisplayName": "Litvanski", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letonski", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonski", - "mgDisplayName": "Malgaški", - "msDisplayName": "Malajski", - "mlDisplayName": "Malajalam", - "mtDisplayName": "Malteški", - "miDisplayName": "Maorski", - "mrDisplayName": "Maratški (Marāṭhī)", - "mhDisplayName": "Maršalski", - "mnDisplayName": "Mongolski", - "naDisplayName": "Nauru", - "nvDisplayName": "Navaho, Navaho", - "nbDisplayName": "Norveški Bokmål", - "ndDisplayName": "Sjeverni Ndebele", - "neDisplayName": "Nepalski", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norveški Nynorsk", - "noDisplayName": "Norveški", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Južni Ndebele", - "ocDisplayName": "Okitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Stari crkveno slavensko, Crkveno slavensko, Crkveno slavenski, Stari bugarski, Stari slavenski", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Osetinski, Osetski", - "paDisplayName": "Pandžabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Perzijski", - "plDisplayName": "Poljski", - "psDisplayName": "Paštunski, Pushto", - "ptDisplayName": "Portugalski", - "quDisplayName": "Kečuanski", - "rmDisplayName": "Retoromanski", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumunjski, Moldavski, Moldovan", - "ruDisplayName": "Ruski", - "saDisplayName": "Sanskrit (Sanskṛta)", - "scDisplayName": "Sardinski", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sjeverni Sami", - "smDisplayName": "Samoanski", - "sgDisplayName": "Sango", - "srDisplayName": "Srpski", - "gdDisplayName": "Škotski gaelicki, gaelicki", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovački", - "slDisplayName": "Slovenski", - "soDisplayName": "Somalski", - "stDisplayName": "Južni Sotho", - "esDisplayName": "Španjolski", - "suDisplayName": "Sundanski", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Švedski", - "taDisplayName": "Tamilski", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžik", - "thDisplayName": "Tajlandski", - "tiDisplayName": "Tigrinja", - "boDisplayName": "Tibetanski standardni, tibetanski, središnji", - "tkDisplayName": "Turkmenski", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga ostrva)", - "trDisplayName": "Turski", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatarski", - "twDisplayName": "Twi", - "tyDisplayName": "Tahiški", - "ugDisplayName": "Ujgurski, Ujgurski", - "ukDisplayName": "Ukrajinski", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbečki", - "veDisplayName": "Venda", - "viDisplayName": "Vijetnamski", - "voDisplayName": "Volapük", - "waDisplayName": "Valonski", - "cyDisplayName": "Walijski", - "woDisplayName": "Wolof", - "fyDisplayName": "Zapadnofrizijski", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Nepoznato", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havajski", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Višejezično", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Zongkha", - "iwDisplayName": "Hebrejski", - "jwDisplayName": "Javanski", - "moDisplayName": "Moldavski", - "shDisplayName": "Srpskohrvatski", "wwCountryDisplayName": "Cijeli svijet", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Olandski otoci", @@ -3755,41 +3486,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambija", "zwCountryDisplayName": "Zimbabve", - "pay": "Plaćanje", - "allPrivateChats": "Privatni razgovori", - "unknownPrivateChat": "Nepoznati privatni razgovor", + "pay": "Checkout", "invitedToSpace": "{user} vas je pozvao da se pridružite tečaju: {space}! Želite li prihvatiti?", - "declinedInvitation": "Odbijen poziv", - "acceptedInvitation": "Prihvaćen poziv", "youreInvited": "📩 Pozvani ste!", "invitedToChat": "{user} vas je pozvao da se pridružite razgovoru: {name}! Želite li prihvatiti?", "monthlySubscription": "Mjesečno", "yearlySubscription": "Godišnje", "defaultSubscription": "Pangea Chat Pretplata", "freeTrial": "Besplatno probno razdoblje", - "grammarAnalytics": "Analiza pogrešaka", "total": "Ukupno: ", "noDataFound": "Nema pronađenih podataka", - "promoSubscriptionExpirationDesc": "Vaša trenutna pretplata je promotivna i istječe {expiration}. Pošaljite poruku na support@pangea.chat za pomoć pri promjeni pretplate.", - "emptyChatNameWarning": "Molimo unesite naziv za ovaj razgovor", "blurMeansTranslateTitle": "Zašto je poruka zamagljena?", "blurMeansTranslateBody": "Dok je Učinak uranjanja uključen, poruke koje se šalju na vašem osnovnom jeziku bit će zamagljene dok ih Pangea Bot ne prevede na vaš ciljni jezik. Učinak uranjanja može se uključiti ili isključiti u postavkama pojedinačnih i tečajeva.", - "someErrorTitle": "Hm, nešto nije u redu", - "someErrorBody": "To može biti pogreška ili nešto u vašem osnovnom jeziku.", "bestCorrectionFeedback": "To je točno!", "distractorFeedback": "Nije baš točno.", "bestAnswerFeedback": "To je točno!", "definitionDefaultPrompt": "Što znači ova riječ?", "practiceDefaultPrompt": "Koji je najbolji odgovor?", "correctionDefaultPrompt": "Koja je najbolja zamjena?", - "itStartDefaultPrompt": "Želite li pomoć pri prevođenju?", - "lockedChatWarning": "🔒 Ovaj chat je zaključan", - "lockChat": "Zaključaj chat", - "suggestToChat": "Predloži ovaj chat", - "suggestToChatDesc": "Predloženi chatovi će se pojaviti na popisima chatova", "acceptSelection": "Prihvati korekciju", - "acceptSelectionAnyway": "Koristi ovo ipak", - "makingActivity": "Izrada aktivnosti", "why": "Zašto?", "definition": "Definicija", "exampleSentence": "Primjer rečenice", @@ -3797,128 +3512,55 @@ "reportMessageTitle": "{reportingUserId} je prijavio poruku od {reportedUserId} u chatu {roomName}", "reportMessageBody": "Poruka: {reportedMessage}\nRazlog: {reason}", "noTeachersFound": "Nema nastavnika za prijavu", - "viewArchive": "Pogledaj arhivu", "trialExpiration": "Vaš besplatni probni rok istječe {expiration}", "freeTrialDesc": "Novi korisnici dobivaju tjedan dana besplatnog probnog razdoblja Pangea Chata", "activateTrial": "Aktiviraj besplatno 7-dnevno probno razdoblje", "successfullySubscribed": "Uspješno ste se pretplatili!", "clickToManageSubscription": "Kliknite ovdje za upravljanje pretplatom.", - "errorGettingAudio": "Greška pri dohvaćanju zvuka. Molimo osvježite i pokušajte ponovno.", "signUp": "Registriraj se", "pleaseChooseAtLeastChars": "Molimo odaberite najmanje {min} znakova.", "noEmailWarning": "Molimo unesite valjanu adresu e-pošte. Inače nećete moći resetirati lozinku. Ako ne želite, ponovno dodirnite gumb za nastavak.", "pleaseEnterValidEmail": "Molimo unesite valjanu adresu e-pošte.", "pleaseChooseAUsername": "Molimo odaberite korisničko ime", - "chooseAUsername": "Odaberite korisničko ime", "define": "Definiraj", "listen": "Slušaj", - "addConversationBot": "Omogući razgovorni bot", - "addConversationBotDesc": "Dodajte bota u ovaj chat", - "convoBotSettingsDescription": "Uredi temu razgovora i težinu", - "enterAConversationTopic": "Unesite temu razgovora", - "conversationTopic": "Tema razgovora", - "enableModeration": "Omogući moderaciju", - "enableModerationDesc": "Omogući automatsku moderaciju za pregled poruka prije slanja", - "conversationLanguageLevel": "Koja je razina jezika ovog razgovora?", - "showDefinition": "Prikaži definiciju", - "subscriptionPopupTitle": "Ova rečenica može imati gramatičku pogrešku...", - "subscriptionPopupDesc": "Pretplatite se danas za otključavanje prijevoda i ispravljanja gramatike!", - "seeOptions": "Pogledajte opcije", - "continuedWithoutSubscription": "Nastavi bez pretplate", "trialPeriodExpired": "Vaše probno razdoblje je isteklo", - "selectToDefine": "Kliknite bilo koju riječ za prikaz definicije!", "translations": "prijevodi", "messageAudio": "zvuk poruke", "definitions": "definicije", "subscribedToUnlockTools": "Pretplatite se za otključavanje interaktivnog prijevoda i provjere gramatike, reprodukcije zvuka, personaliziranih aktivnosti vježbanja i analitike učenja!", "translationTooltip": "Prevedi", - "audioTooltip": "Pusti zvuk", "speechToTextTooltip": "Transkript", - "certifyAge": "Potvrđujem da imam više od {age} godina", "kickBotWarning": "Izbacivanje Pangea Bota uklonit će chat bota iz ovog razgovora.", - "joinToView": "Pridružite se ovom prostoru za pregled detalja", "refresh": "Osvježi", - "autoPlayTitle": "Automatski reproduciraj poruke", - "autoPlayDesc": "Kad je omogućeno, tekst u govor audio poruka će se automatski reproducirati kada se odaberu.", "messageAnalytics": "Analitika poruka", "words": "Riječi", "score": "Rezultat", "accuracy": "Točnost", "points": "Bodovi", "noPaymentInfo": "Nije potrebna informacija o plaćanju!", - "conversationBotModeSelectDescription": "Aktivnost chata", - "conversationBotModeSelectOption_discussion": "Diskusija", - "conversationBotModeSelectOption_custom": "Prilagođeno", - "conversationBotModeSelectOption_conversation": "Razgovor", - "conversationBotModeSelectOption_textAdventure": "Tekstualna avantura", - "conversationBotModeSelectOption_storyGame": "Igra priče", - "conversationBotDiscussionZone_title": "Postavke rasprave", - "conversationBotDiscussionZone_discussionTopicLabel": "Tema rasprave", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Postavi temu rasprave", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Ključne riječi rasprave", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Postavi ključne riječi rasprave", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Popis ključnih riječi odvojenih zarezom za vođenje rasprave", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Slanje poticaja za raspravu prema rasporedu", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Sati između poticaja za raspravu", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Odgovara na reakciju ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakcija za slanje poticaja za raspravu", - "conversationBotCustomZone_title": "Prilagođena postavka", - "conversationBotCustomZone_customSystemPromptLabel": "Sistemski poticaj", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Postavi prilagođeni sistemski poticaj", - "conversationBotCustomZone_customSystemPromptEmptyError": "Nedostaje prilagođeni sistemski poticaj", - "botConfig": "Postavke bota i aktivnosti", - "botConfigNoPermissionTitle": "Nema dopuštenja", - "botConfigNoPermissionMessage": "Kontaktirajte administratora sobe za promjenu konfiguracije bota", - "addConversationBotDialogTitleInvite": "Potvrdi poziv bota za raspravu", - "addConversationBotButtonInvite": "Pozovi", - "addConversationBotDialogInviteConfirmation": "Pozovi", - "addConversationBotButtonTitleRemove": "Potvrdi uklanjanje razgovornog bota", - "addConversationBotButtonRemove": "Ukloni", - "addConversationBotDialogRemoveConfirmation": "Ukloni", - "conversationBotConfigConfirmChange": "Potvrdi", - "conversationBotStatus": "Pozovi bota", - "conversationBotTextAdventureZone_title": "Tekstualna avantura", - "conversationBotTextAdventureZone_instructionLabel": "Upute za voditelja igre", - "conversationBotTextAdventureZone_instructionPlaceholder": "Postavi upute za voditelja igre", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Nedostaju upute za voditelja igre", - "studentAnalyticsNotAvailable": "Podaci o učenicima trenutno nisu dostupni", - "roomDataMissing": "Neki podaci mogu nedostajati iz soba u kojima niste član.", "updatePhoneOS": "Možda ćete morati ažurirati verziju OS-a na svom uređaju.", "wordsPerMinute": "Riječi po minuti", "autoIGCToolName": "Automatski pokreni pomoć za pisanje Pangea", "autoIGCToolDescription": "Automatski pokreni pomoć za gramatiku i prijevod Pangea Chat prije slanja moje poruke.", - "runGrammarCorrection": "Provjeri poruku", - "grammarCorrectionFailed": "Problemi za rješavanje", - "grammarCorrectionComplete": "Izgleda dobro!", "tooltipInstructionsTitle": "Niste sigurni što to radi?", "tooltipInstructionsMobileBody": "Dugim pritiskom na stavke prikazuju se alati za pomoć.", "tooltipInstructionsBrowserBody": "Pomičite mišem preko stavki za prikazivanje saveta.", "chatCapacity": "Kapacitet chata", "roomFull": "Ova soba je već puna.", - "topicNotSet": "Tema nije postavljena.", - "chatCapacityNotSet": "Ovaj chat nema ograničenje kapaciteta.", "chatCapacityHasBeenChanged": "Kapacitet chata je promijenjen", "chatCapacitySetTooLow": "Kapacitet chata mora biti najmanje {count}.", "chatCapacityExplanation": "Kapacitet chata ograničava broj članova koji smiju biti u chatu.", - "chatExceedsCapacity": "Ovaj chat premašuje svoj kapacitet.", "tooManyRequest": "Previše zahtjeva, molimo pokušajte kasnije.", "enterNumber": "Molimo unesite cijeli broj.", "buildTranslation": "Izgradite svoj prijevod od gore navedenih opcija", - "nonexistentSelection": "Odabir više ne postoji.", - "changeAnalyticsLanguage": "Promijeni jezik analitike", "practice": "Vježba", "noLanguagesSet": "Nema postavljenih jezika", - "noActivitiesFound": "Dosta za sada! Vratite se kasnije za više.", - "hintTitle": "Savjet:", "speechToTextBody": "Za glasovne poruke, možete vidjeti transkript kao i rezultat govornika u riječima po minutu.", "versionNotFound": "Verzija nije pronađena", "fetchingVersion": "Preuzimanje verzije...", "versionFetchError": "Pogreška pri preuzimanju verzije", "versionText": "Verzija: {version}+{buildNumber}", - "languageButtonLabel": "Jezik: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatski prijevod", - "interactiveTranslatorAutoPlayDesc": "Pokreće interaktivni prevoditelj bez pitanja.", - "changeAnalyticsView": "Promijeni prikaz analitike", "l1TranslationBody": "Poruke na vašem osnovnom jeziku neće biti prevedene.", "deleteSubscriptionWarningTitle": "Imate aktivnu pretplatu", "deleteSubscriptionWarningBody": "Brisanje vašeg računa neće automatski otkazati vašu pretplatu.", @@ -3926,9 +3568,7 @@ "error520Title": "Pokušajte ponovno.", "error520Desc": "Oprostite, nismo mogli razumjeti vašu poruku...", "wordsUsed": "Riječi korištene", - "errorTypes": "Vrste pogrešaka", "level": "Razina", - "canceledSend": "Slanje otkazano", "morphsUsed": "Korišteni morfemi", "translationChoicesBody": "Kliknite i držite opciju za naznaku.", "grammar": "Gramatika", @@ -3938,7 +3578,6 @@ "reportContentIssueTitle": "Prijavi problem s sadržajem", "feedback": "Neobavezna povratna informacija", "reportContentIssueDescription": "Uh oh! AI može olakšati personalizirana iskustva učenja ali... također halucinira. Molimo vas da pružite bilo kakvu povratnu informaciju i pokušat ćemo ponovno.", - "changeContent": "Uh oh! AI može olakšati personalizirana iskustva učenja ali... također halucinira. Što bi to trebalo biti?", "clickTheWordAgainToDeselect": "Kliknite odabranu riječ da je odaberete.", "l2SupportNa": "Nije dostupno", "l2SupportAlpha": "Alpha", @@ -4172,7 +3811,6 @@ "grammarCopySPC": "Specifičnost", "grammarCopyPARTTYPE": "Vrsta djeljivosti", "grammarCopyINTREL": "Upitno-odnosno", - "grammarCopyNUMFORMpsor": "Broj posjednika", "grammarCopyUNKNOWN": "Nepoznato", "grammarCopyNUMBERPSOR": "Broj posjednika", "grammarCopyPOSS": "Posvojni", @@ -4218,28 +3856,14 @@ "grammarCopyVOICEdir": "Izravni", "grammarCopyVOICEinv": "Obrnuti", "grammarCopyVOICErcp": "Recipročno", - "enterPrompt": "Unesite sustavni poticaj", - "selectBotLanguage": "Odaberite jezik bota", - "chooseVoice": "Odaberite glas", - "enterLanguageLevel": "Unesite razinu jezika", - "enterDiscussionTopic": "Unesite temu rasprave", - "selectBotChatMode": "Odaberite način chata", - "messageNotInTargetLang": "Poruka nije na ciljanom jeziku", "other": "Ostalo", "levelShort": "RAV {level}", - "botModeValidation": "Molimo odaberite način chata", "clickBestOption": "Odaberite najbolje opcije za prevođenje vaše poruke!", "completeActivitiesToUnlock": "Dovršite barem jednu aktivnost za otključavanje prijevoda!", - "botSettingsSubtitle": "Pozovite bota da moderira aktivnost chata", - "invitePeople": "Pozovite korisnike", "noCapacityLimit": "Nema ograničenja kapaciteta", "downloadGroupText": "Preuzmi tekst grupe", "notificationsOn": "Obavijesti uključene", "notificationsOff": "Obavijesti isključene", - "chatCanBeFoundViaSearch": "Razgovor se može pronaći putem pretraživanja", - "requireCodeToJoin": "Za pridruživanje je potreban kod", - "canFindInSearch": "Može se pronaći u pretraživanju", - "addChatToSpace": "Dodaj razgovor", "createChatAndInviteUsers": "Stvori razgovor i pozovi korisnike", "updatedNewSpaceDescription": "Kursevi vam omogućuju da konsolidirate svoje razgovore i izgradite privatne ili javne zajednice.", "joinWithCode": "Pridruži se s kodom", @@ -4275,39 +3899,19 @@ "constructUseCollected": "Skupljeno u chatu", "constructUseNanDesc": "Nije primjenjivo", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Prijavite se s korisničkim imenom i lozinkom", - "registrationEmailMessage": "Molimo provjerite svoju e-poštu s poveznicom poslanom tamo. U nekim slučajevima, e-pošta može potrajati do 5 minuta da stigne. Također provjerite svoju mapu neželjene pošte.", "enableTTSToolName": "Omogućeno pretvaranje teksta u govor", "enableTTSToolDescription": "Dopustite aplikaciji da generira izlaz teksta u govor za dijelove teksta na vašem ciljanom jeziku.", - "couldNotFindTTS": "Nismo mogli pronaći engine za pretvaranje teksta u govor za vaš trenutni ciljani jezik.", - "ttsInstructionsHyperlink": "Kliknite ovdje za prikaz uputa za preuzimanje novog glasa na vašem uređaju.", - "createAnAccount": "Stvori račun", - "signIn": "Prijava", - "signUpWithEmail": "Prijavi se s e-poštom", - "signUpWithGoogle": "Prijavi se s Googleom", - "signUpWithApple": "Prijavi se s Appleom", "yourUsername": "Vaše korisničko ime", "yourEmail": "Vaša e-pošta", - "pleaseEnterAnEmail": "Unesite adresu e-pošte", - "signInWithGoogle": "Prijavi se s Googleom", - "signInWithApple": "Prijavi se s Appleom", - "chooseYourAvatar": "Odaberite svoj avatar", "iWantToLearn": "Želim naučiti", - "letsStart": "Počnimo", - "pleaseAgreeToTOS": "Molimo vas da se složite s Uvjetima i odredbama", "pleaseEnterEmail": "Molimo unesite valjanu adresu e-pošte.", - "pleaseSelectALanguage": "Molimo odaberite jezik", "myBaseLanguage": "Moj osnovni jezik", - "clickWordsInstructions": "🧻 Kliknite bilo koju riječ za detalje. 🤐", - "chooseBestDefinition": "Što znači ova riječ?", "meaningSectionHeader": "Značenje:", "formSectionHeader": "Obrasci korišteni u chatovima:", - "noEmojiSelectedTooltip": "Nije odabrana emoji", "writingExercisesTooltip": "Pisanje", "listeningExercisesTooltip": "Slušanje", "readingExercisesTooltip": "Čitanje", "meaningNotFound": "Značenje nije pronađeno.", - "formsNotFound": "Obrasci nisu pronađeni.", "chooseBaseForm": "Odaberite osnovni oblik", "notTheCodeError": "Oprostite, to nije kod!", "totalXP": "Ukupno XP", @@ -4347,9 +3951,6 @@ "pickAnEmoji": "Koji je tvoj omiljeni emoji za '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Uskladite značenja s riječima u poruci!", "doubleClickToEdit": "Dvostruki klik za uređivanje.", - "removeFeature": "Ukloni {feature}", - "chooseCorrectLabel": "Odaberite ispravnu oznaku.", - "levelPopupTitle": "Čestitamo na dostizanju\nRazine {level}", "activityPlannerTitle": "Planer aktivnosti", "topicLabel": "Tema", "topicPlaceholder": "Odaberite temu...", @@ -4357,7 +3958,6 @@ "modePlaceholder": "Odaberite način...", "learningObjectiveLabel": "Cilj učenja", "learningObjectivePlaceholder": "Odaberite cilj učenja...", - "mediaLabel": "Mediji koje učenici trebaju podijeliti", "languageOfInstructionsLabel": "Jezik uputa za aktivnost", "targetLanguageLabel": "Ciljani jezik", "cefrLevelLabel": "Razina CEFR-a", @@ -4372,20 +3972,15 @@ "instructions": "Upute", "numberOfLearners": "Broj učenika", "mustBeInteger": "Mora biti cijeli broj, npr. 1, 2, 3, ...", - "noLemmasFound": "Nema rječnika s više od {xp} XP. Nastavite vježbati!", "constructUsePvmDesc": "Proizvedeno u glasovnoj poruci", - "lockedMorphFeature": "Čeka na otključavanje", "leaveSpaceDescription": "Napustite tečaj, napustit ćete sve razgovore unutar njega. Ostali korisnici će vidjeti da ste napustili tečaj.", - "whatIsLemma": "Što je lemma?", "constructUseCorMmDesc": "Točno značenje poruke", "constructUseIncMmDesc": "Netočno značenje poruke", "constructUseIgnMmDesc": "Zanemareno značenje poruke", "clickForMeaningActivity": "Kliknite ovdje za izazov značenja", "meaning": "Značenje", "chatWith": "Grupa s {displayname}", - "slightlyOffensive": "Malo uvredljivo", "clickOnEmailLink": "Molimo kliknite na poveznicu u e-pošti i nastavite.\n\nProvjerite svoju mapu neželjene pošte ako e-pošta nije stigla.", - "whoIsAllowedToJoinThisChat": "Tko smije pristupiti ovom razgovoru", "dontForgetPassword": "Ne zaboravite svoju lozinku!", "enableAutocorrectToolName": "Omogući automatsko ispravljanje na uređaju", "enableAutocorrectDescription": "Ako vaš uređaj podržava jezik koji učite, možete omogućiti automatsko ispravljanje za ispravljanje uobičajenih pogrešaka dok kucate.", @@ -4413,48 +4008,26 @@ "autocorrectNotAvailable": "Nažalost, vaša platforma trenutno nije podržana za ovu značajku. Ostanite s nama za daljnji razvoj!", "pleaseUpdateApp": "Molimo ažurirajte aplikaciju za nastavak.", "chooseEmojiInstructionsBody": "Uskladite emojije s riječima koje najbolje predstavljaju. Ne brinite! Nema bodova za neslaganje. 😅", - "pickAnEmojiFor": "Odaberite emoji za {lemma}", "analyticsVocabListBody": "Ovo je sav vaš rječnik! Kako zaradite XP za svaku riječ, one će od sjemenke doći do punog cvata. Kliknite na bilo koju riječ za više detalja.", "morphAnalyticsListBody": "Ovo su svi gramatički koncepti u jeziku koji učite! Otključat ćete ih kako ih budete susretali tijekom razgovora. Kliknite za detalje.", "knockSpaceSuccess": "Zatražili ste pridruživanje ovom tečaju! Administrator će odgovoriti na vaš zahtjev kada ga primi. 😀", - "joinByCode": "Pridruži se putem koda", "chooseWordAudioInstructionsBody": "Slušajte cijelu poruku. Zatim uskladite audiozapise s riječima.", "chooseMorphsInstructionsBody": "Kliknite na komade slagalice za gramatička pitanja!", - "inviteAndLaunch": "Pozovi i pokreni", - "createOwnChat": "Stvori svoj chat", "pleaseEnterInt": "Unesite broj", "home": "Početna", "join": "Pridruži se", "readingAssistanceOverviewBody": "Kliknite na gumbe ispod za mini-igre u usklađivanju emojija, audiozapisa, značenja riječi i gramatičkih koncepata. Ili kliknite na bilo koju riječ za detalje.", - "learnByTexting": "Uči putem slanja poruka", - "levelSummaryTrigger": "Pogledajte sažetak", "levelSummaryPopupTitle": "Sažetak razine {level}", - "referFriends": "Preporuči prijatelje", - "referFriendDialogTitle": "Pozovi prijatelja u svoj razgovor", - "referFriendDialogDesc": "Imate li prijatelja koji je uzbuđen da nauči novi jezik s vama? Kopirajte i pošaljite ovu pozivnicu za pridruživanje i početak razgovora s vama danas.", - "youUnlocked": "Otključali ste", "resetInstructionTooltipsTitle": "Resetiraj upute za alatne trake", "resetInstructionTooltipsDesc": "Kliknite za prikaz uputa poput za potpuno novog korisnika.", "selectForGrammar": "Odaberite ikonu gramatike za aktivnosti i detalje.", - "newChatActivityTitle": "Dodajte zabavnu aktivnost?", - "newChatActivityDesc": "Učinite svaki grupni chat avanturom s Planerom aktivnosti! Postavite zanimljive teme i ciljeve za grupu, te oživite razgovore s zadivljujućim slikama. Potaknite maštovite rasprave i održavajte zabavu bez napora!", - "exploreMore": "Istraži više", "randomize": "Nasumično", "clear": "Očisti", "makeYourOwnActivity": "Stvori svoju aktivnost", "featuredActivities": "Istaknuto", - "goToChat": "Idi na chat", "save": "Spremi", - "selectActivity": "Odaberite aktivnost", - "wordFocusListeningMultipleChoice": "Koji audio odgovara riječi?", "startChat": "Započni chat", "translationProblem": "Problem s prijevodom", - "perfectTranslation": "Savršen prijevod!", - "greatJobTranslation": "Odlično odrađeno s ovim prijevodom!", - "goodJobTranslation": "Dobar posao s ovim prijevodom.", - "makingProgress": "Napredujete!", - "keepPracticing": "Nastavite vježbati!", - "niceJob": "Dobar posao!", "askToJoin": "Zatraži pridruživanje", "emptyChatWarningTitle": "Chat je prazan", "emptyChatWarningDesc": "Niste pozvali nikoga u svoj chat. Idite na postavke chata da pozovete svoje kontakte ili Bota. To možete učiniti i kasnije.", @@ -4473,8 +4046,6 @@ "languageLevelC2Desc": "Mogu razumjeti gotovo sve što čujem ili čitam i izražavati se tečno i precizno.", "newVocab": "Nove riječi", "newGrammar": "Novi gramatički koncepti", - "congratulationsOnReaching": "Čestitamo na dosezanju razine {level}!", - "seeDetails": "Vidi detalje", "choosePracticeMode": "Kliknite na jedno od gornjih gumba za početak vježbe", "ban": "Zabrani", "unban": "Ukloni zabranu", @@ -4488,8 +4059,6 @@ "timesUsedWithAssistance": "Broj korištenja uz pomoć", "shareInviteCode": "Podijeli pozivni kod: {code}", "leaderboard": "Ljestvica", - "welcomeUser": "Dobrodošao {user}", - "joinSpaceOnboardingDesc": "Imate li pozivni kod ili link do javnog tečaja?", "skipForNow": "Preskoči za sada", "permissions": "Dozvole", "spaceChildPermission": "Tko može dodati nove razgovore u ovaj tečaj", @@ -4497,12 +4066,8 @@ "defaultOption": "Zadano", "deleteChatDesc": "Jeste li sigurni da želite izbrisati ovaj razgovor? On će biti izbrisan za sve sudionike, a sve poruke unutar razgovora više neće biti dostupne za vježbanje ili analitiku učenja.", "deleteSpaceDesc": "Tečaj i svi odabrani razgovori bit će izbrisani za sve sudionike, a sve poruke unutar razgovora više neće biti dostupne za vježbanje ili analitiku učenja. Ova radnja se ne može poništiti.", - "chatWithActivities": "Razgovor s aktivnostima", "launch": "Pokreni", - "launchActivityToChats": "Pokreni aktivnost u razgovorima", "searchChats": "Pretraži razgovore", - "selectChats": "Odaberi razgovore", - "selectChatToStart": "Završeno! Odaberite razgovor za početak", "maxFifty": "Maksimalno 50", "configureSpace": "Konfiguriraj tečaj", "pinMessages": "Prikači poruke", @@ -4516,9 +4081,7 @@ "announcements": "Obavijesti", "activities": "Aktivnosti", "access": "Pristup", - "botSettings": "Postavke bota", "activitySuggestionTimeoutMessage": "Radimo na tome da vam pružimo više aktivnosti, molimo provjerite ponovo za minutu", - "accessSettingsWarning": "Ups! Čini se da nemate dopuštenje za postavljanje pravila pristupa ove sobe. Trebali biste provjeriti ove postavke kako biste bili sigurni da su ono što vam treba i razgovarati s administratorom sobe ako ih trebate promijeniti", "howSpaceCanBeFound": "Kako se može pronaći ovaj tečaj", "private": "Privatno", "cannotBeFoundInSearch": "Ne može se pronaći u pretraživanju", @@ -4531,16 +4094,6 @@ "canBeFoundViaKnock": "• zahtjeva za pridruživanje i odobrenja administratora", "youHaveLeveledUp": "Napredovali ste!", "sendActivities": "Pošalji aktivnosti", - "getStarted": "Započni", - "getStartedBotChatDesc": "Razgovor s AI-jem odlično je mjesto za početak, a alati za čitanje, pisanje, slušanje i govor Pangea olakšavaju to!", - "getStartedCommunitiesDesc": "Učenje s zajednicom je mjesto gdje Pangea Chat briljira!\nMožete se pridružiti svom razredu, pronaći tečaj ili čak napraviti svoj!", - "getStartedFriendsDesc": "Imate li prijatelja koji želi učiti s vama?", - "getStartedBotChatComplete": "Odlično! razgovarate s botom!", - "getStartedCommunitiesComplete": "Super, pridružili ste se tečaju!", - "getStartedComplete": "Završili ste ovaj odjeljak!\nNastavite istraživati naše nevjerovatne značajke razgovorom s prijateljima!", - "getStartedFriendsComplete": "Woohoo! Imate prijatelje! 😉", - "getStartedBotChatButton": "Započni razgovor!", - "getStartedFriendsButton": "Razgovaraj s prijateljem", "groupChat": "Grupni chat", "directMessage": "Izravna poruka", "newDirectMessage": "Nova izravna poruka", @@ -4556,7 +4109,6 @@ "mySavedActivities": "Moje spremljene aktivnosti", "noSavedActivities": "Nema spremljenih aktivnosti", "saveActivity": "Spremi ovu aktivnost", - "yourSavedActivities": "Spremljene aktivnosti", "failedToPlayVideo": "Neuspješno reproduciranje videa", "done": "Gotovo", "inThisSpace": "U ovom tečaju", @@ -4595,37 +4147,27 @@ "maximumActivityParticipants": "Svaka aktivnost može imati najviše {count} sudionik(a).", "pending": "Na čekanju", "inactive": "Neaktivno", - "unjoinedActivityMessage": "Želite li sudjelovati? Odaberite otvorenu ulogu!\nIli se družite i gledajte predstavu!", - "fullActivityMessage": "Slobodno gledajte predstavu! Dok nema otvorenih uloga za sudjelovanje, možete pregledavati chat!", "confirmRole": "Potvrdi ulogu", "openRoleLabel": "OTVORENO", "joinedTheActivity": "👋 {username} pridružio se kao {role}", "finishedTheActivity": "🎯 {username} završio ovu aktivnost", - "endActivityTitle": "Završio sam", - "endActivityDesc": "Jeste li dovršili ciljeve?\nOvo je vaša potvrda da se povlačite iz slanja poruka. Ali ne brinite, zabava se nastavlja u chatu! Slobodno se družite i uživajte u predstavi dok svi ne kliknu 'Završeno'.", "archiveToAnalytics": "Dodaj u moje dovršene aktivnosti", "activitySummaryError": "Sažeci aktivnosti nisu dostupni", "requestSummaries": "Zatraži sažetke", - "loadingActivitySummary": "Učitavanje sažetka aktivnosti...", "generatingNewActivities": "Vi ste prvi korisnik ovog para jezika! Molimo vas pričekajte minutu, pripremamo aktivnosti baš za vas.", - "requestAccessTitle": "Zatražiti pristup za prikaz analitike?", + "requestAccessTitle": "Zatraži pristup analitici?", "requestAccessDesc": "Želite li zatražiti pristup za prikaz analitike sudionika?\n\nAko se sudionici slože, administratori ovog tečaja moći će vidjeti njihove:\n • ukupni vokabular\n • ukupne gramatičke koncepte\n • ukupne završene sesije aktivnosti\n • specifične gramatičke koncepte korištene, ispravno i pogrešno\n\nNeće moći vidjeti njihove:\n • poruke u chatovima izvan tečaja\n • popis vokabulara", "requestAccess": "Zatraži pristup ({count})", "analyticsInactiveTitle": "Zahtjevi za neaktivne korisnike nisu mogli biti poslani", "analyticsInactiveDesc": "Neaktivni korisnici koji se nisu prijavili od kada je ova značajka uvedena neće vidjeti vaš zahtjev.\n\nGumb Zahtjev pojavit će se nakon njihovog povratka. Možete ponovno poslati zahtjev kasnije klikom na gumb Zahtjev ispod njihovog imena kada bude dostupan.", "accessRequestedTitle": "Zahtjev za pristup analitici", - "accessRequestedDesc": "Administratori “{space}” traže da vide vaše analitike učenja.\n\nAko se slažete, administratori ovog tečaja moći će vidjeti vaše:\n • ukupni vokabular\n • ukupne gramatičke koncepte\n • ukupne sesije aktivnosti završene\n • specifične gramatičke koncepte korištene, ispravno i pogrešno\n\nNeće moći vidjeti vaše:\n • poruke u razgovorima izvan tečaja\n • popis vokabulara", - "allowAccess": "Dopusti pristup", - "denyAccess": "Zabrani pristup", + "accessRequestedDesc": "Zatraženi administrator(i): {admin} \n\nAdministratori iz „{space}” traže pristup vašoj analitici učenja.\n\nAko se slažete, moći će vidjeti vaše:\n • ukupni vokabular\n • ukupni gramatički koncepti\n • ukupni završeni aktivnostni sesiji\n • specifični gramatički koncepti korišteni, ispravno i neispravno\n\nNeće moći vidjeti vaše:\n • poruke u chatovima izvan tečaja\n • popis vokabulara", "adminRequestedAccess": "Administratori su zatražili pristup vašoj analitici.", "lastUpdated": "Ažurirano\n{time}", "activityFinishedMessage": "Svi završili!", "endForAll": "Završi za sve", "newCourse": "Novi tečaj", - "newCourseSubtitle": "Koji plan tečaja želite koristiti?", - "failedToLoadCourses": "Neuspješno učitavanje tečajeva", "numModules": "{num} modula", - "numActivityPlans": "{num} planova aktivnosti", "coursePlan": "Plan tečaja", "editCourseLater": "Možete kasnije urediti naslov predloška, opise i sliku tečaja.", "newCourseAccess": "Prema zadanim postavkama, tečajevi su privatni i zahtijevaju odobrenje administratora za pridruživanje. Možete ove postavke urediti u bilo koje vrijeme.", @@ -4639,17 +4181,11 @@ "accessDesc": "Možete učiniti svoj tečaj otvorenim za svijet! Ili, učiniti svoj tečaj privatnim i sigurnim.", "createGroupChatDesc": "Dok sesije aktivnosti počinju i završavaju, grupni chatovi će ostati otvoreni za rutinsku komunikaciju.", "deleteDesc": "Samo administratori mogu izbrisati tečaj. Ovo je destruktivna radnja koja uklanja sve korisnike i briše sve odabrane chatove unutar tečaja. Budite oprezni.", - "failedToLoadCourseInfo": "Neuspješno učitavanje informacija o tečaju", "noCourseFound": "O, ovaj tečaj treba plan!\n\nPlanovi tečaja su niz tema i aktivnosti razgovora.", "additionalParticipants": "+ {num} drugih", - "activityNotFoundForCourse": "Ova aktivnost nije pronađena unutar tečaja", - "courseChats": "Chatovi tečaja", - "myActivitySessions": "Moje sesije aktivnosti", "directMessages": "Izravne poruke", "whatNow": "Što sada?", "chooseNextActivity": "Odaberite svoju sljedeću aktivnost!", - "seeInstructions": "Pogledajte upute", - "hideInstructions": "Sakrij upute", "letsGo": "Krenimo", "chooseRole": "Odaberite ulogu!", "chooseRoleToParticipate": "Odaberite ulogu za sudjelovanje!", @@ -4659,23 +4195,15 @@ "inviteFriends": "Pozovi prijatelje", "waitNotDone": "Čekaj, nisam završio!", "waitingForOthersToFinish": "Čekam da ostali završe...", - "saveToCompletedActivities": "Spremi u dovršene aktivnosti", "generatingSummary": "Analiziranje chata i generiranje rezultata", - "instructionsLanguage": "Jezik uputa", "findCourse": "Pronađi tečaj", - "activityCompletedDesc": "Vaša dovršena aktivnost dodana je u analitiku gdje možete pregledati i vježbati jezik koji ste koristili.", "pingParticipantsNotification": "{user} traži korisnike za pridruživanje sesiji aktivnosti u {room}", "course": "Tečaj", "courses": "Tečajevi", "courseName": "Naziv tečaja", "createNewCourse": "Novi tečaj", - "publicCourses": "Javni tečajevi", "goToCourse": "Idi na tečaj: {course}", "activityComplete": "Ova aktivnost je završena. Sažetak aktivnosti trebao bi biti dostupan u nastavku.", - "haventChattedMuch": "Izgleda da niste puno razgovarali, pokušajte koristiti još riječi! Ako osjećate da ste završili s ciljem, možete završiti aktivnost ispod.", - "haveChatted": "Izgleda da ste već neko vrijeme razgovarali! Ako osjećate da ste završili s ciljem, završite aktivnost i generirat ćemo vam sažetak u chatu!", - "userDoneAndWaiting": "{num1}/{num2} sudionika je završilo. Pričekajte da svi završe, a mi ćemo generirati sažetak u chatu! \n\nAko želite ponovno sudjelovati u razgovoru, kliknite na gumb za nastavak u chatu.", - "othersDoneAndWaiting": "{num1}/{num2} je završilo. Jeste li završili s ciljem?", "startNewSession": "Započni novu sesiju", "joinOpenSession": "Pridruži se otvorenoj sesiji", "less": "manje", @@ -4685,7 +4213,6 @@ "openToJoin": "Otvoreno za pridruživanje", "results": "Rezultati", "activityDone": "Aktivnost završena!", - "moreLabel": "više", "promoCodeInfo": "Kôdovi za popust mogu se unijeti na sljedećoj stranici", "editsComingSoon": "Mogućnost uređivanja gradova i aktivnosti uskoro stiže.", "editing": "Uređivanje", @@ -4701,13 +4228,10 @@ "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", - "chooseLanguage": "Odaberite jezik.", + "chooseLanguage": "Odaberite ciljani jezik.", "planTrip": "Isplanirajte svoje putovanje", "howAreYouTraveling": "Kako putujete?", "unlockPrivateTrip": "Otključajte privatno putovanje", @@ -4720,25 +4244,20 @@ "courseCode": "Koja je tajna lozinka?", "courseCodeHint": "Kod putovanja ili poveznica", "unlockMyTrip": "Otključaj moje putovanje", - "anyLevel": "Bilo koja razina", "signupOption": "Kako želiš da se prijaviš?", "withApple": "S Apple-om", "withGoogle": "S Google-om", "withEmail": "S e-mailom", "createAccount": "Kreiraj račun", - "noCoursesFound": "Nema pronađenih tečajeva", "loginWithEmail": "Prijava s e-mailom", "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", - "allCefrLevels": "Sve razine CEFR-a", "chatListTooltip": "Ovdje ćete pronaći svoje izravne poruke! Kliknite na avatar bilo kojeg korisnika i “započni razgovor” za slanje DM-a.", "directMessageBotTitle": "Direktna poruka Pangea Bota", "feedbackTitle": "Povratne informacije o aktivnosti", - "feedbackDesc": "Kako poboljšati aktivnost? Ako možete pružiti neke detalje, napravit ćemo promjenu!", "feedbackHint": "Vaše povratne informacije", "feedbackButton": "Pošalji povratne informacije", "directMessageBotDesc": "Razgovor s ljudima je zabavniji, ali... AI je uvijek spreman!", @@ -5377,30 +4896,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5416,18 +4911,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5452,18 +4935,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5500,38 +4971,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5540,62 +4983,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5632,10 +5031,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5644,14 +5039,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5660,46 +5047,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5708,10 +5059,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5768,18 +5115,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5788,14 +5123,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5824,18 +5151,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5844,42 +5159,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5888,14 +5171,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5916,26 +5191,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5956,10 +5211,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5992,25 +5243,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6067,34 +5299,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6123,778 +5327,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7887,14 +6323,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7906,14 +6334,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7945,10 +6365,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7957,18 +6373,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7977,14 +6381,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8009,38 +6405,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8086,10 +6454,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8114,10 +6478,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8142,10 +6502,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8154,66 +6510,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8234,42 +6534,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8294,154 +6570,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8458,18 +6586,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8490,14 +6606,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8514,10 +6622,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8530,14 +6634,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8546,14 +6642,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8581,26 +6669,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8629,18 +6697,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8677,10 +6737,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9613,10 +7669,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9797,34 +7849,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9837,10 +7861,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9849,14 +7869,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9873,22 +7885,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10036,14 +8032,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10052,34 +8040,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10088,54 +8048,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10144,10 +8068,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10164,10 +8084,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10339,26 +8255,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10387,10 +8283,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10447,30 +8339,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10499,18 +8375,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10627,14 +8495,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10647,10 +8507,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10659,14 +8515,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10683,14 +8531,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10699,22 +8539,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10727,18 +8551,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10755,22 +8567,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10779,30 +8579,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10875,18 +8651,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10943,18 +8707,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10983,30 +8735,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11059,18 +8795,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11119,46 +8847,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11223,10 +8911,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11398,14 +9082,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11433,14 +9109,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11453,10 +9121,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11492,19 +9156,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11529,14 +9188,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11545,14 +9196,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11605,10 +9248,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11621,18 +9260,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11645,14 +9272,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11693,26 +9312,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11740,10 +9347,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11754,36 +9357,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11820,10 +9393,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11888,18 +9457,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11964,10 +9521,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11988,10 +9541,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12008,10 +9557,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12020,10 +9565,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12036,10 +9577,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12064,16 +9601,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Pozovite prijatelje na aktivnost", - "inviteFriendsToActivityCourse": "Pozovite prijatelje na aktivnost i tečaj", "feedbackRespDesc": "Vratite se sutra za ažuriranja aktivnosti.", "activityDropdownDesc": "Kad završite s ovom aktivnošću, kliknite ispod", - "activityAnalyticsListBody": "Ovo su vaše dovršene aktivnosti! Nakon završetka aktivnosti, možete ih pogledati ovdje.", "languageMismatchTitle": "Neusklađenost jezika", "languageMismatchDesc": "Vaš ciljni jezik ne odgovara jeziku ove aktivnosti. Želite li ažurirati svoj ciljni jezik?", "reportWordIssueTooltip": "Prijavite problem s informacijama o riječi", "tokenInfoFeedbackDialogTitle": "Povratne informacije o informacijama o riječi", - "tokenInfoFeedbackDialogDesc": "AI pravi pogreške. Molimo opišite sve probleme koje ste pronašli s gornjim informacijama.", "noPublicCoursesFound": "Nema pronađenih javnih tečajeva. Želite li ga stvoriti?", "noCourseTemplatesFound": "Nismo uspjeli pronaći tečajeve za vaš ciljni jezik. U međuvremenu možete razgovarati s Pangea Botom, a kasnije provjeriti ima li novih tečajeva.", "botActivityJoinFailMessage": "Pangea Bot se malo duže priprema za odgovor. Molimo pokušajte ponovno kasnije ili pozovite prijatelja.", @@ -12081,14 +9614,6 @@ "leaveDesc": "Napusti ovaj prostor i sve razgovore unutar njega", "selectAll": "Odaberi sve", "deselectAll": "Odznači sve", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12097,10 +9622,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12117,10 +9638,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12154,7 +9671,6 @@ "newMessageInPangeaChat": "💬 Nova poruka u Pangea chatu", "shareCourse": "Podijeli tečaj", "addCourse": "Dodaj tečaj", - "joinCourseWithCode": "Pridruži se tečaju s kodom", "joinPublicCourse": "Pridruži se javnom tečaju", "vocabLevelsDesc": "Ovdje će ići riječi vokabulara nakon što ih podignete na višu razinu!", "highlightVocabTooltip": "Istaknite ciljne riječi ispod tako da ih pošaljete ili vježbate s njima u chatu", @@ -12178,10 +9694,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12190,7 +9702,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nema DM-ova ili razgovora. Provjerite je li vaša pretraga ispravno napisana.", + "activityAnalyticsTooltipBody": "Ovo su vaše spremljene aktivnosti za pregled i vježbu.", + "numSavedActivities": "Broj spremljenih aktivnosti", + "saveActivityTitle": "Spremi aktivnost", + "saveActivityDesc": "Dobar posao! Spremite ovu aktivnost za kasniji pregled i vježbu", + "levelInfoTooltip": "Ovdje možete vidjeti sve bodove koje ste zaradili i kako!", + "alreadyInCourseWithID": "Već ste u tečaju s ovim planom. Želite li stvoriti tečaj s istim planom ili otići na postojeći tečaj?", + "goToExistingCourse": "Idite na postojeći tečaj", + "emojiView": "Prikaz emojija", + "feedbackDialogDesc": "I ja griješim! Ima li nešto što bi mi pomoglo da se poboljšam?", + "contactHasBeenInvitedToTheCourse": "Kontakt je pozvan na tečaj", + "activityStatsButtonTooltip": "Informacije o aktivnosti", + "allow": "Dopusti", + "deny": "Odbij", + "enabledRenewal": "Omogući obnavljanje pretplate", + "subscriptionEndsOn": "Pretplata završava", + "subscriptionRenewsOn": "Pretplata se obnavlja", + "waitForSubscriptionChanges": "Promjene na vašoj pretplati mogu potrajati trenutak da se odraze u aplikaciji.", + "subscribeReadingAssistance": "Pretplatite se za otključavanje alata za poruke", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharski", + "arDisplayName": "Arapski", + "asDisplayName": "Asamski", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbejdžanski", + "baDisplayName": "Baškirski", + "banDisplayName": "Balinežanski", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bjeloruski", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bugarski", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalski", + "bnBDDisplayName": "Bengalski (Bangladeš)", + "bnINDisplayName": "Bengalski (Indija)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosanski", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalonski", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centralni kurdski", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsičanin", + "crhDisplayName": "Krimski turski", + "crsDisplayName": "Seselwa kreolski francuski", + "csDisplayName": "Češki", + "cvDisplayName": "Čuvaški", + "cyDisplayName": "Velški", + "daDisplayName": "Danski", + "deDisplayName": "Njemački", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Engleski", + "enAUDisplayName": "Engleski (Australija)", + "enGBDisplayName": "Engleski (UK)", + "enINDisplayName": "Engleski (Indija)", + "enUSDisplayName": "Engleski (SAD)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Španjolski", + "esESDisplayName": "Španjolski (Španija)", + "esMXDisplayName": "Španjolski (Meksiko)", + "euDisplayName": "Baskijski", + "faDisplayName": "Perzijski", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finski", + "filDisplayName": "Filipinski", + "fjDisplayName": "Fidžijski", + "foDisplayName": "Faroški", + "frDisplayName": "Francuski", + "frCADisplayName": "Francuski (Kanada)", + "frFRDisplayName": "Francuski (Francuska)", + "fyDisplayName": "Zapadni Frisijski", + "gaDisplayName": "Irski", + "gaaDisplayName": "Ga", + "gdDisplayName": "Škotski galski", + "glDisplayName": "Galicijski", + "gnDisplayName": "Gvajanski", + "gomDisplayName": "Goanski Konkani", + "guDisplayName": "Gujarat", + "haDisplayName": "Hausa", + "hawDisplayName": "Havajski", + "heDisplayName": "Hebrejski", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Hrvatski", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitski kreolski", + "huDisplayName": "Mađarski", + "hyDisplayName": "Armenski", + "idDisplayName": "Indonezijski", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandski", + "itDisplayName": "Talijanski", + "jaDisplayName": "Japanski", + "jvDisplayName": "Javanski", + "kaDisplayName": "Gruzijski", + "kkDisplayName": "Kazahstanski", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Korejski", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kašmirski", + "ktuDisplayName": "Kituba (Demokratska Republika Kongo)", + "kuDisplayName": "Kurdsky", + "kyDisplayName": "Kirgizski", + "laDisplayName": "Latinski", + "lbDisplayName": "Luksemburški", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburški", + "lijDisplayName": "Ligurijski", + "lmoDisplayName": "Lombardski", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litvanac", + "ltgDisplayName": "Latgalski", + "luoDisplayName": "Luo (Kenija i Tanzanija)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvijski", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaški", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonski", + "mlDisplayName": "Malajalamski", + "mnDisplayName": "Mongolski", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malajski", + "msArabDisplayName": "Malajski (arapski)", + "msMYDisplayName": "Malajski (Malezija)", + "mtDisplayName": "Malteški", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmanski", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norveški (Bokmål)", + "neDisplayName": "Nepalski", + "newDisplayName": "Njuarski", + "nlDisplayName": "Nizozemski", + "nlBEDisplayName": "Flamanski", + "noDisplayName": "Norveški", + "nrDisplayName": "Južni Ndebele", + "nsoDisplayName": "Sjeverni Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitanski", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poljski", + "psDisplayName": "Paštunski", + "ptDisplayName": "Portugalski", + "ptBRDisplayName": "Portugalski (Brazil)", + "ptPTDisplayName": "Portugalski (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumunjski", + "roMDDisplayName": "Moldavski", + "romDisplayName": "Romani", + "ruDisplayName": "Ruski", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilijanski", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovački", + "slDisplayName": "Slovenski", + "smDisplayName": "Samoanski", + "snDisplayName": "Shona", + "soDisplayName": "Somalski", + "sqDisplayName": "Albanski", + "srDisplayName": "Srpski", + "srMEDisplayName": "Crnogorski", + "ssDisplayName": "Svati", + "stDisplayName": "Južni Sotho", + "suDisplayName": "Sundanski", + "svDisplayName": "Švedski", + "swDisplayName": "Svahili", + "szlDisplayName": "Silezijski", + "taDisplayName": "Tamilski", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadžik", + "thDisplayName": "Tajski", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turski", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Ujgurski", + "ukDisplayName": "Ukrajinski", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indija)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbečki", + "viDisplayName": "Vijetnamski", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukatec", + "yueDisplayName": "Kantonski", + "yueCNDisplayName": "Kantonski (Kina)", + "yueHKDisplayName": "Kantonski (Hong Kong)", + "zhDisplayName": "Kineski", + "zhCNDisplayName": "Kineski ( pojednostavljeni)", + "zhTWDisplayName": "Kineski (tradicionalni)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12255,6 +10953,7 @@ "placeholders": {} }, "notStartedActivitiesTitle": "Otvorene sesije ({num})", + "pickDifferentActivity": "Odaberite drugu aktivnost", "inProgressActivitiesTitle": "Trenutno se događa ({num})", "completedActivitiesTitle": "Završeno ({num})", "inOngoingActivity": "Imate aktivnost koja traje!", @@ -12282,10 +10981,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaš ciljni jezik se ne podudara s ovom porukom. Želite li ažurirati svoj ciljni jezik?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ovo su svi u ovom tečaju. Kliknite na avatar bilo kojeg korisnika i \"započni razgovor\" da pošaljete DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ova riječ će biti trajno uklonjena iz vaših analitika", + "woman": "Žena", + "man": "Muškarac", + "otherGender": "Ostalo", + "unselectedGender": "Odaberite opciju spola", + "gender": "Spol", + "chatParticipantTooltip": "Ovo su svi u ovom chatu. Kliknite na avatar bilo kojeg korisnika i \"započnite razgovor\" da pošaljete DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Alati za učenje su onemogućeni za poruke koje nisu na vašem ciljanom jeziku.", + "vocabEmoji": "Emoji za vokabular", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Zatraži regeneraciju", + "optionalRegenerateReason": "(Opcionalno) Razlog", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Postavili ste emoji za {lemma}! Ovaj emoji ćemo koristiti za predstavljanje riječi u praktičnim aktivnostima ubuduće.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Čekanje na dovršetak prijave", + "ssoDialogDesc": "Otvorili smo novu karticu kako biste se mogli sigurno prijaviti.", + "ssoDialogHelpText": "🤔 Ako niste vidjeli novu karticu, provjerite svoj blokator iskačućih prozora.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Onemogući alate za jezik", + "disableLanguageToolsDesc": "Želite li onemogućiti automatsku jezičnu pomoć?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Dozvola odbijena. Omogućite dozvole za snimanje kako biste snimili audio poruke.", + "genericWebRecordingError": "Nešto je pošlo po zlu. Preporučujemo korištenje Chrome preglednika prilikom snimanja poruka.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Za najbolje iskustvo korištenja ove aplikacije, molimo vas da povećate veličinu svog ekrana.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivnosti za otključavanje sljedeće teme", "activitiesToUnlockTopicDesc": "Postavite broj aktivnosti za otključavanje sljedeće teme tečaja", "@activitiesToUnlockTopicTitle": { @@ -12295,5 +11112,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Ispravna praksa definicije vokabulara", + "constructUseIncLMDesc": "Neispravna praksa definicije vokabulara", + "constructUseCorLADesc": "Ispravna praksa audio vokabulara", + "constructUseIncLADesc": "Neispravna praksa audio vokabulara", + "constructUseBonus": "Bonus tijekom prakse vokabulara", + "practiceVocab": "Vježbajte vokabular", + "selectMeaning": "Odaberite značenje", + "selectAudio": "Odaberite odgovarajući audio", + "congratulations": "Čestitamo!", + "anotherRound": "Još jedan krug", + "noActivityRequest": "Nema trenutnog zahtjeva za aktivnost.", + "quit": "Izlaz", + "congratulationsYouveCompletedPractice": "Čestitamo! Završili ste sesiju vježbanja.", + "mustHave10Words": "Morate imati najmanje 10 riječi za vokabular kako biste ih vježbali. Pokušajte razgovarati s prijateljem ili Pangea Botom kako biste otkrili više!", + "botSettings": "Postavke Bota", + "activitySettingsOverrideWarning": "Jezik i razina jezika određeni planom aktivnosti", + "voice": "Glas", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index ed306f5b2..3683bcbe0 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -1,6 +1,6 @@ { "@@locale": "hu", - "@@last_modified": "2026-01-06 13:01:08.359844", + "@@last_modified": "2026-01-07 14:23:56.196432", "about": "Névjegy", "@about": { "type": "String", @@ -3378,26 +3378,14 @@ "commandHint_logoutall": "Kijelentkezés minden aktív eszközről", "displayNavigationRail": "Navigációs sáv megjelenítése mobilon", "customReaction": "Egyedi reakció", - "accountInformation": "Fiók információk", - "addGroupDescription": "Csevegés leírásának hozzáadása", - "addNewFriend": "Új barát hozzáadása", - "alreadyHaveAnAccount": "Már van fiókod?", - "createNewGroup": "Új csoport létrehozása", - "editChatPermissions": "Csevegési jogosultságok szerkesztése", "writeAMessageLangCodes": "Írj {l1} vagy {l2} nyelven...", "requests": "Kérések", - "allCorrect": "Így mondanám! Szuper!", - "newWayAllGood": "Nem így mondanám, de jól néz ki!", - "othersAreBetter": "Hm, lehet, hogy van jobb módja ennek a kifejezésnek.", "holdForInfo": "Kattints és tartsd lenyomva a szó információjáért.", "greenFeedback": "Ezt írnám ide!", "yellowFeedback": "Hm, kipróbálhatod, hogy működik-e! A szó használatához egyszerűen kattints rá újra.", "redFeedback": "Nem hiszem, hogy ez helyes...", "itInstructionsTitle": "Segíthetek a fordításban!", "itInstructionsBody": "Kattintson és tartsa lenyomva a választásokat a szó információiért.", - "oneday": "Az elmúlt 24 óra", - "oneweek": "Az elmúlt 7 nap", - "onemonth": "Elmúlt hónap", "gaTooltip": "L2 használata nyelvtani segítséggel", "taTooltip": "L2 használata fordítási segítséggel", "unTooltip": "Egyéb", @@ -3407,58 +3395,27 @@ "interactiveTranslatorAllowed": "Diák választása", "interactiveTranslatorRequired": "Kötelező", "notYetSet": "Még nincs beállítva", - "myLearning": "Saját Elemzéseim", "waTooltip": "L2 segítség nélkül", - "changeDateRange": "Dátumtartomány módosítása", - "classDescription": "Leírás", - "addStudents": "Felhasználók meghívása link vagy kód segítségével", - "copyClassLink": "Meghívó link másolása", - "copyClassCode": "Meghívó kód másolása", - "inviteStudentByUserName": "Felhasználók meghívása felhasználónév szerint", "languageSettings": "Nyelvi beállítások", "interactiveTranslator": "Fordítási segítség", - "shareVideo": "Videó megosztása", - "shareVideoDesc": "Kapcsold be ezt, hogy a diákok videókat oszthassanak meg a csevegésekben.", - "shareFiles": "Fájlok megosztása", - "selectLanguageLevel": "Válassza ki a nyelvi szintet", "noIdenticalLanguages": "Kérjük, válasszon különböző alap- és célnyelvet", - "iWantALanguagePartnerFrom": "Származik innen:", - "worldWide": "Világszerte", - "noResults": "Nincs eredmény! Próbálja meg bővíteni a keresést.", "searchBy": "Keresés ország és nyelv szerint", - "iWantAConversationPartner": "Szeretnék beszélgetőpartnert, aki", - "iWantALanguagePartnerWhoSpeaks": "Beszél:", - "iWantALanguagePartnerWhoIsLearning": "Tanul:", "joinWithClassCode": "Csatlakozás kurzushoz", - "joinWithClassCodeHint": "Írja be a meghívókódot", - "languageLevelPreA1": "Igazi kezdő (Pre A1)", - "languageLevelA1": "Kezdő (A1)", - "languageLevelA2": "Alapfok (A2)", - "languageLevelB1": "Középhaladó (B1)", - "languageLevelB2": "Felsőközéphaladó (B2)", - "languageLevelC1": "Haladó (C1)", - "languageLevelC2": "Mesterfokú (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Kezdő Magas (A2)", + "languageLevelB1": "Középfok Közepes (B1)", + "languageLevelB2": "Felsőfok Alacsony (B2)", + "languageLevelC1": "Felsőfok Közepes (C1)", + "languageLevelC2": "Kiváló (C2)", "changeTheNameOfTheClass": "Név módosítása", "changeTheNameOfTheChat": "A chat nevének módosítása", - "askPangeaBot": "Kérdezze meg a Pangea Botot egy kontextuális meghatározásért.", "sorryNoResults": "Sajnálom, nincs eredmény.", "ignoreInThisText": "Figyelmen kívül hagy", - "helpMeTranslate": "Igen!", - "needsItShortMessage": "Cél nélkül", "needsItMessage": "Várj, ez nem {targetLanguage}! Szükséged van segítségre a fordításban?", - "needsIgcMessage": "Ez az üzenet nyelvtani hibát tartalmaz.", - "tokenTranslationTitle": "Egy szó a bázis nyelveden van.", - "spanTranslationDesc": "Lásd az alábbi lehetséges fordításokat.", - "spanTranslationTitle": "Néhány szó a bázis nyelveden van.", - "l1SpanAndGrammarTitle": "Külső cél nyelv", - "l1SpanAndGrammarDesc": "Ez lehet a bázis nyelveden, vagy nyelvtani hiba.", - "otherTitle": "Hibád van.", - "otherDesc": "Lásd az alábbi lehetséges javításokat.", "countryInformation": "Országom", - "myLanguages": "Alap- és célnyelvem", "targetLanguage": "Célnyelv", "sourceLanguage": "Alapnyelv", - "languagesISpeak": "Beszélt nyelvek", "updateLanguage": "Nyelveim", "whatLanguageYouWantToLearn": "Milyen nyelvet szeretnél megtanulni?", "whatIsYourBaseLanguage": "Mi az alapnyelved?", @@ -3473,13 +3430,8 @@ "errorDisableLanguageAssistanceUserDesc": "Kattints ide a fordítási és nyelvtani segítség beállításainak frissítéséhez", "errorDisableITClassDesc": "A fordítási segítség kikapcsolva van az adott kurzushoz tartozó csevegésben.", "errorDisableIGCClassDesc": "A nyelvtani segítség kikapcsolva van az adott kurzushoz tartozó csevegésben.", - "itIsDisabled": "Az Interaktív Fordítás le van tiltva", - "igcIsDisabled": "Interaktív nyelvtani ellenőrzés le van tiltva", - "goToLearningSettings": "Menj a Tanulási Beállításokhoz", "error405Title": "Nyelvek nincsenek beállítva", "error405Desc": "Kérjük, állítsa be nyelveit a Főmenü > Tanulási Beállítások menüpontban.", - "loginOrSignup": "Jelentkezz be a", - "iAgreeToThe": "Elfogadom a ", "termsAndConditions": "Felhasználási feltételeket", "andCertifyIAmAtLeast13YearsOfAge": " és igazolom, hogy legalább 16 éves vagyok.", "error502504Title": "Hűha, sok diák van online!", @@ -3487,40 +3439,21 @@ "error404Title": "Fordítási hiba!", "error404Desc": "A Pangea Bot nem biztos benne, hogyan fordítsa ezt...", "errorPleaseRefresh": "Ellenőrizzük a problémát! Kérjük, frissítse az oldalt és próbálja újra.", - "toggleIT": "Interaktív fordítás", - "toggleIGC": "Interaktív nyelvtani ellenőrzés", - "toggleToolSettingsDescription": "Itt beállíthatja az egyéni nyelvi eszköz beállításokat.", "connectedToStaging": "Csatlakozva a Staginghez", "learningSettings": "Tanulási beállítások", - "sendVoiceNotes": "Hangjegyek küldése", - "sendVoiceNotesDesc": "Kapcsold be ezt, hogy a diákok hangjegyeket küldhessenek a csevegésekben.", - "chatTopic": "Csevegés témája", - "chatTopicDesc": "Állítson be egy csevegési témát", - "inviteStudentByUserNameDesc": "Ha a diákjának már van fiókja, keresheti őt.", "participants": "Résztvevők", - "almostPerfect": "Ez úgy tűnik, helyes! Íme, amit mondanék.", - "prettyGood": "Elég jó! Íme, amit mondanék.", - "letMeThink": "Hmm, nézzük meg, hogyan ment!", "clickMessageTitle": "Segítségre van szükséged?", "clickMessageBody": "Kattints egy üzenetre nyelvi eszközökért, például fordításért, visszajátszásért és másért!", - "understandingMessagesTitle": "Definíciók és fordítások!", - "understandingMessagesBody": "Kattints az aláhúzott szavakra definíciókért. Fordítás üzenet opciókkal (jobb felső sarok).", "allDone": "Kész!", "vocab": "Szókincs", "low": "Bizonyítékaink vannak arra, hogy a felhasználó nem érti ezeket a szavakat.", "medium": "Ezeket a szavakat használták. Nem világos, hogy teljesen értik-e a szavakat vagy sem.", "high": "Bizonyítékaink vannak arra, hogy a felhasználó érti ezeket a szavakat.", - "unknownProficiency": "Ezeket a szavakat nem használták a Pangea Chatben.", - "changeView": "Váltson nézetet.", - "clearAll": "Törölje az összes szót?", - "generateVocabulary": "Szókincs generálása a cím és a leírás alapján", - "generatePrompts": "Kérdések generálása", "subscribe": "Feliratkozás", "getAccess": "Feliratkozás most!", "subscriptionDesc": "Az üzenetküldés ingyenes! Feliratkozással hozzáférést kapsz az interaktív fordításhoz, nyelvtani ellenőrzéshez és tanulási elemzésekhez.", "subscriptionManagement": "Előfizetés kezelése", "currentSubscription": "Jelenlegi előfizetés", - "changeSubscription": "Előfizetés módosítása", "cancelSubscription": "Előfizetés lemondása", "selectYourPlan": "Válassza ki tervét", "subsciptionPlatformTooltip": "Kérjük, jelentkezzen be eredeti eszközén az előfizetés kezelése érdekében", @@ -3529,9 +3462,6 @@ "paymentHistory": "Fizetési előzmények", "emptyChatDownloadWarning": "Üres beszélgetés nem tölthető le", "update": "Frissítés", - "updateDesc": "Most frissítheti az alkalmazást a {localVersion} verzióról a {storeVersion} verzióra", - "maybeLater": "Talán később", - "mainMenu": "Főmenü", "toggleImmersionMode": "Merülés mód", "toggleImmersionModeDesc": "Bekapcsolva minden üzenet a célnyelven jelenik meg. Ez a beállítás különösen hasznos nyelvi csere során.", "itToggleDescription": "Ez a nyelvtanulási eszköz felismeri a bázisnyelved szavait, és segít lefordítani azokat a célnyelvedre. Bár ritka, az AI hibázhat a fordításban.", @@ -3546,213 +3476,14 @@ "definitionsToolDescription": "Amikor be van kapcsolva, a kék színnel aláhúzott szavakat kattintással lehet megtekinteni definícióikat. Kattints az üzenetekre a definíciók eléréséhez.", "translationsToolDescrption": "Amikor be van kapcsolva, kattints egy üzenetre és a fordítás ikonra, hogy megtekinthesd az üzenetet a bázisnyelveden.", "welcomeBack": "Üdvözlünk vissza! Ha részt vettél a 2023-2024-es pilot programban, kérjük, vedd fel velünk a kapcsolatot a különleges pilot előfizetésedért. Ha te vagy az oktató, aki (vagy az intézményed) vásárolt licencet az osztályod számára, kérjük, vedd fel velünk a kapcsolatot az oktatói előfizetésedért.", - "kickAllStudents": "Összes diák kizárása", - "kickAllStudentsConfirmation": "Biztos vagy benne, hogy ki akarod zárni az összes diákot?", - "inviteAllStudents": "Minden diáknak meghívás küldése", - "inviteAllStudentsConfirmation": "Biztos vagy benne, hogy minden diáknak szeretnéd küldeni a meghívót?", - "inviteUsersFromPangea": "Adminok hozzáadása", - "redeemPromoCode": "Promóciós kód beváltása", - "enterPromoCode": "Promóciós kód megadása", "downloadTxtFile": "Szövegfájl letöltése", "downloadCSVFile": "CSV fájl letöltése", "promotionalSubscriptionDesc": "Jelenleg életre szóló promóciós előfizetésed van. Segítségért írj az support@pangea.chat címre az előfizetés módosításához.", "originalSubscriptionPlatform": "Előfizetés a {purchasePlatform} platformon vásárolva", "oneWeekTrial": "Egynapos próbaverzió", "downloadXLSXFile": "Excel fájl letöltése", - "abDisplayName": "Abház", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albán", - "amDisplayName": "Amharai", - "arDisplayName": "Arab", - "anDisplayName": "Aragón", - "hyDisplayName": "Örmény", - "asDisplayName": "Asszámi", - "avDisplayName": "Avar", - "aeDisplayName": "Avesta", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbajdzsáni", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Baszk", - "beDisplayName": "Fehérorosz", - "bnDisplayName": "Bengáli", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnyák", - "brDisplayName": "Breton", - "bgDisplayName": "Bolgár", - "myDisplayName": "Burmai", - "caDisplayName": "Katalán, Valencián", - "chDisplayName": "Chamorro", - "ceDisplayName": "Csecsen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kínai", - "cvDisplayName": "Csuvas", - "kwDisplayName": "Kornish", - "coDisplayName": "Korzika", - "crDisplayName": "Cree", - "hrDisplayName": "Horvát", - "csDisplayName": "Cseh", - "daDisplayName": "Dán", - "dvDisplayName": "Divehi; Dhivehi; Maldív-szigeteki;", - "nlDisplayName": "Holland", - "enDisplayName": "Angol", - "eoDisplayName": "Eszperantó", - "etDisplayName": "Észt", - "eeDisplayName": "Ewe", - "foDisplayName": "Feröeri", - "fjDisplayName": "Fidzsi", - "fiDisplayName": "Finn", - "frDisplayName": "Francia", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galiciai", - "kaDisplayName": "Grúz", - "deDisplayName": "Német", - "elDisplayName": "Görög, modern", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gudzsaráti", - "htDisplayName": "Haiti", "res": {}, - "haDisplayName": "Hausza", - "heDisplayName": "Modern héber", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Magyar", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonéz", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Ír", - "igDisplayName": "Ibo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "izlandi", - "itDisplayName": "olasz", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japán", - "jvDisplayName": "Jávai", - "klDisplayName": "Grönlandi, kalaallisut", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazah", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongói", - "koDisplayName": "Koreai", - "kuDisplayName": "Kurdisz", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxemburgi, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgi, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laoszi", - "ltDisplayName": "Litván", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "lett nyelv", - "gvDisplayName": "Manx", - "mkDisplayName": "macedón", - "mgDisplayName": "madagaszkári", - "msDisplayName": "maláj", - "mlDisplayName": "malajálam", - "mtDisplayName": "máltai", - "miDisplayName": "māori", - "mrDisplayName": "maráthi (Marāṭhī)", - "mhDisplayName": "Marshall-szigeteki", - "mnDisplayName": "mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "norvég bokmål", - "ndDisplayName": "észak-ndebele", - "neDisplayName": "nepáli", - "ngDisplayName": "ndonga", - "nnDisplayName": "norvég Nynorsk", - "noDisplayName": "norvég", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Dél-Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Ószláv, Egyházi Szláv, Ószláv, Óbolgár, Ószláv", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Osset, Ossetic", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Perzsa", - "plDisplayName": "Lengyel", - "psDisplayName": "Pastu, Pusztó", - "ptDisplayName": "Portugál", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Román, Moldáv, Moldován", - "ruDisplayName": "Orosz", - "saDisplayName": "Szanszkrit (Saṃskṛta)", - "scDisplayName": "Szardíniai", - "sdDisplayName": "Sindhi", - "seDisplayName": "És északi sami", - "smDisplayName": "Szamoai", - "sgDisplayName": "Sango", - "srDisplayName": "Szerb", - "gdDisplayName": "Skót gael, gael", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, szinhaléz", - "skDisplayName": "Szlovák", - "slDisplayName": "Szlovén", - "soDisplayName": "Szomáliai", - "stDisplayName": "Dél-szoto", - "esDisplayName": "Spanyol", - "suDisplayName": "Szundanéz", - "swDisplayName": "Szuahéli", - "ssDisplayName": "Szvati", - "svDisplayName": "Svéd", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tádzsik", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibeti Standard, Tibeti, Közép", - "tkDisplayName": "Türkmén", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga-szigetek)", - "trDisplayName": "Török", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatár", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Ujgur, Ujgur", - "ukDisplayName": "Ukrán", - "urDisplayName": "Urdu", - "uzDisplayName": "Uszbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnami", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Walesi", - "woDisplayName": "Wolof", - "fyDisplayName": "Nyugat-fríz", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddis", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Ismeretlen", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawai'i", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Többnyelvű", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Héber", - "jwDisplayName": "Jávai", - "moDisplayName": "Moldáv", - "shDisplayName": "Szerb-Croata", "wwCountryDisplayName": "Világszerte", "afCountryDisplayName": "Afganisztán", "axCountryDisplayName": "Aland-szigetek", @@ -4000,41 +3731,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Fizetés", - "allPrivateChats": "Közvetlen beszélgetések", - "unknownPrivateChat": "Ismeretlen privát beszélgetés", + "pay": "Checkout", "invitedToSpace": "{user} meghívott, hogy csatlakozzon egy kurzushoz: {space}! Elfogadod?", - "declinedInvitation": "Meghívás elutasítva", - "acceptedInvitation": "Meghívás elfogadva", "youreInvited": "📩 Meghívtak!", "invitedToChat": "{user} meghívott, hogy csatlakozzon egy beszélgetéshez: {name}! Elfogadod?", "monthlySubscription": "Havi", "yearlySubscription": "Éves", "defaultSubscription": "Pangea Chat Előfizetés", "freeTrial": "Ingyenes próbaverzió", - "grammarAnalytics": "Hibák elemzése", "total": "Összesen: ", "noDataFound": "Nincs adat", - "promoSubscriptionExpirationDesc": "A jelenlegi előfizetésed promóciós, és {expiration} napján jár le. Segítségért írj az support@pangea.chat címre.", - "emptyChatNameWarning": "Kérjük, adj meg egy nevet ennek a csetnek", "blurMeansTranslateTitle": "Miért homályos a üzenet?", "blurMeansTranslateBody": "Amíg az Immersion Mode be van kapcsolva, a bázis nyelveden küldött üzenetek homályosak lesznek, miközben a Pangea Bot lefordítja őket a célnyelvedre. Az Immersion Mode külön beállításként kapcsolható az egyéni és kurzus beállításokban.", - "someErrorTitle": "Hm, valami nem stimmel", - "someErrorBody": "Lehet, hogy hiba történt, vagy valami a bázis nyelveden.", "bestCorrectionFeedback": "Ez helyes!", "distractorFeedback": "Ez nem egészen helyes.", "bestAnswerFeedback": "Ez helyes!", "definitionDefaultPrompt": "Mit jelent ez a szó?", "practiceDefaultPrompt": "Mi a legjobb válasz?", "correctionDefaultPrompt": "Mi a legjobb helyettesítés?", - "itStartDefaultPrompt": "Szeretnél segítséget a fordításhoz?", - "lockedChatWarning": "🔒 Ez a cset zárolva van", - "lockChat": "Zárolja a csetet", - "suggestToChat": "Javasoljon ezt a csetet", - "suggestToChatDesc": "A javasolt csetek megjelennek a csetlistákban", "acceptSelection": "Helyesbítés elfogadása", - "acceptSelectionAnyway": "Használd ezt mindenképp", - "makingActivity": "Tevékenység készítése", "why": "Miért?", "definition": "Definíció", "exampleSentence": "Példa mondat", @@ -4042,128 +3757,55 @@ "reportMessageTitle": "{reportingUserId} jelentett egy üzenetet a(z) {reportedUserId} felhasználótól a(z) {roomName} csoportban", "reportMessageBody": "Üzenet: {reportedMessage}\nOk: {reason}", "noTeachersFound": "Nincs tanár, akinek jelenthetnél", - "viewArchive": "Archívum megtekintése", "trialExpiration": "Az ingyenes próbálkozásod lejár {expiration}", "freeTrialDesc": "Új felhasználók egy hetes ingyenes próbát kapnak a Pangea Chat alkalmazáshoz", "activateTrial": "Ingyenes 7 napos próba", "successfullySubscribed": "Sikeresen feliratkoztál!", "clickToManageSubscription": "Kattints ide a feliratkozás kezelése érdekében.", - "errorGettingAudio": "Hiba az audio letöltésekor. Kérjük, frissítsd az oldalt és próbáld újra.", "signUp": "Regisztráció", "pleaseChooseAtLeastChars": "Kérjük, válassz legalább {min} karaktert.", "noEmailWarning": "Kérjük, adj meg egy érvényes e-mail címet. Ellenkező esetben nem tudod majd visszaállítani a jelszavadat. Ha nem szeretnéd, érintsd meg újra a gombot a folytatáshoz.", "pleaseEnterValidEmail": "Kérjük, adj meg egy érvényes e-mail címet.", "pleaseChooseAUsername": "Kérjük, válassz felhasználónevet", - "chooseAUsername": "Válassz felhasználónevet", "define": "Határozza meg", "listen": "Hallgasd meg", - "addConversationBot": "Beszélgetési bot hozzáadása", - "addConversationBotDesc": "Adj hozzá egy botot ehhez a beszélgetéshez", - "convoBotSettingsDescription": "Személyre szabhatod a beszélgetés témáját és nehézségi szintjét", - "enterAConversationTopic": "Írj be egy beszélgetési témát", - "conversationTopic": "Beszélgetési téma", - "enableModeration": "Moderálás engedélyezése", - "enableModerationDesc": "Automatikus moderálás engedélyezése az üzenetek átnézéséhez, mielőtt elküldésre kerülnének", - "conversationLanguageLevel": "Milyen nyelvi szinten van ez a beszélgetés?", - "showDefinition": "Mutasd a meghatározást", - "subscriptionPopupTitle": "Ez a mondat tartalmazhat nyelvtani hibát...", - "subscriptionPopupDesc": "Iratkozz fel ma, hogy hozzáférj a fordításhoz és a nyelvtani javításhoz!", - "seeOptions": "Opciók megtekintése", - "continuedWithoutSubscription": "Folytatás előfizetés nélkül", "trialPeriodExpired": "A próbaverziód lejárt", - "selectToDefine": "Kattints bármelyik szóra, hogy megtekinthesd a meghatározását!", "translations": "fordítások", "messageAudio": "üzenet hangja", "definitions": "meghatározások", "subscribedToUnlockTools": "Feliratkozás az interaktív fordítás és nyelvtani ellenőrzés, hang lejátszás, személyre szabott gyakorlati tevékenységek és tanulási elemzések feloldásához!", "translationTooltip": "Fordítás", - "audioTooltip": "Hang lejátszása", "speechToTextTooltip": "Átirat", - "certifyAge": "Igazolom, hogy betöltöttem {age} évemet", "kickBotWarning": "A Pangea Bot kirúgása eltávolítja a beszélgetési botot ebből a csevegésből.", - "joinToView": "Csatlakozz ehhez a szobához a részletek megtekintéséhez", "refresh": "Újratöltés", - "autoPlayTitle": "Automatikus lejátszás üzenetek", - "autoPlayDesc": "Bekapcsolva az automatikus lejátszás, a szöveg-beszéd hang automatikusan lejátszódik, amikor kiválasztják.", "messageAnalytics": "Üzenet elemzések", "words": "Szavak", "score": "Pontszám", "accuracy": "Pontosság", "points": "Pontok", "noPaymentInfo": "Nincs szükség fizetési adatokra!", - "conversationBotModeSelectDescription": "Csevegési tevékenység", - "conversationBotModeSelectOption_discussion": "Vita", - "conversationBotModeSelectOption_custom": "Egyedi", - "conversationBotModeSelectOption_conversation": "Beszélgetés", - "conversationBotModeSelectOption_textAdventure": "Szöveges kaland", - "conversationBotModeSelectOption_storyGame": "Történet játék", - "conversationBotDiscussionZone_title": "Vita beállítások", - "conversationBotDiscussionZone_discussionTopicLabel": "Vita témája", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Állítsa be a vita témáját", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Vita kulcsszavak", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Állítsa be a vita kulcsszavait", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Vesszővel elválasztott kulcsszavak listája a vita irányításához", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Vitaindító küldése ütemezve", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Órák a vitaindítók között", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reagálás ⏩ reakcióra", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakció a vitaindító küldéséhez", - "conversationBotCustomZone_title": "Egyedi beállítások", - "conversationBotCustomZone_customSystemPromptLabel": "Rendszerüzenet", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Állítson be egyedi rendszerüzenetet", - "conversationBotCustomZone_customSystemPromptEmptyError": "Hiányzik az egyedi rendszerüzenet", - "botConfig": "Bot és tevékenység beállítások", - "botConfigNoPermissionTitle": "Nincs jogosultság", - "botConfigNoPermissionMessage": "Kapcsolat a szoba adminisztrátorával a bot konfigurációjának módosításához", - "addConversationBotDialogTitleInvite": "Erősítse meg a beszélgetési bot meghívását", - "addConversationBotButtonInvite": "Meghívás", - "addConversationBotDialogInviteConfirmation": "Meghívás", - "addConversationBotButtonTitleRemove": "A beszélgetés botjának eltávolításának megerősítése", - "addConversationBotButtonRemove": "Eltávolítás", - "addConversationBotDialogRemoveConfirmation": "Eltávolítás", - "conversationBotConfigConfirmChange": "Megerősítés", - "conversationBotStatus": "Meghívó bot", - "conversationBotTextAdventureZone_title": "Szöveges kaland", - "conversationBotTextAdventureZone_instructionLabel": "Játékmester utasításai", - "conversationBotTextAdventureZone_instructionPlaceholder": "Állítsa be a játékmester utasításait", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Hiányzó játékmester utasítások", - "studentAnalyticsNotAvailable": "A diákadatok jelenleg nem érhetők el", - "roomDataMissing": "Előfordulhat, hogy néhány adat hiányzik a szobákból, amelyekhez nem tartozik tagság.", "updatePhoneOS": "Előfordulhat, hogy frissítenie kell az eszköz operációs rendszerét.", "wordsPerMinute": "Szavak száma percenként", "autoIGCToolName": "A Pangea írássegéd automatikus futtatása", "autoIGCToolDescription": "Automatikusan futtassa a Pangea Chat nyelvtani és fordítási írássegédet az üzenetem küldése előtt.", - "runGrammarCorrection": "Üzenet ellenőrzése", - "grammarCorrectionFailed": "Problémák megoldandók", - "grammarCorrectionComplete": "Jól néz ki!", "tooltipInstructionsTitle": "Nem biztos benne, mit csinál ez?", "tooltipInstructionsMobileBody": "Hosszan nyomja meg az elemeket a súgók megtekintéséhez.", "tooltipInstructionsBrowserBody": "Húzza az egérrel az elemek fölé a súgók megtekintéséhez.", "chatCapacity": "Csevegési kapacitás", "roomFull": "Ez a szoba már megtelt.", - "topicNotSet": "A téma nincs beállítva.", - "chatCapacityNotSet": "Ennek a csevegésnek nincs kapacitáskorlátja.", "chatCapacityHasBeenChanged": "A csevegési kapacitás megváltozott", "chatCapacitySetTooLow": "A csevegési kapacitásnak legalább {count} kell legyen.", "chatCapacityExplanation": "A csevegési kapacitás korlátozza a csevegésben részt vevő tagok számát.", - "chatExceedsCapacity": "Ez a csevegés meghaladja a kapacitását.", "tooManyRequest": "Túl sok kérés, kérjük, próbálja meg később.", "enterNumber": "Kérjük, írjon be egy egész szám értéket.", "buildTranslation": "Építse fel fordítását a fenti lehetőségek alapján", - "nonexistentSelection": "A kiválasztás már nem létezik.", - "changeAnalyticsLanguage": "Elemzési nyelv módosítása", "practice": "Gyakorlat", "noLanguagesSet": "Nincs beállított nyelv", - "noActivitiesFound": "Ez elég most! Gyere vissza később többért.", - "hintTitle": "Tipp:", "speechToTextBody": "Hangüzenetek esetén látható egy átirat, valamint a beszélő Szavak Per Perc (WPM) pontszáma.", "versionNotFound": "Verzió nem található", "fetchingVersion": "Verzió lekérése...", "versionFetchError": "Hiba a verzió lekérésekor", "versionText": "Verzió: {version}+{buildNumber}", - "languageButtonLabel": "Nyelv: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatikus fordítás lejátszása", - "interactiveTranslatorAutoPlayDesc": "Elindítja az interaktív fordítót kérdés nélkül.", - "changeAnalyticsView": "Elemzési nézet módosítása", "l1TranslationBody": "Az alapnyelveden írt üzenetek nem lesznek fordítva.", "deleteSubscriptionWarningTitle": "Aktív előfizetésed van", "deleteSubscriptionWarningBody": "Fiókod törlése nem törli automatikusan az előfizetésedet.", @@ -4171,9 +3813,7 @@ "error520Title": "Kérjük, próbáld újra.", "error520Desc": "Sajnáljuk, nem értettük üzenetedet...", "wordsUsed": "Használt szavak", - "errorTypes": "Hibák típusai", "level": "Szint", - "canceledSend": "Küldés megszakítva", "morphsUsed": "Használt morfémák", "translationChoicesBody": "Kattintson és tartsa lenyomva a lehetőséget egy tippért.", "grammar": "Nyelvtan", @@ -4183,7 +3823,6 @@ "reportContentIssueTitle": "Tartalomhiba bejelentése", "feedback": "Opcionális visszacsatolás", "reportContentIssueDescription": "Hoppá! A MI képes személyre szabott tanulási élményeket nyújtani, de... hallucinál is. Kérjük, adja meg visszacsatolását, és megpróbáljuk újra.", - "changeContent": "Hoppá! A MI képes személyre szabott tanulási élményeket nyújtani, de... hallucinál is. Mit szeretne?", "clickTheWordAgainToDeselect": "Kattintson az kiválasztott szóra, hogy törölje a kijelölést.", "l2SupportNa": "Nem elérhető", "l2SupportAlpha": "Alfa", @@ -4417,7 +4056,6 @@ "grammarCopySPC": "Specifikusság", "grammarCopyPARTTYPE": "Részleges típus", "grammarCopyINTREL": "Kérdő-Relatív", - "grammarCopyNUMFORMpsor": "Birtokos száma", "grammarCopyUNKNOWN": "Ismeretlen", "grammarCopyNUMBERPSOR": "Birtokos száma", "grammarCopyPOSS": "Birtokos", @@ -4463,28 +4101,14 @@ "grammarCopyVOICEdir": "Közvetlen", "grammarCopyVOICEinv": "Ellentétes", "grammarCopyVOICErcp": "Reciproka", - "enterPrompt": "Kérjük, írjon be egy rendszerüzenetet", - "selectBotLanguage": "Válassza ki a bot nyelvét", - "chooseVoice": "Válasszon hangot", - "enterLanguageLevel": "Kérjük, írja be a nyelvi szintet", - "enterDiscussionTopic": "Kérjük, írja be a beszélgetés témáját", - "selectBotChatMode": "Válassza ki a chat módot", - "messageNotInTargetLang": "Az üzenet nem a célnyelven van", "other": "Egyéb", "levelShort": "SZINT {level}", - "botModeValidation": "Kérjük, válasszon chat módot", "clickBestOption": "Válassza ki a legjobb lehetőségeket az üzenet fordításához!", "completeActivitiesToUnlock": "Fejezzen be legalább egy tevékenységet a fordítás feloldásához!", - "botSettingsSubtitle": "Meghívó bot a csevegés moderálásához", - "invitePeople": "Felhasználók meghívása", "noCapacityLimit": "Nincs kapacitáskorlát", "downloadGroupText": "Csoport szöveg letöltése", "notificationsOn": "Értesítések be", "notificationsOff": "Értesítések ki", - "chatCanBeFoundViaSearch": "A chat kereséssel megtalálható", - "requireCodeToJoin": "Kód megadása a csatlakozáshoz", - "canFindInSearch": "Kereséssel megtalálható", - "addChatToSpace": "Chat hozzáadása a térhez", "createChatAndInviteUsers": "Chat létrehozása és felhasználók meghívása", "updatedNewSpaceDescription": "A kurzusok lehetővé teszik, hogy konszolidáld a csevegéseidet és privát vagy nyilvános közösségeket építs.", "joinWithCode": "Csatlakozás kóddal", @@ -4520,39 +4144,19 @@ "constructUseCollected": "Gyűjtve a chatben", "constructUseNanDesc": "Nem alkalmazható", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Bejelentkezés felhasználónévvel és jelszóval", - "registrationEmailMessage": "Kérjük, erősítse meg e-mail címét egy ott küldött linken keresztül. Egyes esetekben az e-mail akár 5 percet is késhet. Kérjük, ellenőrizze a spam mappát is.", "enableTTSToolName": "Szöveg-beszéd engedélyezve", "enableTTSToolDescription": "Engedélyezi az alkalmazásnak, hogy szöveg-beszéd kimenetet generáljon a célnyelv szövegrészeire.", - "couldNotFindTTS": "Nem találtunk szöveg-beszéd motort a jelenlegi célnyelvéhez.", - "ttsInstructionsHyperlink": "Kattintson ide az utasítások megtekintéséhez az új hang letöltéséhez az eszközén.", - "createAnAccount": "Fiók létrehozása", - "signIn": "Bejelentkezés", - "signUpWithEmail": "Regisztráljon e-mail címmel", - "signUpWithGoogle": "Regisztráljon Google-lal", - "signUpWithApple": "Regisztráljon Apple-lel", "yourUsername": "Az ön felhasználóneve", "yourEmail": "Az ön e-mail címe", - "pleaseEnterAnEmail": "Kérjük, adjon meg egy e-mail címet", - "signInWithGoogle": "Bejelentkezés Google-lal", - "signInWithApple": "Bejelentkezés az Apple-lel", - "chooseYourAvatar": "Válassza ki a profilképét", "iWantToLearn": "Szeretnék tanulni", - "letsStart": "Kezdjük", - "pleaseAgreeToTOS": "Kérjük, fogadja el a Felhasználási feltételeket", "pleaseEnterEmail": "Kérjük, adjon meg egy érvényes e-mail címet.", - "pleaseSelectALanguage": "Kérjük, válasszon nyelvet", "myBaseLanguage": "Alapnyelvem", - "clickWordsInstructions": "🕵️ Kattintson bármelyik szóra a részletekért. 🧐", - "chooseBestDefinition": "Mit jelent ez a szó?", "meaningSectionHeader": "Jelentés:", "formSectionHeader": "Használt formák a csevegésekben:", - "noEmojiSelectedTooltip": "Nincs emoji kiválasztva", "writingExercisesTooltip": "Írás", "listeningExercisesTooltip": "Hallgatás", "readingExercisesTooltip": "Olvasás", "meaningNotFound": "Nem található jelentés.", - "formsNotFound": "Nem találhatók formák.", "chooseBaseForm": "Válassza ki az alapszót", "notTheCodeError": "Sajnáljuk, ez nem a kód!", "totalXP": "Össz XP", @@ -4592,9 +4196,6 @@ "pickAnEmoji": "Mi a kedvenc emoji a '{lemma}'-hoz?", "chooseLemmaMeaningInstructionsBody": "Egyeztesd a jelentéseket a szavakkal az üzenetben!", "doubleClickToEdit": "Dupla kattintással szerkesztheted.", - "removeFeature": "Távolítsa el a {feature}", - "chooseCorrectLabel": "Válaszd ki a helyes címkét.", - "levelPopupTitle": "Gratulálunk, elérted a\n{level} szintet", "activityPlannerTitle": "Tevékenységtervező", "topicLabel": "Téma", "topicPlaceholder": "Válassz egy témát...", @@ -4602,7 +4203,6 @@ "modePlaceholder": "Válassz egy módot...", "learningObjectiveLabel": "Tanulási cél", "learningObjectivePlaceholder": "Válassz egy tanulási célt...", - "mediaLabel": "Média, amit a tanulók megoszthatnak", "languageOfInstructionsLabel": "Az utasítások nyelve", "targetLanguageLabel": "Cél nyelv", "cefrLevelLabel": "CEFR szint", @@ -4617,20 +4217,15 @@ "instructions": "Utasítások", "numberOfLearners": "Tanulók száma", "mustBeInteger": "Egész szám kell legyen, pl. 1, 2, 3, ...", - "noLemmasFound": "Nincs {xp} XP-nél több szókincs. Gyakorolj tovább!", "constructUsePvmDesc": "Hangüzenetben készült", - "lockedMorphFeature": "Feloldásra vár", "leaveSpaceDescription": "Ha elhagyod a kurzust, minden benne lévő csevegést elhagyasz. A többi felhasználó látni fogja, hogy elhagytad a kurzust.", - "whatIsLemma": "Mi az a lemma?", "constructUseCorMmDesc": "Helyes üzenet jelentése", "constructUseIncMmDesc": "Helytelen üzenet jelentése", "constructUseIgnMmDesc": "Figyelmen kívül hagyott üzenet jelentése", "clickForMeaningActivity": "Kattints ide a Jelentés Kihíváshoz", "meaning": "Jelentés", "chatWith": "Csoport {displayname}-val", - "slightlyOffensive": "Kicsit sértő", "clickOnEmailLink": "Kérjük, kattints az e-mailben található linkre, majd folytasd.\n\nEllenőrizd a spam mappát, ha az e-mail nem érkezett meg.", - "whoIsAllowedToJoinThisChat": "Ki léphet be ebbe a csevegésbe", "dontForgetPassword": "Ne feledd a jelszavad!", "enableAutocorrectToolName": "Engedélyezd az eszköz automatikus javítását", "enableAutocorrectDescription": "Ha az eszközöd támogatja a tanult nyelvet, engedélyezheted az automatikus javítást, hogy a gépelés közben javítsa a gyakori hibákat.", @@ -4658,48 +4253,26 @@ "autocorrectNotAvailable": "Sajnáljuk, jelenleg nem támogatott ez a funkció a platformján. Maradjon velünk a további fejlesztésekért!", "pleaseUpdateApp": "Kérjük, frissítse az alkalmazást a folytatáshoz.", "chooseEmojiInstructionsBody": "Egyeztesse az emojikat a legjobban reprezentáló szavakkal. Ne aggódjon! Nincs pontlevonás, ha nem ért egyet. 😅", - "pickAnEmojiFor": "Válasszon egy emojit a(z) {lemma} számára", "analyticsVocabListBody": "Ez az összes szókincse! Ahogy XP-t szerez minden szóért, azok csírából teljes virágzásig fejlődnek. Kattintson bármelyik szóra a részletekért.", "morphAnalyticsListBody": "Ezek az összes nyelvtani fogalom, amit tanul! Feloldja őket, ahogy találkozik velük a beszélgetés során. Kattintson a részletekért.", "knockSpaceSuccess": "Kérte, hogy csatlakozzon ehhez a kurzushoz! Egy admin válaszol a kérésére, amint megkapja azt 😊", - "joinByCode": "Csatlakozás kóddal", "chooseWordAudioInstructionsBody": "Hallgassa meg az üzenet teljes változatát. Ezután párosítsa az audiókat a szavakkal.", "chooseMorphsInstructionsBody": "Kattintson a puzzle darabokra a nyelvtani kérdésekhez!", - "inviteAndLaunch": "Indítás és meghívás", - "createOwnChat": "Saját chat létrehozása", "pleaseEnterInt": "Kérjük, írjon be egy számot", "home": "Kezdőlap", "join": "Csatlakozás", "readingAssistanceOverviewBody": "Kattintson az alábbi gombokra az emojik, audiók, szavak jelentése és nyelvtani fogalmak párosítására mini-játékokhoz. Vagy kattintson bármelyik szóra a részletekért.", - "learnByTexting": "Tanuljon szöveges üzenetekkel", - "levelSummaryTrigger": "Összegzés megtekintése", "levelSummaryPopupTitle": "Szint {level} összegzés", - "referFriends": "Barátok ajánlása", - "referFriendDialogTitle": "Hívj meg egy barátot a beszélgetésedbe", - "referFriendDialogDesc": "Van egy barátod, aki izgatottan tanulna veled egy új nyelvet? Másold és küldd el ezt a meghívó linket, hogy csatlakozzon és ma elkezdhesse a beszélgetést veled.", - "youUnlocked": "Feloldottál", "resetInstructionTooltipsTitle": "Útmutató eszköztippek visszaállítása", "resetInstructionTooltipsDesc": "Kattints az útmutató eszköztippek megjelenítéséhez, mint egy teljesen új felhasználó esetén.", "selectForGrammar": "Válassz nyelvtani ikont a tevékenységekhez és részletekhez.", - "newChatActivityTitle": "Adj hozzá egy szórakoztató tevékenységet?", - "newChatActivityDesc": "Tedd minden csoportos beszélgetést kalanddá az Activity Planner segítségével! Állíts be lenyűgöző témákat és célokat a csoport számára, és hozd életre a beszélgetéseket lenyűgöző képekkel. Indítson el képzeletbeli vitákat, és tartsa a szórakozást könnyedén folytonosan!", - "exploreMore": "Fedezz fel többet", "randomize": "Véletlenszerű sorrend", "clear": "Törlés", "makeYourOwnActivity": "Hozd létre saját tevékenységedet", "featuredActivities": "Kiemelt", - "goToChat": "Ugrás a beszélgetéshez", "save": "Mentés", - "selectActivity": "Válassz tevékenységet", - "wordFocusListeningMultipleChoice": "Melyik audió egyezik a szóval?", "startChat": "Indíts el egy beszélgetést", "translationProblem": "Fordítási probléma", - "perfectTranslation": "Tökéletes fordítás!", - "greatJobTranslation": "Remek munka ezzel a fordítással!", - "goodJobTranslation": "Jó munka ezen a fordításon.", - "makingProgress": "Haladsz!", - "keepPracticing": "Folytasd a gyakorlást!", - "niceJob": "Szép munka!", "askToJoin": "Kérj csatlakozást", "emptyChatWarningTitle": "Üres a chat", "emptyChatWarningDesc": "Senkit sem hívtál meg a chatbe. Menj a Chat beállításokhoz, hogy meghívhasd a kontaktjaidat vagy a Botot. Ezt később is megteheted.", @@ -4718,8 +4291,6 @@ "languageLevelC2Desc": "Szinte mindent meg tudok érteni, amit hallok vagy olvasok, és folyékonyan és pontosan tudok kifejezni magam.", "newVocab": "Új szókincs", "newGrammar": "Új nyelvtani fogalmak", - "congratulationsOnReaching": "Elérted a {level} szintet!", - "seeDetails": "Részletek megtekintése", "choosePracticeMode": "Kattints az egyik fenti gombra a gyakorlási tevékenység elindításához", "ban": "Tiltás", "unban": "Tiltás feloldása", @@ -4733,8 +4304,6 @@ "timesUsedWithAssistance": "Segítséggel használt alkalmak száma", "shareInviteCode": "Meghívó kód megosztása: {code}", "leaderboard": "Rangsoroló lista", - "welcomeUser": "Üdvözlünk, {user}", - "joinSpaceOnboardingDesc": "Van meghívó kódod vagy linked egy nyilvános kurzushoz?", "skipForNow": "Átmenetileg kihagyom", "permissions": "Engedélyek", "spaceChildPermission": "Ki adhat hozzá új csevegéseket ehhez a kurzushoz", @@ -4742,12 +4311,8 @@ "defaultOption": "Alapértelmezett", "deleteChatDesc": "Biztosan törölni szeretné ezt a csevegést? Minden résztvevő számára törlődik, és minden üzenet nem lesz többé elérhető gyakorláshoz vagy tanulási elemzésekhez.", "deleteSpaceDesc": "A kurzus és a kiválasztott csevegések minden résztvevő számára törlődnek, és minden üzenet nem lesz többé elérhető gyakorláshoz vagy tanulási elemzésekhez. Ez a művelet nem vonható vissza.", - "chatWithActivities": "Csevegés tevékenységekkel", "launch": "Indítás", - "launchActivityToChats": "Tevékenység indítása a csevegésekhez", "searchChats": "Csevegések keresése", - "selectChats": "Csevegések kiválasztása", - "selectChatToStart": "Kész! Válasszon egy csevegést a kezdéshez", "maxFifty": "Maximum 50", "configureSpace": "Kurzus konfigurálása", "pinMessages": "Üzenetek rögzítése", @@ -4761,9 +4326,7 @@ "announcements": "Bejelentések", "activities": "Tevékenységek", "access": "Hozzáférés", - "botSettings": "Bot beállítások", "activitySuggestionTimeoutMessage": "Keményen dolgozunk azon, hogy több tevékenységet generáljunk Önnek, kérjük, ellenőrizze újra egy perc múlva", - "accessSettingsWarning": "Hopp! Úgy tűnik, nincs jogosultsága az adott szoba hozzáférési szabályainak beállításához. Ellenőrizze ezeket, hogy megfelelnek-e az Ön igényeinek, és beszéljen a szoba adminisztrátorával, ha módosítani szeretné őket", "howSpaceCanBeFound": "Hogyan található meg ez a kurzus", "private": "Privát", "cannotBeFoundInSearch": "Nem található meg a keresésben", @@ -4776,16 +4339,6 @@ "canBeFoundViaKnock": "• kérés csatlakozni és admin jóváhagyásával", "youHaveLeveledUp": "Szintet léptél!", "sendActivities": "Aktivitások küldése", - "getStarted": "Kezdés", - "getStartedBotChatDesc": "A chatelés az MI-vel remek kiindulópont, és a Pangea olvasási, írási, hallgatási és beszédkészség-fejlesztő eszközei megkönnyítik a tanulást!", - "getStartedCommunitiesDesc": "A közösséggel való tanulásban ragyog a Pangea Chat!\nCsatlakozhatsz az osztályodhoz, találhatsz kurzust, vagy akár sajátot is indíthatsz!", - "getStartedFriendsDesc": "Van egy barátod, aki veled szeretne tanulni?", - "getStartedBotChatComplete": "Jó munka! A bot-tal beszélgetsz!", - "getStartedCommunitiesComplete": "Remek, csatlakoztál egy kurzushoz!", - "getStartedComplete": "Befejezted ezt a szakaszt!\nFedezd fel tovább a csodálatos funkcióinkat barátokkal való beszélgetéssel!", - "getStartedFriendsComplete": "Hurrá! Vannak barátaid! 😉", - "getStartedBotChatButton": "Beszélgetés indítása!", - "getStartedFriendsButton": "Beszélgetés egy baráttal", "groupChat": "Csoportos beszélgetés", "directMessage": "Közvetlen üzenet", "newDirectMessage": "Új közvetlen üzenet", @@ -4801,7 +4354,6 @@ "mySavedActivities": "Mentett tevékenységeim", "noSavedActivities": "Nincsenek mentett tevékenységek", "saveActivity": "Mentse ezt a tevékenységet", - "yourSavedActivities": "Mentett tevékenységek", "failedToPlayVideo": "Nem sikerült lejátszani a videót", "done": "Kész", "inThisSpace": "Ebben a kurzusban", @@ -4840,37 +4392,27 @@ "maximumActivityParticipants": "Minden tevékenységben legfeljebb {count} résztvevő lehet.", "pending": "Függőben", "inactive": "Inaktív", - "unjoinedActivityMessage": "Szeretnél részt venni? Válassz nyitott szerepet!\nVagy csak szórakozz és nézd a műsort!", - "fullActivityMessage": "Szabadon nézheted a műsort! Mivel nincs nyitott szerep a részvételhez, megtekintheted a chatet!", "confirmRole": "Szerep megerősítése", "openRoleLabel": "NYITOTT", "joinedTheActivity": "👋 {username} csatlakozott {role} szerepben", "finishedTheActivity": "🎯 {username} befejezte ezt a tevékenységet", - "endActivityTitle": "Kész vagyok", - "endActivityDesc": "Befejezted a célokat?\nEz a megerősítésed, hogy visszalépsz a szövegeléstől. De ne aggódj, a móka folytatódik a chatben! Szabadon szórakozz és élvezd a műsort, amíg mindenki nem kattint a 'Kész' gombra.", "archiveToAnalytics": "Hozzáadás a Befejezett tevékenységekhez", "activitySummaryError": "A tevékenység összegzések nem elérhetők", "requestSummaries": "Összegzések kérés", - "loadingActivitySummary": "Tevékenység összegzés betöltése...", "generatingNewActivities": "Ez az első felhasználó ebben a nyelvpárban! Kérjük, adj egy percet, készítjük a tevékenységeket csak neked.", - "requestAccessTitle": "Kérelem az elemzési nézethez való hozzáféréshez?", + "requestAccessTitle": "Kérjük az elemzési hozzáférést?", "requestAccessDesc": "Szeretnél hozzáférést kérni a résztvevők elemzéseinek megtekintéséhez?\n\nHa a résztvevők egyetértenek, a kurzus adminjai megtekinthetik:\n • az összes szókincset\n • az összes nyelvtani fogalmat\n • az elvégzett tevékenységi ülések összes számát\n • a használt, helyes és helytelen nyelvtani fogalmakat\n\nNem fogják látni:\n • az üzeneteket a kurzuson kívüli chatben\n • a szókincs listát", "requestAccess": "Kérelem hozzáféréshez ({count})", "analyticsInactiveTitle": "Az inaktív felhasználóknak nem küldhetők kérések", "analyticsInactiveDesc": "Az inaktív felhasználók, akik nem jelentkeztek be azóta, hogy ez a funkció bevezetésre került, nem fogják látni a kérését.\n\nA Kérelem gomb akkor jelenik meg, amikor visszatérnek. Később újra küldheti a kérést a nevük alatt található Kérelem gombra kattintva, amikor az elérhetővé válik.", "accessRequestedTitle": "Elemzési hozzáférési kérés", - "accessRequestedDesc": "A „{space}” adminisztrátorai kérik, hogy tekintse meg tanulási elemzéseit.\n\nHa egyetért, az adminok megtekinthetik:\n • összes szókincs\n • összes nyelvtani fogalom\n • összes befejezett aktivitási alkalom\n • a használt, helyes és helytelen nyelvtani fogalmakat\n\nNem fogják látni:\n • üzeneteket a csoportokon kívüli chat-ekben\n • szókincs listát", - "allowAccess": "Hozzáférés engedélyezése", - "denyAccess": "Hozzáférés megtagadása", + "accessRequestedDesc": "Kérjük az adminisztrátor(ok): {admin} \n\nA „{space}” adminisztrátorai kérik, hogy megtekinthessék a tanulási elemzéseidet.\n\nHa egyetértesz, akkor meg tudják nézni a következőket:\n • összes szókincs\n • összes nyelvtani fogalom\n • összes befejezett aktivitási ülés\n • a használt nyelvtani fogalmak, helyesen és helytelenül\n\nNem fogják tudni megtekinteni a következőket:\n • üzenetek a kurzuson kívüli csevegésekben\n • szókincs lista", "adminRequestedAccess": "Az adminisztrátorok kérik, hogy tekintse meg az elemzéseit.", "lastUpdated": "Frissítve\n{time}", "activityFinishedMessage": "Minden kész!", "endForAll": "Vége mindenkinek", "newCourse": "Új tanfolyam", - "newCourseSubtitle": "Melyik tanfolyamtervet szeretné használni?", - "failedToLoadCourses": "Nem sikerült betölteni a tanfolyamokat", "numModules": "{num} modul", - "numActivityPlans": "{num} aktivitási terv", "coursePlan": "Tanfolyamterv", "editCourseLater": "Később szerkesztheti a sablon címet, leírásokat és a tanfolyam képét.", "newCourseAccess": "Alapértelmezés szerint a tanfolyamok privátak, és admin jóváhagyását igénylik a csatlakozáshoz. Ezeket a beállításokat bármikor szerkesztheti.", @@ -4884,17 +4426,11 @@ "accessDesc": "Nyilvánossá teheted a kurzusodat a világ számára! Vagy, tedd priváttá és biztonságossá.", "createGroupChatDesc": "Míg az aktivitási ülések kezdete és vége, a csoportos beszélgetések nyitva maradnak a rutinszerű kommunikációhoz.", "deleteDesc": "Csak az adminok törölhetnek kurzust. Ez egy destruktív művelet, amely minden felhasználót eltávolít és törli az összes kiválasztott csoportot a kurzuson belül. Légy óvatos.", - "failedToLoadCourseInfo": "Nem sikerült betölteni a kurzus adatait", "noCourseFound": "Ó, ennek a kurzusnak tervre van szüksége!\n\nA kurzustervek témák és beszélgetési tevékenységek sorozata.", "additionalParticipants": "+ {num} mások", - "activityNotFoundForCourse": "Ez a tevékenység nem található a kurzusban", - "courseChats": "Kurzus beszélgetések", - "myActivitySessions": "Saját aktivitási üléseim", "directMessages": "Közvetlen üzenetek", "whatNow": "Most mi?", "chooseNextActivity": "Válaszd ki a következő tevékenységet!", - "seeInstructions": "Utasítások megtekintése", - "hideInstructions": "Utasítások elrejtése", "letsGo": "Indulj el", "chooseRole": "Válassz szerepet!", "chooseRoleToParticipate": "Válassz szerepet a részvételhez!", @@ -4904,23 +4440,15 @@ "inviteFriends": "Barátok meghívása", "waitNotDone": "Várj, még nem végeztem!", "waitingForOthersToFinish": "Várakozás a többiek befejezésére...", - "saveToCompletedActivities": "Mentés befejezett tevékenységekhez", "generatingSummary": "Chat elemzése és eredmények generálása", - "instructionsLanguage": "Utasítások nyelve", "findCourse": "Kurzus keresése", - "activityCompletedDesc": "A befejezett tevékenységed hozzáadásra került az analitikához, ahol áttekintheted és gyakorolhatod a használt nyelvet.", "pingParticipantsNotification": "{user} keres felhasználókat a {room} szobában a tevékenységhez", "course": "Kurzus", "courses": "Kurzusok", "courseName": "Kurzus neve", "createNewCourse": "Új kurzus", - "publicCourses": "Nyilvános kurzusok", "goToCourse": "Ugrás a kurzusra: {course}", "activityComplete": "Ez a tevékenység befejeződött. Az összefoglaló az alábbiakban érhető el.", - "haventChattedMuch": "Úgy tűnik, nem beszélgettél sokat, próbálj meg több szókincset használni! Ha úgy érzed, befejezted a célodat, az alábbiakban befejezheted a tevékenységet.", - "haveChatted": "Úgy tűnik, már egy ideje beszélgetsz! Ha úgy érzed, befejezted a célodat, zárd le a tevékenységet, és az összefoglalót generálunk a chatben!", - "userDoneAndWaiting": "{num1}/{num2} résztvevő befejezte. Várj, amíg mindenki befejezi, és az összefoglalót generáljuk a chatben! \n\nHa szeretnél újra csatlakozni a beszélgetéshez, kattints a folytatás gombra a chatben.", - "othersDoneAndWaiting": "{num1}/{num2} kész. Befejezted a célodat?", "startNewSession": "Új szekció indítása", "joinOpenSession": "Csatlakozás nyitott szekcióhoz", "less": "kevesebb", @@ -4930,7 +4458,6 @@ "openToJoin": "Nyitott a csatlakozásra", "results": "Eredmények", "activityDone": "Tevékenység befejezve!", - "moreLabel": "több", "promoCodeInfo": "Promóciós kódokat a következő oldalon lehet megadni", "editsComingSoon": "A városok és tevékenységek szerkesztése hamarosan elérhető lesz.", "editing": "Szerkesztés", @@ -4946,13 +4473,10 @@ "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", - "chooseLanguage": "Válassz egy nyelvet.", + "chooseLanguage": "Válasszon ki egy célnyelvet.", "planTrip": "Tervezd meg az utadat", "howAreYouTraveling": "Hogyan utazol?", "unlockPrivateTrip": "Privát utazás feloldása", @@ -4965,25 +4489,20 @@ "courseCode": "Mi a titkos jelszó?", "courseCodeHint": "Utazási kód vagy link", "unlockMyTrip": "Saját utazás feloldása", - "anyLevel": "Bármilyen szint", "signupOption": "Hogyan szeretne regisztrálni?", "withApple": "Apple-lel", "withGoogle": "Google-lal", "withEmail": "E-mail-lel", "createAccount": "Fiók létrehozása", - "noCoursesFound": "Nincs találat kurzusokra", "loginWithEmail": "Bejelentkezés e-mail-lel", "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", - "allCefrLevels": "Minden CEFR szint", "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.", "directMessageBotTitle": "Közvetlen üzenet Pangea Bot", "feedbackTitle": "Tevékenység visszacsatolás", - "feedbackDesc": "Hogyan lehetne javítani a tevékenységet? Ha tudsz néhány részletet adni, megvalósítjuk a változtatást!", "feedbackHint": "Visszacsatolásod", "feedbackButton": "Visszacsatolás küldése", "directMessageBotDesc": "Az emberekkel való beszélgetés szórakoztatóbb, de... az AI mindig készen áll!", @@ -5006,30 +4525,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5045,18 +4540,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5081,18 +4564,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5129,38 +4600,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5169,62 +4612,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5261,10 +4660,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5273,14 +4668,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5289,46 +4676,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5337,10 +4688,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5397,18 +4744,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5417,14 +4752,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5453,18 +4780,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5473,42 +4788,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5517,14 +4800,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5545,26 +4820,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5585,10 +4840,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5621,25 +4872,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5696,34 +4928,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5752,778 +4956,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7516,14 +5952,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7535,14 +5963,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7574,10 +5994,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7586,18 +6002,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7606,14 +6010,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7638,38 +6034,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7715,10 +6083,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7743,10 +6107,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7771,10 +6131,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7783,66 +6139,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7863,42 +6163,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7923,154 +6199,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8087,18 +6215,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8119,14 +6235,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8143,10 +6251,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8159,14 +6263,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8175,14 +6271,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8210,26 +6298,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8258,18 +6326,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8306,10 +6366,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9242,10 +7298,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9426,34 +7478,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9466,10 +7490,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9478,14 +7498,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9502,22 +7514,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9665,14 +7661,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9681,34 +7669,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9717,54 +7677,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9773,10 +7697,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9793,10 +7713,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9968,26 +7884,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10016,10 +7912,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10076,30 +7968,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10128,18 +8004,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10256,14 +8124,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10276,10 +8136,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10288,14 +8144,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10312,14 +8160,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10328,22 +8168,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10356,18 +8180,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10384,22 +8196,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10408,30 +8208,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10504,18 +8280,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10572,18 +8336,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10612,30 +8364,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10688,18 +8424,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10748,46 +8476,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10852,10 +8540,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11027,14 +8711,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11062,14 +8738,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11082,10 +8750,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11121,19 +8785,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11158,14 +8817,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11174,14 +8825,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11234,10 +8877,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11250,18 +8889,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11274,14 +8901,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11322,26 +8941,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11369,10 +8976,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11383,36 +8986,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11449,10 +9022,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11517,18 +9086,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11593,10 +9150,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11617,10 +9170,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11637,10 +9186,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11649,10 +9194,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11665,10 +9206,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11693,16 +9230,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Hívd meg barátaid az aktivitásra", - "inviteFriendsToActivityCourse": "Hívd meg barátaid az aktivitáshoz és a kurzushoz", "feedbackRespDesc": "Jövőre nézz vissza az aktivitás frissítéseiért.", "activityDropdownDesc": "Amikor befejezed ezt az aktivitást, kattints az alábbi gombra", - "activityAnalyticsListBody": "Ezek a befejezett tevékenységeid! A tevékenységek befejezése után itt megtekintheted őket.", "languageMismatchTitle": "Nyelvi eltérés", "languageMismatchDesc": "A célnyelved nem egyezik ezzel az aktivitással. Frissíted a célnyelvet?", "reportWordIssueTooltip": "Szóinformációs probléma jelentése", "tokenInfoFeedbackDialogTitle": "Szóinformáció visszacsatolás", - "tokenInfoFeedbackDialogDesc": "Az AI hibázik. Kérjük, írja le bármilyen problémát, amit az információval kapcsolatban talált.", "noPublicCoursesFound": "Nem találhatók nyilvános kurzusok. Szeretnél létrehozni egyet?", "noCourseTemplatesFound": "Nem találtunk kurzusokat a célnyelvedhez. Közben beszélgethetsz a Pangea Bot-tal, és később visszatérhetsz további kurzusokért.", "botActivityJoinFailMessage": "A Pangea Bot nem reagál azonnal. Kérjük, próbáld meg később, vagy hívd meg egy barátodat.", @@ -11710,14 +9243,6 @@ "leaveDesc": "Hagyja el ezt a teret és az összes beszélgetést benne", "selectAll": "Összes kiválasztása", "deselectAll": "Összes kijelölés megszüntetése", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11726,10 +9251,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11746,10 +9267,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11783,7 +9300,6 @@ "newMessageInPangeaChat": "💬 Új üzenet a Pangea Csevegésben", "shareCourse": "Kurzus megosztása", "addCourse": "Kurzus hozzáadása", - "joinCourseWithCode": "Csatlakozás kurzushoz kóddal", "joinPublicCourse": "Csatlakozás nyilvános kurzushoz", "vocabLevelsDesc": "Itt jelennek meg a szókincs szavai, amint szintet lépnek!", "highlightVocabTooltip": "Emeld ki a cél szókincset alább azáltal, hogy elküldöd őket vagy gyakorolsz velük a csevegésben.", @@ -11807,10 +9323,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11819,7 +9331,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nincsenek közvetlen üzenetek vagy csevegések. Győződj meg róla, hogy a keresés helyesen van írva.", + "activityAnalyticsTooltipBody": "Ezek a mentett tevékenységeid áttekintésre és gyakorlásra.", + "numSavedActivities": "Mentett tevékenységek száma", + "saveActivityTitle": "Tevékenység mentése", + "saveActivityDesc": "Jó munka! Mentsd el ezt a tevékenységet későbbi áttekintésre és gyakorlásra", + "levelInfoTooltip": "Itt láthatod az összes pontot, amit szereztél, és hogyan!", + "alreadyInCourseWithID": "Már egy tanfolyamon vagy ezzel a tervvel. Szeretnél egy tanfolyamot létrehozni ugyanazzal a tervvel, vagy menj a meglévő tanfolyamra?", + "goToExistingCourse": "Menj a meglévő tanfolyamra", + "emojiView": "Emoji nézet", + "feedbackDialogDesc": "Én is hibázom! Van valami, amivel segíthetnél a fejlődésemben?", + "contactHasBeenInvitedToTheCourse": "A kapcsolatot meghívták a tanfolyamra", + "activityStatsButtonTooltip": "Tevékenységi információ", + "allow": "Engedélyez", + "deny": "Elutasít", + "enabledRenewal": "Előfizetés megújításának engedélyezése", + "subscriptionEndsOn": "Az előfizetés vége", + "subscriptionRenewsOn": "Az előfizetés megújul", + "waitForSubscriptionChanges": "Az előfizetésed változásai egy pillanatot igénybe vehetnek, hogy megjelenjenek az alkalmazásban.", + "subscribeReadingAssistance": "Iratkozz fel az üzenetkezelő eszközök feloldásához", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhár", + "arDisplayName": "Arab", + "asDisplayName": "Asszámi", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbajdzsáni", + "baDisplayName": "Baskír", + "banDisplayName": "Balinéz", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Belorusz", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bolgár", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengáli", + "bnBDDisplayName": "Bengáli (Banglades)", + "bnINDisplayName": "Bengáli (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnyák", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Burját", + "caDisplayName": "Katalán", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Közép-kurd", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korzikai", + "crhDisplayName": "Krími török", + "crsDisplayName": "Seselwa kreol francia", + "csDisplayName": "Cseh", + "cvDisplayName": "Csuvash", + "cyDisplayName": "Walesi", + "daDisplayName": "dán", + "deDisplayName": "német", + "dinDisplayName": "dinka", + "doiDisplayName": "dogri", + "dovDisplayName": "dombe", + "dzDisplayName": "dzongkha", + "eeDisplayName": "eve", + "enDisplayName": "angol", + "enAUDisplayName": "angol (Ausztrália)", + "enGBDisplayName": "angol (Egyesült Királyság)", + "enINDisplayName": "English (India)", + "enUSDisplayName": "English (US)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spanish", + "esESDisplayName": "Spanish (Spain)", + "esMXDisplayName": "Spanish (Mexico)", + "euDisplayName": "Basque", + "faDisplayName": "Persian", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnish", + "filDisplayName": "Fülöp-szigeteki", + "fjDisplayName": "Fidzsi", + "foDisplayName": "Feröeri", + "frDisplayName": "Francia", + "frCADisplayName": "Francia (Kanada)", + "frFRDisplayName": "Francia (Franciaország)", + "fyDisplayName": "Nyugati fríz", + "gaDisplayName": "Ír", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skót gael", + "glDisplayName": "galíciai", + "gnDisplayName": "guarani", + "gomDisplayName": "goai konkani", + "guDisplayName": "gujarati", + "haDisplayName": "hausa", + "hawDisplayName": "hawaii", + "heDisplayName": "héber", + "hiDisplayName": "hindi", + "hilDisplayName": "hiligaynon", + "hmnDisplayName": "hmong", + "hneDisplayName": "Csáhattisgarhi", + "hrDisplayName": "Horvát", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haiti Kreol", + "huDisplayName": "Magyar", + "hyDisplayName": "Örmény", + "idDisplayName": "Indonéz", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Izlandi", + "itDisplayName": "olasz", + "jaDisplayName": "japán", + "jvDisplayName": "jávai", + "kaDisplayName": "grúz", + "kkDisplayName": "kazak", + "kmDisplayName": "khmer", + "knDisplayName": "kannada", + "koDisplayName": "koreai", + "kokDisplayName": "konkáni", + "kriDisplayName": "krió", + "ksDisplayName": "kasmíri", + "ktuDisplayName": "kituba (Kongói Demokratikus Köztársaság)", + "kuDisplayName": "kurd", + "kyDisplayName": "kirgiz", + "laDisplayName": "latin", + "lbDisplayName": "luxemburgi", + "lgDisplayName": "ganda", + "liDisplayName": "limburgi", + "lijDisplayName": "ligur", + "lmoDisplayName": "lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litván", + "ltgDisplayName": "Latgaliai", + "luoDisplayName": "Luo (Kenya és Tanzánia)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lett", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagaszi", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedón", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Maláj", + "msArabDisplayName": "Maláj (arab)", + "msMYDisplayName": "Maláj (Malajzia)", + "mtDisplayName": "máltai", + "mwrDisplayName": "marwari", + "myDisplayName": "burmai", + "nanDisplayName": "min nan", + "nbDisplayName": "norvég (bokmål)", + "neDisplayName": "nepáli", + "newDisplayName": "newari", + "nlDisplayName": "holland", + "nlBEDisplayName": "flamand", + "noDisplayName": "norvég", + "nrDisplayName": "Dél-Ndebele", + "nsoDisplayName": "Észak-Szotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Lengyel", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugál", + "ptBRDisplayName": "Portugál (Brazília)", + "ptPTDisplayName": "Portugál (Portugália)", + "quDisplayName": "Kecsua", + "rajDisplayName": "Rádzsasztáni", + "rnDisplayName": "Rundi", + "roDisplayName": "Román", + "roMDDisplayName": "Moldovai", + "romDisplayName": "Romani", + "ruDisplayName": "Orosz", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Szanszkrit", + "satDisplayName": "Santáli", + "scnDisplayName": "Szicíliai", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Szan", + "siDisplayName": "Sinhala", + "skDisplayName": "Szlovák", + "slDisplayName": "Szlovén", + "smDisplayName": "Samoai", + "snDisplayName": "Shona", + "soDisplayName": "Szomáliai", + "sqDisplayName": "Albán", + "srDisplayName": "Szerb", + "srMEDisplayName": "montenegrói", + "ssDisplayName": "szvází", + "stDisplayName": "déli szotho", + "suDisplayName": "szundáli", + "svDisplayName": "svéd", + "swDisplayName": "szwahéli", + "szlDisplayName": "sziléziai", + "taDisplayName": "tamil", + "teDisplayName": "telugu", + "tetDisplayName": "tetum", + "tgDisplayName": "tádzsik", + "thDisplayName": "thai", + "tiDisplayName": "tigrinya", + "tkDisplayName": "török", + "tlDisplayName": "tagalog", + "tnDisplayName": "tswana", + "trDisplayName": "török", + "tsDisplayName": "tsonga", + "ttDisplayName": "tatár", + "ugDisplayName": "ujgur", + "ukDisplayName": "Ukrán", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakisztán)", + "uzDisplayName": "Üzbég", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddis", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukateko", + "yueDisplayName": "Kantonai", + "yueCNDisplayName": "Kantonai (Kína)", + "yueHKDisplayName": "Kantonai (Hongkong)", + "zhDisplayName": "Kínai", + "zhCNDisplayName": "Kínai (Egyszerűsített)", + "zhTWDisplayName": "Kínai (Hagyományos)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11886,6 +10584,7 @@ "notStartedActivitiesTitle": "Nyitott ülések ({num})", "inProgressActivitiesTitle": "Jelenleg zajlik ({num})", "completedActivitiesTitle": "Kész ({num})", + "pickDifferentActivity": "Válassz egy másik tevékenységet", "inOngoingActivity": "Folyamatban lévő tevékenységed van!", "@notStartedActivitiesTitle": { "type": "String", @@ -11911,10 +10610,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "A cél nyelve nem egyezik meg ezzel az üzenettel. Frissíti a cél nyelvét?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ez mindenki, aki ebben a kurzusban részt vesz. Kattints bármelyik felhasználó avatarjára, és válaszd a „beszélgetés indítása” lehetőséget, hogy közvetlen üzenetet küldj.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ez a szókincs szó véglegesen eltávolításra kerül az elemzéseidből", + "woman": "Nő", + "man": "Férfi", + "otherGender": "Egyéb", + "unselectedGender": "Válassz egy nemi opciót", + "gender": "Neme", + "chatParticipantTooltip": "Ez mindenki ebben a csevegésben. Kattints bármelyik felhasználó avatarjára, és válaszd a „beszélgetés indítása” lehetőséget, hogy DM-et küldj.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "A tanulási eszközök le vannak tiltva azokra az üzenetekre, amelyek nem a célnyelveden vannak.", + "vocabEmoji": "Szókincs emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Regenerálás kérése", + "optionalRegenerateReason": "(Opcionális) Indok", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Beállítottad a {lemma} emoji-t! Ezt az emojit fogjuk használni a szó képviseletére a gyakorlati tevékenységek során a jövőben.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Várakozás a bejelentkezés befejezésére", + "ssoDialogDesc": "Megnyitottunk egy új lapot, hogy biztonságosan be tudj jelentkezni.", + "ssoDialogHelpText": "🤔 Ha nem láttad az új lapot, kérlek ellenőrizd a felugró ablak blokkolódat.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Nyelvi eszközök letiltása", + "disableLanguageToolsDesc": "Szeretné letiltani az automatikus nyelvi segítséget?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Engedély megtagadva. Engedélyezze a felvételi engedélyeket az audioüzenetek rögzítéséhez.", + "genericWebRecordingError": "Valami hiba történt. Javasoljuk, hogy a Chrome böngészőt használja az üzenetek rögzítésekor.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "A legjobb élmény érdekében, kérjük, bővítse a képernyő méretét ennek az alkalmazásnak a használata során.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Tevékenységek a következő téma feloldásához", "activitiesToUnlockTopicDesc": "Állítsa be a tevékenységek számát a következő tanfolyam téma feloldásához", "@activitiesToUnlockTopicTitle": { @@ -11924,5 +10741,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Helyes szókincs definíció gyakorlás", + "constructUseIncLMDesc": "Helytelen szókincs definíció gyakorlás", + "constructUseCorLADesc": "Helyes szókincs audio gyakorlás", + "constructUseIncLADesc": "Helytelen szókincs audio gyakorlás", + "constructUseBonus": "Bónusz a szókincs gyakorlás során", + "practiceVocab": "Szókincs gyakorlás", + "selectMeaning": "Jelöld ki a jelentést", + "selectAudio": "Válaszd ki a megfelelő audiót", + "congratulations": "Gratulálunk!", + "anotherRound": "Még egy kör", + "noActivityRequest": "Jelenleg nincs aktivitás kérés.", + "quit": "Kilépés", + "congratulationsYouveCompletedPractice": "Gratulálunk! Befejezted a gyakorló ülést.", + "mustHave10Words": "Legalább 10 szókincsszót kellene gyakorolnod. Próbálj meg beszélni egy baráttal vagy a Pangea Bot-tal, hogy többet felfedezhess!", + "botSettings": "Bot beállítások", + "activitySettingsOverrideWarning": "A nyelvet és a nyelvi szintet az aktivitási terv határozza meg", + "voice": "Hang", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index 27242a5f7..40ca83dba 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -825,28 +825,16 @@ "commandHint_logoutall": "Disconecta tote le dispositivos active", "displayNavigationRail": "Monstra le rail de navigation in mobile", "customReaction": "Reactor personalisate", - "accountInformation": "Information de conto", - "addGroupDescription": "Adder un description de chat", - "addNewFriend": "Adder un nove amico", - "alreadyHaveAnAccount": "Ja ha un conto?", - "createNewGroup": "Create un nove chat", - "editChatPermissions": "Edita le permissiones del chat", "ignore": "Blocar", "ignoredUsers": "Usatores blocate", "writeAMessageLangCodes": "Typa in {l1} o {l2}...", "requests": "Requestas", - "allCorrect": "Isto es como lo dicerea! Bon!", - "newWayAllGood": "Isto non es como lo dicerea, ma pare bon!", - "othersAreBetter": "Hm, il poterea haber un melior maniera de exprimer isto.", "holdForInfo": "Clicca e tenea pro information de parola.", "greenFeedback": "Isto es lo que io adderia!", "yellowFeedback": "Hm, tu pote provar lo e vider si illo funciona! Pro usar iste parola, simplemente clicca ancora una vice.", "redFeedback": "Io non pensa que isto es justo...", "itInstructionsTitle": "Io pote adjutar te a traducer!", "itInstructionsBody": "Tu pote clicar e mantener le optiones pro information super le parola.", - "oneday": "Ultime 24 horas", - "oneweek": "Ultime 7 dies", - "onemonth": "Passate mense", "gaTooltip": "L2 usance con adjuta grammatical", "taTooltip": "L2 usance con adjuta de traduction", "unTooltip": "Altere", @@ -856,58 +844,27 @@ "interactiveTranslatorAllowed": "Optione del Student", "interactiveTranslatorRequired": "Requisito", "notYetSet": "Nulle ancora definite", - "myLearning": "Mi Analyticas", "waTooltip": "L2 usance sin adjuta", - "changeDateRange": "Cambiar le intervallo de data", - "classDescription": "Description", - "addStudents": "Invita usatores per ligamine o codice", - "copyClassLink": "Copia le ligamine de invito", - "copyClassCode": "Copia le codice de invito", - "inviteStudentByUserName": "Invita usatores per nomine de usator", "languageSettings": "Configurationes de lingua", "interactiveTranslator": "Assistente de translation", - "shareVideo": "Partage Video", - "shareVideoDesc": "Active iste optione pro permitter a studentes de partajar videos in chats.", - "shareFiles": "Partage Files", - "selectLanguageLevel": "Selige le nivello de lingua", "noIdenticalLanguages": "Per favor, selige linguas de base e de destino differente", - "iWantALanguagePartnerFrom": "Es de:", - "worldWide": "In toto le mundo", - "noResults": "Nulle resultato! Proba de ampliar tu recherche.", "searchBy": "Cerca per pais e linguas", - "iWantAConversationPartner": "Io vole un partner de conversation qui", - "iWantALanguagePartnerWhoSpeaks": "Parla:", - "iWantALanguagePartnerWhoIsLearning": "Est in le processo de apprender:", "joinWithClassCode": "Joinar le curso", - "joinWithClassCodeHint": "Entera le codice de invito", - "languageLevelPreA1": "Principiante vermente (Pre A1)", - "languageLevelA1": "Principiante (A1)", - "languageLevelA2": "Elementari (A2)", - "languageLevelB1": "Intermedie (B1)", - "languageLevelB2": "Superiore intermedie (B2)", - "languageLevelC1": "Avanzate (C1)", - "languageLevelC2": "Maestria (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice High (A2)", + "languageLevelB1": "Intermediate Mid (B1)", + "languageLevelB2": "Advanced Low (B2)", + "languageLevelC1": "Advanced Mid (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Changear le nomine", "changeTheNameOfTheChat": "Changear le nomine del chat", - "askPangeaBot": "Questiona Pangea Bot pro un definition contextual.", "sorryNoResults": "Dispiace, nulle resultato.", "ignoreInThisText": "Ignora", - "helpMeTranslate": "Si!", - "needsItShortMessage": "Extra de scopo", "needsItMessage": "Aspetta, illo non es {targetLanguage}! Es tu besonio de adjuta pro traducer?", - "needsIgcMessage": "Iste message ha un error grammatical.", - "tokenTranslationTitle": "Un parola es in tu lingua de base.", - "spanTranslationDesc": "Vide le translation possibile infra.", - "spanTranslationTitle": "Qualcunque parolas es in tu lingua de base.", - "l1SpanAndGrammarTitle": "Extra del lingua de scopo", - "l1SpanAndGrammarDesc": "Isto pote esser in tu base lingua o illo pote esser un error de grammatica.", - "otherTitle": "Tu ha un error.", - "otherDesc": "Vede le correctiones possibile infra.", "countryInformation": "Mi pais", - "myLanguages": "Mi linguas de base e de destination", "targetLanguage": "Lingua de destination", "sourceLanguage": "Lingua de base", - "languagesISpeak": "Linguas que io parla", "updateLanguage": "Mi linguas", "whatLanguageYouWantToLearn": "Qual lingua tu vole aprender?", "whatIsYourBaseLanguage": "Qual es tu lingua de base?", @@ -922,13 +879,8 @@ "errorDisableLanguageAssistanceUserDesc": "Clicca hic pro actualizar le configuration de assistentia de traduction e de grammatica", "errorDisableITClassDesc": "Le assistance de traduction es disactivate pro le curso in le qual iste chat es.", "errorDisableIGCClassDesc": "Le assistance de grammatica es disactivate pro le curso in le qual iste chat es.", - "itIsDisabled": "Translation Interactive es disactivate", - "igcIsDisabled": "Verification Interactive de Grammatica es disactivate", - "goToLearningSettings": "Vade a le Configuration de Aprendimento", "error405Title": "Linguas non definite", "error405Desc": "Per favor, definite tuas linguas in le Menu Principal > Configuration de Aprendimento.", - "loginOrSignup": "Inscribe te con", - "iAgreeToThe": "Io accepta le ", "termsAndConditions": "Terminos e Condiciones", "andCertifyIAmAtLeast13YearsOfAge": " e certifica que io ha al minus 16 annos de etate.", "error502504Title": "Wow, il ha multe students online!", @@ -936,40 +888,21 @@ "error404Title": "Error de translation!", "error404Desc": "Le Bot Pangea non es secur de como traducer isto...", "errorPleaseRefresh": "Nos es in le processus de investigar! Per favor, re-intra e tenta ancora.", - "toggleIT": "Translation Interactive", - "toggleIGC": "Verification Interactive de Grammatica", - "toggleToolSettingsDescription": "Ici tu pote disactivar o activar tu configuration individual de instrumento linguistic.", "connectedToStaging": " Conectate a le Staging", "learningSettings": "Impostos de apprender", - "sendVoiceNotes": "Mitte notas de voce", - "sendVoiceNotesDesc": "Active iste pro permitir que le estudiantes pote inviar notas de voce in chat.", - "chatTopic": "Subjecto del chat", - "chatTopicDesc": "Stabile un subjecto pro le chat", - "inviteStudentByUserNameDesc": "Si tu student ja ha un conto, tu pote cercar pro illes.", "participants": "Participantes", - "almostPerfect": "Isto pare perfecto! Ecce lo que io avrebbe ditto.", - "prettyGood": "Ben bon! Ecce lo que io avrebbe ditto.", - "letMeThink": "Hmm, vide como tu ha facite!", "clickMessageTitle": "Besonia adjuta?", "clickMessageBody": "Clicca super un message pro instrumentos linguistic como traduction, reproducer e plus!", - "understandingMessagesTitle": "Definitiones e traductiones!", - "understandingMessagesBody": "Clicca super parolas sublineate pro definitiones. Traduce con optiones de message (super dextra).", "allDone": "Tote es complete!", "vocab": "Vocabulario", "low": "Nos ha evidencias que le usator non comprende iste parolas.", "medium": "Iste parolas ha essite usate. Non es clar si le parolas es completamente comprensate o non.", "high": "Nos ha evidencias que le usator comprende iste parolas.", - "unknownProficiency": "Iste parolas non ha essite usate in Pangea Chat.", - "changeView": "Cambiar vistas.", - "clearAll": "Clarificar tote palabras?", - "generateVocabulary": "Generar vocabulario ex titulo e description", - "generatePrompts": "Generar suggestion", "subscribe": "Subscribar", "getAccess": "Subscriba ora!", "subscriptionDesc": "Messagiero es gratuite! Subscriba pro desbloquar translation interactive, verifica grammatical e analytics de apprendimento.", "subscriptionManagement": "Gestion de subscription", "currentSubscription": "Subscription actual", - "changeSubscription": "Cambiar tu subscription", "cancelSubscription": " Cancellar tu subscription", "selectYourPlan": "Selige tu plano", "subsciptionPlatformTooltip": "Per favor login a tu dispositivo original pro gestionar tu plano de subscription", @@ -978,9 +911,6 @@ "paymentHistory": "Historico de pagamento", "emptyChatDownloadWarning": "Non pote descargar chat vacue", "update": "Actualisar", - "updateDesc": "Tu pote ora actualizar iste app de {localVersion} a {storeVersion}", - "maybeLater": "Forsan postea", - "mainMenu": "Menu Principal", "toggleImmersionMode": "Modo d'Immersion", "toggleImmersionModeDesc": "Quando activate, tote le messages es monstrate in tu lingua de destino. Iste configuration es le plus utile in exchanges linguistic.", "itToggleDescription": "Iste instrumento de studio de linguas identificara le parolas in tu lingua de base e adjutara te a traducer los a tu lingua de destino. Quoque rare, le AI pote facer errores de translation.", @@ -995,212 +925,13 @@ "definitionsToolDescription": "Quando activate, le parolas sublineate in azul pote esser cliccabile pro definitiones. Clicca super messages pro accedere a le definitiones.", "translationsToolDescrption": "Quando activate, clicca super un message e super le icono de translation pro vider un message in tu lingua de base.", "welcomeBack": "Ben retornate! Si tu ha essite parte del pilot 2023-2024, per favor contacta nos pro tu subscription special de pilot. Si tu es un professor qui ha (o que su institution ha) comprate licentias pro tu classe, contacta nos pro tu subscription de professor.", - "kickAllStudents": "Expelle Totes le Studentes", - "kickAllStudentsConfirmation": "Es tu secur que tu vole expeller totes le studentes?", - "inviteAllStudents": "Invita Totes le Studentes", - "inviteAllStudentsConfirmation": "Es tu secur que tu vole invitar totes le studentes?", - "inviteUsersFromPangea": "Adder administratores", - "redeemPromoCode": "Redimir le codice promo", - "enterPromoCode": "Enter le codice promo", "downloadTxtFile": "Downloadar file de texto", "downloadCSVFile": "Downloadar file CSV", "promotionalSubscriptionDesc": "Tu ha actualmente un subscription promotional de vita. Mesage supporto@pangea.chat pro adjutar te a cambiar tu subscription.", "originalSubscriptionPlatform": "Subscription comprate per medio de {purchasePlatform}", "oneWeekTrial": "Período de proba de un septimana", "downloadXLSXFile": "Downloadar file Excel", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanese", - "amDisplayName": "Amharic", - "arDisplayName": "Arabico", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armenian", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijano", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basque", - "beDisplayName": "Belarusan", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniaco", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgaro", - "myDisplayName": "Burmese", - "caDisplayName": "Catalan, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Checheno", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinese", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corsican", - "crDisplayName": "Creole", - "hrDisplayName": "Croate", - "csDisplayName": "Tcheco", - "daDisplayName": "Danish", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Nederlandese", - "enDisplayName": "Inglese", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estoniano", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijiano", - "fiDisplayName": "Finlandese", - "frDisplayName": "Francese", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galician", - "kaDisplayName": "Georgiano", - "deDisplayName": "Tedesco", - "elDisplayName": "Greco, Moderno", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Creole Haitiano", - "haDisplayName": "Hausa", - "heDisplayName": "Hebraico (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungherese", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesian", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandese", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islendetic", - "itDisplayName": "Italiane", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japanese", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, Greenlandic", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreano", - "kuDisplayName": "Kurdish", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latino", - "lbDisplayName": "Lussemburghese, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgese, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Lao", - "ltDisplayName": "Lituano", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letton", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedoniano", - "mgDisplayName": "Malgache", - "msDisplayName": "Malayo", - "mlDisplayName": "Malabar", - "mtDisplayName": "Malti", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norvegian Bokmål", - "ndDisplayName": "North Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norse Nynorsk", - "noDisplayName": "Norvegian", - "iiDisplayName": "Nuosu", - "nrDisplayName": "South Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Vetera Ecclesiastica Slavonica, Slavonic Ecclesiastico, Slavonic Ecclesiastico, Old Bulgarian, Old Slavonic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetic, Ossetian", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persian", - "plDisplayName": "Polonese", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portuguese", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Roman, Moldavian, Moldovan", - "ruDisplayName": "Russiano", - "saDisplayName": "Sanskrit (Sanskrita)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami del Norte", - "smDisplayName": "Samoano", - "sgDisplayName": "Sango", - "srDisplayName": "Serb", - "gdDisplayName": "Gaelic de Scotia, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Singalese, Sinhalese", - "skDisplayName": "Slovaco", - "slDisplayName": "Slovene", - "soDisplayName": "Somali", - "stDisplayName": "Sotho del Sud", - "esDisplayName": "Spanish", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Svedese", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetano Standard, Tibetano, Central", - "tkDisplayName": "Turcomano", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Insulas de Tonga)", - "trDisplayName": "Turco", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataro", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiano", - "ugDisplayName": "Uighur, Uigur", - "ukDisplayName": "Ucrainiano", - "urDisplayName": "Urdù", - "uzDisplayName": "Usbeco", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamese", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisian Occidentale", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Inconnu", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multiple", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrew", - "jwDisplayName": "Javanese", - "moDisplayName": "Moldavian", - "shDisplayName": "Serbo-Croatian", "wwCountryDisplayName": "Mundo Wide", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Insulas Aland", @@ -1448,41 +1179,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Paga", - "allPrivateChats": "Chats private directe", - "unknownPrivateChat": "Chat private ignote", + "pay": "Checkout", "invitedToSpace": "{user} te ha invitate a junger un curso: {space}! Tu vole acceptar?", - "declinedInvitation": "Invitation declinata", - "acceptedInvitation": "Invitation acceptate", "youreInvited": "📩 Tu es invitate!", "invitedToChat": "{user} te ha invitate a junger un chat: {name}! Tu vole acceptar?", "monthlySubscription": "Mensual", "yearlySubscription": "Anual", "defaultSubscription": "Subscription de Pangea Chat", "freeTrial": "Pericia gratuite", - "grammarAnalytics": "Analyses de error", "total": "Total: ", "noDataFound": "Nulle datos trovate", - "promoSubscriptionExpirationDesc": "Vostra subscription actual es promotional e expire a {expiration}. Message supporta@pangea.chat pro adjutar a cambiar vostre subscription.", - "emptyChatNameWarning": "Per favor, introduce un nomine pro iste chat", "blurMeansTranslateTitle": "Proque le message es obscurite?", "blurMeansTranslateBody": "Durante le Modo de Immersion es active, le messages que es inviate in vostre lingua de base essera obscurite durante que Pangea Bot le traduce in vostre lingua de destino. Le Modo de Immersion pote esser active o disactive in le configurationes individual e de curso.", - "someErrorTitle": "Hm, qualcosa non es perfect", - "someErrorBody": "Poterea esser un error o qualcosa in vostre lingua de base.", "bestCorrectionFeedback": "Isto es correct!", "distractorFeedback": "Isto non es justo correct.", "bestAnswerFeedback": "Isto es correct!", "definitionDefaultPrompt": "Que significa iste parola?", "practiceDefaultPrompt": "Qual es le melior responsa?", "correctionDefaultPrompt": "Qual es le melior replacement?", - "itStartDefaultPrompt": "Vole tu adjuta a traducer?", - "lockedChatWarning": "🔒 Iste chat ha essite claude", - "lockChat": "Clauder le chat", - "suggestToChat": "Suggerer iste chat", - "suggestToChatDesc": "Le chats suggerite apparira in le lista de chats", "acceptSelection": "Accipe le correction", - "acceptSelectionAnyway": "Usa isto de omne modo", - "makingActivity": "Facente activitate", "why": "Proque?", "definition": "Definition", "exampleSentence": "Example Sentence", @@ -1490,128 +1205,55 @@ "reportMessageTitle": "{reportingUserId} ha reportate un message de {reportedUserId} in le chat {roomName}", "reportMessageBody": "Message: {reportedMessage}\nRationale: {reason}", "noTeachersFound": "Nulle professores trovate pro reportar", - "viewArchive": "Vider Archive", "trialExpiration": "Vostre prova gratuita expire le {expiration}", "freeTrialDesc": "Novos usatores recive un septimana de prova gratuita de Pangea Chat", "activateTrial": "Prova Gratuita de 7 Dies", "successfullySubscribed": "Tu ha abbonate de successo!", "clickToManageSubscription": "Clicca hic pro administrar tu abbonamento.", - "errorGettingAudio": "Error durante le obtention del audio. Per favor, refresha e prova ancora.", "signUp": "Registrar se", "pleaseChooseAtLeastChars": "Per favor, selige al minus {min} characteres.", "noEmailWarning": "Per favor, entra un adresse email valide. Altere, tu non potera resettar tu parola de clave. Si non vole, tappa ancora le button pro continuar.", "pleaseEnterValidEmail": "Per favor, introduce un adresse de email valide.", "pleaseChooseAUsername": "Per favor, selige un nom de usator", - "chooseAUsername": "Selige un nom de usator", "define": "Define", "listen": "Asculta", - "addConversationBot": "Includer un Bot de conversation", - "addConversationBotDesc": "Adder un bot a iste chat", - "convoBotSettingsDescription": "Edita le thema e difficultate del conversation", - "enterAConversationTopic": "Entera un thema de conversation", - "conversationTopic": "Thema de conversation", - "enableModeration": "Active le moderation", - "enableModerationDesc": "Active le moderation automatic pro revisar le messages ante que illes es sendite", - "conversationLanguageLevel": "Qual es le nivello de lingua de iste conversation?", - "showDefinition": "Mustra le definition", - "subscriptionPopupTitle": "Iste phrase pote haber un error de grammatica...", - "subscriptionPopupDesc": "Subscribi hodie pro desbloquear traduction e correction de grammatica!", - "seeOptions": "Vider le optiones", - "continuedWithoutSubscription": "Continuar sin subscription", "trialPeriodExpired": "Vostre periodo de prova ha expirati", - "selectToDefine": "Clicca super un parola pro vider su definition!", "translations": "traduceres", "messageAudio": "audio del message", "definitions": "definitiones", "subscribedToUnlockTools": "Subcribe pro unlockar traduction interactive e verification de grammatica, reproduction audio, actividades personalisate de practica, e analytics de apprendimento!", "translationTooltip": "Traducer", - "audioTooltip": "Reproducer Audio", "speechToTextTooltip": "Transcripto", - "certifyAge": "Io certifica que io ha plus de {age} annos de etate", "kickBotWarning": "Expeller le Pangea Bot remove le bot de conversation de iste chat.", - "joinToView": "Joiner iste camera pro vider details", "refresh": "Recarregar", - "autoPlayTitle": "Auto Reproducer Messages", - "autoPlayDesc": "Quando active, le audio de texto-a-vocina de messages se reproducira automaticamente quando selectate.", "messageAnalytics": "Analytics de message", "words": "Parolas", "score": "Punctuacion", "accuracy": "Exactitate", "points": "Punctos", "noPaymentInfo": "Nulle information de pagamento necessari!", - "conversationBotModeSelectDescription": "Activitate de chat", - "conversationBotModeSelectOption_discussion": "Discussion", - "conversationBotModeSelectOption_custom": "Personalizate", - "conversationBotModeSelectOption_conversation": "Conversation", - "conversationBotModeSelectOption_textAdventure": "Aventura de texto", - "conversationBotModeSelectOption_storyGame": "Joco de historia", - "conversationBotDiscussionZone_title": "Configuration de discussion", - "conversationBotDiscussionZone_discussionTopicLabel": "Subjecto del discussion", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Stabilir le subjecto del discussion", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Criterios de discussion", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Stabilir le criterios del discussion", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista separata per virgula de criterios pro guidar le discussion", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Manda le prompt de discussion secun un programma", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas inter le prompts de discussion", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reage a reaction de ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaction pro inviar le prompt de discussion", - "conversationBotCustomZone_title": "Configuration personalisate", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt del systema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Stabilir le prompt personalisate del systema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Mancante le prompt personalisate del systema", - "botConfig": "Configuration del bot e de le actividades", - "botConfigNoPermissionTitle": "Nulle permission", - "botConfigNoPermissionMessage": "Contacte le administrator del sala pro cambiar le configuration del bot", - "addConversationBotDialogTitleInvite": "Confirma invitar le bot de conversation", - "addConversationBotButtonInvite": "Invitar", - "addConversationBotDialogInviteConfirmation": "Invitar", - "addConversationBotButtonTitleRemove": "Confirma remover le bot de conversation", - "addConversationBotButtonRemove": "Remover", - "addConversationBotDialogRemoveConfirmation": "Remover", - "conversationBotConfigConfirmChange": "Confirma", - "conversationBotStatus": "Invitar le bot", - "conversationBotTextAdventureZone_title": "Aventura de Texto", - "conversationBotTextAdventureZone_instructionLabel": "Instrucciones del Maestru de Juego", - "conversationBotTextAdventureZone_instructionPlaceholder": "Configura le instrucciones del maestru de juego", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Falta le instrucciones del maestru de juego", - "studentAnalyticsNotAvailable": "Le datos del student non es disponibile actualmente", - "roomDataMissing": "Qualcunque datos pote esser mancante de salas in le quales tu non es un membro.", "updatePhoneOS": "Es possibile que tu necesse actualisar le versione del sistema operative de tu dispositivo.", "wordsPerMinute": "Palabras per minuto", "autoIGCToolName": "Execute automaticemente le assistance de scriber Pangea", "autoIGCToolDescription": "Execute automaticamente le assistance de grammatica e traduction de Pangea Chat ante de inviar mi message.", - "runGrammarCorrection": "Verifica le message", - "grammarCorrectionFailed": "Problemas a addressar", - "grammarCorrectionComplete": "Par bon!", "tooltipInstructionsTitle": "Nescite que illo face?", "tooltipInstructionsMobileBody": "Pressa e tene le items pro vider le tooltip.", "tooltipInstructionsBrowserBody": "Survole le items pro vider le tooltip.", "chatCapacity": "Capacitate de chat", "roomFull": "Iste sala es ja plen de capacity.", - "topicNotSet": "Le subjecto non ha essite configurate.", - "chatCapacityNotSet": "Iste chat ha nulle limite de capacitate.", "chatCapacityHasBeenChanged": "Le capacitate de chat ha essite cambiate", "chatCapacitySetTooLow": "Le capacitate de chat debe esser al minus {count}.", "chatCapacityExplanation": "Le capacitate de chat limita le numero de membros permitite in un chat.", - "chatExceedsCapacity": "Iste chat excede su capacitate.", "tooManyRequest": "Troppo request, per favor prova de novo plus tarde.", "enterNumber": "Per favor, entra un valor de numero entier.", "buildTranslation": "Construye tu translation a partir del optiones super", - "nonexistentSelection": "Le selection non plus existe.", - "changeAnalyticsLanguage": "Cambiar le lingua de Analytics", "practice": "Practica", "noLanguagesSet": "Nulle linguas ha essite configurate", - "noActivitiesFound": "Isto es sufficienti pro ora! Returna postea pro plure.", - "hintTitle": "Suggerimento:", "speechToTextBody": "Pro messages de voce, tu pote vider un transcripto e etiam le punctuacion de Parolas Per Minuto del speaker.", "versionNotFound": "Version non trovate", "fetchingVersion": "Recuperante version...", "versionFetchError": "Error durante le recuperation de version", "versionText": "Version: {version}+{buildNumber}", - "languageButtonLabel": "Lingua: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Autoplay translation", - "interactiveTranslatorAutoPlayDesc": "Lance le traductor interactive sin questionar.", - "changeAnalyticsView": "Cambiar vista de Analyticas", "l1TranslationBody": "Le messages in tu lingua de base non essera traducite.", "deleteSubscriptionWarningTitle": "Tu ha un subscription active", "deleteSubscriptionWarningBody": "Le delition de tu conto non cancelara automaticamente tu subscription.", @@ -1619,9 +1261,7 @@ "error520Title": "Per favor, prova ancora.", "error520Desc": "Disculpa, nos non poteva comprender tu message...", "wordsUsed": "Parolas usate", - "errorTypes": "Types de error", "level": "Nivel", - "canceledSend": "Manda cancellate", "morphsUsed": "Morphe usate", "translationChoicesBody": "Clique e tene un option pro un suggestion.", "grammar": "Grammatica", @@ -1631,7 +1271,6 @@ "reportContentIssueTitle": "Reportar problema de contento", "feedback": "Retroaction optional", "reportContentIssueDescription": "Oh! Le AI pote facilitar experientias de apprendimento personalisate ma... tamben hallucina. Per favor, provide qualunque retroaction e nos tentarà de novo.", - "changeContent": "Oh! Le AI pote facilitar experientias de apprendimento personalisate ma... tamben hallucina. Que debe esser?", "clickTheWordAgainToDeselect": "Clique le parola selige pro deseleger lo.", "l2SupportNa": "Non disponibile", "l2SupportAlpha": "Alpha", @@ -1865,7 +1504,6 @@ "grammarCopySPC": "Specificitate", "grammarCopyPARTTYPE": "Tipo Partitiv", "grammarCopyINTREL": "Interrogative-Relativ", - "grammarCopyNUMFORMpsor": "Numeros del Possessor", "grammarCopyUNKNOWN": "Ignorate", "grammarCopyNUMBERPSOR": "Numeros del Possessor", "grammarCopyPOSS": "Possessive", @@ -1911,28 +1549,14 @@ "grammarCopyVOICEdir": "Directe", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Reciprocal", - "enterPrompt": "Per favor, introduce un prompt del systema", - "selectBotLanguage": "Selige lingua del bot", - "chooseVoice": "Selige un voce", - "enterLanguageLevel": "Per favor, introduce un nivello de lingua", - "enterDiscussionTopic": "Per favor, introduce un subjecto de discussion", - "selectBotChatMode": "Selige modo de chat", - "messageNotInTargetLang": "Message non in lingua de destino", "other": "Altere", "levelShort": "NIV {level}", - "botModeValidation": "Per favor selige un modo de chat", "clickBestOption": "Selige le melior optiones pro traducer tu message!", "completeActivitiesToUnlock": "Complete al minus un activitate pro desbloquar le translation!", - "botSettingsSubtitle": "Invita le bot pro moderar le activitate del chat", - "invitePeople": "Invita usatores", "noCapacityLimit": "Nulle limite de capacitate", "downloadGroupText": "Download le texto del gruppo", "notificationsOn": "Notificationes activate", "notificationsOff": "Notificationes disactivate", - "chatCanBeFoundViaSearch": "Le chat pote esser trovate per medio del recerca", - "requireCodeToJoin": "Require un codice pro aderir", - "canFindInSearch": "Pote esser trovate in recerca", - "addChatToSpace": "Adder un chat", "createChatAndInviteUsers": "Create un chat e invita usatores", "updatedNewSpaceDescription": "Le cursos permitte te de consolidar tu chats e construir communitates private o publice.", "joinWithCode": "Aderir con codice", @@ -1968,39 +1592,19 @@ "constructUseCollected": " Collected in chat", "constructUseNanDesc": " Non applicabile", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Signa in con with nomine de usator e parola", - "registrationEmailMessage": "Per favor verifica tu email con un ligamine inviate ibi. In alcun casos, le email prende usque a 5 minutos pro arrivar. Per favor verifica etiam tu carpeta de spam.", "enableTTSToolName": "TTS activate", "enableTTSToolDescription": "Permitte al application de generar output de texto-a-vocala pro partes del texto in tu lingua de destino.", - "couldNotFindTTS": "Nos non poteva trovar un motor de texto-a-vocala pro tu lingua de destino actual.", - "ttsInstructionsHyperlink": "Clicca hic pro vider instructiones pro descarregar un nove voce in tu dispositivo.", - "createAnAccount": "Create un conto", - "signIn": "Signa in", - "signUpWithEmail": "Inscribe con Email", - "signUpWithGoogle": "Inscribe con Google", - "signUpWithApple": "Inscribe con Apple", "yourUsername": "Tu nomine de usator", "yourEmail": "Tuo e-mail", - "pleaseEnterAnEmail": "Per favor, entra un adresse de e-mail", - "signInWithGoogle": "Signar in con Google", - "signInWithApple": "Signar in con Apple", - "chooseYourAvatar": "Selige tu avatar", "iWantToLearn": "Io vole aprender", - "letsStart": "Comenciam", - "pleaseAgreeToTOS": "Per favor, accepta le Terminos e Condiciones", "pleaseEnterEmail": "Per favor, entra un adresse de e-mail valide", - "pleaseSelectALanguage": "Per favor, selige un lingua", "myBaseLanguage": "Mi lingua base", - "clickWordsInstructions": "🧻 Clicca in qualseque parola pro details. 🤐", - "chooseBestDefinition": "Qual es le significato de iste parola?", "meaningSectionHeader": "Significato:", "formSectionHeader": "Formas usate in chat:", - "noEmojiSelectedTooltip": "Nulle emoji ha essite selige", "writingExercisesTooltip": "Scripta", "listeningExercisesTooltip": "Audi", "readingExercisesTooltip": "Lege", "meaningNotFound": "Le significato non poteva esser trovate.", - "formsNotFound": "Formas non poteva esser trovate.", "chooseBaseForm": "Selige le forma base", "notTheCodeError": "Disculpa, illo non es le codice!", "totalXP": "Total de XP", @@ -2040,9 +1644,6 @@ "pickAnEmoji": "Qual es tu emoji preferite pro '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Corresponda le significatos con le parolas in le message!", "doubleClickToEdit": "Dubla clic pro modificar.", - "removeFeature": "Remover {feature}", - "chooseCorrectLabel": "Selige le etiquetta correcte.", - "levelPopupTitle": "Felicitates pro arrivar\nLevel {level}", "activityPlannerTitle": "Planificador de activitate", "topicLabel": "Topic", "topicPlaceholder": "Selige un topic...", @@ -2050,7 +1651,6 @@ "modePlaceholder": "Selige un modo...", "learningObjectiveLabel": "Objectivo de apprendimento", "learningObjectivePlaceholder": "Selige un objectivo de apprendimento...", - "mediaLabel": "Media que le discentes debe compartir", "languageOfInstructionsLabel": "Lingua del instructiones de activitate", "targetLanguageLabel": "Lingua de destino", "cefrLevelLabel": "Nivello CEFR", @@ -2065,20 +1665,15 @@ "instructions": "Instrucciones", "numberOfLearners": "Numero de discentes", "mustBeInteger": "Debe esser un numero integer, ex. 1, 2, 3, ...", - "noLemmasFound": "Il non ha vocabulario con plus de {xp} XP. Continua practicar!", "constructUsePvmDesc": "Producte in message de voce", - "lockedMorphFeature": "Expectante a esser desbloquate", "leaveSpaceDescription": "Per abandonar le curso, tu abandonar le totalitate del chats in illo. Altri usatores videbit que tu ha abandonate le curso.", - "whatIsLemma": "Qual es le lemma?", "constructUseCorMmDesc": "Signification correcte del message", "constructUseIncMmDesc": "Signification incorrecte del message", "constructUseIgnMmDesc": "Signification ignorate del message", "clickForMeaningActivity": "Clicca hic pro un Challenge de Signification", "meaning": "Signification", "chatWith": "Grupo con {displayname}", - "slightlyOffensive": "Ligeiramente offensive", "clickOnEmailLink": "Per favor, clicca super le ligamine in le email e procede.\n\nVerifica tu carpeta de spam si le email non ha arrivate.", - "whoIsAllowedToJoinThisChat": "Qui ha le permission de aderir a iste chat", "dontForgetPassword": "Non te scorda tu parola de pass!", "enableAutocorrectToolName": "Enable autocorrecte del dispositivo", "enableAutocorrectDescription": "Si tu dispositivo supporta le lingua que tu es apprendente, tu pote activar le autocorrecte del dispositivo pro corrigir errores commun durante tu typage.", @@ -2106,48 +1701,26 @@ "autocorrectNotAvailable": "Infelicemente, tu piattaforma actualmente non es supportate pro iste function. Sta attentive pro ulteriore developpamento!", "pleaseUpdateApp": "Per favor, actualisa le application pro continuar.", "chooseEmojiInstructionsBody": "Compatra emojis con le parolas que illes meliormente representa. Non te preoccupa! Nulle puncto per disapprobar. 😅", - "pickAnEmojiFor": "Selige un emoji pro {lemma}", "analyticsVocabListBody": "Isto es totu tu vocabulario! Como tu face XP pro cata parola, illes passara de semilla a plen flor. Clicca super un parola pro vider plus de detalhes.", "morphAnalyticsListBody": "Iste es totu le conceptos grammatical in le lingua que tu apprende! Tu los desbloquara como tu los incontrar durante le chat. Clicca pro details.", "knockSpaceSuccess": "Tu ha requestate de aderir a iste curso! Un administrator responde a tu requesto quando lo recive 😄", - "joinByCode": "Aderir per codice", "chooseWordAudioInstructionsBody": "Audi le message complete. Postea, compatra le audio con le parolas.", "chooseMorphsInstructionsBody": "Clicca le piezas de puzzle pro questiones grammatical!", - "inviteAndLaunch": "Invitar e lanciar", - "createOwnChat": "Create tu proprie chat", "pleaseEnterInt": "Per favor, entra un numero", "home": "Casa", "join": "Aderir", "readingAssistanceOverviewBody": "Clicca le button infra pro mini-games de compatimento de emojis, audio, significatos de parolas, e conceptos grammatical. O clicca super un parola pro plus de details.", - "learnByTexting": "Disce per message", - "levelSummaryTrigger": "Vider le resumé", "levelSummaryPopupTitle": "Resumé del livello {level}", - "referFriends": "Recomendar amicos", - "referFriendDialogTitle": "Invita un amico a tu conversation", - "referFriendDialogDesc": "Ha tu un amico qui es excitato a apprender un nove lingua con te? Copia e invia iste ligamine de invitation pro unir e comenciar a chatta hodie.", - "youUnlocked": "Tu ha desbloquate", "resetInstructionTooltipsTitle": "Resettar le dicas de instructiones", "resetInstructionTooltipsDesc": "Clique pro mostrar dicas de instructiones como pro un usator nove.", "selectForGrammar": "Selige un icono de grammatica pro actividades e detalles.", - "newChatActivityTitle": "Adder un activitate amusante?", - "newChatActivityDesc": "Facite que cata chat de grupo sia un aventura con le Planificador de Activitates! Configura temas captivante e objectivos pro le grupo, e face le conversation vivente con imagines stupende. Incite discussiones imaginative e mantiene le divertimento fluente sin efforto!", - "exploreMore": "Explora plus", "randomize": "Randomisar", "clear": "Clara", "makeYourOwnActivity": "Create tu proprie activitate", "featuredActivities": "Featured", - "goToChat": "Ier al chat", "save": "Salva", - "selectActivity": "Selige activitate", - "wordFocusListeningMultipleChoice": "Qual audio corresponde al parola?", "startChat": "Iniciar un conversation", "translationProblem": "Problema de translation", - "perfectTranslation": "Translation perfecta!", - "greatJobTranslation": "Bon labore con iste translation!", - "goodJobTranslation": "Bon labor in iste translation.", - "makingProgress": "Tu face progresso!", - "keepPracticing": "Continua practicar!", - "niceJob": "Bon labor!", "askToJoin": "Pedir de junger", "emptyChatWarningTitle": "Le chat es vacue", "emptyChatWarningDesc": "Tu ha invitate nulle uno a tu chat. Vade a configuration de chat pro invitar tu contactos o le Bot. Tu pote etiam facer isto plus tarde.", @@ -2166,8 +1739,6 @@ "languageLevelC2Desc": "Io pote comprender quasi toto que io audi o lege e exprimer se fluentemente e precise.", "newVocab": "Vocabulario nove", "newGrammar": "Conceptos de grammatica nove", - "congratulationsOnReaching": "Vos ha attingite le Niveau {level}!", - "seeDetails": "Vider Detalles", "choosePracticeMode": "Clique super un del button superi pro comenciar un activitate de practica", "ban": "Banna", "unban": "Disbanna", @@ -2181,8 +1752,6 @@ "timesUsedWithAssistance": "Tiempos usate con assistance", "shareInviteCode": "Partage le codice de invitation: {code}", "leaderboard": "Classifica", - "welcomeUser": "Benvenite {user}", - "joinSpaceOnboardingDesc": "Ha tu un codice de invitation o un ligamine a un curso publice?", "skipForNow": "Saltar pro nunc", "permissions": "Permissiones", "spaceChildPermission": "Qui pote adder nove chats a iste curso", @@ -2190,12 +1759,8 @@ "defaultOption": "Default", "deleteChatDesc": "Es tu secur de vole eliminar iste chat? Il essera eliminat pro tote le participantes e tote le message in le chat non essera plus disponibile pro practica o analytics de apprendimento.", "deleteSpaceDesc": "Le curso e omne chats selectate essera eliminat pro tote le participantes e tote le message in le chat non essera plus disponibile pro practica o analytics de apprendimento. Iste action non pote esser annullate.", - "chatWithActivities": "Chat with actividades", "launch": "Lance", - "launchActivityToChats": "Lance actividad a chats", "searchChats": "Cercar chats", - "selectChats": "Selige chats", - "selectChatToStart": "Complete! Selige un chat pro comenciar", "maxFifty": "Maximo 50", "configureSpace": "Configurar le curso", "pinMessages": "Fixar message", @@ -2209,9 +1774,7 @@ "announcements": "Anuncios", "activities": "Activitates", "access": "Acceso", - "botSettings": "Configuration del bot", "activitySuggestionTimeoutMessage": "Nos labora duramente pro generate plus de actividades pro te, per favor re-vide in un minuto", - "accessSettingsWarning": "Oups! Pare que tu non ha le permission de configurar le regula de accesso de iste sala. Tu debe verificar iste configuration pro assecurar que illes es le que tu necessita e parlar con un administrator de sala si tu ha de modificar los", "howSpaceCanBeFound": "Como iste curso pote esser trovate", "private": "Privat", "cannotBeFoundInSearch": "Non pote esser trovate in le recerca", @@ -2224,16 +1787,6 @@ "canBeFoundViaKnock": "• requesto de aderir e approbation del administrator", "youHaveLeveledUp": "Tu ha level-up!", "sendActivities": "Manda actividades", - "getStarted": "Comencia", - "getStartedBotChatDesc": "Chatting con AI es un loco excelente pro comenciar e le instrumentos de lectura, scriber, ascoltar e parlar de Pangea face lo simple!", - "getStartedCommunitiesDesc": "Lection con un communitate es ubi Pangea Chat brilla!\nTu pote aderir a tu classe, trovar un curso, o mesmo crear tu proprie!", - "getStartedFriendsDesc": "Ha tu un amico que vole aprender con te?", - "getStartedBotChatComplete": "Ben facite! Tu es in chat con le bot!", - "getStartedCommunitiesComplete": "Excellent, tu ha aderite a un curso!", - "getStartedComplete": "Tu ha completate iste section!\nContinua a explorar nostre fantasticas characteristicas per chat with amicos!", - "getStartedFriendsComplete": "Woohoo! Tu ha amicos! 😋", - "getStartedBotChatButton": "Comencia a chat!", - "getStartedFriendsButton": "Chat con un amico", "groupChat": "Chat de gruppo", "directMessage": "Message directe", "newDirectMessage": " nove message directe", @@ -2249,7 +1802,6 @@ "mySavedActivities": "Mi activitates salvat", "noSavedActivities": "Nulle activitate salvat", "saveActivity": "Salva iste activitate", - "yourSavedActivities": "Activitates salvat", "failedToPlayVideo": "Fallite a jocar le video", "done": "Finite", "inThisSpace": "In iste curso", @@ -2288,37 +1840,27 @@ "maximumActivityParticipants": "Cata activitate pote haber un maximum de {count} participant(e).", "pending": "Pending", "inactive": "Inactiv", - "unjoinedActivityMessage": "Vole tu participar? Selige un rolo aperte!\nO passa tempore e vide le show!", - "fullActivityMessage": "Sente te liber de vider le show! Dum il non ha rolos aperte pro participar, tu pote vider le chat!", "confirmRole": "Confirma le rolo", "openRoleLabel": "APERTE", "joinedTheActivity": "👋 {username} s'aciapava como {role}", "finishedTheActivity": "🎯 {username} ha completate iste activitate", - "endActivityTitle": "Io ha finite", - "endActivityDesc": "Ha tu complete le objectivos?\nIsto es tu confirmation que tu te retrahite de le chat. Ma non te preoccupa, le divertimento continua in le chat! Sente te liber de passar tempore e goder le show usque que tote le personas clicca 'Finite'.", "archiveToAnalytics": "Adder a mi Activitates completate", "activitySummaryError": "Summarios de activitate non disponibile", "requestSummaries": "Requerer summarios", - "loadingActivitySummary": "Loading le summario de activitate...", "generatingNewActivities": "Tu es le prime usator de iste parie de linguas! Per favor, da nos un minuto, nos es preparante actividades solmente pro te.", - "requestAccessTitle": "Requestar accesso a vista de analytics?", + "requestAccessTitle": "Demanar accès a l'analítica?", "requestAccessDesc": "Vole tu requestar accesso a vider le analytics de participantes?\n\nSi le participantes agree, le administratores de iste curso potera vider lor:\n • total vocabulario\n • total conceptos de grammatica\n • total sessiones de activitate complete\n • le conceptos de grammatica specificate, correctemente e incorrectemente\n\nIlles non potera vider lor:\n • messages in chats extra le curso\n • lista de vocabulario", "requestAccess": "Requestar accesso ({count})", "analyticsInactiveTitle": "Le requestes a usatores inactive non pote esser inviate", "analyticsInactiveDesc": "Usatores inactive que non ha login ab le introduccione de iste caracteristica non vide tu requesta.\n\nLe button Requesta apparira una vice illes returna. Tu pote renvocar le requesta postea cliccando le button Requesta sub lor nomine quando illo es disponibile.", "accessRequestedTitle": "Requesta de accesso a analytics", - "accessRequestedDesc": "Le administratores de “{space}” requesta vider tu analytics de apprendimento.\n\nSi tu es de accordo, le administratores de iste curso potera vider tu:\n • total vocabulario\n • total conceptos de grammatica\n • total sessiones de activitate complete\n • le conceptos de grammatica specificate, correctemente e incorrectemente\n\nIlles non potera vider tu:\n • messages in chats extra le curso\n • lista de vocabulario", - "allowAccess": "Permitte accesso", - "denyAccess": "Denyer accesso", + "accessRequestedDesc": "Demanant admin(s): {admin} \n\nEls administradors de “{space}” estan demanant veure la teva analítica d'aprenentatge.\n\nSi estàs d'acord, podran veure el teu:\n • vocabulari total\n • conceptes gramaticals totals\n • sessions d'activitat totals completades\n • els conceptes gramaticals específics utilitzats, correctament i incorrectament\n\nNo podran veure el teu:\n • missatges en xats fora del curs\n • llista de vocabulari", "adminRequestedAccess": "Le administratores requestava vider tu analytics.", "lastUpdated": "Actualisate\n{time}", "activityFinishedMessage": "Tote finite!", "endForAll": "Terminar pro tote", "newCourse": "Nove curso", - "newCourseSubtitle": "Qual plan de curso tu vole usar?", - "failedToLoadCourses": "Fallite a cargar le cursos", "numModules": "{num} modulo(s)", - "numActivityPlans": "{num} plano(s) de activitate", "coursePlan": "Plan de curso", "editCourseLater": "Tu pote modificar le titulo del curso, descriptiones, e imagine del curso postea.", "newCourseAccess": "A default, le cursos es private e require approbation del administrator pro aderir. Tu pote modificar iste configurationes a omne momento.", @@ -2332,17 +1874,11 @@ "accessDesc": "Tu pote face tu curso aperte al mundo! O, face tu curso private e secure.", "createGroupChatDesc": "Dove le sessiones de activitate comencia e termina, le chats de grupo remanera aperte pro communication routine.", "deleteDesc": "Solo le administratores pote delere un curso. Iste es un action destructive que remove tote le usatores e delere tote le chats selectate in le curso. Procede con cautela.", - "failedToLoadCourseInfo": "Fallite a cargar le information del curso", "noCourseFound": "Oh, iste curso ha besonio de un plano!\n\nLe planos del curso es un sequencia de themas e actividades de conversation.", "additionalParticipants": "+ {num} alteres", - "activityNotFoundForCourse": "Iste activitate non esseva trovate in le curso", - "courseChats": "Chats del curso", - "myActivitySessions": "Mias sessiones de activitate", "directMessages": "Message direct", "whatNow": "Que face ora?", "chooseNextActivity": "Selige tu proxime activitate!", - "seeInstructions": "Vider instructiones", - "hideInstructions": "Celar instructiones", "letsGo": "Iscamos", "chooseRole": "Selige un rolo!", "chooseRoleToParticipate": "Selige un rolo pro participar!", @@ -2352,23 +1888,15 @@ "inviteFriends": "Invitar amicos", "waitNotDone": "Spere, io non ha finito!", "waitingForOthersToFinish": "Spere que le alios finisca...", - "saveToCompletedActivities": "Salve in actividades complete", "generatingSummary": "Analizando le chat e generate resultatos", - "instructionsLanguage": "Lingua del instructiones", "findCourse": "Trova un curso", - "activityCompletedDesc": "Tu activitate complete esseva addite a analytics ubi tu pote revocar e practicar le lingua que usava.", "pingParticipantsNotification": "{user} cerca usatores pro aderir a le session de activitate in {room}", "course": "Curso", "courses": "Cursus", "courseName": "Nomeno del curso", "createNewCourse": "Nove curso", - "publicCourses": "Cursus publice", "goToCourse": "Irr a curso: {course}", "activityComplete": "Iste activitate ha essite completate. Le summario del activitate debe esser disponibile infra.", - "haventChattedMuch": "Il pare que tu non ha chatate multo, prova a usar alcun vocabularios plus! Si tu pensa que tu ha completate tu obiectivo, tu pote terminar le activitate infra.", - "haveChatted": "Il pare que tu ha chatate pro un momento! Si tu pensa que tu ha completate tu obiectivo, conclude le activity e nos generara un summario in le chat!", - "userDoneAndWaiting": "{num1}/{num2} participantes ha concluse. Expecta que tote le mundo complete, e nos generara un summario in le chat! \n\nSi tu vole rejoinar le conversation, clicca le button continue in le chat.", - "othersDoneAndWaiting": "{num1}/{num2} ha finite. Es tu completate tu obiectivo?", "startNewSession": "Iniciar nove session", "joinOpenSession": "Joiner session aperte", "less": "mente", @@ -2378,7 +1906,6 @@ "openToJoin": "Aperte a joiner", "results": "Resultatos", "activityDone": "Activitate completate!", - "moreLabel": "plus", "promoCodeInfo": "Le codes de promotion pote esser inserite in le pagina sequente", "editsComingSoon": "Le possibilitate de modificar citates e actividades veni proxime.", "editing": "Modification", @@ -2394,13 +1921,10 @@ "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", - "chooseLanguage": "Selige un lingua.", + "chooseLanguage": "Sèla un lingue de destin.", "planTrip": "Planifica tu viage", "howAreYouTraveling": "Como tu ha planificate viajar?", "unlockPrivateTrip": "Desbloquea un viage private", @@ -2413,25 +1937,20 @@ "courseCode": "Qual es le parola secreta?", "courseCodeHint": "Codice o ligamine del viage", "unlockMyTrip": "Desbloquea mi viage", - "anyLevel": "Qualunque nivele", "signupOption": "Como tu vole inscribere te?", "withApple": "Con Apple", "withGoogle": "Con Google", "withEmail": "Con Email", "createAccount": "Createar conto", - "noCoursesFound": "Nulle cursos trovate", "loginWithEmail": "Login con email", "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", - "allCefrLevels": "Tote nivele CEFR", "chatListTooltip": "Ici tu trovara tu messages directe! Clicca super le avatar de qualcunque usator e 'comenciar conversation' pro inviar un DM.", "directMessageBotTitle": "Message directe a Pangea Bot", "feedbackTitle": "Retroaction de activitate", - "feedbackDesc": "Como le activitate debe esser meliorate? Si tu pote providere alcun detalles, nos face le cambio!", "feedbackHint": "Tu retroaction", "feedbackButton": "Submitter retroaction", "directMessageBotDesc": "Parlar con humanos es plus amusante, ma... le IA sempre es preste!", @@ -2439,7 +1958,7 @@ "playWithAI": "Joca con le IA pro ora", "courseStartDesc": "Pangea Bot es preste a comenzar a qualunque momento!\n\n...ma apprender es melior con amicos!", "@@locale": "ia", - "@@last_modified": "2026-01-06 13:01:24.542087", + "@@last_modified": "2026-01-07 14:24:47.787013", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6075,30 +5594,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6122,18 +5617,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6158,18 +5641,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6206,38 +5677,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6246,62 +5689,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6338,10 +5737,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6350,14 +5745,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6366,46 +5753,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6414,10 +5765,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6474,18 +5821,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6494,14 +5829,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6530,18 +5857,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6550,42 +5865,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6594,14 +5877,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6622,26 +5897,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6662,10 +5917,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6698,25 +5949,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6773,34 +6005,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6829,778 +6033,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8593,14 +7029,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8612,14 +7040,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8651,10 +7071,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8663,18 +7079,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8683,14 +7087,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8715,38 +7111,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8792,10 +7160,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8820,10 +7184,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8848,10 +7208,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8860,66 +7216,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8940,42 +7240,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9000,154 +7276,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9164,18 +7292,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9196,14 +7312,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9220,10 +7328,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9236,14 +7340,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9252,14 +7348,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9287,26 +7375,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9335,18 +7403,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9383,10 +7443,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10319,10 +8375,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10503,34 +8555,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10543,10 +8567,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10555,14 +8575,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10579,22 +8591,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10742,14 +8738,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10758,34 +8746,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10794,54 +8754,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10850,10 +8774,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10870,10 +8790,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11045,26 +8961,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11093,10 +8989,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11153,30 +9045,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11205,18 +9081,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11333,14 +9201,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11353,10 +9213,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11365,14 +9221,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11389,14 +9237,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11405,22 +9245,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11433,18 +9257,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11461,22 +9273,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11485,30 +9285,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11581,18 +9357,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11649,18 +9413,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11689,30 +9441,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11765,18 +9501,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11825,46 +9553,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11929,10 +9617,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12104,14 +9788,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12139,14 +9815,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12159,10 +9827,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12198,19 +9862,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12235,14 +9894,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12251,14 +9902,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12311,10 +9954,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12327,18 +9966,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12351,14 +9978,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12399,26 +10018,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12446,10 +10053,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12460,36 +10063,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12526,10 +10099,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12594,18 +10163,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12670,10 +10227,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12694,10 +10247,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12714,10 +10263,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12726,10 +10271,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12742,10 +10283,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12770,16 +10307,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invita amicos a activity", - "inviteFriendsToActivityCourse": "Invita amicos a activity e curso", "feedbackRespDesc": "Revisita demanano pro actualizaciones de activity.", "activityDropdownDesc": "Quando tu ha finite con iste activity, clicca infra", - "activityAnalyticsListBody": "Isto es tu activities complete! Postea que ha finite activities, tu pote vider los hic in le lista hic.", "languageMismatchTitle": "Discrepantie de lingua", "languageMismatchDesc": "Le lingua de destino tu non coincide con le lingua de iste activity. Actualisa tu lingua de destino?", "reportWordIssueTooltip": "Reportar un problema de information de parola", "tokenInfoFeedbackDialogTitle": "Feedback de Information de Parola", - "tokenInfoFeedbackDialogDesc": "AI face errores. Per favor describe qualunque problema que tu ha trovate con le information superio.", "noPublicCoursesFound": "Nulle cursos public trovate. Tu vole crear un?", "noCourseTemplatesFound": "Nos non poteva trovar nulle cursos pro tu lingua de destino. Tu pote chatta con Pangea Bot interim, e revisita postea pro plus cursos.", "botActivityJoinFailMessage": "Pangea Bot ha un poco de tempore pro responder. Per favor prova ancora postea, o invita un amico.", @@ -12787,14 +10320,6 @@ "leaveDesc": "Lassa iste spatio e tote le chats in illo", "selectAll": "Selige tote", "deselectAll": "Deselecte tote", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12803,10 +10328,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12823,10 +10344,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12860,7 +10377,6 @@ "newMessageInPangeaChat": "🗨️ Novy message in Pangea Chat", "shareCourse": "Partagear curso", "addCourse": "Adder un curso", - "joinCourseWithCode": "Joiner curso con codice", "joinPublicCourse": "Joiner curso publice", "vocabLevelsDesc": "Isto es le loco ubi le vocabularies va in post una vice que tu ha levelate los!", "highlightVocabTooltip": "Thekso fjalët e synuara të vocab-it më poshtë duke i dërguar ato ose duke praktikuar me to në bisedë", @@ -12884,10 +10400,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12896,7 +10408,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Ningun DMs o chats trovados. Assicura che la tua ricerca sia scritta correttamente.", + "activityAnalyticsTooltipBody": "Questi sono i tuoi attività salvati per revisione e pratica.", + "numSavedActivities": "Numero di attività salvate", + "saveActivityTitle": "Salva attività", + "saveActivityDesc": "Buon lavoro! Salva questa attività per revisione e pratica futura", + "levelInfoTooltip": "Qui puoi vedere tutti i punti che hai guadagnato e come!", + "alreadyInCourseWithID": "Sei già in un corso con questo piano. Vuoi creare un corso con lo stesso piano, o andare al corso esistente?", + "goToExistingCourse": "Vai al corso esistente", + "emojiView": "Visualizzazione emoji", + "feedbackDialogDesc": "Anch'io faccio errori! Qualcosa per aiutarmi a migliorare?", + "contactHasBeenInvitedToTheCourse": "Kontak telah diundang ke kursus", + "activityStatsButtonTooltip": "Info aktivitas", + "allow": "Izinkan", + "deny": "Tolak", + "enabledRenewal": "Aktifkan Pembaruan Langganan", + "subscriptionEndsOn": "Langganan Berakhir Pada", + "subscriptionRenewsOn": "Langganan Diperbarui Pada", + "waitForSubscriptionChanges": "Perubahan pada langganan Anda mungkin memerlukan waktu sejenak untuk tercermin di aplikasi.", + "subscribeReadingAssistance": "Langganan untuk membuka kunci alat pesan", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Arabic", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijani", + "baDisplayName": "Башкир", + "banDisplayName": "Балийский", + "bbcDisplayName": "Батака Тоба", + "beDisplayName": "Белорусский", + "bemDisplayName": "Бемба", + "bewDisplayName": "Бетави", + "bgDisplayName": "Болгарский", + "bhoDisplayName": "Бходжпури", + "bikDisplayName": "Бикол", + "bmDisplayName": "Бамбар", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnian", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdî Navendî", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsican", + "crhDisplayName": "Tirkî Qırım", + "crsDisplayName": "Seselwa Kreol Frantsay", + "csDisplayName": "Çek", + "cvDisplayName": "Çuvaş", + "cyDisplayName": "Cymraeg", + "daDisplayName": "Danish", + "deDisplayName": "German", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "English", + "enAUDisplayName": "English (Australia)", + "enGBDisplayName": "English (UK)", + "enINDisplayName": "Englisch (Indien)", + "enUSDisplayName": "Englisch (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spanisch", + "esESDisplayName": "Spanisch (Spanien)", + "esMXDisplayName": "Spanisch (Mexiko)", + "euDisplayName": "Baskisch", + "faDisplayName": "Persisch", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnisch", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroese", + "frDisplayName": "Frans", + "frCADisplayName": "Frans (Canada)", + "frFRDisplayName": "Frans (Frankrijk)", + "fyDisplayName": "Wester Frisian", + "gaDisplayName": "Iers", + "gaaDisplayName": "Ga", + "gdDisplayName": "Schots Gaelic", + "glDisplayName": "Galego", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Konkani de Goa", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiiano", + "heDisplayName": "Hebreo", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatian", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitian Creole", + "huDisplayName": "Mađarski", + "hyDisplayName": "Armenski", + "idDisplayName": "Indonežanski", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandski", + "itDisplayName": "Itali", + "jaDisplayName": "Japoni", + "jvDisplayName": "Javani", + "kaDisplayName": "Giorgiani", + "kkDisplayName": "Kazaki", + "kmDisplayName": "Khmeri", + "knDisplayName": "Kannadi", + "koDisplayName": "Koreani", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Republika Demokratika ya Kongo)", + "kuDisplayName": "Kurdish", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgish", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgish", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituanien", + "ltgDisplayName": "Latgalien", + "luoDisplayName": "Luo (Kenya et Tanzanie)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letton", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolian", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabic)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norwegian (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Dutch", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Norwegian", + "nrDisplayName": "Ndebele ya Suthafrica", + "nsoDisplayName": "Sotho ya Leboa", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polish", + "psDisplayName": "Pashto", + "ptDisplayName": "Portuguese", + "ptBRDisplayName": "Portuguese (Brazil)", + "ptPTDisplayName": "Portuguese (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Român", + "roMDDisplayName": "Moldovean", + "romDisplayName": "Romani", + "ruDisplayName": "Rusă", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilian", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovak", + "slDisplayName": "Slovenian", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanian", + "srDisplayName": "Serbian", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Southern Sotho", + "suDisplayName": "Sundanese", + "svDisplayName": "Swedish", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Таджик", + "thDisplayName": "Тай", + "tiDisplayName": "Тигриня", + "tkDisplayName": "Туркмен", + "tlDisplayName": "Тагалог", + "tnDisplayName": "Тсвана", + "trDisplayName": "Турецкий", + "tsDisplayName": "Тсонга", + "ttDisplayName": "Татар", + "ugDisplayName": "Уйгур", + "ukDisplayName": "Ukrainian", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamese", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonés", + "yueCNDisplayName": "Cantonés (China)", + "yueHKDisplayName": "Cantonés (Hong Kong)", + "zhDisplayName": "Chinés", + "zhCNDisplayName": "Chinés (Simplificado)", + "zhTWDisplayName": "Chinés (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12961,6 +11659,7 @@ "placeholders": {} }, "notStartedActivitiesTitle": "Sesiones abiertas ({num})", + "pickDifferentActivity": "Elige una actividad diferente", "inProgressActivitiesTitle": "Sucedendo agora ({num})", "completedActivitiesTitle": "Feito ({num})", "inOngoingActivity": "Você tem uma atividade em andamento!", @@ -12988,10 +11687,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Tua lingua target non concordat cum hoc nuntio. Renovare tuam linguam target?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ita est omnes in hoc cursu. Clicca in cuiuslibet usoris avatar et \"initium colloquii\" ad mittendum DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ita vocab parola va essere permanentemente rimossa da tuas analytics", + "woman": "Femin", + "man": "Mascul", + "otherGender": "Altre", + "unselectedGender": "Seleziona un'opzione di genere", + "gender": "Genere", + "chatParticipantTooltip": "Ita es tutti in ista chat. Clicca su qualunque avatar de utente e \"inizia conversazione\" pro inviar un DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Ileŋa tools are disabled for messages that aren't in your target language.", + "vocabEmoji": "Vocab emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Petició de regeneració", + "optionalRegenerateReason": "(Opcional) Motiu", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Ați setat emoji-ul pentru {lemma}! Vom folosi acest emoji pentru a reprezenta cuvântul în activitățile practice de acum înainte.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Atingindo para a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Disablé langaj alat", + "disableLanguageToolsDesc": "Vouléz-vous désablé l'assistance langaj otomatik?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permisiun denegada. Aktivar permisiun de registru por registru mesajes de audio.", + "genericWebRecordingError": "Algu reso mal. Nos rekomenda usar el navegador Chrome cuando registrando mensajes.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Per la mejor experiencia usando esta aplicación, por favor expande el tamaño de tu pantalla.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Actividades para Desbloquear el Siguiente Tema", "activitiesToUnlockTopicDesc": "Establecer el número de actividades para desbloquear el siguiente tema del curso", "@activitiesToUnlockTopicTitle": { @@ -13001,5 +11818,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Praktiko de ĝusta vortaro difino", + "constructUseIncLMDesc": "Praktiko de malĝusta vortaro difino", + "constructUseCorLADesc": "Praktiko de ĝusta vortaro aŭdio", + "constructUseIncLADesc": "Praktiko de malĝusta vortaro aŭdio", + "constructUseBonus": "Bonus dum vortaro praktiko", + "practiceVocab": "Praktiki vortaron", + "selectMeaning": "Elekti la signifon", + "selectAudio": "Elekti la kongruan aŭdion", + "congratulations": "Gratulon!", + "anotherRound": "Alia rundo", + "noActivityRequest": "Ninguna solicitud de actividad actual.", + "quit": "Salir", + "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", + "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", + "botSettings": "Configuraciones del Bot", + "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index 9e3c7e829..64cf24c41 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:11.059266", + "@@last_modified": "2026-01-07 14:24:04.023956", "setAsCanonicalAlias": "Atur sebagai alias utama", "@setAsCanonicalAlias": { "type": "String", @@ -3380,26 +3380,14 @@ "displayNavigationRail": "Tampilkan jalur navigasi pada ponsel", "@displayNavigationRail": {}, "customReaction": "Reaksi Kustom", - "accountInformation": "Informasi Akun", - "addGroupDescription": "Tambahkan deskripsi obrolan", - "addNewFriend": "Tambahkan teman baru", - "alreadyHaveAnAccount": "Sudah memiliki akun?", - "createNewGroup": "Buat obrolan baru", - "editChatPermissions": "Edit izin obrolan", "writeAMessageLangCodes": "Ketik dalam {l1} atau {l2}...", "requests": "Permintaan", - "allCorrect": "Begitulah saya mengatakannya! Bagus!", - "newWayAllGood": "Itu bukan cara saya mengatakannya, tapi terlihat bagus!", - "othersAreBetter": "Hm, mungkin ada cara yang lebih baik untuk mengatakannya.", "holdForInfo": "Klik dan tahan untuk info kata.", "greenFeedback": "Itu yang akan saya masukkan!", "yellowFeedback": "Hm, kamu bisa mencoba itu dan lihat apakah berhasil! Untuk menggunakan kata ini, cukup klik lagi.", "redFeedback": "Saya rasa itu tidak benar...", "itInstructionsTitle": "Saya bisa membantu menerjemahkan!", "itInstructionsBody": "Kamu bisa klik dan tahan pilihan untuk info kata.", - "oneday": "Last 24 jam", - "oneweek": "Last 7 hari", - "onemonth": "Bulan lalu", "gaTooltip": "Penggunaan L2 dengan bantuan tata bahasa", "taTooltip": "Penggunaan L2 dengan bantuan terjemahan", "unTooltip": "Lainnya", @@ -3409,58 +3397,27 @@ "interactiveTranslatorAllowed": "Pilihan Siswa", "interactiveTranslatorRequired": "Diperlukan", "notYetSet": "Belum diatur", - "myLearning": "Analitik Saya", "waTooltip": "Penggunaan L2 tanpa bantuan", - "changeDateRange": "Ubah rentang tanggal", - "classDescription": "Deskripsi", - "addStudents": "Undang pengguna melalui tautan atau kode", - "copyClassLink": "Salin tautan undangan", - "copyClassCode": "Salin kode undangan", - "inviteStudentByUserName": "Undang pengguna berdasarkan nama pengguna", "languageSettings": "Pengaturan Bahasa", "interactiveTranslator": "Bantuan Terjemahan", - "shareVideo": "Bagikan Video", - "shareVideoDesc": "Aktifkan ini untuk memungkinkan siswa berbagi video di obrolan.", - "shareFiles": "Bagikan Berkas", - "selectLanguageLevel": "Pilih tingkat bahasa", "noIdenticalLanguages": "Harap pilih bahasa dasar dan target yang berbeda", - "iWantALanguagePartnerFrom": "Dari:", - "worldWide": "Dunia", - "noResults": "Tidak ada hasil! Coba perluas pencarian Anda.", "searchBy": "Cari berdasarkan negara dan bahasa", - "iWantAConversationPartner": "Saya menginginkan mitra percakapan yang", - "iWantALanguagePartnerWhoSpeaks": "Berbicara:", - "iWantALanguagePartnerWhoIsLearning": "Sedang belajar:", "joinWithClassCode": "Gabung kursus", - "joinWithClassCodeHint": "Masukkan kode undangan", - "languageLevelPreA1": "Pemula Sejati (Pre A1)", - "languageLevelA1": "Pemula (A1)", - "languageLevelA2": "Dasar (A2)", - "languageLevelB1": "Menengah (B1)", - "languageLevelB2": "Menengah Atas (B2)", - "languageLevelC1": "Lanjutan (C1)", - "languageLevelC2": "Penguasaan (C2)", + "languageLevelPreA1": "Pemula Rendah (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Pemula Tinggi (A2)", + "languageLevelB1": "Menengah Sedang (B1)", + "languageLevelB2": "Lanjutan Rendah (B2)", + "languageLevelC1": "Lanjutan Sedang (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Ubah nama", "changeTheNameOfTheChat": "Ubah nama obrolan", - "askPangeaBot": "Tanyakan Pangea Bot untuk definisi kontekstual.", "sorryNoResults": "Maaf, tidak ada hasil.", "ignoreInThisText": "Abaikan", - "helpMeTranslate": "Ya!", - "needsItShortMessage": "Keluar dari target", "needsItMessage": "Tunggu, itu bukan {targetLanguage}! Apakah Anda membutuhkan bantuan menerjemahkan?", - "needsIgcMessage": "Pesan ini memiliki kesalahan tata bahasa.", - "tokenTranslationTitle": "Sebuah kata ada dalam bahasa dasar Anda.", - "spanTranslationDesc": "Lihat terjemahan yang mungkin di bawah.", - "spanTranslationTitle": "Beberapa kata ada dalam bahasa dasar Anda.", - "l1SpanAndGrammarTitle": "Di luar bahasa target", - "l1SpanAndGrammarDesc": "Ini bisa dalam bahasa dasar Anda atau bisa juga kesalahan tata bahasa.", - "otherTitle": "Anda memiliki kesalahan.", - "otherDesc": "Lihat koreksi yang mungkin di bawah.", "countryInformation": "Negara saya", - "myLanguages": "Bahasa dasar dan target saya", "targetLanguage": "Bahasa Target", "sourceLanguage": "Bahasa Dasar", - "languagesISpeak": "Bahasa yang Saya Kuasai", "updateLanguage": "Bahasa Saya", "whatLanguageYouWantToLearn": "Bahasa apa yang ingin Anda pelajari?", "whatIsYourBaseLanguage": "Apa bahasa dasar Anda?", @@ -3475,13 +3432,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klik di sini untuk memperbarui pengaturan bantuan terjemahan dan tata bahasa", "errorDisableITClassDesc": "Bantuan terjemahan dimatikan untuk kursus tempat obrolan ini berada.", "errorDisableIGCClassDesc": "Bantuan tata bahasa dimatikan untuk kursus tempat obrolan ini berada.", - "itIsDisabled": "Terjemahan Interaktif dinonaktifkan", - "igcIsDisabled": "Pemeriksaan Tata Bahasa Interaktif dinonaktifkan", - "goToLearningSettings": "Pergi ke Pengaturan Pembelajaran", "error405Title": "Bahasa belum diatur", "error405Desc": "Silakan atur bahasa Anda di Menu Utama > Pengaturan Pembelajaran.", - "loginOrSignup": "Masuk dengan", - "iAgreeToThe": "Saya setuju dengan ", "termsAndConditions": "Syarat dan Ketentuan", "andCertifyIAmAtLeast13YearsOfAge": " dan menyatakan saya berusia minimal 16 tahun.", "error502504Title": "Wow, banyak siswa online!", @@ -3489,40 +3441,21 @@ "error404Title": "Kesalahan terjemahan!", "error404Desc": "Bot Pangea tidak yakin bagaimana menerjemahkan itu...", "errorPleaseRefresh": "Kami sedang menelusurinya! Silakan muat ulang dan coba lagi.", - "toggleIT": "Terjemahan Interaktif", - "toggleIGC": "Pemeriksaan Tata Bahasa Interaktif", - "toggleToolSettingsDescription": "Di sini Anda dapat mengubah pengaturan alat bahasa individu Anda.", "connectedToStaging": "Terhubung ke Staging", "learningSettings": "Pengaturan Pembelajaran", - "sendVoiceNotes": "Kirim Catatan Suara", - "sendVoiceNotesDesc": "Aktifkan ini untuk memungkinkan siswa mengirim catatan suara dalam obrolan.", - "chatTopic": "Topik obrolan", - "chatTopicDesc": "Atur topik obrolan", - "inviteStudentByUserNameDesc": "Jika siswa Anda sudah memiliki akun, Anda dapat mencarinya.", "participants": "Peserta", - "almostPerfect": "Sepertinya benar! Inilah apa yang akan saya katakan.", - "prettyGood": "Lumayan bagus! Inilah apa yang akan saya katakan.", - "letMeThink": "Hmm, mari kita lihat bagaimana kamu melakukannya!", "clickMessageTitle": "Butuh bantuan?", "clickMessageBody": "Klik pesan untuk alat bahasa seperti terjemahan, pemutaran kembali, dan lainnya!", - "understandingMessagesTitle": "Definisi dan terjemahan!", - "understandingMessagesBody": "Klik kata yang digarisbawahi untuk definisi. Terjemahkan dengan opsi pesan (kanan atas).", "allDone": "Selesai semua!", "vocab": "Kosa Kata", "low": "Kami memiliki bukti bahwa pengguna tidak memahami kata-kata ini.", "medium": "Kata-kata ini telah digunakan. Tidak jelas apakah kata-kata ini dipahami sepenuhnya atau tidak.", "high": "Kami memiliki bukti bahwa pengguna memahami kata-kata ini.", - "unknownProficiency": "Kata-kata ini belum digunakan dalam Pangea Chat.", - "changeView": "Ganti tampilan.", - "clearAll": "Hapus semua kata?", - "generateVocabulary": "Hasilkan kosa kata dari judul dan deskripsi", - "generatePrompts": "Hasilkan prompt", "subscribe": "Berlangganan", "getAccess": "Berlangganan sekarang!", "subscriptionDesc": "Pesan gratis! Berlangganan untuk membuka kunci terjemahan interaktif, pemeriksaan tata bahasa, dan analitik pembelajaran.", "subscriptionManagement": "Manajemen Langganan", "currentSubscription": "Langganan Saat Ini", - "changeSubscription": "Ubah Langganan Anda", "cancelSubscription": "Batalkan Langganan Anda", "selectYourPlan": "Pilih Rencana Anda", "subsciptionPlatformTooltip": "Silakan masuk ke perangkat asli Anda untuk mengelola rencana langganan Anda", @@ -3531,9 +3464,6 @@ "paymentHistory": "Riwayat Pembayaran", "emptyChatDownloadWarning": "Tidak dapat mengunduh obrolan kosong", "update": "Perbarui", - "updateDesc": "Sekarang Anda dapat memperbarui aplikasi ini dari {localVersion} ke {storeVersion}", - "maybeLater": "Mungkin Nanti", - "mainMenu": "Menu Utama", "toggleImmersionMode": "Mode Imersi", "toggleImmersionModeDesc": "Ketika diaktifkan, semua pesan ditampilkan dalam bahasa target Anda. Pengaturan ini paling berguna dalam pertukaran bahasa.", "itToggleDescription": "Alat pembelajaran bahasa ini akan mengidentifikasi kata dalam bahasa dasar Anda dan membantu Anda menerjemahkannya ke bahasa target Anda. Meskipun jarang, AI dapat membuat kesalahan terjemahan.", @@ -3548,212 +3478,13 @@ "definitionsToolDescription": "Ketika diaktifkan, kata yang digarisbawahi berwarna biru dapat diklik untuk melihat definisi. Klik pesan untuk mengakses definisi.", "translationsToolDescrption": "Ketika diaktifkan, klik pesan dan ikon terjemahan untuk melihat pesan dalam bahasa dasar Anda.", "welcomeBack": "Selamat datang kembali! Jika Anda bagian dari pilot 2023-2024, silakan hubungi kami untuk langganan pilot khusus Anda. Jika Anda seorang guru yang telah (atau institusi Anda telah) membeli lisensi untuk kelas Anda, hubungi kami untuk langganan guru.", - "kickAllStudents": "Keluarkan Semua Siswa", - "kickAllStudentsConfirmation": "Apakah Anda yakin ingin mengeluarkan semua siswa?", - "inviteAllStudents": "Undang Semua Siswa", - "inviteAllStudentsConfirmation": "Apakah Anda yakin ingin mengundang semua siswa?", - "inviteUsersFromPangea": "Tambahkan admin", - "redeemPromoCode": "Tukar Kode Promo", - "enterPromoCode": "Masukkan Kode Promo", "downloadTxtFile": "Unduh File Teks", "downloadCSVFile": "Unduh File CSV", "promotionalSubscriptionDesc": "Anda saat ini memiliki langganan promosi seumur hidup. Pesan ke support@pangea.chat untuk bantuan mengubah langganan Anda.", "originalSubscriptionPlatform": "Langganan dibeli melalui {purchasePlatform}", "oneWeekTrial": "Percobaan Seminggu", "downloadXLSXFile": "Unduh Berkas Excel", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albania", - "amDisplayName": "Amharik", - "arDisplayName": "Arab", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armenia", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basque", - "beDisplayName": "Belarusia", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnia", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgaria", - "myDisplayName": "Burmese", - "caDisplayName": "Katalan, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Chechen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Cina", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Korsika", - "crDisplayName": "Cree", - "hrDisplayName": "Kroasia", - "csDisplayName": "Ceko", - "daDisplayName": "Denmark", - "dvDisplayName": "Divehi; Dhivehi; Maladewa;", - "nlDisplayName": "Belanda", - "enDisplayName": "Inggris", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonia", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fiji", - "fiDisplayName": "Finlandia", - "frDisplayName": "Perancis", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicia", - "kaDisplayName": "Georgia", - "deDisplayName": "Jerman", - "elDisplayName": "Yunani, Modern", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haiti, Kreol Haiti", - "haDisplayName": "Hausa", - "heDisplayName": "Ibrani (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hungarian", - "iaDisplayName": "Interlingua", - "idDisplayName": "Bahasa Indonesia", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandia", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandia", - "itDisplayName": "Italia", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Jepang", - "jvDisplayName": "Jawa", - "klDisplayName": "Kalaallisut, Greenlandic", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmir", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korea", - "kuDisplayName": "Kurdi", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luksemburg, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Lao", - "ltDisplayName": "Lituania", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latvia", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonia", - "mgDisplayName": "Malagasi", - "msDisplayName": "Melayu", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltese", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marathi)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolia", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norwegia Bokmål", - "ndDisplayName": "Ndebele Utara", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norwegia Nynorsk", - "noDisplayName": "Norwegia", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele Selatan", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Kuno Church Slavonic, Slavia Gereja, Slavonik Gereja, Bulgaria Lama, Slavonik Lama", - "omDisplayName": "Oromo", - "orDisplayName": "Oria", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persia", - "plDisplayName": "Polandia", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugis", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumania, Moldavia, Moldovan", - "ruDisplayName": "Rusia", - "saDisplayName": "Sanskerta", - "scDisplayName": "Sardinia", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami Utara", - "smDisplayName": "Samoa", - "sgDisplayName": "Sango", - "srDisplayName": "Serbia", - "gdDisplayName": "Gaelik Skotlandia, Gaelik", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovak", - "slDisplayName": "Slovenia", - "soDisplayName": "Somali", - "stDisplayName": "Sotho Selatan", - "esDisplayName": "Spanyol", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Swedia", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Thailand", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibet Standar, Tibet, Tengah", - "tkDisplayName": "Turkmen", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Kepulauan Tonga)", - "trDisplayName": "Turki", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uighur, Uyghur", - "ukDisplayName": "Ukraina", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnam", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Wales", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisian Barat", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Tidak Diketahui", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multi", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Ibrani", - "jwDisplayName": "Jawa", - "moDisplayName": "Moldavia", - "shDisplayName": "Serbo-Kroasia", "wwCountryDisplayName": "Dunia", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Kepulauan Aland", @@ -4001,41 +3732,25 @@ "yeCountryDisplayName": "Yaman", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Bayar", - "allPrivateChats": "Obrolan Pribadi", - "unknownPrivateChat": "Obrolan pribadi tidak diketahui", + "pay": "Checkout", "invitedToSpace": "{user} telah mengundang Anda untuk bergabung dalam kursus: {space}! Apakah Anda ingin menerima?", - "declinedInvitation": "Undangan ditolak", - "acceptedInvitation": "Undangan diterima", "youreInvited": "📩 Anda diundang!", "invitedToChat": "{user} telah mengundang Anda untuk bergabung dalam obrolan: {name}! Apakah Anda ingin menerima?", "monthlySubscription": "Bulanan", "yearlySubscription": "Tahunan", "defaultSubscription": "Langganan Pangea Chat", "freeTrial": "Percobaan Gratis", - "grammarAnalytics": "Analitik Kesalahan", "total": "Total: ", "noDataFound": "Data tidak ditemukan", - "promoSubscriptionExpirationDesc": "Langganan Anda saat ini bersifat promosi dan berakhir pada {expiration}. Kirim pesan ke support@pangea.chat untuk bantuan mengubah langganan Anda.", - "emptyChatNameWarning": "Silakan masukkan nama untuk obrolan ini", "blurMeansTranslateTitle": "Mengapa pesan menjadi buram?", "blurMeansTranslateBody": "Saat Mode Imersi aktif, pesan yang dikirim dalam bahasa dasar Anda akan buram sementara Pangea Bot menerjemahkannya ke bahasa target Anda. Mode Imersi dapat diaktifkan atau dimatikan di pengaturan individu dan kursus.", - "someErrorTitle": "Hm, ada yang tidak beres", - "someErrorBody": "Ini bisa jadi kesalahan atau sesuatu dalam bahasa dasar Anda.", "bestCorrectionFeedback": "Itu benar!", "distractorFeedback": "Itu tidak sepenuhnya benar.", "bestAnswerFeedback": "Itu benar!", "definitionDefaultPrompt": "Apa arti kata ini?", "practiceDefaultPrompt": "Jawaban terbaik apa?", "correctionDefaultPrompt": "Pengganti terbaik apa?", - "itStartDefaultPrompt": "Apakah Anda ingin bantuan menerjemahkan?", - "lockedChatWarning": "🔒 Obrolan ini telah dikunci", - "lockChat": "Kunci Obrolan", - "suggestToChat": "Sarankan obrolan ini", - "suggestToChatDesc": "Obrolan yang disarankan akan muncul di daftar obrolan", "acceptSelection": "Terima Koreksi", - "acceptSelectionAnyway": "Gunakan ini saja", - "makingActivity": "Sedang membuat aktivitas", "why": "Mengapa?", "definition": "Definisi", "exampleSentence": "Contoh Kalimat", @@ -4043,128 +3758,55 @@ "reportMessageTitle": "{reportingUserId} telah melaporkan pesan dari {reportedUserId} di obrolan {roomName}", "reportMessageBody": "Pesan: {reportedMessage}\nAlasan: {reason}", "noTeachersFound": "Tidak ada guru yang ditemukan untuk dilaporkan", - "viewArchive": "Lihat Arsip", "trialExpiration": "Masa percobaan gratis Anda berakhir pada {expiration}", "freeTrialDesc": "Pengguna baru menerima masa percobaan gratis satu minggu untuk Pangea Chat", "activateTrial": "Percobaan Gratis 7 Hari", "successfullySubscribed": "Anda telah berlangganan dengan sukses!", "clickToManageSubscription": "Klik di sini untuk mengelola langganan Anda.", - "errorGettingAudio": "Terjadi kesalahan saat mendapatkan audio. Silakan segarkan halaman dan coba lagi.", "signUp": "Daftar", "pleaseChooseAtLeastChars": "Silakan pilih setidaknya {min} karakter.", "noEmailWarning": "Harap masukkan alamat email yang valid. Jika tidak, Anda tidak akan dapat mengatur ulang kata sandi Anda. Jika tidak ingin, ketuk lagi tombolnya untuk melanjutkan.", "pleaseEnterValidEmail": "Harap masukkan alamat email yang valid.", "pleaseChooseAUsername": "Silakan pilih nama pengguna", - "chooseAUsername": "Pilih nama pengguna", "define": "Tentukan", "listen": "Dengarkan", - "addConversationBot": "Aktifkan Bot Percakapan", - "addConversationBotDesc": "Tambahkan bot ke obrolan ini", - "convoBotSettingsDescription": "Edit topik percakapan dan tingkat kesulitan", - "enterAConversationTopic": "Masukkan topik percakapan", - "conversationTopic": "Topik percakapan", - "enableModeration": "Aktifkan moderasi", - "enableModerationDesc": "Aktifkan moderasi otomatis untuk meninjau pesan sebelum dikirim", - "conversationLanguageLevel": "Berapa tingkat bahasa dari percakapan ini?", - "showDefinition": "Tampilkan Definisi", - "subscriptionPopupTitle": "Kalimat ini mungkin memiliki kesalahan tata bahasa...", - "subscriptionPopupDesc": "Berlangganan hari ini untuk membuka kunci terjemahan dan koreksi tata bahasa!", - "seeOptions": "Lihat opsi", - "continuedWithoutSubscription": "Lanjutkan tanpa berlangganan", "trialPeriodExpired": "Periode percobaan Anda telah berakhir", - "selectToDefine": "Klik kata apa saja untuk melihat definisinya!", "translations": "terjemahan", "messageAudio": "audio pesan", "definitions": "definisi", "subscribedToUnlockTools": "Berlangganan untuk membuka kunci terjemahan interaktif dan pemeriksaan tata bahasa, pemutaran audio, aktivitas latihan pribadi, dan analitik pembelajaran!", "translationTooltip": "Terjemahkan", - "audioTooltip": "Putar Audio", "speechToTextTooltip": "Transkrip", - "certifyAge": "Saya menyatakan bahwa saya berusia lebih dari {age} tahun", "kickBotWarning": "Mengeluarkan Pangea Bot akan menghapus bot percakapan dari obrolan ini.", - "joinToView": "Gabung ke ruangan ini untuk melihat detail", "refresh": "Segarkan", - "autoPlayTitle": "Putar Otomatis Pesan", - "autoPlayDesc": "Ketika diaktifkan, audio teks-ke-ucapan dari pesan akan diputar secara otomatis saat dipilih.", "messageAnalytics": "Analitik Pesan", "words": "Kata", "score": "Skor", "accuracy": "Akurasi", "points": "Poin", "noPaymentInfo": "Tidak perlu info pembayaran!", - "conversationBotModeSelectDescription": "Aktivitas obrolan", - "conversationBotModeSelectOption_discussion": "Diskusi", - "conversationBotModeSelectOption_custom": "Kustom", - "conversationBotModeSelectOption_conversation": "Percakapan", - "conversationBotModeSelectOption_textAdventure": "Petualangan Teks", - "conversationBotModeSelectOption_storyGame": "Permainan Cerita", - "conversationBotDiscussionZone_title": "Pengaturan Diskusi", - "conversationBotDiscussionZone_discussionTopicLabel": "Topik Diskusi", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Atur topik diskusi", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Kata Kunci Diskusi", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Atur kata kunci diskusi", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Daftar kata kunci dipisahkan koma untuk membimbing diskusi", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Kirim prompt diskusi sesuai jadwal", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Jam antara prompt diskusi", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Respons terhadap reaksi ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaksi untuk mengirim prompt diskusi", - "conversationBotCustomZone_title": "Pengaturan Kustom", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt sistem", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Atur prompt sistem kustom", - "conversationBotCustomZone_customSystemPromptEmptyError": "Prompt sistem kustom hilang", - "botConfig": "Pengaturan bot dan aktivitas", - "botConfigNoPermissionTitle": "Tidak ada izin", - "botConfigNoPermissionMessage": "Hubungi admin ruang untuk mengubah konfigurasi bot", - "addConversationBotDialogTitleInvite": "Konfirmasi mengundang bot percakapan", - "addConversationBotButtonInvite": "Undang", - "addConversationBotDialogInviteConfirmation": "Undang", - "addConversationBotButtonTitleRemove": "Konfirmasi menghapus bot percakapan", - "addConversationBotButtonRemove": "Hapus", - "addConversationBotDialogRemoveConfirmation": "Hapus", - "conversationBotConfigConfirmChange": "Konfirmasi", - "conversationBotStatus": "Undang bot", - "conversationBotTextAdventureZone_title": "Petualangan Teks", - "conversationBotTextAdventureZone_instructionLabel": "Instruksi Penguasa Permainan", - "conversationBotTextAdventureZone_instructionPlaceholder": "Atur instruksi penguasa permainan", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Instruksi penguasa permainan hilang", - "studentAnalyticsNotAvailable": "Data siswa saat ini tidak tersedia", - "roomDataMissing": "Beberapa data mungkin hilang dari ruang di mana Anda bukan anggota.", "updatePhoneOS": "Anda mungkin perlu memperbarui versi OS perangkat Anda.", "wordsPerMinute": "Kata per menit", "autoIGCToolName": "Jalankan otomatis bantuan penulisan Pangea", "autoIGCToolDescription": "Jalankan otomatis bantuan penulisan tata bahasa dan terjemahan Chat Pangea sebelum mengirim pesan saya.", - "runGrammarCorrection": "Periksa pesan", - "grammarCorrectionFailed": "Masalah yang harus ditangani", - "grammarCorrectionComplete": "Tampak bagus!", "tooltipInstructionsTitle": "Tidak yakin apa itu?", "tooltipInstructionsMobileBody": "Tekan dan tahan item untuk melihat tooltip.", "tooltipInstructionsBrowserBody": "Arahkan kursor ke item untuk melihat tooltip.", "chatCapacity": "Kapasitas obrolan", "roomFull": "Ruangan ini sudah penuh.", - "topicNotSet": "Topik belum diatur.", - "chatCapacityNotSet": "Obrolan ini tidak memiliki batas kapasitas.", "chatCapacityHasBeenChanged": "Kapasitas obrolan telah diubah", "chatCapacitySetTooLow": "Kapasitas obrolan harus minimal {count}.", "chatCapacityExplanation": "Kapasitas obrolan membatasi jumlah anggota yang diizinkan dalam obrolan.", - "chatExceedsCapacity": "Obrolan ini melebihi kapasitasnya.", "tooManyRequest": "Terlalu banyak permintaan, silakan coba lagi nanti.", "enterNumber": "Silakan masukkan nilai angka bulat.", "buildTranslation": "Bangun terjemahan Anda dari pilihan di atas", - "nonexistentSelection": "Pilihan tidak lagi ada.", - "changeAnalyticsLanguage": "Ubah Bahasa Analitik", "practice": "Latihan", "noLanguagesSet": "Tidak ada bahasa yang diatur", - "noActivitiesFound": "Cukup sampai di sini untuk saat ini! Kembali nanti untuk lebih banyak.", - "hintTitle": "Petunjuk:", "speechToTextBody": "Untuk pesan suara, Anda dapat melihat transkrip serta skor Kata Per Menit dari pembicara.", "versionNotFound": "Versi Tidak Ditemukan", "fetchingVersion": "Mengambil versi...", "versionFetchError": "Kesalahan saat mengambil versi", "versionText": "Versi: {version}+{buildNumber}", - "languageButtonLabel": "Bahasa: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Putar otomatis terjemahan", - "interactiveTranslatorAutoPlayDesc": "Meluncurkan penerjemah interaktif tanpa meminta.", - "changeAnalyticsView": "Ubah Tampilan Analitik", "l1TranslationBody": "Pesan dalam bahasa dasar Anda tidak akan diterjemahkan.", "deleteSubscriptionWarningTitle": "Anda memiliki langganan aktif", "deleteSubscriptionWarningBody": "Menghapus akun Anda tidak akan secara otomatis membatalkan langganan Anda.", @@ -4172,9 +3814,7 @@ "error520Title": "Silakan coba lagi.", "error520Desc": "Maaf, kami tidak dapat memahami pesan Anda...", "wordsUsed": "Kata yang Digunakan", - "errorTypes": "Jenis Kesalahan", "level": "Level", - "canceledSend": "Pengiriman dibatalkan", "morphsUsed": "Morf digunakan", "translationChoicesBody": "Klik dan tahan opsi untuk petunjuk.", "grammar": "Tata Bahasa", @@ -4184,7 +3824,6 @@ "reportContentIssueTitle": "Laporkan masalah konten", "feedback": "Masukan opsional", "reportContentIssueDescription": "Aduh! AI dapat memfasilitasi pengalaman belajar yang dipersonalisasi tetapi... juga berhalusinasi. Silakan berikan umpan balik apa pun yang Anda miliki dan kami akan mencoba lagi.", - "changeContent": "Aduh! AI dapat memfasilitasi pengalaman belajar yang dipersonalisasi tetapi... juga berhalusinasi. Apa seharusnya itu?", "clickTheWordAgainToDeselect": "Klik kata yang dipilih untuk membatalkan pilihan.", "l2SupportNa": "Tidak Tersedia", "l2SupportAlpha": "Alpha", @@ -4418,7 +4057,6 @@ "grammarCopySPC": "Spesifikasi", "grammarCopyPARTTYPE": "Jenis Partitif", "grammarCopyINTREL": "Interogatif-Relatif", - "grammarCopyNUMFORMpsor": "Jumlah Pemilik", "grammarCopyUNKNOWN": "Tidak diketahui", "grammarCopyNUMBERPSOR": "Nomor Pemilik", "grammarCopyPOSS": "Kepemilikan", @@ -4464,28 +4102,14 @@ "grammarCopyVOICEdir": "Langsung", "grammarCopyVOICEinv": "Terbalik", "grammarCopyVOICErcp": "Timbal Balik", - "enterPrompt": "Silakan masukkan prompt sistem", - "selectBotLanguage": "Pilih bahasa bot", - "chooseVoice": "Pilih suara", - "enterLanguageLevel": "Silakan masukkan tingkat bahasa", - "enterDiscussionTopic": "Silakan masukkan topik diskusi", - "selectBotChatMode": "Pilih mode obrolan", - "messageNotInTargetLang": "Pesan tidak dalam bahasa target", "other": "Lainnya", "levelShort": "LVL {level}", - "botModeValidation": "Silakan pilih mode obrolan", "clickBestOption": "Pilih opsi terbaik untuk menerjemahkan pesan Anda!", "completeActivitiesToUnlock": "Selesaikan setidaknya satu aktivitas untuk membuka kunci terjemahan!", - "botSettingsSubtitle": "Undang bot untuk memoderasi aktivitas obrolan", - "invitePeople": "Undang pengguna", "noCapacityLimit": "Tanpa batas kapasitas", "downloadGroupText": "Unduh teks grup", "notificationsOn": "Notifikasi aktif", "notificationsOff": "Notifikasi mati", - "chatCanBeFoundViaSearch": "Obrolan dapat ditemukan melalui pencarian", - "requireCodeToJoin": "Memerlukan kode untuk bergabung", - "canFindInSearch": "Dapat ditemukan dalam pencarian", - "addChatToSpace": "Tambahkan obrolan", "createChatAndInviteUsers": "Buat obrolan dan undang pengguna", "updatedNewSpaceDescription": "Kursus memungkinkan Anda mengkonsolidasikan obrolan dan membangun komunitas pribadi atau publik.", "joinWithCode": "Gabung dengan kode", @@ -4521,39 +4145,19 @@ "constructUseCollected": "Terkumpul dalam obrolan", "constructUseNanDesc": "Tidak berlaku", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Masuk dengan nama pengguna dan kata sandi", - "registrationEmailMessage": "Harap verifikasi email Anda dengan tautan yang dikirimkan. Dalam beberapa kasus, email memerlukan waktu hingga 5 menit untuk tiba. Harap juga periksa folder spam Anda.", "enableTTSToolName": "Aktifkan teks-ke-ucapan", "enableTTSToolDescription": "Izinkan aplikasi menghasilkan keluaran teks-ke-ucapan untuk bagian teks dalam bahasa target Anda.", - "couldNotFindTTS": "Kami tidak dapat menemukan mesin teks-ke-ucapan untuk bahasa target Anda saat ini.", - "ttsInstructionsHyperlink": "Klik di sini untuk melihat petunjuk mengunduh suara baru di perangkat Anda.", - "createAnAccount": "Buat akun", - "signIn": "Masuk", - "signUpWithEmail": "Daftar dengan Email", - "signUpWithGoogle": "Daftar dengan Google", - "signUpWithApple": "Daftar dengan Apple", "yourUsername": "Nama pengguna Anda", "yourEmail": "Email Anda", - "pleaseEnterAnEmail": "Harap masukkan alamat email", - "signInWithGoogle": "Masuk dengan Google", - "signInWithApple": "Masuk dengan Apple", - "chooseYourAvatar": "Pilih avatar Anda", "iWantToLearn": "Saya ingin belajar", - "letsStart": "Mari kita mulai", - "pleaseAgreeToTOS": "Harap setujui Syarat dan Ketentuan", "pleaseEnterEmail": "Harap masukkan alamat email yang valid.", - "pleaseSelectALanguage": "Harap pilih bahasa", "myBaseLanguage": "Bahasa dasar saya", - "clickWordsInstructions": "🧻 Klik kata apa saja untuk detail. 🤐", - "chooseBestDefinition": "Apa arti kata ini?", "meaningSectionHeader": "Arti:", "formSectionHeader": "Bentuk yang digunakan dalam obrolan:", - "noEmojiSelectedTooltip": "Tidak ada emoji yang dipilih", "writingExercisesTooltip": "Menulis", "listeningExercisesTooltip": "Mendengarkan", "readingExercisesTooltip": "Membaca", "meaningNotFound": "Arti tidak dapat ditemukan.", - "formsNotFound": "Bentuk tidak dapat ditemukan.", "chooseBaseForm": "Pilih bentuk dasar", "notTheCodeError": "Maaf, itu bukan kode!", "totalXP": "Total XP", @@ -4593,9 +4197,6 @@ "pickAnEmoji": "Emoji favorit Anda untuk '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Cocokkan arti dengan kata-kata dalam pesan!", "doubleClickToEdit": "Klik dua kali untuk mengedit.", - "removeFeature": "Hapus {feature}", - "chooseCorrectLabel": "Pilih label yang benar.", - "levelPopupTitle": "Selamat! Anda mencapai\nLevel {level}", "activityPlannerTitle": "Perencana Kegiatan", "topicLabel": "Topik", "topicPlaceholder": "Pilih topik...", @@ -4603,7 +4204,6 @@ "modePlaceholder": "Pilih mode...", "learningObjectiveLabel": "Tujuan Pembelajaran", "learningObjectivePlaceholder": "Pilih tujuan pembelajaran...", - "mediaLabel": "Media yang harus dibagikan pelajar", "languageOfInstructionsLabel": "Bahasa instruksi aktivitas", "targetLanguageLabel": "Bahasa target", "cefrLevelLabel": "Level CEFR", @@ -4618,20 +4218,15 @@ "instructions": "Instruksi", "numberOfLearners": "Jumlah pelajar", "mustBeInteger": "Harus berupa bilangan bulat misalnya 1, 2, 3, ...", - "noLemmasFound": "Tidak ada kosakata dengan lebih dari {xp} XP. Terus berlatih!", "constructUsePvmDesc": "Diproduksi dalam pesan suara", - "lockedMorphFeature": "Menunggu dibuka", "leaveSpaceDescription": "Dengan meninggalkan kursus, Anda akan meninggalkan semua obrolan di dalamnya. Pengguna lain akan melihat bahwa Anda telah meninggalkan kursus.", - "whatIsLemma": "Apa itu lemma?", "constructUseCorMmDesc": "Makna pesan yang benar", "constructUseIncMmDesc": "Makna pesan yang salah", "constructUseIgnMmDesc": "Makna pesan yang diabaikan", "clickForMeaningActivity": "Klik di sini untuk Tantangan Makna", "meaning": "Makna", "chatWith": "Grup dengan {displayname}", - "slightlyOffensive": "Agak menyinggung", "clickOnEmailLink": "Silakan klik tautan di email dan kemudian lanjutkan.\n\nPeriksa folder spam Anda jika email belum tiba.", - "whoIsAllowedToJoinThisChat": "Siapa yang diizinkan bergabung dalam obrolan ini", "dontForgetPassword": "Jangan lupa kata sandi Anda!", "enableAutocorrectToolName": "Aktifkan koreksi otomatis perangkat", "enableAutocorrectDescription": "Jika perangkat Anda mendukung bahasa yang sedang Anda pelajari, Anda dapat mengaktifkan koreksi otomatis perangkat untuk memperbaiki kesalahan umum saat mengetik.", @@ -4659,48 +4254,26 @@ "autocorrectNotAvailable": "Sayangnya platform Anda saat ini tidak didukung untuk fitur ini. Nantikan pengembangan lebih lanjut!", "pleaseUpdateApp": "Harap perbarui aplikasi untuk melanjutkan.", "chooseEmojiInstructionsBody": "Cocokkan emoji dengan kata yang paling mewakilinya. Jangan khawatir! Tidak ada poin yang dikurangi jika tidak setuju. 😅", - "pickAnEmojiFor": "Pilih emoji untuk {lemma}", "analyticsVocabListBody": "Ini semua kosakata Anda! Saat Anda mendapatkan XP untuk setiap kata, mereka akan berkembang dari bibit hingga mekar penuh. Klik pada kata apa saja untuk melihat detail lebih lanjut.", "morphAnalyticsListBody": "Ini semua konsep tata bahasa dalam bahasa yang sedang Anda pelajari! Anda akan membukanya saat menemukannya saat mengobrol. Klik untuk detail.", "knockSpaceSuccess": "Anda telah meminta untuk bergabung dengan kursus ini! Seorang admin akan merespons permintaan Anda saat mereka menerimanya 😊", - "joinByCode": "Gabung dengan kode", "chooseWordAudioInstructionsBody": "Dengarkan pesan lengkapnya. Kemudian cocokkan audio dengan kata-kata.", "chooseMorphsInstructionsBody": "Klik bagian puzzle untuk pertanyaan tata bahasa!", - "inviteAndLaunch": "Undang dan mulai", - "createOwnChat": "Buat obrolan sendiri", "pleaseEnterInt": "Silakan masukkan angka", "home": "Beranda", "join": "Gabung", "readingAssistanceOverviewBody": "Klik tombol di bawah untuk permainan mini tentang mencocokkan emoji, audio, arti kata, dan konsep tata bahasa. Atau klik kata apa saja untuk detail.", - "learnByTexting": "Belajar melalui pesan teks", - "levelSummaryTrigger": "Lihat ringkasan", "levelSummaryPopupTitle": "Ringkasan Level {level}", - "referFriends": "Refer teman", - "referFriendDialogTitle": "Undang teman ke percakapanmu", - "referFriendDialogDesc": "Apakah Anda memiliki teman yang bersemangat belajar bahasa baru dengan Anda? Salin dan kirimkan tautan undangan ini untuk bergabung dan mulai mengobrol dengan Anda hari ini.", - "youUnlocked": "Anda telah membuka kunci", "resetInstructionTooltipsTitle": "Atur ulang tooltip instruksi", "resetInstructionTooltipsDesc": "Klik untuk menampilkan tooltip instruksi seperti untuk pengguna baru.", "selectForGrammar": "Pilih ikon tata bahasa untuk aktivitas dan detail.", - "newChatActivityTitle": "Tambah aktivitas menyenangkan?", - "newChatActivityDesc": "Jadikan setiap obrolan grup petualangan dengan Perencana Aktivitas! Tetapkan topik dan tujuan menarik untuk grup, dan hidupkan percakapan dengan gambar yang menakjubkan. Bangkitkan diskusi imajinatif dan pertahankan kesenangan mengalir tanpa hambatan!", - "exploreMore": "Jelajahi lebih banyak", "randomize": "Acak", "clear": "Hapus", "makeYourOwnActivity": "Buat aktivitas sendiri", "featuredActivities": "Unggulan", - "goToChat": "Pergi ke obrolan", "save": "Simpan", - "selectActivity": "Pilih aktivitas", - "wordFocusListeningMultipleChoice": "Audio mana yang cocok dengan kata?", "startChat": "Mulai obrolan", "translationProblem": "Masalah terjemahan", - "perfectTranslation": "Terjemahan sempurna!", - "greatJobTranslation": "Kerja bagus dengan terjemahan ini!", - "goodJobTranslation": "Kerja bagus pada terjemahan ini.", - "makingProgress": "Anda sedang membuat kemajuan!", - "keepPracticing": "Terus berlatih!", - "niceJob": "Kerja bagus!", "askToJoin": "Minta bergabung", "emptyChatWarningTitle": "Obrolan kosong", "emptyChatWarningDesc": "Anda belum mengundang siapa pun ke obrolan Anda. Pergi ke Pengaturan Obrolan untuk mengundang kontak Anda atau Bot. Anda juga dapat melakukannya nanti.", @@ -4719,8 +4292,6 @@ "languageLevelC2Desc": "Saya dapat memahami hampir semua yang didengar atau dibaca dan mengungkapkan diri secara lancar dan tepat.", "newVocab": "Kosakata baru", "newGrammar": "Konsep tata bahasa baru", - "congratulationsOnReaching": "Selamat! Anda telah mencapai Level {level}!", - "seeDetails": "Lihat Rincian", "choosePracticeMode": "Klik salah satu tombol di atas untuk memulai aktivitas latihan", "ban": "Blokir", "unban": "Buka blokir", @@ -4734,8 +4305,6 @@ "timesUsedWithAssistance": "Jumlah digunakan dengan bantuan", "shareInviteCode": "Bagikan kode undangan: {code}", "leaderboard": "Papan peringkat", - "welcomeUser": "Selamat datang {user}", - "joinSpaceOnboardingDesc": "Apakah Anda memiliki kode undangan atau tautan ke kursus publik?", "skipForNow": "Lewati untuk saat ini", "permissions": "Izin", "spaceChildPermission": "Siapa yang dapat menambahkan obrolan baru ke kursus ini", @@ -4743,12 +4312,8 @@ "defaultOption": "Default", "deleteChatDesc": "Anda yakin ingin menghapus obrolan ini? Ini akan dihapus untuk semua peserta dan semua pesan dalam obrolan tidak akan lagi tersedia untuk latihan atau analitik pembelajaran.", "deleteSpaceDesc": "Kursus dan obrolan yang dipilih akan dihapus untuk semua peserta dan semua pesan dalam obrolan tidak akan lagi tersedia untuk latihan atau analitik pembelajaran. Tindakan ini tidak dapat dibatalkan.", - "chatWithActivities": "Obrolan dengan aktivitas", "launch": "Luncurkan", - "launchActivityToChats": "Luncurkan aktivitas ke obrolan", "searchChats": "Cari obrolan", - "selectChats": "Pilih obrolan", - "selectChatToStart": "Selesai! Pilih obrolan untuk memulai", "maxFifty": "Maks 50", "configureSpace": "Konfigurasi kursus", "pinMessages": "Pin pesan", @@ -4762,9 +4327,7 @@ "announcements": "Pengumuman", "activities": "Kegiatan", "access": "Akses", - "botSettings": "Pengaturan bot", "activitySuggestionTimeoutMessage": "Kami sedang bekerja keras untuk menghasilkan lebih banyak kegiatan untuk Anda, silakan periksa kembali dalam satu menit", - "accessSettingsWarning": "Ups! Sepertinya Anda tidak memiliki izin untuk mengatur aturan Akses ruang ini. Anda harus memeriksa ini untuk memastikan bahwa itu sesuai dengan kebutuhan Anda dan berbicara dengan admin ruang jika Anda perlu mengubahnya", "howSpaceCanBeFound": "Bagaimana kursus ini dapat ditemukan", "private": "Pribadi", "cannotBeFoundInSearch": "Tidak dapat ditemukan dalam pencarian", @@ -4777,16 +4340,6 @@ "canBeFoundViaKnock": "• permintaan bergabung dan persetujuan admin", "youHaveLeveledUp": "Anda telah naik level!", "sendActivities": "Kirim kegiatan", - "getStarted": "Mulai", - "getStartedBotChatDesc": "Mengobrol dengan AI adalah tempat yang bagus untuk memulai dan alat membaca, menulis, mendengarkan, dan berbicara Pangea memudahkan!", - "getStartedCommunitiesDesc": "Belajar dengan komunitas adalah tempat bersinar Pangea Chat!\nAnda dapat bergabung dengan kelas Anda, menemukan kursus, atau bahkan membuat sendiri!", - "getStartedFriendsDesc": "Apakah Anda memiliki teman yang ingin belajar bersama Anda?", - "getStartedBotChatComplete": "Bagus! Anda sedang mengobrol dengan bot!", - "getStartedCommunitiesComplete": "Hebat, Anda telah bergabung dengan sebuah kursus!", - "getStartedComplete": "Anda telah menyelesaikan bagian ini!\nTerus jelajahi fitur menakjubkan kami dengan mengobrol dengan teman!", - "getStartedFriendsComplete": "Woohoo! Anda memiliki teman! 😉", - "getStartedBotChatButton": "Mulai mengobrol!", - "getStartedFriendsButton": "Bicara dengan teman", "groupChat": "Obrolan Grup", "directMessage": "Pesan Langsung", "newDirectMessage": "Pesan langsung baru", @@ -4802,7 +4355,6 @@ "mySavedActivities": "Aktivitas Tersimpan Saya", "noSavedActivities": "Tidak ada aktivitas tersimpan", "saveActivity": "Simpan aktivitas ini", - "yourSavedActivities": "Aktivitas Tersimpan", "failedToPlayVideo": "Gagal memutar video", "done": "Selesai", "inThisSpace": "Dalam kursus ini", @@ -4841,37 +4393,27 @@ "maximumActivityParticipants": "Setiap Aktivitas dapat memiliki maksimal {count} peserta.", "pending": "Menunggu", "inactive": "Tidak aktif", - "unjoinedActivityMessage": "Apakah Anda ingin berpartisipasi? Pilih peran terbuka!\nAtau bersantai dan tonton pertunjukan!", - "fullActivityMessage": "Silakan tonton pertunjukan! Sementara tidak ada peran terbuka untuk berpartisipasi, Anda dapat melihat obrolan!", "confirmRole": "Konfirmasi peran", "openRoleLabel": "TERBUKA", "joinedTheActivity": "👋 {username} bergabung sebagai {role}", "finishedTheActivity": "🎯 {username} menyelesaikan aktivitas ini", - "endActivityTitle": "Saya selesai", - "endActivityDesc": "Apakah Anda menyelesaikan tujuan?\nIni adalah konfirmasi bahwa Anda mundur dari mengirim pesan. Tapi jangan khawatir, kesenangan berlanjut di obrolan! Bersantai dan nikmati pertunjukan sampai semua orang mengklik 'Selesai'.", "archiveToAnalytics": "Tambahkan ke Aktivitas Selesai saya", "activitySummaryError": "Ringkasan aktivitas tidak tersedia", "requestSummaries": "Minta ringkasan", - "loadingActivitySummary": "Memuat ringkasan aktivitas...", "generatingNewActivities": "Anda adalah pengguna pertama dari pasangan bahasa ini! Mohon tunggu sebentar, kami sedang menyiapkan aktivitas khusus untuk Anda.", - "requestAccessTitle": "Permintaan akses ke tampilan analitik?", + "requestAccessTitle": "Minta akses analitik?", "requestAccessDesc": "Apakah Anda ingin meminta akses untuk melihat analitik peserta?\n\nJika peserta setuju, admin kursus ini akan dapat melihat:\n • total kosakata\n • total konsep tata bahasa\n • total sesi aktivitas yang diselesaikan\n • konsep tata bahasa tertentu yang digunakan, dengan benar dan salah\n\nMereka tidak akan dapat melihat:\n • pesan dalam obrolan di luar kursus\n • daftar kosakata", "requestAccess": "Permintaan akses ({count})", "analyticsInactiveTitle": "Permintaan ke pengguna tidak aktif tidak dapat dikirim", "analyticsInactiveDesc": "Pengguna tidak aktif yang belum masuk sejak fitur ini diperkenalkan tidak akan melihat permintaan Anda.\n\nTombol Permintaan akan muncul setelah mereka kembali. Anda dapat mengirim ulang permintaan nanti dengan mengklik tombol Permintaan di bawah nama mereka saat tersedia.", "accessRequestedTitle": "Permintaan Akses Analitik", - "accessRequestedDesc": "Para administrator \"{space}\" meminta untuk melihat analitik pembelajaran Anda.\n\nJika Anda setuju, admin kursus ini akan dapat melihat:\n • total kosakata\n • total konsep tata bahasa\n • total sesi aktivitas yang diselesaikan\n • konsep tata bahasa tertentu yang digunakan, dengan benar dan salah\n\nMereka tidak akan dapat melihat:\n • pesan dalam obrolan di luar kursus\n • daftar kosakata", - "allowAccess": "Izinkan Akses", - "denyAccess": "Tolak Akses", + "accessRequestedDesc": "Meminta admin(s): {admin} \n\nAdmin dari “{space}” meminta untuk melihat analitik pembelajaran Anda.\n\nJika Anda setuju, mereka akan dapat melihat:\n • total kosakata\n • total konsep tata bahasa\n • total sesi aktivitas yang diselesaikan\n • konsep tata bahasa spesifik yang digunakan, dengan benar dan salah\n\nMereka tidak akan dapat melihat:\n • pesan di obrolan di luar kursus\n • daftar kosakata", "adminRequestedAccess": "Admin meminta untuk melihat analitik Anda.", "lastUpdated": "Diperbarui\n{time}", "activityFinishedMessage": "Semua Selesai!", "endForAll": "Akhiri untuk semua", "newCourse": "Kursus Baru", - "newCourseSubtitle": "Rencana kursus mana yang ingin Anda gunakan?", - "failedToLoadCourses": "Gagal memuat kursus", "numModules": "{num} modul", - "numActivityPlans": "{num} rencana aktivitas", "coursePlan": "Rencana Kursus", "editCourseLater": "Anda dapat mengedit judul template, deskripsi, dan gambar kursus nanti.", "newCourseAccess": "Secara default, kursus bersifat pribadi dan memerlukan persetujuan admin untuk bergabung. Anda dapat mengedit pengaturan ini kapan saja.", @@ -4885,17 +4427,11 @@ "accessDesc": "Anda dapat membuat kursus Anda terbuka untuk dunia! Atau, buat kursus Anda pribadi dan aman.", "createGroupChatDesc": "Sedangkan sesi aktivitas dimulai dan berakhir, obrolan grup akan tetap terbuka untuk komunikasi rutin.", "deleteDesc": "Hanya admin yang dapat menghapus kursus. Ini adalah tindakan destruktif yang menghapus semua pengguna dan menghapus semua obrolan yang dipilih dalam kursus. Lanjutkan dengan hati-hati.", - "failedToLoadCourseInfo": "Gagal memuat informasi kursus", "noCourseFound": "Oh, kursus ini membutuhkan rencana!\n\nRencana kursus adalah rangkaian topik dan aktivitas percakapan.", "additionalParticipants": "+ {num} lainnya", - "activityNotFoundForCourse": "Aktivitas ini tidak ditemukan dalam kursus", - "courseChats": "Obrolan Kursus", - "myActivitySessions": "Sesi Aktivitas Saya", "directMessages": "Pesan Langsung", "whatNow": "Apa sekarang?", "chooseNextActivity": "Pilih aktivitas berikutnya!", - "seeInstructions": "Lihat Petunjuk", - "hideInstructions": "Sembunyikan Petunjuk", "letsGo": "Ayo mulai", "chooseRole": "Pilih peran!", "chooseRoleToParticipate": "Pilih peran untuk berpartisipasi!", @@ -4905,23 +4441,15 @@ "inviteFriends": "Undang teman", "waitNotDone": "Tunggu, saya belum selesai!", "waitingForOthersToFinish": "Menunggu yang lain selesai...", - "saveToCompletedActivities": "Simpan ke aktivitas yang selesai", "generatingSummary": "Menganalisis obrolan dan menghasilkan hasil", - "instructionsLanguage": "Bahasa instruksi", "findCourse": "Cari kursus", - "activityCompletedDesc": "Aktivitas yang selesai Anda tambahkan ke analitik di mana Anda dapat meninjau dan berlatih bahasa yang Anda gunakan.", "pingParticipantsNotification": "{user} sedang mencari pengguna untuk bergabung dalam sesi aktivitas di {room}", "course": "Kursus", "courses": "Kursus", "courseName": "Nama kursus", "createNewCourse": "Kursus baru", - "publicCourses": "Kursus publik", "goToCourse": "Pergi ke kursus: {course}", "activityComplete": "Aktivitas ini telah selesai. Ringkasan aktivitas harus tersedia di bawah.", - "haventChattedMuch": "Sepertinya Anda belum banyak mengobrol, coba gunakan beberapa kata vocab lagi! Jika Anda merasa telah menyelesaikan tujuan Anda, Anda dapat mengakhiri aktivitas di bawah.", - "haveChatted": "Sepertinya Anda telah mengobrol cukup lama! Jika Anda merasa telah menyelesaikan tujuan Anda, akhiri untuk menyelesaikan aktivitas dan kami akan membuatkan ringkasan untuk Anda di obrolan!", - "userDoneAndWaiting": "{num1}/{num2} peserta telah selesai. Tunggu hingga semua selesai, dan kami akan membuatkan ringkasan untuk Anda di obrolan! \n\nJika Anda ingin bergabung kembali dalam percakapan, klik tombol lanjutkan di obrolan.", - "othersDoneAndWaiting": "{num1}/{num2} telah selesai. Apakah Anda telah menyelesaikan tujuan Anda?", "startNewSession": "Mulai sesi baru", "joinOpenSession": "Gabung sesi terbuka", "less": "kurang", @@ -4931,7 +4459,6 @@ "openToJoin": "Terbuka untuk bergabung", "results": "Hasil", "activityDone": "Aktivitas Selesai!", - "moreLabel": "lebih", "promoCodeInfo": "Kode promo dapat dimasukkan di halaman berikutnya", "editsComingSoon": "Fitur untuk mengedit kota dan aktivitas akan segera hadir.", "editing": "Mengedit", @@ -4947,13 +4474,10 @@ "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", - "chooseLanguage": "Pilih bahasa.", + "chooseLanguage": "Pilih bahasa target.", "planTrip": "Rencanakan perjalanan Anda", "howAreYouTraveling": "Bagaimana Anda bepergian?", "unlockPrivateTrip": "Buka perjalanan pribadi", @@ -4966,25 +4490,20 @@ "courseCode": "Apa kata sandi rahasianya?", "courseCodeHint": "Kode perjalanan atau tautan", "unlockMyTrip": "Buka perjalanan saya", - "anyLevel": "Level apa saja", "signupOption": "Bagaimana Anda ingin mendaftar?", "withApple": "Dengan Apple", "withGoogle": "Dengan Google", "withEmail": "Dengan Email", "createAccount": "Buat akun", - "noCoursesFound": "Tidak ditemukan kursus", "loginWithEmail": "Masuk dengan email", "usernameOrEmail": "Nama pengguna atau email", "email": "Email", "forgotPassword": "Lupa kata sandi?", - "writingAnalyticsDesc": "Kirim pesan untuk berlatih menulis.", "endActivity": "Akhiri aktivitas", "allLanguages": "Semua bahasa", - "allCefrLevels": "Semua tingkat CEFR", "chatListTooltip": "Di sini Anda akan menemukan pesan langsung Anda! Klik avatar pengguna mana pun dan \"mulai percakapan\" untuk mengirim DM.", "directMessageBotTitle": "Pesan langsung Pangea Bot", "feedbackTitle": "Umpan balik Aktivitas", - "feedbackDesc": "Bagaimana aktivitas dapat ditingkatkan? Jika Anda dapat memberikan beberapa detail, kami akan melakukan perubahan!", "feedbackHint": "Umpan balik Anda", "feedbackButton": "Kirim umpan balik", "directMessageBotDesc": "Berbicara dengan manusia lebih menyenangkan tetapi... AI selalu siap!", @@ -4996,30 +4515,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5035,18 +4530,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5071,18 +4554,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5119,38 +4590,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5159,62 +4602,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5251,10 +4650,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5263,14 +4658,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5279,46 +4666,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5327,10 +4678,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5387,18 +4734,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5407,14 +4742,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5443,18 +4770,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5463,42 +4778,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5507,14 +4790,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5535,26 +4810,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5575,10 +4830,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5611,25 +4862,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5686,34 +4918,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5742,778 +4946,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7506,14 +5942,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7525,14 +5953,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7564,10 +5984,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7576,18 +5992,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7596,14 +6000,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7628,38 +6024,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7705,10 +6073,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7733,10 +6097,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7761,10 +6121,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7773,66 +6129,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7853,42 +6153,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7913,154 +6189,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8077,18 +6205,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8109,14 +6225,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8133,10 +6241,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8149,14 +6253,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8165,14 +6261,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8200,26 +6288,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8248,18 +6316,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8296,10 +6356,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9232,10 +7288,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9416,34 +7468,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9456,10 +7480,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9468,14 +7488,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9492,22 +7504,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9655,14 +7651,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9671,34 +7659,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9707,54 +7667,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9763,10 +7687,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9783,10 +7703,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9958,26 +7874,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10006,10 +7902,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10066,30 +7958,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10118,18 +7994,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10246,14 +8114,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10266,10 +8126,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10278,14 +8134,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10302,14 +8150,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10318,22 +8158,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10346,18 +8170,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10374,22 +8186,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10398,30 +8198,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10494,18 +8270,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10562,18 +8326,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10602,30 +8354,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10678,18 +8414,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10738,46 +8466,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10842,10 +8530,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11017,14 +8701,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11052,14 +8728,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11072,10 +8740,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11111,19 +8775,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11148,14 +8807,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11164,14 +8815,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11224,10 +8867,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11240,18 +8879,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11264,14 +8891,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11312,26 +8931,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11359,10 +8966,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11373,36 +8976,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11439,10 +9012,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11507,18 +9076,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11583,10 +9140,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11607,10 +9160,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11627,10 +9176,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11639,10 +9184,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11655,10 +9196,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11683,16 +9220,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Undang teman ke aktivitas", - "inviteFriendsToActivityCourse": "Undang teman ke aktivitas dan kursus", "feedbackRespDesc": "Periksa kembali besok untuk pembaruan aktivitas.", "activityDropdownDesc": "Ketika Anda selesai dengan aktivitas ini, klik di bawah", - "activityAnalyticsListBody": "Ini adalah aktivitas yang telah Anda selesaikan! Setelah menyelesaikan aktivitas, Anda dapat melihatnya di sini.", "languageMismatchTitle": "Ketidaksesuaian bahasa", "languageMismatchDesc": "Bahasa target Anda tidak cocok dengan bahasa aktivitas ini. Perbarui bahasa target Anda?", "reportWordIssueTooltip": "Laporkan masalah informasi kata", "tokenInfoFeedbackDialogTitle": "Umpan Balik Informasi Kata", - "tokenInfoFeedbackDialogDesc": "AI membuat kesalahan. Silakan deskripsikan masalah apa pun yang Anda temukan dengan informasi di atas.", "noPublicCoursesFound": "Tidak ditemukan kursus publik. Apakah Anda ingin membuat satu?", "noCourseTemplatesFound": "Kami tidak dapat menemukan kursus untuk bahasa target Anda. Sementara itu, Anda dapat mengobrol dengan Pangea Bot, dan kembali nanti untuk kursus lainnya.", "botActivityJoinFailMessage": "Pangea Bot membutuhkan waktu untuk merespons. Silakan coba lagi nanti, atau undang teman.", @@ -11700,14 +9233,6 @@ "leaveDesc": "Keluar dari ruang ini dan semua obrolan di dalamnya", "selectAll": "Pilih semua", "deselectAll": "Batalkan pilihan semua", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11716,10 +9241,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11736,10 +9257,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11773,7 +9290,6 @@ "newMessageInPangeaChat": "📝 Pesan baru di Pangea Chat", "shareCourse": "Bagikan kursus", "addCourse": "Tambahkan kursus", - "joinCourseWithCode": "Gabung kursus dengan kode", "joinPublicCourse": "Gabung kursus publik", "vocabLevelsDesc": "Di sinilah kata-kata kosakata akan ditempatkan setelah Anda meningkatkannya!", "highlightVocabTooltip": "Sorot kata-kata kosakata target di bawah ini dengan mengirimkannya atau berlatih dengan mereka di obrolan", @@ -11797,10 +9313,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11809,7 +9321,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Tidak ada DM atau obrolan yang ditemukan. Pastikan pencarian Anda dieja dengan benar.", + "activityAnalyticsTooltipBody": "Ini adalah aktivitas yang Anda simpan untuk ditinjau dan dipraktikkan.", + "numSavedActivities": "Jumlah aktivitas yang disimpan", + "saveActivityTitle": "Simpan aktivitas", + "saveActivityDesc": "Kerja bagus! Simpan aktivitas ini untuk ditinjau dan dipraktikkan nanti", + "levelInfoTooltip": "Di sini Anda dapat melihat semua poin yang telah Anda peroleh dan bagaimana!", + "alreadyInCourseWithID": "Anda sudah berada di kursus dengan rencana ini. Apakah Anda ingin membuat kursus dengan rencana yang sama, atau pergi ke kursus yang ada?", + "goToExistingCourse": "Pergi ke kursus yang ada", + "emojiView": "Tampilan emoji", + "feedbackDialogDesc": "Saya juga membuat kesalahan! Ada yang bisa membantu saya untuk memperbaiki?", + "contactHasBeenInvitedToTheCourse": "Kontak telah diundang ke kursus", + "activityStatsButtonTooltip": "Info aktivitas", + "allow": "Izinkan", + "deny": "Tolak", + "enabledRenewal": "Aktifkan Pembaruan Langganan", + "subscriptionEndsOn": "Langganan Berakhir Pada", + "subscriptionRenewsOn": "Langganan Diperbarui Pada", + "waitForSubscriptionChanges": "Perubahan pada langganan Anda mungkin memerlukan waktu sejenak untuk tercermin di aplikasi.", + "subscribeReadingAssistance": "Berlangganan untuk membuka kunci alat pesan", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharik", + "arDisplayName": "Arab", + "asDisplayName": "Assam", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijan", + "baDisplayName": "Bashkir", + "banDisplayName": "Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Belarusia", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgaria", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnia", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdish Tengah", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsika", + "crhDisplayName": "Turki Krimea", + "crsDisplayName": "Seselwa Kreol Prancis", + "csDisplayName": "Ceko", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Welsh", + "daDisplayName": "Denmark", + "deDisplayName": "Jerman", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inggris", + "enAUDisplayName": "Inggris (Australia)", + "enGBDisplayName": "Inggris (UK)", + "enINDisplayName": "Inggris (India)", + "enUSDisplayName": "Inggris (AS)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spanyol", + "esESDisplayName": "Spanyol (Spanyol)", + "esMXDisplayName": "Spanyol (Meksiko)", + "euDisplayName": "Basque", + "faDisplayName": "Persia", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandia", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroese", + "frDisplayName": "Prancis", + "frCADisplayName": "Prancis (Kanada)", + "frFRDisplayName": "Prancis (Prancis)", + "fyDisplayName": "Frisian Barat", + "gaDisplayName": "Irlandia", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaelik Skotlandia", + "glDisplayName": "Galicia", + "gnDisplayName": "Guarani", + "gomDisplayName": "Konkani Goa", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaii", + "heDisplayName": "Ibrani", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroasia", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Kreol Haiti", + "huDisplayName": "Hungaria", + "hyDisplayName": "Armenia", + "idDisplayName": "Bahasa Indonesia", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islândia", + "itDisplayName": "Italia", + "jaDisplayName": "Jepang", + "jvDisplayName": "Jawa", + "kaDisplayName": "Georgian", + "kkDisplayName": "Kazakh", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Korea", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Republik Demokratik Kongo)", + "kuDisplayName": "Kurdish", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgish", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgish", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituania", + "ltgDisplayName": "Latgalian", + "luoDisplayName": "Luo (Kenya dan Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvia", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasi", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonia", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolia", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Melayu", + "msArabDisplayName": "Melayu (Arab)", + "msMYDisplayName": "Melayu (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norwegia (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Belanda", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Norwegia", + "nrDisplayName": "Ndebele Selatan", + "nsoDisplayName": "Sotho Utara", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polandia", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugis", + "ptBRDisplayName": "Portugis (Brasil)", + "ptPTDisplayName": "Portugis (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumania", + "roMDDisplayName": "Moldova", + "romDisplayName": "Romani", + "ruDisplayName": "Rusia", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilia", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovak", + "slDisplayName": "Slovenia", + "smDisplayName": "Samoa", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albania", + "srDisplayName": "Serbia", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho Selatan", + "suDisplayName": "Sunda", + "svDisplayName": "Swedia", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajik", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turki", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uighur", + "ukDisplayName": "Ukraina", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnam", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonis", + "yueCNDisplayName": "Kantonis (Cina)", + "yueHKDisplayName": "Kantonis (Hong Kong)", + "zhDisplayName": "Cina", + "zhCNDisplayName": "Cina (Sederhana)", + "zhTWDisplayName": "Cina (Tradisional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11876,6 +10574,7 @@ "notStartedActivitiesTitle": "Sesi terbuka ({num})", "inProgressActivitiesTitle": "Sedang berlangsung ({num})", "completedActivitiesTitle": "Selesai ({num})", + "pickDifferentActivity": "Pilih aktivitas yang berbeda", "inOngoingActivity": "Anda memiliki aktivitas yang sedang berlangsung!", "@notStartedActivitiesTitle": { "type": "String", @@ -11901,10 +10600,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Bahasa target Anda tidak cocok dengan pesan ini. Perbarui bahasa target Anda?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ini adalah semua orang di kursus ini. Klik pada avatar pengguna mana pun dan \"mulai percakapan\" untuk mengirim DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Kata vocab ini akan dihapus secara permanen dari analitik Anda", + "woman": "Wanita", + "man": "Pria", + "otherGender": "Lainnya", + "unselectedGender": "Pilih opsi gender", + "gender": "Gender", + "chatParticipantTooltip": "Ini adalah semua orang di obrolan ini. Klik pada avatar pengguna mana pun dan \"mulai percakapan\" untuk mengirim DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Alat pembelajaran dinonaktifkan untuk pesan yang tidak dalam bahasa target Anda.", + "vocabEmoji": "Emoji kosakata", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Permintaan regenerasi", + "optionalRegenerateReason": "(Opsional) Alasan", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Anda telah menetapkan emoji untuk {lemma}! Kami akan menggunakan emoji ini untuk mewakili kata dalam aktivitas praktik ke depan.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Menunggu penyelesaian masuk", + "ssoDialogDesc": "Kami membuka tab baru agar Anda dapat masuk dengan aman.", + "ssoDialogHelpText": "🤔 Jika Anda tidak melihat tab baru, silakan periksa pemblokir popup Anda.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Nonaktifkan alat bahasa", + "disableLanguageToolsDesc": "Apakah Anda ingin menonaktifkan bantuan bahasa otomatis?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Izin ditolak. Aktifkan izin perekaman untuk merekam pesan audio.", + "genericWebRecordingError": "Ada yang tidak beres. Kami sarankan menggunakan browser Chrome saat merekam pesan.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Untuk pengalaman terbaik menggunakan aplikasi ini, silakan perbesar ukuran layar Anda.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Kegiatan untuk Membuka Topik Berikutnya", "activitiesToUnlockTopicDesc": "Tentukan jumlah kegiatan untuk membuka topik kursus berikutnya", "@activitiesToUnlockTopicTitle": { @@ -11914,5 +10731,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Latihan definisi kosakata yang benar", + "constructUseIncLMDesc": "Latihan definisi kosakata yang salah", + "constructUseCorLADesc": "Latihan audio kosakata yang benar", + "constructUseIncLADesc": "Latihan audio kosakata yang salah", + "constructUseBonus": "Bonus selama latihan kosakata", + "practiceVocab": "Latihan kosakata", + "selectMeaning": "Pilih arti", + "selectAudio": "Pilih audio yang sesuai", + "congratulations": "Selamat!", + "anotherRound": "Putaran lain", + "noActivityRequest": "Tidak ada permintaan aktivitas saat ini.", + "quit": "Keluar", + "congratulationsYouveCompletedPractice": "Selamat! Anda telah menyelesaikan sesi latihan.", + "mustHave10Words": "Anda harus memiliki setidaknya 10 kata kosakata untuk berlatih. Cobalah berbicara dengan teman atau Pangea Bot untuk menemukan lebih banyak!", + "botSettings": "Pengaturan Bot", + "activitySettingsOverrideWarning": "Bahasa dan tingkat bahasa ditentukan oleh rencana aktivitas", + "voice": "Suara", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index 8af7efc8b..af33f1f37 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -3241,26 +3241,14 @@ "commandHint_logoutall": "Disconnectar omne dispositivs active", "displayNavigationRail": "Monstrar rail de navigation in mobile", "customReaction": "Reaction personalisate", - "accountInformation": "Information de conto", - "addGroupDescription": "Adder un description de chat", - "addNewFriend": "Agi un nov amico", - "alreadyHaveAnAccount": "Ja ha un conto?", - "createNewGroup": "Crea un nove chat", - "editChatPermissions": "Modifica le permissiones del chat", "writeAMessageLangCodes": "Scrivi in {l1} o {l2}...", "requests": "Requestes", - "allCorrect": "Quai que io diria! Bell!", - "newWayAllGood": "Nò, quai que io diria nè, ma pare bon!", - "othersAreBetter": "Hm, il poterea esser un melior via de dirlo.", "holdForInfo": "Clicca e tenea per info del parola.", "greenFeedback": "Quai que io metteria!", "yellowFeedback": "Hm, tu pote provarlo e vider si funciona! Per usar quista parola, basta cliccar ancora.", "redFeedback": "Nò, io no pensa que es juste...", "itInstructionsTitle": "Io pote adjutar te a traducir!", "itInstructionsBody": "Tu pote clicar e tenea per info del parola.", - "oneday": "Ultimas 24 horas", - "oneweek": "Ultimas 7 dis", - "onemonth": "Passat mes", "gaTooltip": "L2 usar con assistentia grammatical", "taTooltip": "L2 usar con assistentia de translation", "unTooltip": "Altra", @@ -3270,58 +3258,27 @@ "interactiveTranslatorAllowed": "Selession de Studente", "interactiveTranslatorRequired": "Necessar", "notYetSet": "Anc non stablit", - "myLearning": "Mi Analiticas", "waTooltip": "Usa L2 sin adjuta", - "changeDateRange": "Cambiar intervallo de date", - "classDescription": "Description", - "addStudents": "Invitar usatores per ligame o codice", - "copyClassLink": "Copiar ligame de invitation", - "copyClassCode": "Copiar codice de invitation", - "inviteStudentByUserName": "Invitar usatores per nomine de usator", "languageSettings": "Configuraciones de lingua", "interactiveTranslator": "Assistenta de translation", - "shareVideo": "Compartir Video", - "shareVideoDesc": "Activa esto pro permitir a los studentes compartir videos en chats.", - "shareFiles": "Compartir Files", - "selectLanguageLevel": "Selige lingue nivèl", "noIdenticalLanguages": "Per favor, selige differente bas e meta lingues", - "iWantALanguagePartnerFrom": "Es de:", - "worldWide": "Tote le globe", - "noResults": "Nulle resultatos! Proba de ampliar tu recherche.", "searchBy": "Rechercher per país e lingues", - "iWantAConversationPartner": "Io vole un socio de conversation qui", - "iWantALanguagePartnerWhoSpeaks": "Parla:", - "iWantALanguagePartnerWhoIsLearning": "Es in apprendage:", "joinWithClassCode": "Joinar al curso", - "joinWithClassCodeHint": "Entera le codice de invitation", - "languageLevelPreA1": "Vermente Novice (Pre A1)", - "languageLevelA1": "Novice (A1)", - "languageLevelA2": "Elementari (A2)", - "languageLevelB1": "Intermedie (B1)", - "languageLevelB2": "Superiore Intermedie (B2)", - "languageLevelC1": "Avanzate (C1)", - "languageLevelC2": "Maestria (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice High (A2)", + "languageLevelB1": "Intermediate Mid (B1)", + "languageLevelB2": "Advanced Low (B2)", + "languageLevelC1": "Advanced Mid (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Cambiar le nomine", "changeTheNameOfTheChat": "Cambiar le nomine del chat", - "askPangeaBot": "Dumanda Pangea Bot por un definition contextual.", "sorryNoResults": "Pardonne, nulle resultatos.", "ignoreInThisText": "Ignorar", - "helpMeTranslate": "Si!", - "needsItShortMessage": "Fuori de objectivo", "needsItMessage": "Aspetta, eso non es {targetLanguage}! Es que tu besona ayuda por traducer?", - "needsIgcMessage": "Ta message ha un error grammatical.", - "tokenTranslationTitle": "Un parola es in tu lingua de base.", - "spanTranslationDesc": "Vede traducciones possible ci-bas.", - "spanTranslationTitle": "Alcunes paroles es in tu lingua de base.", - "l1SpanAndGrammarTitle": "Foras de lingua de objectivo", - "l1SpanAndGrammarDesc": "Isto pot esser in tu lingua de base o pot esser un error grammatical.", - "otherTitle": "Tu ha un error.", - "otherDesc": "Vede correctiones possible ci-bas.", "countryInformation": "Mi pais", - "myLanguages": "Mi linguas de base e de objectivo", "targetLanguage": "Lingua de objectivo", "sourceLanguage": "Lingua de base", - "languagesISpeak": "Linguas que parlo", "updateLanguage": "Mi linguas", "whatLanguageYouWantToLearn": "Qual lingue tu vole apprender?", "whatIsYourBaseLanguage": "Qual es tu lingue de base?", @@ -3336,13 +3293,8 @@ "errorDisableLanguageAssistanceUserDesc": "Clicca hic pro actualizar le configuration de adjuta de traduction e grammatica", "errorDisableITClassDesc": "Le adjuta de traduction es disactivate pro le curso in le qual iste chat es.", "errorDisableIGCClassDesc": "Le adjuta de grammatica es disactivate pro le curso in le qual iste chat es.", - "itIsDisabled": "Le Traduction Interactive es disactivate", - "igcIsDisabled": "Le Verificate de Grammatica Interactive es disactivate", - "goToLearningSettings": "Vade a le Configuration de Aprendissage", "error405Title": "Lingues non configurate", "error405Desc": "Per favor, configura tu linguas in le Menu Principal > Configuration de Aprendissage.", - "loginOrSignup": "Intra con", - "iAgreeToThe": "Io accepta le ", "termsAndConditions": "Termes e Condiciones", "andCertifyIAmAtLeast13YearsOfAge": " e certifies que ha minimum 16 annos de etate.", "error502504Title": "Wow, il ha multo students online!", @@ -3350,40 +3302,21 @@ "error404Title": "Error de translation!", "error404Desc": "Le Bot Pangea non es secur de como traducer isto...", "errorPleaseRefresh": "Nos es in le processus de investigar! Per favor, re-iniciar e tentar ancora.", - "toggleIT": "Translation Interactive", - "toggleIGC": "Verification Interactive de Grammatica", - "toggleToolSettingsDescription": "Ici tu pote cambiar tu configurationes individual de instrumento linguistic.", "connectedToStaging": "Conectate a Staging", "learningSettings": "Configurationes de apprendimento", - "sendVoiceNotes": "Manda Notas de Voce", - "sendVoiceNotesDesc": "Active isto pro permitter que estudiantes manda notas de voce in chats.", - "chatTopic": "Subjecto del chat", - "chatTopicDesc": "Stabilisce un subjecto de chat", - "inviteStudentByUserNameDesc": "Si tu student ja ha un conto, tu pote cercar lo.", "participants": "Participantes", - "almostPerfect": "Isto pare correcte! Ecce lo que io haberea dit.", - "prettyGood": "Ben bon! Ecce lo que io haberea dit.", - "letMeThink": "Hmm, lasi vidar co tu face!", "clickMessageTitle": "Besoin de adjuta?", "clickMessageBody": "Clique un messatge pro linguage tools como traduction, playback e plu!", - "understandingMessagesTitle": "Definitiones e traductiones!", - "understandingMessagesBody": "Clique paroles sublineate pro definitions. Traduce con optiones de message (super dreit).", "allDone": "Tutt complet!", "vocab": "Vocabulari", "low": "Nos ha evidentie que l'utilisator non comprende iste paroles.", "medium": "Iste paroles ha essite usate. Es incert si le paroles es plenmente comprende o non.", "high": "Nos ha evidentie que l'utilisator comprende iste paroles.", - "unknownProficiency": "Iste paroles non ha essite usate in Pangea Chat.", - "changeView": "Cambie vistas.", - "clearAll": "Clara tote le paroles?", - "generateVocabulary": "Genera vocabulari ex titulo e description", - "generatePrompts": "Genera promptos", "subscribe": "Subscribi", "getAccess": "Subscribi ora!", "subscriptionDesc": "Messagiar es gratuite! Subscribi pro desbloquear traduction interactive, verification de grammatica e analytics de apprendimento.", "subscriptionManagement": "Gestion de subscription", "currentSubscription": "Subscription actual", - "changeSubscription": "Mudá tu abunament", "cancelSubscription": "Cancellar tu abunament", "selectYourPlan": "Selige Tu Plan", "subsciptionPlatformTooltip": "Per favor, login a tu apparato original pro administrar tu plan de abunament", @@ -3392,9 +3325,6 @@ "paymentHistory": "Historico de pagamento", "emptyChatDownloadWarning": "Non posse descarregar chat vacue", "update": "Actualisar", - "updateDesc": "Tu posse ora actualisar ti app de {localVersion} a {storeVersion}", - "maybeLater": "Probabilmente plu tard", - "mainMenu": "Menu Principal", "toggleImmersionMode": "Modo de immersion", "toggleImmersionModeDesc": "Quando activate, omne message es monstrate in tu lingua de destino. Ti configuration es maxime utile in intercambios linguistic.", "itToggleDescription": "Ti instrumento de apprendage linguistic identificara parolas in tu lingua de base e adjutara a traducer los a tu lingua de destino. Es rare, ma le AI pote face errores de translation.", @@ -3409,212 +3339,13 @@ "definitionsToolDescription": "Quando activate, palavras sublinate in blue pote esser cliccabile pro definiciones. Clicca in messages pro accessar le definiciones.", "translationsToolDescrption": "Quando activate, clicca in un message e le icono de traduction pro vider un message in tu lingua de base.", "welcomeBack": "Ben retornate! Si tu esseva parte del pilot de 2023-2024, per favor contacta nos pro tu subscription special de pilot. Si tu es un professor qui ha (o que su institution ha) comprate licentias pro tu classe, contacta nos pro tu subscription de professor.", - "kickAllStudents": "Expulsar Tote le Discipulos", - "kickAllStudentsConfirmation": "Es tu secur que tu vole expulser tote le discipulos?", - "inviteAllStudents": "Invitar Tote le Discipulos", - "inviteAllStudentsConfirmation": "Es tu secur que tu vole invitar tote le discipulos?", - "inviteUsersFromPangea": "Adder administratores", - "redeemPromoCode": "Redimir Codice de Promocio", - "enterPromoCode": "Enterar Codice de Promocio", "downloadTxtFile": "Downloadar File de Texto", "downloadCSVFile": "Downloadar File CSV", "promotionalSubscriptionDesc": "Tu ha actualmente un subscription promotional de vita. Message support@pangea.chat pro adjuta a cambiar tu subscription.", "originalSubscriptionPlatform": "Subscription comprate per medio de {purchasePlatform}", "oneWeekTrial": "Período de Prova de Un Semane", "downloadXLSXFile": "Downloadar File Excel", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanese", - "amDisplayName": "Amharic", - "arDisplayName": "Arabian", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armenian", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basque", - "beDisplayName": "Belarusan", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnian", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgarian", - "myDisplayName": "Burmese", - "caDisplayName": "Catalan, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Chechen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinese", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corsican", - "crDisplayName": "Cree", - "hrDisplayName": "Croatian", - "csDisplayName": "Tiếng Séc", - "daDisplayName": "Danish", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Dutch", - "enDisplayName": "English", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonese", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijian", - "fiDisplayName": "Finnish", - "frDisplayName": "Francese", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galician", - "kaDisplayName": "Georgian", - "deDisplayName": "Tedesche", - "elDisplayName": "Greco, Modern", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Creole Haitiano", - "haDisplayName": "Hausa", - "heDisplayName": "Ebraico (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungherese", - "iaDisplayName": "Interlingue", - "idDisplayName": "Indonesian", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandese", - "igDisplayName": "Ibo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Icelandese", - "itDisplayName": "Italian", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japones", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, Greenlandic", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Kmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Corean", - "kuDisplayName": "Kurda", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxembourgés, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgés, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laos", - "ltDisplayName": "Lituan", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letton", - "gvDisplayName": "Manx", - "mkDisplayName": "Macédon", - "mgDisplayName": "Malagasy", - "msDisplayName": "Malai", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Malti", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolian", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norwegian Bokmål", - "ndDisplayName": "North Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norwegian Nynorsk", - "noDisplayName": "Norwegian", - "iiDisplayName": "Nuosu", - "nrDisplayName": "South Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetic, Ossetian", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persian", - "plDisplayName": "Polish", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portuguese", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romanian, Moldavian, Moldovan", - "ruDisplayName": "Russian", - "saDisplayName": "Sanskrit (Sanskṛta)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Northern Sami", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbian", - "gdDisplayName": "Scottish Gaelic, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovak", - "slDisplayName": "Slovene", - "soDisplayName": "Somali", - "stDisplayName": "Southern Sotho", - "esDisplayName": "Spaniol", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Svedese", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Tailandese", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetano Standard, Tibetano, Central", - "tkDisplayName": "Turcomanno", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Isles de Tonga)", - "trDisplayName": "Turc", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uighur, Uyghur", - "ukDisplayName": "Ukrainian", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbek", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamese", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "Frison Occidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Inconnu", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaïen", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multiple", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hébreu", - "jwDisplayName": "Javanais", - "moDisplayName": "Moldave", - "shDisplayName": "Serbo-Croate", "wwCountryDisplayName": "Mondial", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Îles Åland", @@ -3862,41 +3593,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zambia", - "pay": "Paga", - "allPrivateChats": "Chat privet", - "unknownPrivateChat": "Chat privet ignot", + "pay": "Checkout", "invitedToSpace": "{user} ha invitato te a un curso: {space}! Vuoi acceptar?", - "declinedInvitation": "Invitation declinada", - "acceptedInvitation": "Invitation acceptada", "youreInvited": "📩 Es tu invitat!", "invitedToChat": "{user} ha invitato te a un chat: {name}! Vuoi acceptar?", "monthlySubscription": "Mensual", "yearlySubscription": "Anual", "defaultSubscription": "Pangea Chat Abonament", "freeTrial": "Período de prova gratuite", - "grammarAnalytics": "Error de analise grammatical", "total": "Total: ", "noDataFound": "Nulle dato trovate", - "promoSubscriptionExpirationDesc": "Tu abbonament current es promotional e expire a {expiration}. Mesage support@pangea.chat pro adjutar a cambiar tu abbonament.", - "emptyChatNameWarning": "Per favor, introduce un nom pro iste chat", "blurMeansTranslateTitle": "Perque le message es obscurite?", "blurMeansTranslateBody": "Durante le Modo Immersion, le message que es inviate in tu lingua base essera obscurite durante que Pangea Bot le traduira a tu lingua de destino. Le Modo Immersion pote esser active o disactive in configurationes individual e de curso.", - "someErrorTitle": "Hm, qualcosa non es perfect", - "someErrorBody": "Poterea esser un error o qualcosa in tu lingua de base.", "bestCorrectionFeedback": "Qui es correct!", "distractorFeedback": "Qui non es totali correct!", "bestAnswerFeedback": "Qui es correct!", "definitionDefaultPrompt": "Ce vole dir iste parola?", "practiceDefaultPrompt": "Qual es le melior responsa?", "correctionDefaultPrompt": "Qual es le melior replacement?", - "itStartDefaultPrompt": "Voletes adjuta a traducer?", - "lockedChatWarning": "🔒 Iste chat ha esset lockate", - "lockChat": "Lockar le chat", - "suggestToChat": "Suggerer iste chat", - "suggestToChatDesc": "Chats suggerite apparira in listines de chat", "acceptSelection": "Acceptar le correction", - "acceptSelectionAnyway": "Usar isto de nevertheless", - "makingActivity": "Facente activitate", "why": "Proque?", "definition": "Definition", "exampleSentence": "Exemplo de phrase", @@ -3904,128 +3619,55 @@ "reportMessageTitle": "{reportingUserId} ha reportate un message de {reportedUserId} in le chat {roomName}", "reportMessageBody": "Message: {reportedMessage}\nRation: {reason}", "noTeachersFound": "Nula maestri trovate por reportar", - "viewArchive": "Vider Archivo", "trialExpiration": "Vostre perìo de prova gratuite expira en {expiration}", "freeTrialDesc": "Novos usatores recive un septimana de prova gratuita de Pangea Chat", "activateTrial": "Prova Gratuita de 7 Dies", "successfullySubscribed": "Vos ha subscribite con successo!", "clickToManageSubscription": "Clicca qua por gestionar vostre subscribtion.", - "errorGettingAudio": "Error durante obtention del audio. Per favor, refresca e tenta ancora.", "signUp": "Registrar", "pleaseChooseAtLeastChars": "Per favor, selige al minus {min} characteres.", "noEmailWarning": "Per favor, entra un adresse email valida. Altrimenti, no podi resettar vostre parola de pass. Si no vole, tapia ancora supra le button por continuar.", "pleaseEnterValidEmail": "Per favor, entra un adresse email valida.", "pleaseChooseAUsername": "Per favor, selige un nomine de usator", - "chooseAUsername": "Selige un nomine de usator", "define": "Define", "listen": "Asculta", - "addConversationBot": "Aggiungi Bot de Conversation", - "addConversationBotDesc": "Aggiungi un bot a iste chat", - "convoBotSettingsDescription": "Modifica le tema de conversation e difficoltà", - "enterAConversationTopic": "Entra un tema de conversation", - "conversationTopic": "Tematica de conversation", - "enableModeration": "Activar moderation", - "enableModerationDesc": "Activar moderation automatic pro revíar messages ante que es esset", - "conversationLanguageLevel": "Qual es le nivelle de lingua de iste conversation?", - "showDefinition": "Mustra Definition", - "subscriptionPopupTitle": "Iste phrase pote haber un error grammatical...", - "subscriptionPopupDesc": "Subscribi hodie pro desbloquear traduction e correction grammatical!", - "seeOptions": "Vider optiones", - "continuedWithoutSubscription": "Continuar sin abbonamento", "trialPeriodExpired": "Vostre periodo de prueba ha expirá", - "selectToDefine": "Clique un parola pro vider su definition!", "translations": "traduccions", "messageAudio": "audio del message", "definitions": "definitiones", "subscribedToUnlockTools": "Subscribi pro desbloquear traduction interactive e verification grammatical, reproduccion audio, actividades personalisate de practica, e analytics de apprendimento!", "translationTooltip": "Traducer", - "audioTooltip": "Reproducer Audio", "speechToTextTooltip": "Transcripte", - "certifyAge": "Io certifica que io ha plus de {age} annos de etate", "kickBotWarning": "Kickar le Pangea Bot remove le bot de conversation de iste chat.", - "joinToView": "Joinar ta questa camara pro vider details", "refresh": "Refrescar", - "autoPlayTitle": "Auto Play Messages", - "autoPlayDesc": "Quando activate, le audio de texto-a-parola de messages s'alterne automaticamente quando seligite.", "messageAnalytics": "Analiticas de Message", "words": "Parolas", "score": "Punteggio", "accuracy": "Exactitude", "points": "Punctos", "noPaymentInfo": "Nulle information de pagamento necessari!", - "conversationBotModeSelectDescription": "Activitate de chat", - "conversationBotModeSelectOption_discussion": "Discussion", - "conversationBotModeSelectOption_custom": "Personalizate", - "conversationBotModeSelectOption_conversation": "Conversation", - "conversationBotModeSelectOption_textAdventure": "Aventura de Texto", - "conversationBotModeSelectOption_storyGame": "Joco de Historia", - "conversationBotDiscussionZone_title": "Configuration de Discussion", - "conversationBotDiscussionZone_discussionTopicLabel": "Sujeto de Discussion", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Stabilir un sujeto de discussion", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Cuvartas Clav de Discussion", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Stabilir mots-clés de discussion", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista separada per komma de mots-clés pro guidar le discussion", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Manda un prompt de discussion a un programmate", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas inter le prompts de discussion", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reage sur reaction ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaction pro mandar le prompt de discussion", - "conversationBotCustomZone_title": "Configuraciones Personal", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt del systema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Stabilir un prompt personal del systema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Prompt personal del systema mancante", - "botConfig": "Configuraciones del bot e activitate", - "botConfigNoPermissionTitle": "Nulle permission", - "botConfigNoPermissionMessage": "Contacta le administrator del camera pro cambiar le configuration del bot", - "addConversationBotDialogTitleInvite": "Confirma invitar le bot de conversation", - "addConversationBotButtonInvite": "Invitar", - "addConversationBotDialogInviteConfirmation": "Invitar", - "addConversationBotButtonTitleRemove": "Confirma remover le bot de conversation", - "addConversationBotButtonRemove": "Remover", - "addConversationBotDialogRemoveConfirmation": "Remover", - "conversationBotConfigConfirmChange": "Confirma", - "conversationBotStatus": "Invite bot", - "conversationBotTextAdventureZone_title": "Aventur de Testo", - "conversationBotTextAdventureZone_instructionLabel": "Instrucciones del Mestre de Joco", - "conversationBotTextAdventureZone_instructionPlaceholder": "Stabilir instrucciones del mestre de joco", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Instrucciones del mestre de joco manca", - "studentAnalyticsNotAvailable": "Datos del student non disponibile actualmen", - "roomDataMissing": "Qualcosa datos pote esser mancant de las camaras in que tu non es membro", "updatePhoneOS": "Tu pote haber de actualizar la version del sistema operative de tu dispositivo", "wordsPerMinute": "Palabras per minutu", "autoIGCToolName": "Execute automaticamente le assistent de scriber Pangea", "autoIGCToolDescription": "Execute automaticamente le grammatica e traduction del chat Pangea ante de inviar mi message", - "runGrammarCorrection": "Verificar message", - "grammarCorrectionFailed": "Problemas a addressar", - "grammarCorrectionComplete": "Par bon!", "tooltipInstructionsTitle": "Non es secur de que isto face?", "tooltipInstructionsMobileBody": "Pressa e tenea items pro vider le tooltip.", "tooltipInstructionsBrowserBody": "Survole items pro vider le tooltip.", "chatCapacity": "Capacitate de chat", "roomFull": "Iste camera es ja plen", - "topicNotSet": "Le subjecto non ha esset stabilite", - "chatCapacityNotSet": "Ta conversa no ha limite de capacity.", "chatCapacityHasBeenChanged": "Capacity de conversa ha esset cambiate", "chatCapacitySetTooLow": "Capacity de conversa debe esser al minus {count}.", "chatCapacityExplanation": "Capacity de conversa limita le numero de membros permitite in un conversa.", - "chatExceedsCapacity": "Iste conversa excede su capacity.", "tooManyRequest": " Troppo request, per favor prova ancora plus tarde.", "enterNumber": "Per favor entra un valor de numero entier.", "buildTranslation": "Construer tu traduction ex le optiones super", - "nonexistentSelection": "Le selection non existe plus.", - "changeAnalyticsLanguage": "Cambiar le lingua de Analytics", "practice": "Practica", "noLanguagesSet": "Nulle linguas definite", - "noActivitiesFound": "Ista es sufficient pro ora! Returna plus tarde pro plus.", - "hintTitle": "Suggerimento:", "speechToTextBody": "Pro messages de voce, tu pote vider un transcripto e le punctuacion de le oratores.", "versionNotFound": "Version non trovate", "fetchingVersion": "Recuperante le version...", "versionFetchError": "Error durante le recupero del version", "versionText": "Version: {version}+{buildNumber}", - "languageButtonLabel": "Lingua: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Traducir automàtic", - "interactiveTranslatorAutoPlayDesc": "Lancez le traductor interactiu sens preguntar.", - "changeAnalyticsView": "Cambié vista d'analiticas", "l1TranslationBody": "Messages en tu lingua base non será traducit.", "deleteSubscriptionWarningTitle": "Tu ha un abun active", "deleteSubscriptionWarningBody": "Eliminar tu conto non cancelara automaticament tu abun.", @@ -4033,9 +3675,7 @@ "error520Title": "Per plasair, tenta de nove.", "error520Desc": "Disculpa, no pot comprene tu messag...", "wordsUsed": "Palabras usat", - "errorTypes": "Tipos de error", "level": "Nivèl", - "canceledSend": "Sended cancelat", "morphsUsed": "Morfemas usat", "translationChoicesBody": "Clicca e tenea un optione pro un consilio.", "grammar": "Grammatica", @@ -4045,7 +3685,6 @@ "reportContentIssueTitle": "Reportar problema de contento", "feedback": "Feedback opcional", "reportContentIssueDescription": "¡Ay! La AI pote facilitar experientias personalisadas de apprendissatge ma... anque hallucina. Per favor, dona qualunque feedback que tu ha, e nos provaremo ancora.", - "changeContent": "¡Ay! La AI pote facilitar experientias personalisadas de apprendissatge ma... anque hallucina. Quo dev'essere?", "clickTheWordAgainToDeselect": "Clicca le parola selessionada pro deseleccionar la.", "l2SupportNa": "Nò Disponibil", "l2SupportAlpha": "Alfa", @@ -4279,7 +3918,6 @@ "grammarCopySPC": "Specifitá", "grammarCopyPARTTYPE": "Typo de partitive", "grammarCopyINTREL": "Interrogative-Relativ", - "grammarCopyNUMFORMpsor": "Numer de possessor", "grammarCopyUNKNOWN": "Inconnu", "grammarCopyNUMBERPSOR": "Numer de possessor", "grammarCopyPOSS": "Possessiv", @@ -4325,28 +3963,14 @@ "grammarCopyVOICEdir": "Direkt", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Reciprocal", - "enterPrompt": "Plise intrar un prompt del systema", - "selectBotLanguage": "Selige linguage del bot", - "chooseVoice": "Selige un voci", - "enterLanguageLevel": "Plise intrar un nivelle de linguage", - "enterDiscussionTopic": "Plise intrar un subjecto de discussion", - "selectBotChatMode": "Selige modo de chat", - "messageNotInTargetLang": "Message non in linguage de destino", "other": "Altre", "levelShort": "NIV {level}", - "botModeValidation": "Plise selige un modo de chat", "clickBestOption": "Selige le melior optiones pro traducer tu message!", "completeActivitiesToUnlock": "Completa alminus un activitate pro desbloquear le translation!", - "botSettingsSubtitle": "Invita le bot pro moderar le activitate de chat", - "invitePeople": "Invita usatores", "noCapacityLimit": "Nulle limite de capacitate", "downloadGroupText": "Download le texto del grupo", "notificationsOn": "Notificationes activate", "notificationsOff": "Notificationes disactivate", - "chatCanBeFoundViaSearch": "Pò trovar la chat via recerca", - "requireCodeToJoin": "Requirit code per unirsi", - "canFindInSearch": "Pò trovar in recerca", - "addChatToSpace": "Agiunger chat", "createChatAndInviteUsers": "Crear chat e invitar utentes", "updatedNewSpaceDescription": "Kurssas permitas a tu consolidar to chat e construir communitates private o publice.", "joinWithCode": "Unir con code", @@ -4382,39 +4006,19 @@ "constructUseCollected": "Collectate in le chat", "constructUseNanDesc": "Nulle applicabilitate", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Signar con nomine de usator e parola", - "registrationEmailMessage": "Bon volar tu email con un ligame inviate. In alcun casos, le email prende usque a 5 minutas pro arrivar. Per favor, verifica etiam tu carpeta de spam.", "enableTTSToolName": "Text-to-speech activate", "enableTTSToolDescription": "Permitte al app de generar output de text-to-speech pro partes del texto in tu lingua de destino.", - "couldNotFindTTS": "Nos non potera trovar un motor de text-to-speech pro tu lingua de destino actual.", - "ttsInstructionsHyperlink": "Cliqueca hic pro vider instructiones pro descarregar un nove voce in tu dispositivo.", - "createAnAccount": "Create un conto", - "signIn": "Signar in", - "signUpWithEmail": "Registrarse con Email", - "signUpWithGoogle": "Registrarse con Google", - "signUpWithApple": "Registrarse con Apple", "yourUsername": "Tu nomine de usator", "yourEmail": "Tu email", - "pleaseEnterAnEmail": "Per favor, entra un adresse de email", - "signInWithGoogle": "Signar in con Google", - "signInWithApple": "Signar in con Apple", - "chooseYourAvatar": "Selige tu avatar", "iWantToLearn": "Io vole aprender", - "letsStart": "Comencemos", - "pleaseAgreeToTOS": "Per favor, accepta le Terminos e Condiciones", "pleaseEnterEmail": "Per favor, entra un adresse de email valide.", - "pleaseSelectALanguage": "Preta selesciona un lingue", "myBaseLanguage": "Mi lingue de base", - "clickWordsInstructions": "🧻 Clicca in qualunque parola pro details. 🤐", - "chooseBestDefinition": "Qual es le signification de iste parola?", "meaningSectionHeader": "Signification:", "formSectionHeader": "Formas usate in chat:", - "noEmojiSelectedTooltip": "Nulle emoji selesionate", "writingExercisesTooltip": "Scripter", "listeningExercisesTooltip": "Ascultar", "readingExercisesTooltip": "Leger", "meaningNotFound": "Le signification non poteva esser trovate.", - "formsNotFound": "Le formas non poteva esser trovate.", "chooseBaseForm": "Selige le forma de base", "notTheCodeError": "Pardone, illes non es le codice!", "totalXP": "Total XP", @@ -4454,9 +4058,6 @@ "pickAnEmoji": "Qual es tu emoji preferite pro '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Corresponda significatos con le parolas in le message!", "doubleClickToEdit": "Dopp-clique pro modificar.", - "removeFeature": "Remover {feature}", - "chooseCorrectLabel": "Selige le etiquetta correcte.", - "levelPopupTitle": "Felicitaciones pro arrivar\nLevel {level}", "activityPlannerTitle": "Planificador de activitate", "topicLabel": "Subjecto", "topicPlaceholder": "Selige un subjecto...", @@ -4464,7 +4065,6 @@ "modePlaceholder": "Selige un modo...", "learningObjectiveLabel": "Objectivo de apprendimento", "learningObjectivePlaceholder": "Choise un objectiv de apprendissage...", - "mediaLabel": "Media que le apprendantes debe compartir", "languageOfInstructionsLabel": "Lingua del instructiones de activitate", "targetLanguageLabel": "Lingua de destino", "cefrLevelLabel": "Nivelle CEFR", @@ -4479,20 +4079,15 @@ "instructions": "Instructiones", "numberOfLearners": "Numeru de apprendantes", "mustBeInteger": "Deve esser un integer, p.ex. 1, 2, 3, ...", - "noLemmasFound": "Il n'ex ni vocabulari con plus de {xp} XP. Continuer a practicar!", "constructUsePvmDesc": "Producte in messages vocale", - "lockedMorphFeature": "Aspettante de esser desbloqueate", "leaveSpaceDescription": "Per abandonar le curso, tu abandonara tote le chats in illo. Altri usatores videra que tu ha abandonate le curso.", - "whatIsLemma": "Kia esas lemm?", "constructUseCorMmDesc": "Correcte messae significo", "constructUseIncMmDesc": "Incorrecte messae significo", "constructUseIgnMmDesc": "Ignorate messae significo", "clickForMeaningActivity": "Clique hy pro un Defination Challenge", "meaning": "Significo", "chatWith": "Grupe con {displayname}", - "slightlyOffensive": "Littl offensive", "clickOnEmailLink": "Per favor, clicca sur le ligamine in le e-mail e postea procede.\n\nVerifica tu carpeta de spam si le e-mail non ha arrivat.", - "whoIsAllowedToJoinThisChat": "Qui es permittet de junger a iste chat", "dontForgetPassword": "Non oblidar tu parola de scriptor!", "enableAutocorrectToolName": "Enable autocorrect del dispositivo", "enableAutocorrectDescription": "Si tu dispositivo supporta le lingua que tu apprende, tu pote habilitar le autocorrect del dispositivo pro correger error commun durante le typage.", @@ -4520,48 +4115,26 @@ "autocorrectNotAvailable": "Desolatamente, tu piattaforma non es supportate pro iste caracteristica. Restar attent pro ulteriore developpamento!", "pleaseUpdateApp": "Per favor actualisa le app pro continuar.", "chooseEmojiInstructionsBody": "Corresponda emojis con le parolas que illes representa melior. Non te preoccupa! Nulle puncto per disaccordo. 😅", - "pickAnEmojiFor": "Selige un emoji pro {lemma}", "analyticsVocabListBody": "Iste es totu tu vocabulario! Como tu gana XP pro cata parola, illes passa de germen a plen flor. Clicca super qualunque parola pro vider plus de detalhes.", "morphAnalyticsListBody": "Iste es totu le conceptos grammatical in le lingua que tu apprende! Tu los desbloqueara como tu los incontrara durante le chat. Clicca pro details.", "knockSpaceSuccess": "Tu ha peti de jontar a questa corsa! Un admin respondara a tu peticion quando il la recive 😀", - "joinByCode": "Jontar per codice", "chooseWordAudioInstructionsBody": "Ascolta le message complete. Poi combina le audios con le parolas.", "chooseMorphsInstructionsBody": "Clicca le pezze de puzzle pro questiones de grammatica!", - "inviteAndLaunch": "Invitar e lanciar", - "createOwnChat": "Crear tu proprie chat", "pleaseEnterInt": "Per favor, entra un numero", "home": "Casa", "join": "Jontar", "readingAssistanceOverviewBody": "Clicca le boton inferior pro mini-gioc in que combina emojis, audios, significatos de parolas, e conceptos de grammatica. O clicca in qualunque parola pro details.", - "learnByTexting": "Impara per scriver", - "levelSummaryTrigger": "Vider resumé", "levelSummaryPopupTitle": "Resumé del livello {level}", - "referFriends": "Referrer amicos", - "referFriendDialogTitle": "Invita un amico a tu conversation", - "referFriendDialogDesc": "Ha tu un amico qui es excitato de aprender un nove lingua con te? Copia e manda iste ligamine de invitation pro jontar e comenciar a chattar hodie.", - "youUnlocked": "Tu ha desbloqueate", "resetInstructionTooltipsTitle": "Resetear le tooltip de instruction", "resetInstructionTooltipsDesc": "Clicca pro mostrar le tooltip de instruction como pro un nove usator.", "selectForGrammar": "Selige un icono de grammatica pro actividades e details.", - "newChatActivityTitle": "Aduga un ativitât divertent?", - "newChatActivityDesc": "Fai di ogni discuors de groupe un avventûra cun l'Ativitate Planner! Stabilisce argumentis captivants e obietîvs par il groupe, e dà vita a conversaziuns cun imatges stupendis. Incendi discussiuns imaginative e mantignî il divertiment fluînt senza sforz!", - "exploreMore": "Spaziâ plui", "randomize": "Randomizzâ", "clear": "Netar", "makeYourOwnActivity": "Crea la tô ativitât", "featuredActivities": "In evidenza", - "goToChat": "Andâ a discuors", "save": "Salvâ", - "selectActivity": "Selessiona l'ativitât", - "wordFocusListeningMultipleChoice": "Quals audio corisponde a la paròla?", "startChat": " Cuminciare un discuors", "translationProblem": "Problem di traduziôn", - "perfectTranslation": "Traduzion perfet!", - "greatJobTranslation": "Bene fat cun chest traduziôn!", - "goodJobTranslation": "Bun lavôr su chest traduziôn.", - "makingProgress": "Tu fas progress!", - "keepPracticing": "Continua a praticâ!", - "niceJob": "Bene fat!", "askToJoin": "Domanâ di zontâ", "emptyChatWarningTitle": "Chat es vacue", "emptyChatWarningDesc": "Tu n'ha invitau nulleun al tu chat. Va a las configuraçions del chat pro invitá tuos contacts o lo Bot. Tu podé també farlo après.", @@ -4580,8 +4153,6 @@ "languageLevelC2Desc": "Jo podé comprénder quasi tot çò que sóu ausit o legit e exprimer-me fluent e precisament.", "newVocab": "Vocabulari nov", "newGrammar": "Concepts de gramàtica novs", - "congratulationsOnReaching": "Tu as arriònat al Nivèl {level}!", - "seeDetails": "Vés los detalios", "choosePracticeMode": "Clicca sus una dels botonàs de sus per comencà una atività de practica", "ban": "Bani", "unban": "Remani", @@ -4595,8 +4166,6 @@ "timesUsedWithAssistance": "Tiemps usate con assistance", "shareInviteCode": "Partagez le code d'invitation: {code}", "leaderboard": "Clasament", - "welcomeUser": "Benvengut {user}", - "joinSpaceOnboardingDesc": "Ha tu un codice o un ligame d'invitation a un cursu publicu?", "skipForNow": "Saltar per ora", "permissions": "Permissos", "spaceChildPermission": "Qui pote aggiunger nove chats a stu cursu", @@ -4604,12 +4173,8 @@ "defaultOption": "Deffault", "deleteChatDesc": "Es tu secur de voler eliminar cist chat? I será eliminat per toti i participanti e toti i messaggi in cist chat non sarà più disponibile per pratica o analisi de apprendissatge.", "deleteSpaceDesc": "La corsa e omne chat selectet essera delete per toti participant e omne message in le chat non essera plus disponibile pro practica o analytics de apprendimento. Iste action non pote esser revertite.", - "chatWithActivities": "Chat con actividades", "launch": "Lance", - "launchActivityToChats": "Lance actividad a chats", "searchChats": "Cercar chats", - "selectChats": "Selige chats", - "selectChatToStart": "Complete! Selige un chat pro comenciar", "maxFifty": "Max 50", "configureSpace": "Configurar corsa", "pinMessages": "Fixar message", @@ -4623,9 +4188,7 @@ "announcements": "Anuncios", "activities": "Activitates", "access": "Acceso", - "botSettings": "Agendias del bot", "activitySuggestionTimeoutMessage": "Nos labora duramente pro generar plue de activitates pro te, per favor torna in un minutt", - "accessSettingsWarning": "Oups! Pare que tu non ha permission pro configurar le regula de accesso de iste camera. Tu deverea verificar los pro esser secur que illes es que tu necessita e parlar con un administrator de camera si tu ha de cambiar los", "howSpaceCanBeFound": "Como iste curso pote esser trovate", "private": "Privat", "cannotBeFoundInSearch": "Non pote esser trovate in le recerca", @@ -4638,16 +4201,6 @@ "canBeFoundViaKnock": "• requesta de juncar e approbation del administrator", "youHaveLeveledUp": "Tu ha elevat se!", "sendActivities": "Manda activitates", - "getStarted": "Comencia", - "getStartedBotChatDesc": "Chatting con AI es un loco excellente pro comenciar e le instrumentos de lectura, scriber, ascoltar e parlar de Pangea face lo simple!", - "getStartedCommunitiesDesc": "Lection con un communitate es ubi Pangea Chat brilla!\nTu pote juncer tu classe, trovar un curso, o mesmo crear tu proprie!", - "getStartedFriendsDesc": "Ha tu un amico qui vole aprender con te?", - "getStartedBotChatComplete": "Ben facte! Tu es in chat con le bot!", - "getStartedCommunitiesComplete": "Bon, tu ha jont un cors!", - "getStartedComplete": "Tu ha completat ta section!\nContinua a esplorar nos meraviliose caracteristicas per chat con amicos!", - "getStartedFriendsComplete": "Woohoo! Tu ha amicos! 😉", - "getStartedBotChatButton": "Cumencia a chat!", - "getStartedFriendsButton": "Chat con un amico", "groupChat": "Chat de gruppo", "directMessage": "Messegg directe", "newDirectMessage": "Nove messegg directe", @@ -4663,7 +4216,6 @@ "mySavedActivities": "Mi activitates salvate", "noSavedActivities": "Nulle activitate salvate", "saveActivity": "Salva iste activitate", - "yourSavedActivities": "Activitâts salvat", "failedToPlayVideo": "N'a podet pas zugar la video", "done": "Finit", "inThisSpace": "En ta stu spazi", @@ -4702,37 +4254,27 @@ "maximumActivityParticipants": "Cata activitate pote ha un maximum de {count} participant(es).", "pending": "Pending", "inactive": "Inactiv", - "unjoinedActivityMessage": "Vole tu participar? Selige un rolo aperte!\nO simplemente stai e vide le show!", - "fullActivityMessage": "Sentite liber de vider le show! Dum il n'ha nulle roles aperte pro participar, tu pote vider le chat!", "confirmRole": "Confirma le role", "openRoleLabel": "APERTE", "joinedTheActivity": "👋 {username} s'atactivava como {role}", "finishedTheActivity": "🎯 {username} ha finita iste activitate", - "endActivityTitle": "Io ha finite", - "endActivityDesc": "Ha tu completate le objectivos?\nIsto es tu confirmation que tu te retire de le messagios. Ma non te preoccupa, le divertimento continua in le chat! Sentite liber de socializar e goder le show usque a que omne clicka 'Finite'.", "archiveToAnalytics": "Adder a mi Activitates Complete", "activitySummaryError": "Summarios de activitate non disponibile", "requestSummaries": "Requerer summarios", - "loadingActivitySummary": "Loading le summario de activitate...", "generatingNewActivities": "Tu es le prime usator de iste par de linguas! Per favor, da nos un minuto, nos prepara activitates juste pro te.", - "requestAccessTitle": "Requerer accesso a vista de analytics?", + "requestAccessTitle": "¿Solicitar acceso a la analítica?", "requestAccessDesc": "Vole tu requerer accesso a vider le analytics de participantes?\n\nSi le participantes agree, le administratores de iste curso potera vider tu:\n • total vocabulario\n • total conceptos grammatical\n • total sessiones de activitate complete\n • le conceptos grammatical specific usate, correctemente e incorrectemente\n\nIlles non potera vider tu:\n • messages in chat exterieur al curso\n • lista de vocabulario", "requestAccess": "Requerer accesso ({count})", "analyticsInactiveTitle": "Le requestas a usatores inactive non poteva esser inviate", "analyticsInactiveDesc": "Usatores inactive que non ha login desde que iste function ha essite introducite non videra tu requesta.\n\nLe button 'Requerer' apparira una vice que illes returna. Tu pote resendar le requesta postea cliccando le button 'Requerer' sub lor nomine quando illo es disponibile.", "accessRequestedTitle": "Requesta de accesso a analytics", - "accessRequestedDesc": "Le administratores de “{space}” requesta vider tu analytics de apprendimento.\n\nSi tu es d'accord, le administratores de iste curso potera vider tu:\n • total vocabulario\n • total conceptos grammatical\n • total sessiones de activitate complete\n • le conceptos grammatical specific usate, correctemente e incorrectemente\n\nIlles non potera vider tu:\n • messages in chat exterieur al curso\n • lista de vocabulario", - "allowAccess": "Permitte accesso", - "denyAccess": "Refusa l'accesso", + "accessRequestedDesc": "Solicitando admin(s): {admin} \n\nLos administradores de “{space}” están solicitando ver tu analítica de aprendizaje.\n\nSi estás de acuerdo, podrán ver tu:\n • vocabulario total\n • conceptos gramaticales totales\n • sesiones de actividad totales completadas\n • los conceptos gramaticales específicos utilizados, correctamente e incorrectamente\n\nNo podrán ver tu:\n • mensajes en chats fuera del curso\n • lista de vocabulario", "adminRequestedAccess": "L'aministratori ha demandat accesso a tuas analiticas.", "lastUpdated": "Actualisà\n{time}", "activityFinishedMessage": "Tutt finit!", "endForAll": "Finir pro tot", "newCourse": "Nove cors", - "newCourseSubtitle": "Qual plan de cors tu vole usar?", - "failedToLoadCourses": "Fali a cargar corses", "numModules": "{num} modulo(s)", - "numActivityPlans": "{num} plan(s) de activitate", "coursePlan": "Plan de cors", "editCourseLater": "Tu pote editar le titulo, descriptiones e imagine del cors plus tarde.", "newCourseAccess": "Per defaut, los cors es privat e require approbation del admin pro aderir. Tu pote modificar iste parametros a qualunque momento.", @@ -4746,17 +4288,11 @@ "accessDesc": "Tu pote face tu cors aperta al mundo! O, face tu cors private e secur.", "createGroupChatDesc": "Dum que le sessiones de activitate comencia e termina, le chat de gruppo remanera aperta pro communication routine.", "deleteDesc": "Solmen administratores pote deletar un cors. Iste es un action destructive que remove tote usatores e delete tote le chats selectate in le cors. Procede con cautela.", - "failedToLoadCourseInfo": "Fallite a cargar informationes del cors", "noCourseFound": "Oh, iste cors ha besonho de un plan!\n\nLe planos del cors es un sequencia de themas e actividades de conversation.", "additionalParticipants": "+ {num} alteres", - "activityNotFoundForCourse": "Iste activitate non ha essite trovate in le cors", - "courseChats": "Chats del Cours", - "myActivitySessions": "Mi Sessiones de Activitate", "directMessages": "Message Directe", "whatNow": "Que ora?", "chooseNextActivity": "Selige tu proxime activitate!", - "seeInstructions": "Vede le Instrucciones", - "hideInstructions": "Celar le Instrucciones", "letsGo": "Iva", "chooseRole": "Selige un rolo!", "chooseRoleToParticipate": "Selige un rolo pro participar!", @@ -4766,23 +4302,15 @@ "inviteFriends": "Invitar amics", "waitNotDone": "Spet, me ne ha finí!", "waitingForOthersToFinish": "Spetant que los otros terminen...", - "saveToCompletedActivities": "Salvar a activitâts completades", "generatingSummary": "Analizando le chat e generant resultâts", - "instructionsLanguage": "Lingua de instrukcions", "findCourse": "Trovar un cors", - "activityCompletedDesc": "Vostra activitât completade es stada zontada a analytics, onde tu podes revistar e practicar la lingua que tu usat.", "pingParticipantsNotification": "{user} es cercant usatôrs pro jontar a la session de activitât in {room}", "course": "Cors", "courses": "Cors", "courseName": "Nomen del cors", "createNewCourse": "Nove cors", - "publicCourses": "Cors publics", "goToCourse": "Andar a le cors: {course}", "activityComplete": "Chest activitât e stada completade. La resumé de l'activitât devess esser disponibil sota.", - "haventChattedMuch": "Par che tu no si parlât assaj, provâ a doprar plui parôlas de vocabolo! Se tu senti che tu ha completât ta scopo, tu puedis finir l'activitât sota.", - "haveChatted": "Par che tu si parlât par un pez, se tu senti che tu ha completât ta scopo, finisci par completar l'activitât e noi generarem une resumé in le chat!", - "userDoneAndWaiting": "{num1}/{num2} participants ha finît. Speta che totis finiscin, e noi generarem une resumé in le chat! \n\nSe tu vules tornar a la conversazion, clicca su le boton continue in le chat.", - "othersDoneAndWaiting": "{num1}/{num2} es finît. Tu ha completât ta scopo?", "startNewSession": "Comenciar nove session", "joinOpenSession": "Joinar session aperta", "less": "poc", @@ -4792,7 +4320,6 @@ "openToJoin": "Aperta a joinar", "results": "Resultâts", "activityDone": "Activitate completada!", - "moreLabel": "plui", "promoCodeInfo": "Li codices promo pot esser inserite in la pagine sequente", "editsComingSoon": "La capacitate de modificar citâts e activitâts es proxime arrivant.", "editing": "Modificant", @@ -4808,13 +4335,10 @@ "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", - "chooseLanguage": "Selige un linguage.", + "chooseLanguage": "Rogha teanga sprioc.", "planTrip": "Planifica tui viage", "howAreYouTraveling": "Con que te viages?", "unlockPrivateTrip": "Desblocca un viage privat", @@ -4827,25 +4351,20 @@ "courseCode": "Qual es la secreta parola?", "courseCodeHint": "Codice de viage o ligamine", "unlockMyTrip": "Desblocca mi viage", - "anyLevel": "Qualsiseu nivele", "signupOption": "Como tu vole s'inscrire?", "withApple": "Con Apple", "withGoogle": "Con Google", "withEmail": "Con Email", "createAccount": "Crea conto", - "noCoursesFound": "Nulle cursos trovate", "loginWithEmail": "S'login con email", "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", - "allCefrLevels": "Tutte le nivels CEFR", "chatListTooltip": "Qua tu trovarai to mesages directes! Clicca su qualunque avatar de usator e 'comencia conversation' pro mandar un DM.", "directMessageBotTitle": "Messagie Direkte Pangea Bot", "feedbackTitle": "Retrospectiva de Activitate", - "feedbackDesc": "Koma deve esser meliorada l'activitate? Se tu pote providar qualque detalios, nos farai le cambio!", "feedbackHint": "Tua retroaction", "feedbackButton": "Submitter retroaction", "directMessageBotDesc": "Parlar a humanes es plu amusant ma... AI es semper preste!", @@ -4853,7 +4372,7 @@ "playWithAI": "Joca con AI pro ora", "courseStartDesc": "Pangea Bot es preste a partir a qualunque momento!\n\n...ma apprender es melior con amicos!", "@@locale": "ie", - "@@last_modified": "2026-01-06 13:01:17.481803", + "@@last_modified": "2026-01-07 14:24:25.335678", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -5979,30 +5498,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6018,18 +5513,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6054,18 +5537,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6102,38 +5573,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6142,62 +5585,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6234,10 +5633,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6246,14 +5641,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6262,46 +5649,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6310,10 +5661,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6370,18 +5717,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6390,14 +5725,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6426,18 +5753,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6446,42 +5761,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6490,14 +5773,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6518,26 +5793,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6558,10 +5813,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6594,25 +5845,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6669,34 +5901,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6725,778 +5929,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8489,14 +6925,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8508,14 +6936,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8547,10 +6967,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8559,18 +6975,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8579,14 +6983,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8611,38 +7007,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8688,10 +7056,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8716,10 +7080,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8744,10 +7104,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8756,66 +7112,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8836,42 +7136,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8896,154 +7172,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9060,18 +7188,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9092,14 +7208,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9116,10 +7224,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9132,14 +7236,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9148,14 +7244,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9183,26 +7271,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9231,18 +7299,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9279,10 +7339,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10215,10 +8271,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10399,34 +8451,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10439,10 +8463,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10451,14 +8471,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10475,22 +8487,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10638,14 +8634,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10654,34 +8642,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10690,54 +8650,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10746,10 +8670,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10766,10 +8686,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10941,26 +8857,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10989,10 +8885,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11049,30 +8941,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11101,18 +8977,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11229,14 +9097,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11249,10 +9109,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11261,14 +9117,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11285,14 +9133,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11301,22 +9141,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11329,18 +9153,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11357,22 +9169,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11381,30 +9181,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11477,18 +9253,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11545,18 +9309,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11585,30 +9337,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11661,18 +9397,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11721,46 +9449,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11825,10 +9513,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12000,14 +9684,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12035,14 +9711,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12055,10 +9723,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12094,19 +9758,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12131,14 +9790,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12147,14 +9798,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12207,10 +9850,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12223,18 +9862,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12247,14 +9874,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12295,26 +9914,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12342,10 +9949,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12356,36 +9959,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12422,10 +9995,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12490,18 +10059,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12566,10 +10123,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12590,10 +10143,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12610,10 +10159,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12622,10 +10167,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12638,10 +10179,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12666,16 +10203,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invitar amics a l'activitate", - "inviteFriendsToActivityCourse": "Invitar amics a l'activitate e cors", "feedbackRespDesc": "Revisa deman per actualisaziuns de l'activitate.", "activityDropdownDesc": "Quan tu ha finì cun questa activitate, clicca ciutta", - "activityAnalyticsListBody": "Quisti es tuas activitâts completez! Dopo che tu ha finì le, tu peux veder los ca in qua.", "languageMismatchTitle": "Discrepanza de lingue", "languageMismatchDesc": "La to target lingue no coincide cun la lingue de questa activitate. Voles actualizar la to target lingue?", "reportWordIssueTooltip": "Reportar un problema de informazions de paròla", "tokenInfoFeedbackDialogTitle": "Feedback de informazions de paròla", - "tokenInfoFeedbackDialogDesc": "L'IA fa sbagli. Per piaser, descrivi cualsivoglia problem che tu ha trovà cun l'informazions superior.", "noPublicCoursesFound": "Nissun cors public trovà. Voles crear un?", "noCourseTemplatesFound": "No podain trovar nissun cors par la to target lingue. Tu peux discutar cun Pangea Bot intant, e tornar a verificar piò tardi per plui cors.", "botActivityJoinFailMessage": "Pangea Bot al sta tardant a rispuonder. Per piaser, prova piò tardi, o invita un amìs.", @@ -12683,14 +10216,6 @@ "leaveDesc": "Lascia chest spazi e toti i discuors in chiel", "selectAll": "Selessiona tot", "deselectAll": "Deselessiona tot", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12699,10 +10224,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12719,10 +10240,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12756,7 +10273,6 @@ "newMessageInPangeaChat": "📝 Nov messadi in Pangea Chat", "shareCourse": "Partagiar corsa", "addCourse": "Zontar un corsa", - "joinCourseWithCode": "Kumencar corsa cun còde", "joinPublicCourse": "Kumencar corsa publice", "vocabLevelsDesc": "Chest è il loc dove i parôls di vocabulari a saran miss in plance une volte che tu o i às nivellâts!", "highlightVocabTooltip": "Bain úsáid as na focail ghréasáin atá mar sprioc thíos trína sheoladh nó trína chleachtadh sa chomhrá", @@ -12780,10 +10296,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12792,7 +10304,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nessun DM o chat trovati. Assicurati che la tua ricerca sia scritta correttamente.", + "activityAnalyticsTooltipBody": "Queste sono le tue attività salvate per revisione e pratica.", + "numSavedActivities": "Numero di attività salvate", + "saveActivityTitle": "Salva attività", + "saveActivityDesc": "Ottimo lavoro! Salva questa attività per una revisione e pratica future", + "levelInfoTooltip": "Qui puoi vedere tutti i punti che hai guadagnato e come!", + "alreadyInCourseWithID": "Sei già in un corso con questo piano. Vuoi creare un corso con lo stesso piano o andare al corso esistente?", + "goToExistingCourse": "Vai al corso esistente", + "emojiView": "Visualizzazione emoji", + "feedbackDialogDesc": "Anch'io faccio errori! Qualcosa per aiutarmi a migliorare?", + "contactHasBeenInvitedToTheCourse": "Kontak telah diundang ke kursus", + "activityStatsButtonTooltip": "Info aktivitas", + "allow": "Izinkan", + "deny": "Tolak", + "enabledRenewal": "Aktifkan Pembaruan Langganan", + "subscriptionEndsOn": "Langganan Berakhir Pada", + "subscriptionRenewsOn": "Langganan Diperbarui Pada", + "waitForSubscriptionChanges": "Perubahan pada langganan Anda mungkin memerlukan waktu sejenak untuk tercermin di aplikasi.", + "subscribeReadingAssistance": "Berlangganan untuk membuka kunci alat pesan", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Arabic", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijani", + "baDisplayName": "Башкир", + "banDisplayName": "Балийский", + "bbcDisplayName": "Батака Тоба", + "beDisplayName": "Белорусский", + "bemDisplayName": "Бемба", + "bewDisplayName": "Бетави", + "bgDisplayName": "Болгарский", + "bhoDisplayName": "Бходжпури", + "bikDisplayName": "Бикол", + "bmDisplayName": "Бамбар", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnian", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Central Kurdish", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsican", + "crhDisplayName": "Crimean Turkish", + "crsDisplayName": "Seselwa Creole French", + "csDisplayName": "Czech", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Welsh", + "daDisplayName": "Danish", + "deDisplayName": "German", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "English", + "enAUDisplayName": "English (Australia)", + "enGBDisplayName": "English (UK)", + "enINDisplayName": "Anglais (Inde)", + "enUSDisplayName": "Anglais (États-Unis)", + "eoDisplayName": "Espéranto", + "esDisplayName": "Espagnol", + "esESDisplayName": "Espagnol (Espagne)", + "esMXDisplayName": "Espagnol (Mexique)", + "euDisplayName": "Basque", + "faDisplayName": "Persan", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finnois", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroese", + "frDisplayName": "Français", + "frCADisplayName": "Français (Canada)", + "frFRDisplayName": "Français (France)", + "fyDisplayName": "Frison occidental", + "gaDisplayName": "Irlandais", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaeilge na hAlban", + "glDisplayName": "Galego", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Konkani Goan", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiiano", + "heDisplayName": "Hebraico", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croatian", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitian Creole", + "huDisplayName": "Hungarian", + "hyDisplayName": "Armenian", + "idDisplayName": "Indonesian", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Icelandic", + "itDisplayName": "Itael", + "jaDisplayName": "Japaneis", + "jvDisplayName": "Javaneis", + "kaDisplayName": "Georgian", + "kkDisplayName": "Cazaque", + "kmDisplayName": "Khmer", + "knDisplayName": "Canarês", + "koDisplayName": "Coreano", + "kokDisplayName": "Concanim", + "kriDisplayName": "Krio", + "ksDisplayName": "کشمیرى", + "ktuDisplayName": "کیٹوبا (جمہوری جمہوریہ کانگو)", + "kuDisplayName": "کردی", + "kyDisplayName": "قرغیزی", + "laDisplayName": "لاطینی", + "lbDisplayName": "لکسمبرگیش", + "lgDisplayName": "گاندا", + "liDisplayName": "لیمبرگیش", + "lijDisplayName": "لیگوریائی", + "lmoDisplayName": "لومباردی", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituanien", + "ltgDisplayName": "Latgalien", + "luoDisplayName": "Luo (Kenya et Tanzanie)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letton", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgache", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolian", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabic)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norwegian (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Dutch", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Norwegian", + "nrDisplayName": "Sout Ndebele", + "nsoDisplayName": "Sotho sa Leboa", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polski", + "psDisplayName": "Pashto", + "ptDisplayName": "Português", + "ptBRDisplayName": "Português (Brasil)", + "ptPTDisplayName": "Português (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romanian", + "roMDDisplayName": "Moldovan", + "romDisplayName": "Romany", + "ruDisplayName": "Russian", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilian", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovak", + "slDisplayName": "Slovenian", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanian", + "srDisplayName": "Serbian", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Southern Sotho", + "suDisplayName": "Sundanese", + "svDisplayName": "Swedish", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Тоҷикӣ", + "thDisplayName": "Тай", + "tiDisplayName": "Тигриня", + "tkDisplayName": "Туркмен", + "tlDisplayName": "Тагалог", + "tnDisplayName": "Тсвана", + "trDisplayName": "Турк", + "tsDisplayName": "Тсонга", + "ttDisplayName": "Татар", + "ugDisplayName": "Уйгур", + "ukDisplayName": "Ukrainian", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbek", + "viDisplayName": "Vietnamese", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonés", + "yueCNDisplayName": "Cantonés (China)", + "yueHKDisplayName": "Cantonés (Hong Kong)", + "zhDisplayName": "Chino", + "zhCNDisplayName": "Chino (Simplificado)", + "zhTWDisplayName": "Chino (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12857,6 +11555,7 @@ "placeholders": {} }, "notStartedActivitiesTitle": "Sesiones abiertas ({num})", + "pickDifferentActivity": "Elige una actividad diferente", "inProgressActivitiesTitle": "Sucedió ahora ({num})", "completedActivitiesTitle": "Hecho ({num})", "inOngoingActivity": "¡Tienes una actividad en curso!", @@ -12884,10 +11583,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Tua lingua target non concordat cum hoc nuntio. Renovare linguam tuam target?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Isto é todo mundo neste curso. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Tēnā, ka tangohia tēnei kupu mōhiohio i tō rātaka mō ake tonu atu", + "woman": "Wāhine", + "man": "Tāne", + "otherGender": "Ētahi atu", + "unselectedGender": "Tīpakohia he kōwhiringa ira", + "gender": "Ira", + "chatParticipantTooltip": "Ko te katoa tēnei i roto i tēnei kōrero. Pāwhiritia te whakaahua o te kaiwhakamahi ka \"tīmata kōrero\" ki te tuku karere ki a ia.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Naidheachdan ionnsachaidh air an cur dheth airson teachdaireachdan nach eil ann an do chànan targaid.", + "vocabEmoji": "Emoji faclair", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "D'iarr athghiniú", + "optionalRegenerateReason": "(Roghnach) Cúis", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Tú setaste an emoji pa {lemma}! Usaremos este emoji pa representar la palabra en les actividaes de práctica d'ora en adelante.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Acht na sign in a chríochnú", + "ssoDialogDesc": "Osclaíomar cluais nua ionas go bhféadfaidh tú síniú isteach go sábháilte.", + "ssoDialogHelpText": "🤔 Má chonaic tú an cluais nua, seiceáil le do thoil do bhacadóir pop-up.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Díghá na huirlisí teanga", + "disableLanguageToolsDesc": "An bhfuil tú ag iarraidh na cabhrach teanga uathoibríoch a dhíghníomhachtú?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permisiunea a fost refuzată. Activați permisiunile de înregistrare pentru a înregistra mesaje audio.", + "genericWebRecordingError": "Ceva a mers prost. Recomandăm utilizarea browserului Chrome atunci când înregistrați mesaje.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Aby uzyskać najlepsze wrażenia podczas korzystania z tej aplikacji, proszę powiększyć rozmiar ekranu.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Gníomhaíochtaí le hOscail an Conradh Nua", "activitiesToUnlockTopicDesc": "Socraigh an líon gníomhaíochtaí le hOscail an chéad ábhar cúrsa", "@activitiesToUnlockTopicTitle": { @@ -12897,5 +11714,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Praktiko de ĝusta vortodefino", + "constructUseIncLMDesc": "Praktiko de malĝusta vortodefino", + "constructUseCorLADesc": "Praktiko de ĝusta vortaudio", + "constructUseIncLADesc": "Praktiko de malĝusta vortaudio", + "constructUseBonus": "Bonus dum vortpraktiko", + "practiceVocab": "Praktiki vortaron", + "selectMeaning": "Elekti la signifon", + "selectAudio": "Elekti la kongruan audion", + "congratulations": "Gratulon!", + "anotherRound": "Alia rundo", + "noActivityRequest": "Ninguna solicitud de actividad actual.", + "quit": "Salir", + "congratulationsYouveCompletedPractice": "¡Felicidades! Has completado la sesión de práctica.", + "mustHave10Words": "Debes tener al menos 10 palabras de vocabulario para practicarlas. ¡Intenta hablar con un amigo o con Pangea Bot para descubrir más!", + "botSettings": "Configuración del Bot", + "activitySettingsOverrideWarning": "Idioma y nivel de idioma determinados por el plan de actividad", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 69849db9b..ca4d47338 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:39.801417", + "@@last_modified": "2026-01-07 14:25:44.793254", "about": "Informazioni", "@about": { "type": "String", @@ -3357,26 +3357,14 @@ "commandHint_logoutall": "Disconnetti tutti i dispositivi attivi", "displayNavigationRail": "Mostra la barra di navigazione su mobile", "customReaction": "Reazione personalizzata", - "accountInformation": "Informazioni sull'account", - "addGroupDescription": "Aggiungi una descrizione alla chat", - "addNewFriend": "Aggiungi un nuovo amico", - "alreadyHaveAnAccount": "Hai già un account?", - "createNewGroup": "Crea una nuova chat", - "editChatPermissions": "Modifica le autorizzazioni della chat", "writeAMessageLangCodes": "Scrivi in {l1} o {l2}...", "requests": "Richieste", - "allCorrect": "È così che lo direi! Bello!", - "newWayAllGood": "Non è come l'avrei detto, ma sembra buono!", - "othersAreBetter": "Hm, potrebbe esserci un modo migliore per dirlo.", "holdForInfo": "Tieni premuto per informazioni sulla parola.", "greenFeedback": "È quello che avrei scritto!", "yellowFeedback": "Hmm, puoi provarlo e vedere se funziona! Per usare questa parola, cliccaci di nuovo.", "redFeedback": "Non credo sia giusto...", "itInstructionsTitle": "Posso aiutarti a tradurre!", "itInstructionsBody": "Puoi cliccare e tenere premute le scelte per informazioni sulla parola.", - "oneday": "Ultime 24 ore", - "oneweek": "Ultimi 7 giorni", - "onemonth": "Mese scorso", "gaTooltip": "L2 utilizzo con assistenza grammaticale", "taTooltip": "L2 utilizzo con assistenza alla traduzione", "unTooltip": "Altro", @@ -3386,58 +3374,27 @@ "interactiveTranslatorAllowed": "Scelta dello Studente", "interactiveTranslatorRequired": "Obbligatorio", "notYetSet": "Ancora non impostato", - "myLearning": "Le mie Analisi", "waTooltip": "L2 utilizzo senza assistenza", - "changeDateRange": "Cambia intervallo di date", - "classDescription": "Descrizione", - "addStudents": "Invita utenti tramite link o codice", - "copyClassLink": "Copia link di invito", - "copyClassCode": "Copia codice di invito", - "inviteStudentByUserName": "Invita utenti tramite nome utente", "languageSettings": "Impostazioni della lingua", "interactiveTranslator": "Assistenza alla traduzione", - "shareVideo": "Condividi video", - "shareVideoDesc": "Attiva questa opzione per consentire agli studenti di condividere video nelle chat.", - "shareFiles": "Condividi file", - "selectLanguageLevel": "Seleziona livello di lingua", "noIdenticalLanguages": "Per favore scegli lingue di base e di destinazione diverse", - "iWantALanguagePartnerFrom": "È da:", - "worldWide": "In tutto il mondo", - "noResults": "Nessun risultato! Prova ad ampliare la ricerca.", "searchBy": "Cerca per paese e lingue", - "iWantAConversationPartner": "Voglio un partner di conversazione che", - "iWantALanguagePartnerWhoSpeaks": "Parla:", - "iWantALanguagePartnerWhoIsLearning": "Sta imparando:", "joinWithClassCode": "Unisciti al corso", - "joinWithClassCodeHint": "Inserisci il codice di invito", - "languageLevelPreA1": "Principiante assoluto (Pre A1)", - "languageLevelA1": "Principiante (A1)", - "languageLevelA2": "Elementare (A2)", - "languageLevelB1": "Intermedio (B1)", - "languageLevelB2": "Intermedio superiore (B2)", - "languageLevelC1": "Avanzato (C1)", - "languageLevelC2": "Padronanza (C2)", + "languageLevelPreA1": "Principiante Basso (Pre A1)", + "languageLevelA1": "Novizio Mid (A1)", + "languageLevelA2": "Principiante Alto (A2)", + "languageLevelB1": "Intermedio Medio (B1)", + "languageLevelB2": "Avanzato Basso (B2)", + "languageLevelC1": "Avanzato Medio (C1)", + "languageLevelC2": "Superiore (C2)", "changeTheNameOfTheClass": "Cambia il nome", "changeTheNameOfTheChat": "Cambia il nome della chat", - "askPangeaBot": "Chiedi a Pangea Bot una definizione contestuale.", "sorryNoResults": "Spiacente, nessun risultato.", "ignoreInThisText": "Ignora", - "helpMeTranslate": "Sì!", - "needsItShortMessage": "Fuori target", "needsItMessage": "Aspetta, non è {targetLanguage}! Hai bisogno di aiuto con la traduzione?", - "needsIgcMessage": "Questo messaggio contiene un errore grammaticale.", - "tokenTranslationTitle": "Una parola è nella tua lingua di base.", - "spanTranslationDesc": "Vedi le possibili traduzioni di seguito.", - "spanTranslationTitle": "Alcune parole sono nella tua lingua di base.", - "l1SpanAndGrammarTitle": "Fuori dalla lingua target", - "l1SpanAndGrammarDesc": "Questo potrebbe essere nella tua lingua di base o potrebbe essere un errore grammaticale.", - "otherTitle": "Hai un errore.", - "otherDesc": "Vedi le possibili correzioni di seguito.", "countryInformation": "Il mio paese", - "myLanguages": "Le mie lingue di base e di destinazione", "targetLanguage": "Lingua di destinazione", "sourceLanguage": "Lingua di base", - "languagesISpeak": "Le lingue che parlo", "updateLanguage": "Le mie lingue", "whatLanguageYouWantToLearn": "Quale lingua vuoi imparare?", "whatIsYourBaseLanguage": "Qual è la tua lingua di base?", @@ -3452,13 +3409,8 @@ "errorDisableLanguageAssistanceUserDesc": "Clicca qui per aggiornare le impostazioni di assistenza alla traduzione e grammaticale", "errorDisableITClassDesc": "L'assistenza alla traduzione è disattivata per il corso in cui si trova questa chat.", "errorDisableIGCClassDesc": "L'assistenza alla grammatica è disattivata per il corso in cui si trova questa chat.", - "itIsDisabled": "Traduzione Interattiva disattivata", - "igcIsDisabled": "Controllo grammaticale interattivo disattivato", - "goToLearningSettings": "Vai alle Impostazioni di Apprendimento", "error405Title": "Lingue non impostate", "error405Desc": "Imposta le tue lingue nel Menu Principale > Impostazioni di Apprendimento.", - "loginOrSignup": "Accedi con", - "iAgreeToThe": "Accetto i ", "termsAndConditions": "Termini e Condizioni", "andCertifyIAmAtLeast13YearsOfAge": " e certifico di avere almeno 16 anni.", "error502504Title": "Wow, ci sono molti studenti online!", @@ -3466,40 +3418,21 @@ "error404Title": "Errore di traduzione!", "error404Desc": "Il bot Pangea non è sicuro di come tradurre questo...", "errorPleaseRefresh": "Stiamo verificando! Ricarica e riprova.", - "toggleIT": "Traduzione Interattiva", - "toggleIGC": "Controllo grammaticale interattivo", - "toggleToolSettingsDescription": "Qui puoi attivare o disattivare le impostazioni del tuo strumento linguistico individuale.", "connectedToStaging": "Connesso a Staging", "learningSettings": "Impostazioni di apprendimento", - "sendVoiceNotes": "Invia note vocali", - "sendVoiceNotesDesc": "Attiva questa opzione per consentire agli studenti di inviare note vocali nelle chat.", - "chatTopic": "Argomento della chat", - "chatTopicDesc": "Imposta un argomento per la chat", - "inviteStudentByUserNameDesc": "Se il tuo studente ha già un account, puoi cercarlo.", "participants": "Partecipanti", - "almostPerfect": "Sembra giusto! Ecco cosa avrei detto.", - "prettyGood": "Abbastanza bene! Ecco cosa avrei detto.", - "letMeThink": "Hmm, vediamo come sei andato!", "clickMessageTitle": "Hai bisogno di aiuto?", "clickMessageBody": "Clicca su un messaggio per strumenti linguistici come traduzione, riproduzione e altro!", - "understandingMessagesTitle": "Definizioni e traduzioni!", - "understandingMessagesBody": "Clicca sulle parole sottolineate per le definizioni. Traduci con le opzioni del messaggio (in alto a destra).", "allDone": "Tutto fatto!", "vocab": "Vocabolario", "low": "Abbiamo prove che l'utente non comprende queste parole.", "medium": "Queste parole sono state usate. Non è chiaro se le parole siano state pienamente comprese o meno.", "high": "Abbiamo prove che l'utente comprende queste parole.", - "unknownProficiency": "Queste parole non sono state usate in Pangea Chat.", - "changeView": "Cambia visualizzazione.", - "clearAll": "Elimina tutte le parole?", - "generateVocabulary": "Genera vocabolario da titolo e descrizione", - "generatePrompts": "Genera suggerimenti", "subscribe": "Iscriviti", "getAccess": "Iscriviti ora!", "subscriptionDesc": "La messaggistica è gratuita! Iscriviti per sbloccare traduzioni interattive, controllo grammaticale e analisi dell'apprendimento.", "subscriptionManagement": "Gestione abbonamento", "currentSubscription": "Abbonamento attuale", - "changeSubscription": "Modifica il tuo abbonamento", "cancelSubscription": "Annulla il tuo abbonamento", "selectYourPlan": "Seleziona il tuo piano", "subsciptionPlatformTooltip": "Accedi al tuo dispositivo originale per gestire il piano di abbonamento", @@ -3508,9 +3441,6 @@ "paymentHistory": "Storico pagamenti", "emptyChatDownloadWarning": "Impossibile scaricare chat vuota", "update": "Aggiorna", - "updateDesc": "Ora puoi aggiornare questa app da {localVersion} a {storeVersion}", - "maybeLater": "Forse più tardi", - "mainMenu": "Menu Principale", "toggleImmersionMode": "Modalità Immersione", "toggleImmersionModeDesc": "Quando attivata, tutti i messaggi vengono visualizzati nella tua lingua di destinazione. Questa impostazione è particolarmente utile negli scambi linguistici.", "itToggleDescription": "Questo strumento di apprendimento delle lingue identificherà le parole nella tua lingua di base e ti aiuterà a tradurle nella tua lingua di destinazione. Sebbene raro, l'IA può commettere errori di traduzione.", @@ -3525,212 +3455,13 @@ "definitionsToolDescription": "Quando attivo, le parole sottolineate in blu possono essere cliccate per le definizioni. Clicca sui messaggi per accedere alle definizioni.", "translationsToolDescrption": "Quando attivo, clicca su un messaggio e sull'icona di traduzione per vedere un messaggio nella tua lingua di base.", "welcomeBack": "Bentornato! Se hai partecipato al progetto pilota 2023-2024, contattaci per il tuo abbonamento speciale. Se sei un insegnante che ha (o la tua istituzione ha) acquistato licenze per la tua classe, contattaci per il tuo abbonamento insegnante.", - "kickAllStudents": "Espelli Tutti gli Studenti", - "kickAllStudentsConfirmation": "Sei sicuro di voler espellere tutti gli studenti?", - "inviteAllStudents": "Invita Tutti gli Studenti", - "inviteAllStudentsConfirmation": "Sei sicuro di voler invitare tutti gli studenti?", - "inviteUsersFromPangea": "Aggiungi amministratori", - "redeemPromoCode": "Riscatta il codice promozionale", - "enterPromoCode": "Inserisci il codice promozionale", "downloadTxtFile": "Scarica il file di testo", "downloadCSVFile": "Scarica il file CSV", "promotionalSubscriptionDesc": "Attualmente hai un abbonamento promozionale a vita. Contatta support@pangea.chat per assistenza nella modifica del tuo abbonamento.", "originalSubscriptionPlatform": "Abbonamento acquistato tramite {purchasePlatform}", "oneWeekTrial": "Prova di una settimana", "downloadXLSXFile": "Scarica il file Excel", - "abDisplayName": "Abkhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanese", - "amDisplayName": "Amharico", - "arDisplayName": "Arabo", - "anDisplayName": "Aragonese", - "hyDisplayName": "Armeno", - "asDisplayName": "Assamese", - "avDisplayName": "Avarico", - "aeDisplayName": "Avestico", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basque", - "beDisplayName": "Bielorusso", - "bnDisplayName": "Bengalese", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniaco", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgaro", - "myDisplayName": "Birmano", - "caDisplayName": "Catalano, Valenciano", - "chDisplayName": "Chamorro", - "ceDisplayName": " Ceceno", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Cinese", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornico", - "coDisplayName": "Corso", - "crDisplayName": "Creolo", - "hrDisplayName": "Croato", - "csDisplayName": "Ceco", - "daDisplayName": "Danese", - "dvDisplayName": "Divehi; Dhivehi; Maldiviano;", - "nlDisplayName": "Olandese", - "enDisplayName": "Inglese", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estone", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijiano", - "fiDisplayName": "Finlandese", - "frDisplayName": "Francese", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galiziano", - "kaDisplayName": "Georgiano", - "deDisplayName": "Tedesco", - "elDisplayName": "Greco, Moderno", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Creolo haitiano", - "haDisplayName": "Hausa", - "heDisplayName": "Ebraico (moderno)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungherese", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesiano", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandese", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandese", - "itDisplayName": "Italiano", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Giapponese", - "jvDisplayName": "Giapponese", - "klDisplayName": "Kalaallisut, groenlandese", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Cachemire", - "kkDisplayName": "Kazako", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiso, Kirghizistan", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreano", - "kuDisplayName": "Curdo", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latino", - "lbDisplayName": "Lussemburghese, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgese, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Lao", - "ltDisplayName": "Lituano", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Lettonico", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedone", - "mgDisplayName": "Malgascio", - "msDisplayName": "Malese", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltese", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolo", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norvegese Bokmål", - "ndDisplayName": "Ndebele del Nord", - "neDisplayName": "Nepalese", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norvegese Nynorsk", - "noDisplayName": "Norvegese", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele del Sud", - "ocDisplayName": "Occitano", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Old Church Slavonic, Slavo ecclesiastico, Slavonico ecclesiastico, Bulgaro antico, Slavonico antico", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetico, Ossetico", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persiano", - "plDisplayName": "Polacco", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portoghese", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumeno, Moldavo", - "ruDisplayName": "Russo", - "saDisplayName": "Sanskrit (Saṁskṛta)", - "scDisplayName": "Sardo", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami del Nord", - "smDisplayName": "Samoano", - "sgDisplayName": "Sango", - "srDisplayName": "Serbo", - "gdDisplayName": "Gaelico scozzese, gaelico", - "snDisplayName": "Shona", - "siDisplayName": "Singalese, Sinhalese", - "skDisplayName": "Slovacco", - "slDisplayName": "Sloveno", - "soDisplayName": "Somalo", - "stDisplayName": "Sotho meridionale", - "esDisplayName": "Spagnolo", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Svedese", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajik", - "thDisplayName": "Thailandese", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetano Standard, Tibetano, Centrale", - "tkDisplayName": "Turkmeno", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Isole Tonga)", - "trDisplayName": "Turco", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataro", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiano", - "ugDisplayName": " Uiguro, Uiguro", - "ukDisplayName": "Ucraino", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbeco", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamita", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Gallese", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisone Occidentale", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yiddish", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Sconosciuto", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiano", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multiplo", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Ebraico", - "jwDisplayName": "Giapponese", - "moDisplayName": "Moldavo", - "shDisplayName": "Serbo-Croato", "wwCountryDisplayName": "Worldwide", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Isole Aland", @@ -3978,41 +3709,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Paga", - "allPrivateChats": "Chat diretti", - "unknownPrivateChat": "Chat privato sconosciuto", + "pay": "Checkout", "invitedToSpace": "{user} ti ha invitato a partecipare a un corso: {space}! Vuoi accettare?", - "declinedInvitation": "Invito rifiutato", - "acceptedInvitation": "Invito accettato", "youreInvited": "📩 Sei invitato!", "invitedToChat": "{user} ti ha invitato a partecipare a una chat: {name}! Vuoi accettare?", "monthlySubscription": "Mensile", "yearlySubscription": "Annuale", "defaultSubscription": "Abbonamento Pangea Chat", "freeTrial": "Prova gratuita", - "grammarAnalytics": "Analisi degli errori", "total": "Totale: ", "noDataFound": "Nessun dato trovato", - "promoSubscriptionExpirationDesc": "Il tuo abbonamento attuale è promozionale e scade il {expiration}. Invia un messaggio a support@pangea.chat per assistenza nel cambiare il tuo abbonamento.", - "emptyChatNameWarning": "Per favore inserisci un nome per questa chat", "blurMeansTranslateTitle": "Perché il messaggio è sfocato?", "blurMeansTranslateBody": "Mentre la Modalità Immersione è attiva, i messaggi inviati nella tua lingua di base saranno sfocati mentre Pangea Bot li traduce nella tua lingua di destinazione. La Modalità Immersione può essere attivata o disattivata nelle impostazioni individuali e del corso.", - "someErrorTitle": "Hm, qualcosa non va", - "someErrorBody": "Potrebbe essere un errore o qualcosa nella tua lingua di base.", "bestCorrectionFeedback": "Corretto!", "distractorFeedback": "Non proprio.", "bestAnswerFeedback": "Corretto!", "definitionDefaultPrompt": "Cosa significa questa parola?", "practiceDefaultPrompt": "Qual è la migliore risposta?", "correctionDefaultPrompt": "Qual è la sostituzione migliore?", - "itStartDefaultPrompt": "Vuoi aiuto con la traduzione?", - "lockedChatWarning": "🔒 Questa chat è stata bloccata", - "lockChat": "Blocca chat", - "suggestToChat": "Suggerisci questa chat", - "suggestToChatDesc": "Le chat suggerite appariranno nelle liste delle chat", "acceptSelection": "Accetta la correzione", - "acceptSelectionAnyway": "Usa comunque questa", - "makingActivity": "Creando attività", "why": "Perché?", "definition": "Definizione", "exampleSentence": "Esempio di frase", @@ -4020,128 +3735,55 @@ "reportMessageTitle": "{reportingUserId} ha segnalato un messaggio da {reportedUserId} nella chat {roomName}", "reportMessageBody": "Messaggio: {reportedMessage}\nMotivo: {reason}", "noTeachersFound": "Nessun insegnante trovato a cui segnalare", - "viewArchive": "Visualizza archivio", "trialExpiration": "La tua prova gratuita scade il {expiration}", "freeTrialDesc": "I nuovi utenti ricevono una prova gratuita di una settimana di Pangea Chat", "activateTrial": "Prova gratuita di 7 giorni", "successfullySubscribed": "Ti sei iscritto con successo!", "clickToManageSubscription": "Clicca qui per gestire il tuo abbonamento.", - "errorGettingAudio": "Errore nel recupero dell'audio. Per favore, aggiorna e riprova.", "signUp": "Registrati", "pleaseChooseAtLeastChars": "Per favore, scegli almeno {min} caratteri.", "noEmailWarning": "Per favore, inserisci un indirizzo email valido. Altrimenti non potrai reimpostare la password. Se non vuoi farlo, premi di nuovo sul pulsante per continuare.", "pleaseEnterValidEmail": "Per favore inserisci un indirizzo email valido.", "pleaseChooseAUsername": "Per favore scegli un nome utente", - "chooseAUsername": "Scegli un nome utente", "define": "Definisci", "listen": "Ascolta", - "addConversationBot": "Abilita Bot di Conversazione", - "addConversationBotDesc": "Aggiungi un bot a questa chat", - "convoBotSettingsDescription": "Modifica l'argomento e la difficoltà della conversazione", - "enterAConversationTopic": "Inserisci un argomento di conversazione", - "conversationTopic": "Argomento della conversazione", - "enableModeration": "Abilita moderazione", - "enableModerationDesc": "Attiva la moderazione automatica per rivedere i messaggi prima che vengano inviati", - "conversationLanguageLevel": "Qual è il livello di lingua di questa conversazione?", - "showDefinition": "Mostra definizione", - "subscriptionPopupTitle": "Questa frase potrebbe contenere un errore grammaticale...", - "subscriptionPopupDesc": "Iscriviti oggi per sbloccare la traduzione e la correzione grammaticale!", - "seeOptions": "Vedi opzioni", - "continuedWithoutSubscription": "Continua senza abbonarti", "trialPeriodExpired": "Il tuo periodo di prova è scaduto", - "selectToDefine": "Clicca su qualsiasi parola per vedere la sua definizione!", "translations": "traduzioni", "messageAudio": "audio del messaggio", "definitions": "definizioni", "subscribedToUnlockTools": "Iscriviti per sbloccare la traduzione interattiva e il controllo grammaticale, la riproduzione audio, le attività di pratica personalizzate e le analisi di apprendimento!", "translationTooltip": "Traduci", - "audioTooltip": "Riproduci audio", "speechToTextTooltip": "Trascrizione", - "certifyAge": "Dichiaro di avere più di {age} anni", "kickBotWarning": "Espellere il bot Pangea rimuoverà il bot di conversazione da questa chat.", - "joinToView": "Unisciti a questa stanza per visualizzare i dettagli", "refresh": "Aggiorna", - "autoPlayTitle": "Riproduzione automatica dei messaggi", - "autoPlayDesc": "Quando abilitato, l'audio testo-parlato dei messaggi verrà riprodotto automaticamente quando selezionato.", "messageAnalytics": "Analisi dei messaggi", "words": "Parole", "score": "Punteggio", "accuracy": "Precisione", "points": "Punti", "noPaymentInfo": "Nessuna informazione di pagamento necessaria!", - "conversationBotModeSelectDescription": "Attività di chat", - "conversationBotModeSelectOption_discussion": "Discussione", - "conversationBotModeSelectOption_custom": "Personalizzato", - "conversationBotModeSelectOption_conversation": "Conversazione", - "conversationBotModeSelectOption_textAdventure": "Avventura testuale", - "conversationBotModeSelectOption_storyGame": "Gioco di storia", - "conversationBotDiscussionZone_title": "Impostazioni di discussione", - "conversationBotDiscussionZone_discussionTopicLabel": "Argomento della discussione", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Imposta l'argomento della discussione", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Parole chiave della discussione", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Imposta le parole chiave della discussione", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Elenco di parole chiave separate da virgola per guidare la discussione", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Invia prompt di discussione secondo un programma", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Ore tra i prompt di discussione", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Risponde con reazione ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reazione per inviare il prompt di discussione", - "conversationBotCustomZone_title": "Impostazioni personalizzate", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt di sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Imposta prompt di sistema personalizzato", - "conversationBotCustomZone_customSystemPromptEmptyError": "Prompt di sistema personalizzato mancante", - "botConfig": "Impostazioni bot e attività", - "botConfigNoPermissionTitle": "Nessun permesso", - "botConfigNoPermissionMessage": "Contatta l'amministratore della stanza per modificare la configurazione del bot", - "addConversationBotDialogTitleInvite": "Conferma invito al bot di conversazione", - "addConversationBotButtonInvite": "Invita", - "addConversationBotDialogInviteConfirmation": "Invitare", - "addConversationBotButtonTitleRemove": "Conferma rimozione del bot di conversazione", - "addConversationBotButtonRemove": "Rimuovi", - "addConversationBotDialogRemoveConfirmation": "Rimuovi", - "conversationBotConfigConfirmChange": "Conferma", - "conversationBotStatus": "Invita bot", - "conversationBotTextAdventureZone_title": "Avventura Testuale", - "conversationBotTextAdventureZone_instructionLabel": "Istruzioni del Master di Gioco", - "conversationBotTextAdventureZone_instructionPlaceholder": "Imposta le istruzioni del master di gioco", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Mancano le istruzioni del master di gioco", - "studentAnalyticsNotAvailable": "Dati degli studenti non disponibili al momento", - "roomDataMissing": "Potrebbero mancare alcuni dati nelle stanze di cui non sei membro.", "updatePhoneOS": "Potresti dover aggiornare la versione del sistema operativo del tuo dispositivo.", "wordsPerMinute": "Parole al minuto", "autoIGCToolName": "Esegui automaticamente l'assistenza alla scrittura Pangea", "autoIGCToolDescription": "Esegui automaticamente l'assistenza alla grammatica e alla traduzione di Pangea Chat prima di inviare il mio messaggio.", - "runGrammarCorrection": "Controlla il messaggio", - "grammarCorrectionFailed": "Problemi da risolvere", - "grammarCorrectionComplete": "Sembra buono!", "tooltipInstructionsTitle": "Non sei sicuro di cosa faccia?", "tooltipInstructionsMobileBody": "Tieni premuti gli elementi per visualizzare i suggerimenti.", "tooltipInstructionsBrowserBody": "Passa il mouse sugli elementi per visualizzare i suggerimenti.", "chatCapacity": "Capacità della chat", "roomFull": "Questa stanza è già piena.", - "topicNotSet": "L'argomento non è stato impostato.", - "chatCapacityNotSet": "Questa chat non ha limiti di capacità.", "chatCapacityHasBeenChanged": "Capacità della chat modificata", "chatCapacitySetTooLow": "La capacità della chat deve essere almeno {count}.", "chatCapacityExplanation": "La capacità della chat limita il numero di membri consentiti in una chat.", - "chatExceedsCapacity": "Questa chat supera la sua capacità.", "tooManyRequest": "Troppi richieste, riprova più tardi.", "enterNumber": "Per favore inserisci un valore numerico intero.", "buildTranslation": "Costruisci la tua traduzione dalle scelte sopra", - "nonexistentSelection": "La selezione non esiste più.", - "changeAnalyticsLanguage": "Cambia lingua di analisi", "practice": "Pratica", "noLanguagesSet": "Nessuna lingua impostata", - "noActivitiesFound": "Per ora basta così! Torna più tardi per ulteriori aggiornamenti.", - "hintTitle": "Suggerimento:", "speechToTextBody": "Per i messaggi vocali, puoi vedere una trascrizione e il punteggio delle parole al minuto del parlante.", "versionNotFound": "Versione non trovata", "fetchingVersion": "Recupero versione in corso...", "versionFetchError": "Errore nel recupero della versione", "versionText": "Versione: {version}+{buildNumber}", - "languageButtonLabel": "Lingua: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Riproduzione automatica della traduzione", - "interactiveTranslatorAutoPlayDesc": "Avvia il traduttore interattivo senza chiedere.", - "changeAnalyticsView": "Cambia visualizzazione analitica", "l1TranslationBody": "I messaggi nella tua lingua di base non verranno tradotti.", "deleteSubscriptionWarningTitle": "Hai un abbonamento attivo", "deleteSubscriptionWarningBody": "L'eliminazione del tuo account non annullerà automaticamente il tuo abbonamento.", @@ -4149,9 +3791,7 @@ "error520Title": "Per favore riprova.", "error520Desc": "Spiacenti, non abbiamo capito il tuo messaggio...", "wordsUsed": "Parole usate", - "errorTypes": "Tipi di errore", "level": "Livello", - "canceledSend": "Invio annullato", "morphsUsed": "Morfemi usati", "translationChoicesBody": "Fai clic e tieni premuta un'opzione per un suggerimento.", "grammar": "Grammatica", @@ -4161,7 +3801,6 @@ "reportContentIssueTitle": "Segnala problema di contenuto", "feedback": "Feedback opzionale", "reportContentIssueDescription": "Oh no! L'IA può facilitare esperienze di apprendimento personalizzate ma... anche fantasticare. Per favore, fornisci qualsiasi feedback e riproveremo.", - "changeContent": "Oh no! L'IA può facilitare esperienze di apprendimento personalizzate ma... anche fantasticare. Cosa dovrebbe essere?", "clickTheWordAgainToDeselect": "Fai clic sulla parola selezionata per deselezionarla.", "l2SupportNa": "Non disponibile", "l2SupportAlpha": "Alpha", @@ -4395,7 +4034,6 @@ "grammarCopySPC": "Specificità", "grammarCopyPARTTYPE": "Tipo partitivo", "grammarCopyINTREL": "Interrogativo-Relativo", - "grammarCopyNUMFORMpsor": "Numero del possessore", "grammarCopyUNKNOWN": "Sconosciuto", "grammarCopyNUMBERPSOR": "Numero del possessore", "grammarCopyPOSS": "Possessivo", @@ -4441,28 +4079,14 @@ "grammarCopyVOICEdir": "Diretto", "grammarCopyVOICEinv": "Inverso", "grammarCopyVOICErcp": "Reciproco", - "enterPrompt": "Per favore inserisci un prompt di sistema", - "selectBotLanguage": "Seleziona la lingua del bot", - "chooseVoice": "Scegli una voce", - "enterLanguageLevel": "Per favore inserisci un livello di lingua", - "enterDiscussionTopic": "Per favore inserisci un argomento di discussione", - "selectBotChatMode": "Seleziona la modalità di chat", - "messageNotInTargetLang": "Messaggio non nella lingua di destinazione", "other": "Altro", "levelShort": "LVL {level}", - "botModeValidation": "Seleziona una modalità di chat", "clickBestOption": "Scegli le migliori opzioni per tradurre il tuo messaggio!", "completeActivitiesToUnlock": "Completa almeno un'attività per sbloccare la traduzione!", - "botSettingsSubtitle": "Invita il bot a moderare l'attività della chat", - "invitePeople": "Invita utenti", "noCapacityLimit": "Nessun limite di capacità", "downloadGroupText": "Scarica il testo del gruppo", "notificationsOn": "Notifiche attivate", "notificationsOff": "Notifiche disattivate", - "chatCanBeFoundViaSearch": "La chat può essere trovata tramite ricerca", - "requireCodeToJoin": "Richiede codice per entrare", - "canFindInSearch": "Può essere trovato nella ricerca", - "addChatToSpace": "Aggiungi chat", "createChatAndInviteUsers": "Crea chat e invita utenti", "updatedNewSpaceDescription": "I corsi ti permettono di consolidare le tue chat e creare comunità private o pubbliche.", "joinWithCode": "Unisciti con il codice", @@ -4498,39 +4122,19 @@ "constructUseCollected": "Raccolto nella chat", "constructUseNanDesc": "Non applicabile", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Accedi con nome utente e password", - "registrationEmailMessage": "Verifica la tua email con un link inviato lì. In alcuni casi, l'email impiega fino a 5 minuti ad arrivare. Controlla anche la cartella spam.", "enableTTSToolName": "Abilitato testo in voce", "enableTTSToolDescription": "Consenti all'app di generare output di testo in voce per parti di testo nella tua lingua di destinazione.", - "couldNotFindTTS": "Non siamo riusciti a trovare un motore di sintesi vocale per la tua lingua di destinazione attuale.", - "ttsInstructionsHyperlink": "Clicca qui per visualizzare le istruzioni per scaricare una nuova voce sul tuo dispositivo.", - "createAnAccount": "Crea un account", - "signIn": "Accedi", - "signUpWithEmail": "Registrati con Email", - "signUpWithGoogle": "Registrati con Google", - "signUpWithApple": "Registrati con Apple", "yourUsername": "Il tuo nome utente", "yourEmail": "La tua email", - "pleaseEnterAnEmail": "Per favore inserisci un indirizzo email", - "signInWithGoogle": "Accedi con Google", - "signInWithApple": "Accedi con Apple", - "chooseYourAvatar": "Scegli il tuo avatar", "iWantToLearn": "Voglio imparare", - "letsStart": "Iniziamo", - "pleaseAgreeToTOS": "Per favore accetta i Termini e le Condizioni", "pleaseEnterEmail": "Per favore inserisci un indirizzo email valido.", - "pleaseSelectALanguage": "Per favore seleziona una lingua", "myBaseLanguage": "La mia lingua principale", - "clickWordsInstructions": "🧻 Clicca su qualsiasi parola per dettagli. 🤐", - "chooseBestDefinition": "Cosa significa questa parola?", "meaningSectionHeader": "Significato:", "formSectionHeader": "Forme usate nelle chat:", - "noEmojiSelectedTooltip": "Nessuna emoji selezionata", "writingExercisesTooltip": "Scrittura", "listeningExercisesTooltip": "Ascolto", "readingExercisesTooltip": "Lettura", "meaningNotFound": "Significato non trovato.", - "formsNotFound": "Impossibile trovare i moduli.", "chooseBaseForm": "Scegli la forma base", "notTheCodeError": "Mi dispiace, non è il codice!", "totalXP": "XP Totale", @@ -4570,9 +4174,6 @@ "pickAnEmoji": "Qual è la tua emoji preferita per '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Abbina i significati con le parole nel messaggio!", "doubleClickToEdit": "Fai doppio clic per modificare.", - "removeFeature": "Rimuovi {feature}", - "chooseCorrectLabel": "Scegli l'etichetta corretta.", - "levelPopupTitle": "Congratulazioni per aver raggiunto\nLivello {level}", "activityPlannerTitle": "Pianificatore di Attività", "topicLabel": "Argomento", "topicPlaceholder": "Scegli un argomento...", @@ -4580,7 +4181,6 @@ "modePlaceholder": "Scegli una modalità...", "learningObjectiveLabel": "Obiettivo di apprendimento", "learningObjectivePlaceholder": "Scegli un obiettivo di apprendimento...", - "mediaLabel": "Media che gli studenti dovrebbero condividere", "languageOfInstructionsLabel": "Lingua delle istruzioni dell'attività", "targetLanguageLabel": "Lingua target", "cefrLevelLabel": "Livello CEFR", @@ -4595,20 +4195,15 @@ "instructions": "Istruzioni", "numberOfLearners": "Numero di studenti", "mustBeInteger": "Deve essere un numero intero, ad esempio 1, 2, 3, ...", - "noLemmasFound": "Non ci sono vocabolari con più di {xp} XP. Continua a praticare!", "constructUsePvmDesc": "Prodotto nel messaggio vocale", - "lockedMorphFeature": "In attesa di sblocco", "leaveSpaceDescription": "Lasciando il corso, lascerai tutte le chat al suo interno. Gli altri utenti vedranno che hai lasciato il corso.", - "whatIsLemma": "Cos'è il lemma?", "constructUseCorMmDesc": "Significato del messaggio corretto", "constructUseIncMmDesc": "Significato del messaggio errato", "constructUseIgnMmDesc": "Significato del messaggio ignorato", "clickForMeaningActivity": "Clicca qui per una Sfida sul Significato", "meaning": "Significato", "chatWith": "Gruppo con {displayname}", - "slightlyOffensive": "Leggermente offensivo", "clickOnEmailLink": "Per favore clicca sul link nell'email e poi procedi.\n\nControlla la cartella spam se l'email non è arrivata.", - "whoIsAllowedToJoinThisChat": "Chi può unirsi a questa chat", "dontForgetPassword": "Non dimenticare la tua password!", "enableAutocorrectToolName": "Abilita correzione automatica del dispositivo", "enableAutocorrectDescription": "Se il tuo dispositivo supporta la lingua che stai imparando, puoi abilitare la correzione automatica del dispositivo per correggere gli errori comuni mentre scrivi.", @@ -4636,48 +4231,26 @@ "autocorrectNotAvailable": "Sfortunatamente, la tua piattaforma non è attualmente supportata per questa funzione. Resta sintonizzato per ulteriori sviluppi!", "pleaseUpdateApp": "Aggiorna l'app per continuare.", "chooseEmojiInstructionsBody": "Abbina le emoji alle parole che rappresentano al meglio. Non preoccuparti! Nessun punto in meno se non sei d'accordo. 😅", - "pickAnEmojiFor": "Scegli un'emoji per {lemma}", "analyticsVocabListBody": "Questo è tutto il tuo vocabolario! Man mano che guadagni XP per ogni parola, passeranno da germoglio a piena fioritura. Clicca su qualsiasi parola per vedere più dettagli.", "morphAnalyticsListBody": "Questi sono tutti i concetti grammaticali nella lingua che stai imparando! Li sbloccherai man mano che li incontri durante la chat. Clicca per i dettagli.", "knockSpaceSuccess": "Hai richiesto di unirti a questo corso! Un amministratore risponderà alla tua richiesta quando la riceverà 😊", - "joinByCode": "Unisciti con il codice", "chooseWordAudioInstructionsBody": "Ascolta il messaggio completo. Poi abbina gli audio alle parole.", "chooseMorphsInstructionsBody": "Clicca sui pezzi del puzzle per le domande di grammatica!", - "inviteAndLaunch": "Invita e avvia", - "createOwnChat": "Crea la tua chat", "pleaseEnterInt": "Per favore inserisci un numero", "home": "Home", "join": "Unisciti", "readingAssistanceOverviewBody": "Clicca sui pulsanti qui sotto per mini-giochi su abbinamenti di emoji, audio, significati delle parole e concetti grammaticali. Oppure clicca su qualsiasi parola per i dettagli.", - "learnByTexting": "Impara scrivendo", - "levelSummaryTrigger": "Visualizza riepilogo", "levelSummaryPopupTitle": "Riepilogo livello {level}", - "referFriends": "Riferisci amici", - "referFriendDialogTitle": "Invita un amico alla tua conversazione", - "referFriendDialogDesc": "Hai un amico entusiasta di imparare una nuova lingua con te? Copia e invia questo link di invito per unirti e iniziare a chattare con te oggi.", - "youUnlocked": "Hai sbloccato", "resetInstructionTooltipsTitle": "Reimposta suggerimenti delle istruzioni", "resetInstructionTooltipsDesc": "Clicca per mostrare i suggerimenti delle istruzioni come per un utente nuovo.", "selectForGrammar": "Seleziona un'icona grammaticale per attività e dettagli.", - "newChatActivityTitle": "Aggiungi un'attività divertente?", - "newChatActivityDesc": "Rendi ogni chat di gruppo un'avventura con Activity Planner! Imposta argomenti e obiettivi coinvolgenti per il gruppo, e anima le conversazioni con immagini sorprendenti. Stimola discussioni imaginative e mantieni il divertimento senza sforzo!", - "exploreMore": "Esplora di più", "randomize": "Randomizza", "clear": "Pulisci", "makeYourOwnActivity": "Crea la tua attività", "featuredActivities": "In evidenza", - "goToChat": "Vai alla chat", "save": "Salva", - "selectActivity": "Seleziona attività", - "wordFocusListeningMultipleChoice": "Quale audio corrisponde alla parola?", "startChat": "Inizia una chat", "translationProblem": "Problema di traduzione", - "perfectTranslation": "Traduzione perfetta!", - "greatJobTranslation": "Ottimo lavoro con questa traduzione!", - "goodJobTranslation": "Buon lavoro su questa traduzione.", - "makingProgress": "Stai facendo progressi!", - "keepPracticing": "Continua a praticare!", - "niceJob": "Ottimo lavoro!", "askToJoin": "Chiedi di unirti", "emptyChatWarningTitle": "Chat vuota", "emptyChatWarningDesc": "Non hai invitato nessuno nella tua chat. Vai alle impostazioni della chat per invitare i tuoi contatti o il Bot. Puoi farlo anche più tardi.", @@ -4696,8 +4269,6 @@ "languageLevelC2Desc": "Posso capire praticamente tutto ciò che ascolto o leggo ed esprimermi fluentemente e con precisione.", "newVocab": "Nuovo vocabolario", "newGrammar": "Nuovi concetti grammaticali", - "congratulationsOnReaching": "Hai raggiunto il livello {level}!", - "seeDetails": "Vedi dettagli", "choosePracticeMode": "Clicca su uno dei pulsanti sopra per iniziare un'attività di pratica", "ban": "Banna", "unban": "Rimuovi ban", @@ -4711,8 +4282,6 @@ "timesUsedWithAssistance": "Volte usato con assistenza", "shareInviteCode": "Condividi il codice di invito: {code}", "leaderboard": "Classifica", - "welcomeUser": "Benvenuto {user}", - "joinSpaceOnboardingDesc": "Hai un codice o un link di invito a un corso pubblico?", "skipForNow": "Salta per ora", "permissions": "Permessi", "spaceChildPermission": "Chi può aggiungere nuove chat a questo corso", @@ -4720,12 +4289,8 @@ "defaultOption": "Predefinito", "deleteChatDesc": "Sei sicuro di voler eliminare questa chat? Verrà eliminata per tutti i partecipanti e tutti i messaggi all'interno della chat non saranno più disponibili per la pratica o le analisi di apprendimento.", "deleteSpaceDesc": "Il corso e tutte le chat selezionate verranno eliminati per tutti i partecipanti e tutti i messaggi all'interno della chat non saranno più disponibili per la pratica o le analisi di apprendimento. Questa azione non può essere annullata.", - "chatWithActivities": "Chat con attività", "launch": "Avvia", - "launchActivityToChats": "Avvia attività nelle chat", "searchChats": "Cerca chat", - "selectChats": "Seleziona chat", - "selectChatToStart": "Completo! Seleziona una chat per iniziare", "maxFifty": "Massimo 50", "configureSpace": "Configura corso", "pinMessages": "Blocca messaggi", @@ -4739,9 +4304,7 @@ "announcements": "Annunci", "activities": "Attività", "access": "Accesso", - "botSettings": "Impostazioni del bot", "activitySuggestionTimeoutMessage": "Stiamo lavorando duramente per generare più attività per te, per favore controlla tra un minuto", - "accessSettingsWarning": "Oops! Sembra che tu non abbia il permesso di impostare le regole di accesso di questa stanza. Dovresti controllarle per assicurarti che siano ciò di cui hai bisogno e parlare con un amministratore della stanza se devi cambiarle", "howSpaceCanBeFound": "Come può essere trovato questo corso", "private": "Privato", "cannotBeFoundInSearch": "Non può essere trovato nella ricerca", @@ -4754,16 +4317,6 @@ "canBeFoundViaKnock": "• richiesta di accesso e approvazione dell'amministratore", "youHaveLeveledUp": "Sei salito di livello!", "sendActivities": "Invia attività", - "getStarted": "Inizia", - "getStartedBotChatDesc": "Chattare con l'IA è un ottimo punto di partenza e gli strumenti di lettura, scrittura, ascolto e conversazione di Pangea rendono tutto più facile!", - "getStartedCommunitiesDesc": "Imparare con una comunità è il punto forte di Pangea Chat!\nPuoi unirti alla tua classe, trovare un corso o anche crearne uno tuo!", - "getStartedFriendsDesc": "Hai un amico che vuole imparare con te?", - "getStartedBotChatComplete": "Ben fatto! Stai chattando con il bot!", - "getStartedCommunitiesComplete": "Ottimo, hai aderito a un corso!", - "getStartedComplete": "Hai completato questa sezione!\nContinua a esplorare le nostre fantastiche funzionalità chattando con gli amici!", - "getStartedFriendsComplete": "Evvai! Hai degli amici! 😄", - "getStartedBotChatButton": "Inizia a chattare!", - "getStartedFriendsButton": "Chattare con un amico", "groupChat": "Chat di gruppo", "directMessage": "Messaggio diretto", "newDirectMessage": "Nuovo messaggio diretto", @@ -4779,7 +4332,6 @@ "mySavedActivities": "Le mie attività salvate", "noSavedActivities": "Nessuna attività salvata", "saveActivity": "Salva questa attività", - "yourSavedActivities": "Attività salvate", "failedToPlayVideo": "Impossibile riprodurre il video", "done": "Fatto", "inThisSpace": "In questo corso", @@ -4818,37 +4370,27 @@ "maximumActivityParticipants": "Ogni attività può avere un massimo di {count} partecipante(i).", "pending": "In attesa", "inactive": "Inattivo", - "unjoinedActivityMessage": "Vuoi partecipare? Scegli un ruolo aperto!\nOppure rilassati e guarda lo spettacolo!", - "fullActivityMessage": "Sentiti libero di guardare lo spettacolo! Anche se non ci sono ruoli aperti per partecipare, puoi visualizzare la chat!", "confirmRole": "Conferma ruolo", "openRoleLabel": "APERTO", "joinedTheActivity": "👋 {username} si è unito come {role}", "finishedTheActivity": "🎯 {username} ha concluso questa attività", - "endActivityTitle": "Ho finito", - "endActivityDesc": "Hai completato gli obiettivi?\nQuesta è la tua conferma che stai tornando indietro dal messaggio. Ma non preoccuparti, il divertimento continua nella chat! Sentiti libero di rilassarti e goderti lo spettacolo finché tutti cliccano su 'Fatto'.", "archiveToAnalytics": "Aggiungi alle mie attività completate", "activitySummaryError": "Riepiloghi dell'attività non disponibili", "requestSummaries": "Richiedi riepiloghi", - "loadingActivitySummary": "Caricamento riepilogo attività...", "generatingNewActivities": "Sei il primo utente di questa coppia di lingue! Per favore, prenditi un minuto, stiamo preparando attività appositamente per te.", - "requestAccessTitle": "Richiedere l'accesso alla visualizzazione delle analisi?", + "requestAccessTitle": "Richiedi accesso alle analisi?", "requestAccessDesc": "Desideri richiedere l'accesso per visualizzare le analisi dei partecipanti?\n\nSe i partecipanti sono d'accordo, gli amministratori di questo corso potranno visualizzare i loro:\n • vocabolario totale\n • concetti grammaticali totali\n • sessioni di attività completate\n • i concetti grammaticali specifici usati, correttamente e erroneamente\n\nNon potranno visualizzare i loro:\n • messaggi nelle chat fuori dal corso\n • lista di vocabolario", "requestAccess": "Richiedi accesso ({count})", "analyticsInactiveTitle": "Le richieste agli utenti inattivi non sono state inviate", "analyticsInactiveDesc": "Gli utenti inattivi che non hanno effettuato l'accesso da quando questa funzione è stata introdotta non vedranno la tua richiesta.\n\nIl pulsante Richiedi apparirà quando torneranno. Puoi reinviare la richiesta in seguito cliccando sul pulsante Richiedi sotto il loro nome quando sarà disponibile.", "accessRequestedTitle": "Richiesta di accesso alle analisi", - "accessRequestedDesc": "Gli amministratori di “{space}” stanno richiedendo di visualizzare le tue analisi di apprendimento.\n\nSe sei d'accordo, gli amministratori di questo corso potranno visualizzare i tuoi:\n • vocabolario totale\n • concetti grammaticali totali\n • sessioni di attività completate\n • i concetti grammaticali specifici usati, correttamente e erroneamente\n\nNon potranno visualizzare i tuoi:\n • messaggi nelle chat fuori dal corso\n • lista di vocabolario", - "allowAccess": "Consenti accesso", - "denyAccess": "Rifiuta accesso", + "accessRequestedDesc": "Richiesta admin(i): {admin} \n\nGli admin di “{space}” stanno richiedendo di visualizzare le tue analisi di apprendimento.\n\nSe sei d'accordo, potranno visualizzare il tuo:\n • vocabolario totale\n • concetti grammaticali totali\n • sessioni di attività totali completate\n • i concetti grammaticali specifici utilizzati, correttamente e incorrettamente\n\nNon potranno visualizzare il tuo:\n • messaggi nelle chat al di fuori del corso\n • elenco di vocaboli", "adminRequestedAccess": "Gli amministratori hanno chiesto di visualizzare le tue analisi.", "lastUpdated": "Aggiornato\n{time}", "activityFinishedMessage": "Tutto finito!", "endForAll": "Termina per tutti", "newCourse": "Nuovo corso", - "newCourseSubtitle": "Quale piano di corso desideri utilizzare?", - "failedToLoadCourses": "Impossibile caricare i corsi", "numModules": "{num} moduli", - "numActivityPlans": "{num} piani di attività", "coursePlan": "Piano del corso", "editCourseLater": "Puoi modificare in seguito il titolo del corso, le descrizioni e l'immagine del corso.", "newCourseAccess": "Per impostazione predefinita, i corsi sono privati e richiedono l'approvazione dell'amministratore per parteciparvi. Puoi modificare queste impostazioni in qualsiasi momento.", @@ -4862,17 +4404,11 @@ "accessDesc": "Puoi rendere il tuo corso accessibile a tutti! Oppure, rendilo privato e sicuro.", "createGroupChatDesc": "Mentre le sessioni di attività iniziano e finiscono, le chat di gruppo rimarranno aperte per comunicazioni di routine.", "deleteDesc": "Solo gli amministratori possono eliminare un corso. Questa è un'azione distruttiva che rimuove tutti gli utenti e elimina tutte le chat selezionate all'interno del corso. Procedi con cautela.", - "failedToLoadCourseInfo": "Impossibile caricare le informazioni del corso", "noCourseFound": "Oh, questo corso ha bisogno di un piano!\n\nI piani del corso sono una sequenza di argomenti e attività di conversazione.", "additionalParticipants": "+ {num} altri", - "activityNotFoundForCourse": "Questa attività non è stata trovata all'interno del corso", - "courseChats": "Chat del corso", - "myActivitySessions": "Le mie sessioni di attività", "directMessages": "Messaggi diretti", "whatNow": "E ora?", "chooseNextActivity": "Scegli la tua prossima attività!", - "seeInstructions": "Vedi le istruzioni", - "hideInstructions": "Nascondi le istruzioni", "letsGo": "Andiamo", "chooseRole": "Scegli un ruolo!", "chooseRoleToParticipate": "Scegli un ruolo per partecipare!", @@ -4882,23 +4418,15 @@ "inviteFriends": "Invita amici", "waitNotDone": "Aspetta, non ho finito!", "waitingForOthersToFinish": "In attesa che gli altri finiscano...", - "saveToCompletedActivities": "Salva nelle attività completate", "generatingSummary": "Analizzando la chat e generando risultati", - "instructionsLanguage": "Lingua delle istruzioni", "findCourse": "Trova un corso", - "activityCompletedDesc": "La tua attività completata è stata aggiunta alle analisi dove puoi rivedere e praticare la lingua che hai usato.", "pingParticipantsNotification": "{user} sta cercando utenti per unirsi alla sessione dell'attività in {room}", "course": "Corso", "courses": "Corsi", "courseName": "Nome del corso", "createNewCourse": "Nuovo corso", - "publicCourses": "Corsi pubblici", "goToCourse": "Vai al corso: {course}", "activityComplete": "Questa attività è stata completata. Il riepilogo dell'attività dovrebbe essere disponibile qui sotto.", - "haventChattedMuch": "Sembra che tu non abbia chattato molto, prova a usare alcune parole di vocabolario in più! Se senti di aver completato il tuo obiettivo, puoi terminare l'attività qui sotto.", - "haveChatted": "Sembra che tu abbia chattato per un po'! Se senti di aver completato il tuo obiettivo, concludi per terminare l'attività e ti genereremo un riepilogo nella chat!", - "userDoneAndWaiting": "{num1}/{num2} partecipanti hanno concluso. Attendi che tutti finiscano, e ti genereremo un riepilogo nella chat! \n\nSe desideri rientrare nella conversazione, clicca sul pulsante continua nella chat.", - "othersDoneAndWaiting": "{num1}/{num2} hanno finito. Hai completato il tuo obiettivo?", "startNewSession": "Inizia una nuova sessione", "joinOpenSession": "Unisciti a una sessione aperta", "less": "meno", @@ -4908,7 +4436,6 @@ "openToJoin": "Aperto per l'iscrizione", "results": "Risultati", "activityDone": "Attività completata!", - "moreLabel": "altro", "promoCodeInfo": "I codici promozionali possono essere inseriti nella pagina successiva", "editsComingSoon": "La possibilità di modificare città e attività arriverà presto.", "editing": "Modifica", @@ -4924,13 +4451,10 @@ "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", - "chooseLanguage": "Scegli una lingua.", + "chooseLanguage": "Scegli una lingua di destinazione.", "planTrip": "Pianifica il tuo viaggio", "howAreYouTraveling": "Come stai viaggiando?", "unlockPrivateTrip": "Sblocca un viaggio privato", @@ -4943,25 +4467,20 @@ "courseCode": "Qual è la password segreta?", "courseCodeHint": "Codice o link del viaggio", "unlockMyTrip": "Sblocca il mio viaggio", - "anyLevel": "Qualsiasi livello", "signupOption": "Come vuoi iscriverti?", "withApple": "Con Apple", "withGoogle": "Con Google", "withEmail": "Con Email", "createAccount": "Crea account", - "noCoursesFound": "Nessun corso trovato", "loginWithEmail": "Accedi con email", "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", - "allCefrLevels": "Tutti i livelli CEFR", "chatListTooltip": "Qui troverai i tuoi messaggi diretti! Clicca sull'avatar di qualsiasi utente e “inizia conversazione” per inviare un messaggio diretto.", "directMessageBotTitle": "Messaggio diretto Pangea Bot", "feedbackTitle": "Feedback sull'attività", - "feedbackDesc": "Come dovrebbe essere migliorata l'attività? Se puoi fornire alcuni dettagli, apporteremo le modifiche!", "feedbackHint": "Il tuo feedback", "feedbackButton": "Invia feedback", "directMessageBotDesc": "Parlare con gli umani è più divertente ma... l'IA è sempre pronta!", @@ -5008,30 +4527,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5047,18 +4542,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5083,18 +4566,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5131,38 +4602,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5171,62 +4614,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5263,10 +4662,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5275,14 +4670,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5291,46 +4678,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5339,10 +4690,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5399,18 +4746,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5419,14 +4754,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5455,18 +4782,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5475,42 +4790,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5519,14 +4802,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5547,26 +4822,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5587,10 +4842,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5623,25 +4874,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5698,34 +4930,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5754,778 +4958,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7518,14 +5954,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7537,14 +5965,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7576,10 +5996,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7588,18 +6004,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7608,14 +6012,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7640,38 +6036,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7717,10 +6085,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7745,10 +6109,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7773,10 +6133,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7785,66 +6141,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7865,42 +6165,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7925,154 +6201,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8089,18 +6217,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8121,14 +6237,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8145,10 +6253,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8161,14 +6265,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8177,14 +6273,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8212,26 +6300,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8260,18 +6328,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8308,10 +6368,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9244,10 +7300,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9428,34 +7480,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9468,10 +7492,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9480,14 +7500,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9504,22 +7516,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9667,14 +7663,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9683,34 +7671,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9719,54 +7679,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9775,10 +7699,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9795,10 +7715,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9970,26 +7886,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10018,10 +7914,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10078,30 +7970,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10130,18 +8006,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10258,14 +8126,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10278,10 +8138,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10290,14 +8146,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10314,14 +8162,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10330,22 +8170,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10358,18 +8182,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10386,22 +8198,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10410,30 +8210,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10506,18 +8282,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10574,18 +8338,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10614,30 +8366,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10690,18 +8426,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10750,46 +8478,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10854,10 +8542,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11029,14 +8713,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11064,14 +8740,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11084,10 +8752,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11123,19 +8787,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11160,14 +8819,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11176,14 +8827,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11236,10 +8879,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11252,18 +8891,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11276,14 +8903,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11324,26 +8943,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11371,10 +8978,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11385,36 +8988,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11451,10 +9024,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11519,18 +9088,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11595,10 +9152,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11619,10 +9172,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11639,10 +9188,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11651,10 +9196,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11667,10 +9208,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11695,16 +9232,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invita amici all'attività", - "inviteFriendsToActivityCourse": "Invita amici all'attività e al corso", "feedbackRespDesc": "Controlla di nuovo domani per gli aggiornamenti sull'attività.", "activityDropdownDesc": "Quando hai finito con questa attività, clicca qui sotto", - "activityAnalyticsListBody": "Queste sono le tue attività completate! Dopo aver terminato le attività, puoi visualizzarle qui.", "languageMismatchTitle": "Incompatibilità della lingua", "languageMismatchDesc": "La tua lingua di destinazione non corrisponde alla lingua di questa attività. Aggiornare la tua lingua di destinazione?", "reportWordIssueTooltip": "Segnala problema con le informazioni sulla parola", "tokenInfoFeedbackDialogTitle": "Feedback sulle informazioni della parola", - "tokenInfoFeedbackDialogDesc": "L'IA commette errori. Per favore, descrivi eventuali problemi riscontrati con le informazioni sopra.", "noPublicCoursesFound": "Nessun corso pubblico trovato. Vuoi crearne uno?", "noCourseTemplatesFound": "Non abbiamo trovato corsi per la tua lingua di destinazione. Puoi chattare con Pangea Bot nel frattempo e tornare più tardi per altri corsi.", "botActivityJoinFailMessage": "Pangea Bot impiega un po' a rispondere. Per favore riprova più tardi o invita un amico.", @@ -11712,14 +9245,6 @@ "leaveDesc": "Lascia questo spazio e tutte le chat al suo interno", "selectAll": "Seleziona tutto", "deselectAll": "Deseleziona tutto", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11728,10 +9253,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11748,10 +9269,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11785,7 +9302,6 @@ "newMessageInPangeaChat": "🗨️ Nuovo messaggio in Pangea Chat", "shareCourse": "Condividi corso", "addCourse": "Aggiungi un corso", - "joinCourseWithCode": "Unisciti al corso con il codice", "joinPublicCourse": "Unisciti al corso pubblico", "vocabLevelsDesc": "Qui andranno le parole di vocabolario una volta che le avrai potenziate!", "highlightVocabTooltip": "Evidenzia le parole di vocabolario target qui sotto inviandole o praticandole nella chat", @@ -11809,10 +9325,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11821,7 +9333,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nessun DM o chat trovati. Assicurati che la tua ricerca sia scritta correttamente.", + "activityAnalyticsTooltipBody": "Queste sono le tue attività salvate per revisione e pratica.", + "numSavedActivities": "Numero di attività salvate", + "saveActivityTitle": "Salva attività", + "saveActivityDesc": "Ottimo lavoro! Salva questa attività per una revisione e pratica future", + "levelInfoTooltip": "Qui puoi vedere tutti i punti che hai guadagnato e come!", + "alreadyInCourseWithID": "Sei già in un corso con questo piano. Vuoi creare un corso con lo stesso piano o andare al corso esistente?", + "goToExistingCourse": "Vai al corso esistente", + "emojiView": "Visualizzazione emoji", + "feedbackDialogDesc": "Anch'io faccio errori! Qualcosa per aiutarmi a migliorare?", + "contactHasBeenInvitedToTheCourse": "Il contatto è stato invitato al corso", + "activityStatsButtonTooltip": "Informazioni sull'attività", + "allow": "Consenti", + "deny": "Nega", + "enabledRenewal": "Abilita il rinnovo dell'abbonamento", + "subscriptionEndsOn": "L'abbonamento scade il", + "subscriptionRenewsOn": "L'abbonamento si rinnova il", + "waitForSubscriptionChanges": "Le modifiche al tuo abbonamento potrebbero richiedere un momento per riflettersi nell'app.", + "subscribeReadingAssistance": "Abbonati per sbloccare gli strumenti di messaggistica", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amarico", + "arDisplayName": "Arabo", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaigiano", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinese", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorusso", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgaro", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalese", + "bnBDDisplayName": "Bengalese (Bangladesh)", + "bnINDisplayName": "Bengalese (India)", + "brDisplayName": "Bretone", + "bsDisplayName": "Bosniaco", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalano", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Curdo Centrale", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsa", + "crhDisplayName": "Turco di Crimea", + "crsDisplayName": "Francese Creolo Seselwa", + "csDisplayName": "Ceco", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Gallese", + "daDisplayName": "Danese", + "deDisplayName": "Tedesco", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglese", + "enAUDisplayName": "Inglese (Australia)", + "enGBDisplayName": "Inglese (Regno Unito)", + "enINDisplayName": "Inglese (India)", + "enUSDisplayName": "Inglese (Stati Uniti)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spagnolo", + "esESDisplayName": "Spagnolo (Spagna)", + "esMXDisplayName": "Spagnolo (Messico)", + "euDisplayName": "Basco", + "faDisplayName": "Persiano", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandese", + "filDisplayName": "Filippino", + "fjDisplayName": "Fijiano", + "foDisplayName": "Faroese", + "frDisplayName": "Francese", + "frCADisplayName": "Francese (Canada)", + "frFRDisplayName": "Francese (Francia)", + "fyDisplayName": "Frisone occidentale", + "gaDisplayName": "Irlandese", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaelico scozzese", + "glDisplayName": "Galiziano", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Konkani Goano", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiano", + "heDisplayName": "Ebraico", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croato", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Creolo haitiano", + "huDisplayName": "Ungherese", + "hyDisplayName": "Armeno", + "idDisplayName": "Indonesiano", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandese", + "itDisplayName": "Italiano", + "jaDisplayName": "Giapponese", + "jvDisplayName": "Giavanese", + "kaDisplayName": "Georgiano", + "kkDisplayName": "Kazako", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Coreano", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Repubblica Democratica del Congo)", + "kuDisplayName": "Curdo", + "kyDisplayName": "Kirgiso", + "laDisplayName": "Latino", + "lbDisplayName": "Lussemburghese", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburghese", + "lijDisplayName": "Ligure", + "lmoDisplayName": "Lombardo", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituano", + "ltgDisplayName": "Latgaliano", + "luoDisplayName": "Luo (Kenya e Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lettone", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedone", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolo", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaio", + "msArabDisplayName": "Malaio (Arabo)", + "msMYDisplayName": "Malaio (Malesia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmano", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvegese (Bokmål)", + "neDisplayName": "Nepalese", + "newDisplayName": "Newari", + "nlDisplayName": "Olandese", + "nlBEDisplayName": "Fiammingo", + "noDisplayName": "Norvegese", + "nrDisplayName": "Sud Ndebele", + "nsoDisplayName": "Sotho Settentrionale", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitano", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polacco", + "psDisplayName": "Pashto", + "ptDisplayName": "Portoghese", + "ptBRDisplayName": "Portoghese (Brasile)", + "ptPTDisplayName": "Portoghese (Portogallo)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumeno", + "roMDDisplayName": "Moldavo", + "romDisplayName": "Romani", + "ruDisplayName": "Russo", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrito", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliano", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Singalese", + "skDisplayName": "Slovacco", + "slDisplayName": "Sloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somalo", + "sqDisplayName": "Albanese", + "srDisplayName": "Serbo", + "srMEDisplayName": "Montenegrino", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho meridionale", + "suDisplayName": "Sundanese", + "svDisplayName": "Svedese", + "swDisplayName": "Swahili", + "szlDisplayName": "Slesiano", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajiko", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrino", + "tkDisplayName": "Turkmeno", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turco", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tataro", + "ugDisplayName": "Uiguro", + "ukDisplayName": "Ucraino", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbeco", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonese", + "yueCNDisplayName": "Cantonese (Cina)", + "yueHKDisplayName": "Cantonese (Hong Kong)", + "zhDisplayName": "Cinese", + "zhCNDisplayName": "Cinese (Semplificato)", + "zhTWDisplayName": "Cinese (Tradizionale)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11888,6 +10586,7 @@ "notStartedActivitiesTitle": "Sessioni aperte ({num})", "inProgressActivitiesTitle": "In corso ({num})", "completedActivitiesTitle": "Fatto ({num})", + "pickDifferentActivity": "Scegli un'attività diversa", "inOngoingActivity": "Hai un'attività in corso!", "@notStartedActivitiesTitle": { "type": "String", @@ -11913,10 +10612,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "La tua lingua di destinazione non corrisponde a questo messaggio. Vuoi aggiornare la tua lingua di destinazione?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Questa è tutta la gente in questo corso. Clicca sull'avatar di qualsiasi utente e \"inizia conversazione\" per inviare un DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Questa parola di vocabolario verrà rimossa permanentemente dalle tue analisi", + "woman": "Donna", + "man": "Uomo", + "otherGender": "Altro", + "unselectedGender": "Seleziona un'opzione di genere", + "gender": "Genere", + "chatParticipantTooltip": "Questa è la lista di tutti in questa chat. Clicca sull'avatar di un utente e \"inizia conversazione\" per inviare un DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Gli strumenti di apprendimento sono disabilitati per i messaggi che non sono nella tua lingua target.", + "vocabEmoji": "Emoji del vocabolario", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Richiedi rigenerazione", + "optionalRegenerateReason": "(Facoltativo) Motivo", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Hai impostato l'emoji per {lemma}! Useremo questa emoji per rappresentare la parola nelle attività pratiche in futuro.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "In attesa del completamento dell'accesso", + "ssoDialogDesc": "Abbiamo aperto una nuova scheda in modo che tu possa accedere in modo sicuro.", + "ssoDialogHelpText": "🤔 Se non hai visto la nuova scheda, controlla il tuo blocco dei popup.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Disabilita gli strumenti linguistici", + "disableLanguageToolsDesc": "Vuoi disabilitare l'assistenza linguistica automatica?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permesso negato. Abilita i permessi di registrazione per registrare messaggi audio.", + "genericWebRecordingError": "Qualcosa è andato storto. Ti consigliamo di utilizzare il browser Chrome quando registri messaggi.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Per la migliore esperienza nell'utilizzo di questa applicazione, si prega di espandere la dimensione dello schermo.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Attività per sbloccare il prossimo argomento", "activitiesToUnlockTopicDesc": "Imposta il numero di attività per sbloccare il prossimo argomento del corso", "@activitiesToUnlockTopicTitle": { @@ -11926,5 +10743,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Pratica corretta della definizione del vocabolario", + "constructUseIncLMDesc": "Pratica scorretta della definizione del vocabolario", + "constructUseCorLADesc": "Pratica corretta dell'audio del vocabolario", + "constructUseIncLADesc": "Pratica scorretta dell'audio del vocabolario", + "constructUseBonus": "Bonus durante la pratica del vocabolario", + "practiceVocab": "Pratica del vocabolario", + "selectMeaning": "Seleziona il significato", + "selectAudio": "Seleziona l'audio corrispondente", + "congratulations": "Congratulazioni!", + "anotherRound": "Un altro turno", + "noActivityRequest": "Nessuna richiesta di attività attuale.", + "quit": "Esci", + "congratulationsYouveCompletedPractice": "Congratulazioni! Hai completato la sessione di pratica.", + "mustHave10Words": "Devi avere almeno 10 parole di vocabolario per praticarle. Prova a parlare con un amico o con Pangea Bot per scoprire di più!", + "botSettings": "Impostazioni del Bot", + "activitySettingsOverrideWarning": "Lingua e livello di lingua determinati dal piano di attività", + "voice": "Voce", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index e593e83c9..b2c854382 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -1,6 +1,6 @@ { "@@locale": "ja", - "@@last_modified": "2026-01-06 13:02:37.951868", + "@@last_modified": "2026-01-07 14:28:40.112996", "about": "このアプリについて", "@about": { "type": "String", @@ -2721,26 +2721,14 @@ "commandHint_logoutall": "すべてのアクティブなデバイスからログアウト", "displayNavigationRail": "モバイルでナビゲーションレールを表示", "customReaction": "カスタムリアクション", - "accountInformation": "アカウント情報", - "addGroupDescription": "チャットの説明を追加", - "addNewFriend": "新しい友達を追加", - "alreadyHaveAnAccount": "すでにアカウントをお持ちですか?", - "createNewGroup": "新しいチャットを作成", - "editChatPermissions": "チャットの権限を編集", "writeAMessageLangCodes": "{l1} または {l2} で入力...", "requests": "リクエスト", - "allCorrect": "そう言うべきだ!いいね!", - "newWayAllGood": "そう言うつもりじゃなかったけど、良さそう!", - "othersAreBetter": "うーん、もっと良い言い方があるかもしれない。", "holdForInfo": "クリックして長押しで単語情報。", "greenFeedback": "これが私ならこれを使う!", "yellowFeedback": "うーん、それを試してみて、うまくいくか見てみて!この単語を使うには、もう一度クリックしてください。", "redFeedback": "それは正しくないと思う...", "itInstructionsTitle": "翻訳をお手伝いできます!", "itInstructionsBody": "選択肢をクリックして長押しすると、単語情報が得られます。", - "oneday": "過去24時間", - "oneweek": "過去7日間", - "onemonth": "過去1ヶ月", "gaTooltip": "文法支援とともにL2を使用", "taTooltip": "翻訳支援とともにL2を使用", "unTooltip": "その他", @@ -2750,58 +2738,27 @@ "interactiveTranslatorAllowed": "学生の選択", "interactiveTranslatorRequired": "必須", "notYetSet": "未設定", - "myLearning": "私の分析", "waTooltip": "支援なしでL2を使用", - "changeDateRange": "日付範囲を変更", - "classDescription": "説明", - "addStudents": "リンクまたはコードでユーザーを招待", - "copyClassLink": "招待リンクをコピー", - "copyClassCode": "招待コードをコピー", - "inviteStudentByUserName": "ユーザー名で招待", "languageSettings": "言語設定", "interactiveTranslator": "翻訳支援", - "shareVideo": "ビデオを共有", - "shareVideoDesc": "これをオンにすると、学生がチャットでビデオを共有できるようになります。", - "shareFiles": "ファイルを共有", - "selectLanguageLevel": "言語レベルを選択", "noIdenticalLanguages": "異なる基礎言語とターゲット言語を選択してください", - "iWantALanguagePartnerFrom": "出身地:", - "worldWide": "世界中", - "noResults": "結果がありません!検索範囲を広げてみてください。", "searchBy": "国と言語で検索", - "iWantAConversationPartner": "会話パートナーを希望します。", - "iWantALanguagePartnerWhoSpeaks": "話す言語:", - "iWantALanguagePartnerWhoIsLearning": "学習中の言語:", "joinWithClassCode": "コースに参加", - "joinWithClassCodeHint": "招待コードを入力してください", - "languageLevelPreA1": "初心者(Pre A1)", - "languageLevelA1": "初級(A1)", - "languageLevelA2": "初中級(A2)", - "languageLevelB1": "中級(B1)", - "languageLevelB2": "上級中級(B2)", - "languageLevelC1": "上級(C1)", - "languageLevelC2": "熟練(C2)", + "languageLevelPreA1": "初心者低 (プレA1)", + "languageLevelA1": "初心者ミッド (A1)", + "languageLevelA2": "初級高 (A2)", + "languageLevelB1": "中級中 (B1)", + "languageLevelB2": "上級低 (B2)", + "languageLevelC1": "上級中 (C1)", + "languageLevelC2": "最上級 (C2)", "changeTheNameOfTheClass": "名前を変更", "changeTheNameOfTheChat": "チャットの名前を変更", - "askPangeaBot": "Pangea Botにコンテキスト定義を尋ねる。", "sorryNoResults": "申し訳ありませんが、結果がありません。", "ignoreInThisText": "無視", - "helpMeTranslate": "はい!", - "needsItShortMessage": "対象外", "needsItMessage": "待って、それは {targetLanguage} ではありません!翻訳の手助けが必要ですか?", - "needsIgcMessage": "このメッセージには文法エラーがあります。", - "tokenTranslationTitle": "単語があなたの基本言語にあります。", - "spanTranslationDesc": "以下に可能な翻訳を示します。", - "spanTranslationTitle": "いくつかの単語があなたの基本言語にあります。", - "l1SpanAndGrammarTitle": "対象言語外", - "l1SpanAndGrammarDesc": "これはあなたの基本言語かもしれませんし、文法エラーかもしれません。", - "otherTitle": "エラーがあります。", - "otherDesc": "以下に修正案を示します。", "countryInformation": "私の国", - "myLanguages": "私の基本言語と対象言語", "targetLanguage": "対象言語", "sourceLanguage": "基本言語", - "languagesISpeak": "私が話す言語", "updateLanguage": "私の言語", "whatLanguageYouWantToLearn": "何の言語を学びたいですか?", "whatIsYourBaseLanguage": "あなたの基本言語は何ですか?", @@ -2816,13 +2773,8 @@ "errorDisableLanguageAssistanceUserDesc": "こちらをクリックして翻訳支援と文法支援の設定を更新してください", "errorDisableITClassDesc": "このチャットが属するコースの翻訳支援がオフになっています。", "errorDisableIGCClassDesc": "このチャットが属するコースの文法支援がオフになっています。", - "itIsDisabled": "インタラクティブ翻訳は無効です", - "igcIsDisabled": "インタラクティブ文法チェックは無効です", - "goToLearningSettings": "学習設定に移動", "error405Title": "言語が設定されていません", "error405Desc": "メインメニュー > 学習設定で言語を設定してください。", - "loginOrSignup": "サインイン", - "iAgreeToThe": "私は同意します", "termsAndConditions": "利用規約", "andCertifyIAmAtLeast13YearsOfAge": " および私は少なくとも16歳であることを証明します。", "error502504Title": "わあ、多くの学生がオンラインです!", @@ -2830,40 +2782,21 @@ "error404Title": "翻訳エラー!", "error404Desc": "Pangea Botはそれをどう翻訳すればいいかわかりません...", "errorPleaseRefresh": "調査中です!ページをリロードしてもう一度お試しください。", - "toggleIT": "インタラクティブ翻訳", - "toggleIGC": "インタラクティブ文法チェック", - "toggleToolSettingsDescription": "ここで個別の言語ツール設定を切り替えることができます。", "connectedToStaging": "ステージングに接続済み", "learningSettings": "学習設定", - "sendVoiceNotes": "音声メモを送信", - "sendVoiceNotesDesc": "これをオンにすると、学生がチャットで音声メモを送信できるようになります。", - "chatTopic": "チャットのトピック", - "chatTopicDesc": "チャットのトピックを設定してください", - "inviteStudentByUserNameDesc": "学生がすでにアカウントを持っている場合は、検索できます。", "participants": "参加者", - "almostPerfect": "それは正しそうです!私ならこう言います。", - "prettyGood": "かなり良いです!私ならこう言います。", - "letMeThink": "うーん、どうだったか見てみましょう!", "clickMessageTitle": "助けが必要ですか?", "clickMessageBody": "言語ツール(翻訳、再生など)を使用するには、メッセージをクリックしてください!", - "understandingMessagesTitle": "定義と翻訳!", - "understandingMessagesBody": "下線付きの単語をクリックして定義を確認してください。メッセージオプション(右上)で翻訳も可能です。", "allDone": "完了しました!", "vocab": "語彙", "low": "これらの単語をユーザーが理解していない証拠があります。", "medium": "これらの単語は使用されています。完全に理解しているかどうかは不明です。", "high": "これらの単語をユーザーが理解している証拠があります。", - "unknownProficiency": "これらの単語はPangea Chatで使用されていません。", - "changeView": "ビューを切り替える。", - "clearAll": "すべての単語をクリアしますか?", - "generateVocabulary": "タイトルと説明から語彙を生成", - "generatePrompts": "プロンプトを生成", "subscribe": "購読する", "getAccess": "今すぐ購読!", "subscriptionDesc": "メッセージは無料です!インタラクティブな翻訳、文法チェック、学習分析を解除するには購読してください。", "subscriptionManagement": "購読管理", "currentSubscription": "現在の購読", - "changeSubscription": "購読を変更", "cancelSubscription": "購読をキャンセル", "selectYourPlan": "プランを選択してください", "subsciptionPlatformTooltip": "サブスクリプションプランを管理するには、元のデバイスにログインしてください", @@ -2872,9 +2805,6 @@ "paymentHistory": "支払い履歴", "emptyChatDownloadWarning": "空のチャットはダウンロードできません", "update": "更新", - "updateDesc": "今すぐこのアプリを {localVersion} から {storeVersion} に更新できます", - "maybeLater": "後で", - "mainMenu": "メインメニュー", "toggleImmersionMode": "没入モード", "toggleImmersionModeDesc": "有効にすると、すべてのメッセージがターゲット言語で表示されます。この設定は言語交換に最も役立ちます。", "itToggleDescription": "この言語学習ツールは、あなたの基本言語の単語を識別し、それらをターゲット言語に翻訳するのに役立ちます。稀に、AIが翻訳ミスをすることがあります。", @@ -2889,212 +2819,13 @@ "definitionsToolDescription": "有効にすると、青色の下線が引かれた単語をクリックして定義を確認できます。メッセージをクリックして定義にアクセスしてください。", "translationsToolDescrption": "有効にすると、メッセージをクリックし、翻訳アイコンをクリックして、あなたの基本言語でメッセージを見ることができます。", "welcomeBack": "お帰りなさい!2023-2024年のパイロットに参加していた場合は、特別なパイロット購読のためにご連絡ください。あなたが教師で、あなたのクラスのためにライセンスを購入した(またはあなたの学校が購入した)場合は、教師購読のためにご連絡ください。", - "kickAllStudents": "すべての学生をキック", - "kickAllStudentsConfirmation": "すべての学生をキックしてもよろしいですか?", - "inviteAllStudents": "すべての学生を招待", - "inviteAllStudentsConfirmation": "すべての学生を招待してもよろしいですか?", - "inviteUsersFromPangea": "管理者を追加", - "redeemPromoCode": "プロモーションコードを引き換える", - "enterPromoCode": "プロモーションコードを入力", "downloadTxtFile": "テキストファイルをダウンロード", "downloadCSVFile": "CSVファイルをダウンロード", "promotionalSubscriptionDesc": "現在、あなたは生涯のプロモーション購読をしています。購読の変更についてはsupport@pangea.chatまでご連絡ください。", "originalSubscriptionPlatform": "{purchasePlatform}で購入した購読", "oneWeekTrial": "1週間のトライアル", "downloadXLSXFile": "Excelファイルをダウンロード", - "abDisplayName": "アブハズ語", - "aaDisplayName": "アファル語", - "afDisplayName": "アフリカーンス語", - "akDisplayName": "アカン", - "sqDisplayName": "アルバニア語", - "amDisplayName": "アムハラ語", - "arDisplayName": "アラビア語", - "anDisplayName": "アラゴン語", - "hyDisplayName": "アルメニア語", - "asDisplayName": "アッサム語", - "avDisplayName": "アヴァル語", - "aeDisplayName": "アヴェスター語", - "ayDisplayName": "アイマラ語", - "azDisplayName": "アゼルバイジャン語", - "bmDisplayName": "バンバラ語", - "baDisplayName": "バシキール語", - "euDisplayName": "バスク語", - "beDisplayName": "ベラルーシ語", - "bnDisplayName": "ベンガル語", - "bhDisplayName": "ビハリ語", - "biDisplayName": "ビスラマ語", - "bsDisplayName": "ボスニア語", - "brDisplayName": "ブルトン語", - "bgDisplayName": "ブルガリア語", - "myDisplayName": "ビルマ語", - "caDisplayName": "カタルーニャ語、バレンシア語", - "chDisplayName": "チャモロ語", - "ceDisplayName": "チェチェン語", - "nyDisplayName": "チェワ語、ニャンジャ語", - "zhDisplayName": "中国語", - "cvDisplayName": "チャヴァーシュ語", - "kwDisplayName": "コーンウォール語", - "coDisplayName": "コルシカ語", - "crDisplayName": "クリ語", - "hrDisplayName": "クロアチア語", - "csDisplayName": "チェコ語", - "daDisplayName": "デンマーク語", - "dvDisplayName": "ディベヒ語; ダイブヒ語; モルディブ語;", - "nlDisplayName": "オランダ語", - "enDisplayName": "英語", - "eoDisplayName": "エスペラント語", - "etDisplayName": "エストニア語", - "eeDisplayName": "エウェ語", - "foDisplayName": "フェロー諸島語", - "fjDisplayName": "フィジー語", - "fiDisplayName": "フィンランド語", - "frDisplayName": "フランス語", - "ffDisplayName": "フラ語; フラ; プラー; プラー", - "glDisplayName": "ガリシア語", - "kaDisplayName": "ジョージア語", - "deDisplayName": "ドイツ語", - "elDisplayName": "現代ギリシャ語", - "gnDisplayName": "グアラニー語", - "guDisplayName": "グジャラート語", - "htDisplayName": "ハイチ・クレオール語", - "haDisplayName": "ハウサ語", - "heDisplayName": "ヘブライ語(現代)", - "hzDisplayName": "ヘレロ語", - "hiDisplayName": "ヒンディー語", - "hoDisplayName": "ヒリモトゥ", - "huDisplayName": "ハンガリー語", - "iaDisplayName": "インターリングア", - "idDisplayName": "インドネシア語", - "ieDisplayName": "インターリンギー", - "gaDisplayName": "アイルランド語", - "igDisplayName": "イボ語", - "ikDisplayName": "イヌピアック語", - "ioDisplayName": "イド語", - "isDisplayName": "アイスランド語", - "itDisplayName": "イタリア語", - "iuDisplayName": "イヌクティトゥット語", - "jaDisplayName": "日本語", - "jvDisplayName": "ジャワ語", - "klDisplayName": "カラアリスット語、グリーンランド語", - "knDisplayName": "カンナダ語", - "krDisplayName": "カヌリ語", - "ksDisplayName": "カシミール語", - "kkDisplayName": "カザフ語", - "kmDisplayName": "クメール語", - "kiDisplayName": "キクユ語、ギクユ語", - "rwDisplayName": "キニャルワンダ語", - "kyDisplayName": "キルギス語、キルギス人の言語", - "kvDisplayName": "コミ語", - "kgDisplayName": "コンゴ語", - "koDisplayName": "韓国語", - "kuDisplayName": "クルド語", - "kjDisplayName": "クワニャマ語、クワニャマ", - "laDisplayName": "ラテン語", - "lbDisplayName": "ルクセンブルク語、レッツェブルガーシュ", - "lgDisplayName": "ルガンダ語", - "liDisplayName": "リンブルフ語、リンブルガン語、リンブルガー", - "lnDisplayName": "リンガラ語", - "loDisplayName": "ラオ語", - "ltDisplayName": "リトアニア語", - "luDisplayName": "ルバ・カタンガ語", - "lvDisplayName": "ラトビア語", - "gvDisplayName": "マン島語", - "mkDisplayName": "マケドニア語", - "mgDisplayName": "マダガスカル語", - "msDisplayName": "マレー語", - "mlDisplayName": "マラヤーラム語", - "mtDisplayName": "マルタ語", - "miDisplayName": "マオリ語", - "mrDisplayName": "マラーティー(マラーティー)", - "mhDisplayName": "マーシャリー語", - "mnDisplayName": "モンゴル語", - "naDisplayName": "ナウル語", - "nvDisplayName": "ナバホ語、ナバホ", - "nbDisplayName": "ノルウェー語(ブークモール)", - "ndDisplayName": "北ンデベレ語", - "neDisplayName": "ネパール語", - "ngDisplayName": "ンドンガ語", - "nnDisplayName": "ノルウェー語(ニーノシュク)", - "noDisplayName": "ノルウェー語", - "iiDisplayName": "ヌオス語", - "nrDisplayName": "南ンデベレ語", - "ocDisplayName": "オック語", - "ojDisplayName": "オジブワ語、オジブワ", - "cuDisplayName": "古教会スラヴ語、教会スラヴ語、教会スラヴ語、古ブルガリア語、古スラヴ語", - "omDisplayName": "オロモ語", - "orDisplayName": "オリヤ語", - "osDisplayName": "オセット語、オセティック語", - "paDisplayName": "パンジャブ語、パンジャブ", - "piDisplayName": "パーリ", - "faDisplayName": "ペルシャ語", - "plDisplayName": "ポーランド語", - "psDisplayName": "パシュトー語、プシュトー語", - "ptDisplayName": "ポルトガル語", - "quDisplayName": "ケチュア語", - "rmDisplayName": "ロマンシュ語", - "rnDisplayName": "キルンディ語", - "roDisplayName": "ルーマニア語、モルドバ語", - "ruDisplayName": "ロシア語", - "saDisplayName": "サンスクリット語(サンスクリタ)", - "scDisplayName": "サルデニア語", - "sdDisplayName": "シンド語", - "seDisplayName": "北サーミ語", - "smDisplayName": "サモア語", - "sgDisplayName": "サンゴ語", - "srDisplayName": "セルビア語", - "gdDisplayName": "スコットランド・ゲール語、ゲール語", - "snDisplayName": "ショナ語", - "siDisplayName": "シンハラ語、シンハラ人の言語", - "skDisplayName": "スロバキア語", - "slDisplayName": "スロベニア語", - "soDisplayName": "ソマリ語", - "stDisplayName": "南ソト語", - "esDisplayName": "スペイン語", - "suDisplayName": "スンダ語", - "swDisplayName": "スワヒリ語", - "ssDisplayName": "スワティ語", - "svDisplayName": "スウェーデン語", - "taDisplayName": "タミル語", - "teDisplayName": "テルグ語", - "tgDisplayName": "タジク語", - "thDisplayName": "タイ語", - "tiDisplayName": "ティグリニャ語", - "boDisplayName": "チベット標準語、チベット語、中央チベット語", - "tkDisplayName": "トルクメン語", - "tlDisplayName": "タガログ語", - "tnDisplayName": "ツワナ語", - "toDisplayName": "トンガ(トンガ諸島)", - "trDisplayName": "トルコ語", - "tsDisplayName": "ツォンガ", - "ttDisplayName": "タタール語", - "twDisplayName": "ツイ", - "tyDisplayName": "タヒチ語", - "ugDisplayName": "ウイグル語", - "ukDisplayName": "ウクライナ語", - "urDisplayName": "ウルドゥー語", - "uzDisplayName": "ウズベク語", - "veDisplayName": "ヴェンダ語", - "viDisplayName": "ベトナム語", - "voDisplayName": "ボラピック語", - "waDisplayName": "ワロン語", - "cyDisplayName": "ウェールズ語", - "woDisplayName": "ウォロフ語", - "fyDisplayName": "西フリジア語", - "xhDisplayName": "コサ語", - "yiDisplayName": "イディッシュ語", - "yoDisplayName": "ヨルバ語", - "zaDisplayName": "チワン語", "unkDisplayName": "不明", - "zuDisplayName": "ズールー語", - "hawDisplayName": "ハワイ語", - "hmnDisplayName": "モン族語", - "multiDisplayName": "マルチ", - "cebDisplayName": "セブアノ語", - "dzDisplayName": "ゾンカ語", - "iwDisplayName": "ヘブライ語", - "jwDisplayName": "ジャワ語", - "moDisplayName": "モルドバ語", - "shDisplayName": "セルボ・クロアチア語", "wwCountryDisplayName": "世界中", "afCountryDisplayName": "アフガニスタン", "axCountryDisplayName": "オーランド諸島", @@ -3342,41 +3073,25 @@ "yeCountryDisplayName": "イエメン", "zmCountryDisplayName": "ザンビア", "zwCountryDisplayName": "ジンバブエ", - "pay": "支払う", - "allPrivateChats": "ダイレクトチャット", - "unknownPrivateChat": "不明なプライベートチャット", + "pay": "チェックアウト", "invitedToSpace": "{user}さんがあなたをコース「{space}」に招待しました。参加しますか?", - "declinedInvitation": "招待を辞退しました", - "acceptedInvitation": "招待を受け入れました", "youreInvited": "📩 招待されています!", "invitedToChat": "{user}さんがあなたをチャット「{name}」に招待しました。参加しますか?", "monthlySubscription": "月額", "yearlySubscription": "年額", "defaultSubscription": "Pangeaチャットサブスクリプション", "freeTrial": "無料トライアル", - "grammarAnalytics": "エラー分析", "total": "合計:", "noDataFound": "データが見つかりません", - "promoSubscriptionExpirationDesc": "現在のサブスクリプションはプロモーション版で、{expiration}に期限切れになります。サポートに連絡してサブスクリプションの変更についてご相談ください:support@pangea.chat", - "emptyChatNameWarning": "このチャットの名前を入力してください", "blurMeansTranslateTitle": "なぜメッセージがぼやけているのですか?", "blurMeansTranslateBody": "イマージョンモードがオンの場合、あなたの基本言語で送信されたメッセージはぼやけて表示され、Pangea Botがターゲット言語に翻訳します。イマージョンモードは個別設定やコース設定で切り替え可能です。", - "someErrorTitle": "うーん、何かがおかしいです", - "someErrorBody": "エラーか、あなたの基本言語に何か問題がある可能性があります。", "bestCorrectionFeedback": "正解です!", "distractorFeedback": "ちょっと違います。", "bestAnswerFeedback": "それは正しいです!", "definitionDefaultPrompt": "この単語の意味は何ですか?", "practiceDefaultPrompt": "最良の答えは何ですか?", "correctionDefaultPrompt": "最良の置き換えは何ですか?", - "itStartDefaultPrompt": "翻訳の手助けをしますか?", - "lockedChatWarning": "🔒 このチャットはロックされています", - "lockChat": "チャットをロック", - "suggestToChat": "このチャットを提案", - "suggestToChatDesc": "提案されたチャットはチャットリストに表示されます", "acceptSelection": "訂正を受け入れる", - "acceptSelectionAnyway": "それでもこれを使う", - "makingActivity": "アクティビティを作成中", "why": "なぜ?", "definition": "定義", "exampleSentence": "例文", @@ -3384,128 +3099,55 @@ "reportMessageTitle": "{reportingUserId}がチャット{roomName}で{reportedUserId}のメッセージを報告しました", "reportMessageBody": "メッセージ: {reportedMessage}\n理由: {reason}", "noTeachersFound": "報告する教師が見つかりません", - "viewArchive": "アーカイブを見る", "trialExpiration": "無料トライアルは {expiration} に終了します", "freeTrialDesc": "新規ユーザーはPangea Chatの1週間無料トライアルを受けられます", "activateTrial": "無料の7日間トライアルを開始", "successfullySubscribed": "正常に購読登録されました!", "clickToManageSubscription": "こちらをクリックして購読を管理してください。", - "errorGettingAudio": "音声の取得中にエラーが発生しました。ページを更新してもう一度お試しください。", "signUp": "サインアップ", "pleaseChooseAtLeastChars": "少なくとも {min} 文字を選択してください。", "noEmailWarning": "有効なメールアドレスを入力してください。そうでないとパスワードのリセットができません。必要ない場合は、もう一度ボタンをタップして続行してください。", "pleaseEnterValidEmail": "有効なメールアドレスを入力してください。", "pleaseChooseAUsername": "ユーザー名を選択してください", - "chooseAUsername": "ユーザー名を選択", "define": "定義", "listen": "聴く", - "addConversationBot": "会話ボットを有効にする", - "addConversationBotDesc": "このチャットにボットを追加します", - "convoBotSettingsDescription": "会話のトピックと難易度を編集", - "enterAConversationTopic": "会話のトピックを入力してください", - "conversationTopic": "会話のトピック", - "enableModeration": "モデレーションを有効にする", - "enableModerationDesc": "自動モデレーションを有効にして、メッセージを送信する前にレビューします", - "conversationLanguageLevel": "この会話の言語レベルは何ですか?", - "showDefinition": "定義を表示", - "subscriptionPopupTitle": "この文には文法の誤りがある可能性があります...", - "subscriptionPopupDesc": "今すぐ購読して翻訳と文法修正を解除しましょう!", - "seeOptions": "オプションを見る", - "continuedWithoutSubscription": "購読せずに続行", "trialPeriodExpired": "無料試用期間が終了しました", - "selectToDefine": "任意の単語をクリックして定義を確認!", "translations": "翻訳", "messageAudio": "メッセージの音声", "definitions": "定義", "subscribedToUnlockTools": "インタラクティブな翻訳と文法チェック、音声再生、個別練習活動、学習分析を解除するには購読してください!", "translationTooltip": "翻訳", - "audioTooltip": "音声を再生", "speechToTextTooltip": "文字起こし", - "certifyAge": "私は{age}歳以上であることを証明します", "kickBotWarning": "Pangea Botをキックすると、このチャットから会話ボットが削除されます。", - "joinToView": "詳細を見るにはこのルームに参加してください", "refresh": "更新", - "autoPlayTitle": "自動再生メッセージ", - "autoPlayDesc": "有効にすると、メッセージのテキスト読み上げ音声が選択時に自動的に再生されます。", "messageAnalytics": "メッセージ分析", "words": "単語", "score": "スコア", "accuracy": "正確さ", "points": "ポイント", "noPaymentInfo": "支払い情報は不要です!", - "conversationBotModeSelectDescription": "チャット活動", - "conversationBotModeSelectOption_discussion": "ディスカッション", - "conversationBotModeSelectOption_custom": "カスタム", - "conversationBotModeSelectOption_conversation": "会話", - "conversationBotModeSelectOption_textAdventure": "テキストアドベンチャー", - "conversationBotModeSelectOption_storyGame": "ストーリーゲーム", - "conversationBotDiscussionZone_title": "ディスカッション設定", - "conversationBotDiscussionZone_discussionTopicLabel": "ディスカッショントピック", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "ディスカッショントピックを設定", - "conversationBotDiscussionZone_discussionKeywordsLabel": "ディスカッションキーワード", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "ディスカッションキーワードを設定", - "conversationBotDiscussionZone_discussionKeywordsHintText": "ディスカッションを導くためのカンマ区切りのキーワードリスト", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "スケジュールでディスカッションの促しを送信", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "ディスカッションの促しの間隔(時間)", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "リアクションで応答", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "ディスカッションの促しを送るリアクション", - "conversationBotCustomZone_title": "カスタム設定", - "conversationBotCustomZone_customSystemPromptLabel": "システムプロンプト", - "conversationBotCustomZone_customSystemPromptPlaceholder": "カスタムシステムプロンプトを設定", - "conversationBotCustomZone_customSystemPromptEmptyError": "カスタムシステムプロンプトがありません", - "botConfig": "ボットとアクティビティ設定", - "botConfigNoPermissionTitle": "権限なし", - "botConfigNoPermissionMessage": "ボット設定を変更するにはルーム管理者に連絡してください", - "addConversationBotDialogTitleInvite": "会話ボットの招待を確認", - "addConversationBotButtonInvite": "招待", - "addConversationBotDialogInviteConfirmation": "招待", - "addConversationBotButtonTitleRemove": "会話ボットの削除を確認", - "addConversationBotButtonRemove": "削除", - "addConversationBotDialogRemoveConfirmation": "削除", - "conversationBotConfigConfirmChange": "確認", - "conversationBotStatus": "ボットを招待", - "conversationBotTextAdventureZone_title": "テキストアドベンチャー", - "conversationBotTextAdventureZone_instructionLabel": "ゲームマスターの指示", - "conversationBotTextAdventureZone_instructionPlaceholder": "ゲームマスターの指示を設定してください", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "ゲームマスターの指示がありません", - "studentAnalyticsNotAvailable": "学生のデータは現在利用できません", - "roomDataMissing": "あなたがメンバーでない部屋の一部のデータが欠落している可能性があります。", "updatePhoneOS": "デバイスのOSバージョンを更新する必要があるかもしれません。", "wordsPerMinute": "1分あたりの単語数", "autoIGCToolName": "Pangeaのライティング支援を自動的に実行", "autoIGCToolDescription": "メッセージ送信前にPangeaチャットの文法と翻訳のライティング支援を自動的に実行します。", - "runGrammarCorrection": "メッセージを確認", - "grammarCorrectionFailed": "対処すべき問題", - "grammarCorrectionComplete": "良さそうです!", "tooltipInstructionsTitle": "それは何のためか分からない?", "tooltipInstructionsMobileBody": "アイテムを長押ししてツールチップを表示します。", "tooltipInstructionsBrowserBody": "アイテムにカーソルを合わせてツールチップを表示します。", "chatCapacity": "チャット容量", "roomFull": "この部屋はすでに満員です。", - "topicNotSet": "トピックが設定されていません。", - "chatCapacityNotSet": "このチャットには容量制限がありません。", "chatCapacityHasBeenChanged": "チャット容量が変更されました", "chatCapacitySetTooLow": "チャット容量は少なくとも{count}でなければなりません。", "chatCapacityExplanation": "チャット容量は、チャットに許可されるメンバー数を制限します。", - "chatExceedsCapacity": "このチャットは容量を超えています。", "tooManyRequest": "リクエストが多すぎます。後でもう一度お試しください。", "enterNumber": "整数値を入力してください。", "buildTranslation": "上記の選択肢から翻訳を作成してください", - "nonexistentSelection": "選択がもう存在しません。", - "changeAnalyticsLanguage": "分析言語を変更", "practice": "練習", "noLanguagesSet": "言語が設定されていません", - "noActivitiesFound": "今はこれで十分です!後でまた来てください。", - "hintTitle": "ヒント:", "speechToTextBody": "音声メッセージの場合、文字起こしと話者のWords Per Minuteスコアを見ることができます。", "versionNotFound": "バージョンが見つかりません", "fetchingVersion": "バージョンを取得中...", "versionFetchError": "バージョン取得エラー", "versionText": "バージョン:{version}+{buildNumber}", - "languageButtonLabel": "言語:{currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "自動再生翻訳", - "interactiveTranslatorAutoPlayDesc": "確認なしでインタラクティブ翻訳者を起動します。", - "changeAnalyticsView": "分析ビューを変更", "l1TranslationBody": "基本言語のメッセージは翻訳されません。", "deleteSubscriptionWarningTitle": "アクティブなサブスクリプションがあります", "deleteSubscriptionWarningBody": "アカウントを削除しても、自動的にサブスクリプションはキャンセルされません。", @@ -3513,9 +3155,7 @@ "error520Title": "もう一度お試しください。", "error520Desc": "申し訳ありませんが、メッセージを理解できませんでした...", "wordsUsed": "使用した単語数", - "errorTypes": "エラータイプ", "level": "レベル", - "canceledSend": "送信キャンセル", "morphsUsed": "使用した形態素", "translationChoicesBody": "ヒントを表示するにはオプションをクリックして長押ししてください。", "grammar": "文法", @@ -3525,7 +3165,6 @@ "reportContentIssueTitle": "コンテンツの問題を報告", "feedback": "任意のフィードバック", "reportContentIssueDescription": "おっと!AIはパーソナライズされた学習体験を促進できますが...また幻覚を見ます。ご意見をお聞かせください。再度試みます。", - "changeContent": "おっと!AIは個別化された学習体験を促進できますが…また幻覚も見えます。これは何にすべきですか?", "clickTheWordAgainToDeselect": "選択した単語をもう一度クリックして選択解除します。", "l2SupportNa": "利用不可", "l2SupportAlpha": "アルファ", @@ -3759,7 +3398,6 @@ "grammarCopySPC": "特異性", "grammarCopyPARTTYPE": "部分的な種類", "grammarCopyINTREL": "疑問-関係", - "grammarCopyNUMFORMpsor": "所有者の数", "grammarCopyUNKNOWN": "不明", "grammarCopyNUMBERPSOR": "所有者の数", "grammarCopyPOSS": "所有格", @@ -3805,28 +3443,14 @@ "grammarCopyVOICEdir": "直接態", "grammarCopyVOICEinv": "倒置態", "grammarCopyVOICErcp": "相互態", - "enterPrompt": "システムプロンプトを入力してください", - "selectBotLanguage": "ボットの言語を選択", - "chooseVoice": "声を選択", - "enterLanguageLevel": "言語レベルを入力してください", - "enterDiscussionTopic": "議論のトピックを入力してください", - "selectBotChatMode": "チャットモードを選択", - "messageNotInTargetLang": "ターゲット言語でないメッセージ", "other": "その他", "levelShort": "LVL {level}", - "botModeValidation": "チャットモードを選択してください", "clickBestOption": "メッセージを翻訳する最適なオプションを選択してください!", "completeActivitiesToUnlock": "少なくとも1つのアクティビティを完了して翻訳を解除してください!", - "botSettingsSubtitle": "チャット活動を管理するためにボットを招待", - "invitePeople": "ユーザーを招待", "noCapacityLimit": "容量制限なし", "downloadGroupText": "グループテキストをダウンロード", "notificationsOn": "通知オン", "notificationsOff": "通知オフ", - "chatCanBeFoundViaSearch": "チャットは検索で見つかります", - "requireCodeToJoin": "参加にはコードが必要", - "canFindInSearch": "検索で見つけることができます", - "addChatToSpace": "チャットを追加", "createChatAndInviteUsers": "チャットを作成してユーザーを招待", "updatedNewSpaceDescription": "コースは、チャットを統合し、プライベートまたはパブリックなコミュニティを構築することを可能にします。", "joinWithCode": "コードで参加", @@ -3862,39 +3486,19 @@ "constructUseCollected": "チャットで収集済み", "constructUseNanDesc": "該当なし", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "ユーザー名とパスワードでサインイン", - "registrationEmailMessage": "そこに送信されたリンクでメールを確認してください。場合によっては、メールが届くまで最大5分かかることがあります。迷惑メールフォルダもご確認ください。", "enableTTSToolName": "テキスト読み上げを有効にしました", "enableTTSToolDescription": "アプリがターゲット言語の一部のテキストに対してテキスト読み上げ出力を生成できるようにします。", - "couldNotFindTTS": "現在のターゲット言語のテキスト読み上げエンジンが見つかりませんでした。", - "ttsInstructionsHyperlink": "新しい声をデバイスにダウンロードするための手順を見るにはこちらをクリックしてください。", - "createAnAccount": "アカウントを作成", - "signIn": "サインイン", - "signUpWithEmail": "メールでサインアップ", - "signUpWithGoogle": "Googleでサインアップ", - "signUpWithApple": "Appleでサインアップ", "yourUsername": "あなたのユーザー名", "yourEmail": "あなたのメールアドレス", - "pleaseEnterAnEmail": "メールアドレスを入力してください", - "signInWithGoogle": "Googleでサインイン", - "signInWithApple": "Appleでサインイン", - "chooseYourAvatar": "アバターを選択してください", "iWantToLearn": "学びたい", - "letsStart": "始めましょう", - "pleaseAgreeToTOS": "利用規約に同意してください", "pleaseEnterEmail": "有効なメールアドレスを入力してください。", - "pleaseSelectALanguage": "言語を選択してください", "myBaseLanguage": "私の基本言語", - "clickWordsInstructions": "🧷 任意の単語をクリックして詳細を確認してください。🤐", - "chooseBestDefinition": "この単語の意味は何ですか?", "meaningSectionHeader": "意味:", "formSectionHeader": "チャットで使用される形態:", - "noEmojiSelectedTooltip": "絵文字が選択されていません", "writingExercisesTooltip": "書き取り練習", "listeningExercisesTooltip": "リスニング練習", "readingExercisesTooltip": "読解練習", "meaningNotFound": "意味が見つかりませんでした。", - "formsNotFound": "形態が見つかりませんでした。", "chooseBaseForm": "基本形を選択してください", "notTheCodeError": "申し訳ありませんが、それはコードではありません!", "totalXP": "合計XP", @@ -3934,9 +3538,6 @@ "pickAnEmoji": "'{lemma}'に最適な絵文字は何ですか?", "chooseLemmaMeaningInstructionsBody": "メッセージ内の単語と意味を一致させてください!", "doubleClickToEdit": "ダブルクリックして編集。", - "removeFeature": "{feature}を削除", - "chooseCorrectLabel": "正しいラベルを選択してください。", - "levelPopupTitle": "おめでとうございます!\nレベル{level}に到達しました", "activityPlannerTitle": "アクティビティプランナー", "topicLabel": "トピック", "topicPlaceholder": "トピックを選択...", @@ -3944,7 +3545,6 @@ "modePlaceholder": "モードを選択...", "learningObjectiveLabel": "学習目標", "learningObjectivePlaceholder": "学習目標を選択...", - "mediaLabel": "学習者が共有すべきメディア", "languageOfInstructionsLabel": "活動指示の言語", "targetLanguageLabel": "ターゲット言語", "cefrLevelLabel": "CEFRレベル", @@ -3959,20 +3559,15 @@ "instructions": "指示", "numberOfLearners": "学習者数", "mustBeInteger": "整数でなければなりません(例:1、2、3、...)", - "noLemmasFound": "{xp}ポイント以上の語彙はありません。練習を続けてください!", "constructUsePvmDesc": "音声メッセージで生成", - "lockedMorphFeature": "ロック解除待ち", "leaveSpaceDescription": "コースを離れると、そのコース内のすべてのチャットも離れます。 他のユーザーはあなたがコースを離れたことを確認します。", - "whatIsLemma": "レマとは何ですか?", "constructUseCorMmDesc": "メッセージの意味を正しく", "constructUseIncMmDesc": "不正確なメッセージの意味", "constructUseIgnMmDesc": "無視されたメッセージの意味", "clickForMeaningActivity": "こちらをクリックして意味チャレンジ", "meaning": "意味", "chatWith": "{displayname}とのグループ", - "slightlyOffensive": "やや不快", "clickOnEmailLink": "メール内のリンクをクリックして続行してください。\n\nメールが届かない場合は迷惑メールフォルダを確認してください。", - "whoIsAllowedToJoinThisChat": "このチャットに参加できるのは誰ですか", "dontForgetPassword": "パスワードを忘れないでください!", "enableAutocorrectToolName": "デバイスの自動修正を有効にする", "enableAutocorrectDescription": "学習中の言語をサポートしている場合、入力中の一般的なエラーを修正するためにデバイスの自動修正を有効にできます。", @@ -4000,48 +3595,26 @@ "autocorrectNotAvailable": "申し訳ありませんが、このプラットフォームではこの機能はサポートされていません。今後のアップデートにご期待ください!", "pleaseUpdateApp": "続行するにはアプリを更新してください。", "chooseEmojiInstructionsBody": "絵文字とそれが最もよく表す言葉を一致させてください。心配しないで!意見が異なってもポイントは差し引かれません。😊", - "pickAnEmojiFor": "{lemma}に絵文字を選択してください", "analyticsVocabListBody": "これはあなたの語彙リストです!各単語にXPを獲得すると、苗木から満開まで成長します。詳細を見るには任意の単語をクリックしてください。", "morphAnalyticsListBody": "これらはあなたが学んでいる言語のすべての文法概念です!チャット中に出会うと解除されます。詳細はクリックしてください。", "knockSpaceSuccess": "このコースに参加リクエストを送信しました!管理者が受信次第、返信します😊", - "joinByCode": "コードで参加", "chooseWordAudioInstructionsBody": "完全なメッセージを聞いてください。その後、音声と単語を一致させてください。", "chooseMorphsInstructionsBody": "パズルのピースをクリックして文法の質問に答えましょう!", - "inviteAndLaunch": "起動して招待", - "createOwnChat": "自分のチャットを作成", "pleaseEnterInt": "数字を入力してください", "home": "ホーム", "join": "参加", "readingAssistanceOverviewBody": "以下のボタンをクリックして、絵文字、音声、単語の意味、文法の概念を一致させるミニゲームをプレイしましょう。または、詳細を知りたい単語をクリックしてください。", - "learnByTexting": "テキストで学ぶ", - "levelSummaryTrigger": "概要を見る", "levelSummaryPopupTitle": "レベル {level} の概要", - "referFriends": "友達に紹介", - "referFriendDialogTitle": "友達を会話に招待", - "referFriendDialogDesc": "新しい言語を一緒に学びたい友達がいますか?この招待リンクをコピーして送信し、今日からチャットを始めましょう。", - "youUnlocked": "アンロックしました", "resetInstructionTooltipsTitle": "操作説明ツールチップをリセット", "resetInstructionTooltipsDesc": "クリックして、新規ユーザー向けの操作説明ツールチップを表示します。", "selectForGrammar": "活動や詳細のために文法アイコンを選択してください。", - "newChatActivityTitle": "楽しい活動を追加しますか?", - "newChatActivityDesc": "アクティビティプランナーでグループチャットを冒険にしましょう!魅力的なトピックと目的を設定し、素晴らしい画像で会話を盛り上げましょう。想像力豊かな議論を促し、楽しさを絶えず流し続けます!", - "exploreMore": "もっと探索する", "randomize": "ランダム化", "clear": "クリア", "makeYourOwnActivity": "自分のアクティビティを作成", "featuredActivities": "注目のアクティビティ", - "goToChat": "チャットへ移動", "save": "保存", - "selectActivity": "アクティビティを選択", - "wordFocusListeningMultipleChoice": "どの音声がその単語に一致しますか?", "startChat": "チャットを開始", "translationProblem": "翻訳の問題", - "perfectTranslation": "完璧な翻訳!", - "greatJobTranslation": "この翻訳、素晴らしいです!", - "goodJobTranslation": "この翻訳、良くできました。", - "makingProgress": "進歩しています!", - "keepPracticing": "練習を続けてください!", - "niceJob": "いいですね!", "askToJoin": "参加をお願いする", "emptyChatWarningTitle": "チャットは空です", "emptyChatWarningDesc": "誰も招待していません。チャット設定に移動して連絡先やボットを招待してください。後でもできます。", @@ -4060,8 +3633,6 @@ "languageLevelC2Desc": "私はほぼすべての聞いたり読んだりしたことを理解し、流暢かつ正確に自己表現できます。", "newVocab": "新しい語彙", "newGrammar": "新しい文法概念", - "congratulationsOnReaching": "レベル {level} に到達しました!", - "seeDetails": "詳細を見る", "choosePracticeMode": "上のボタンのいずれかをクリックして練習活動を開始してください", "ban": "禁止", "unban": "解除", @@ -4075,8 +3646,6 @@ "timesUsedWithAssistance": "支援とともに使用された回数", "shareInviteCode": "招待コードを共有:{code}", "leaderboard": "リーダーボード", - "welcomeUser": "ようこそ {user}", - "joinSpaceOnboardingDesc": "招待コードまたは公開コースへのリンクがありますか?", "skipForNow": "今はスキップ", "permissions": "権限", "spaceChildPermission": "このコースに新しいチャットを追加できるのは誰ですか", @@ -4084,12 +3653,8 @@ "defaultOption": "デフォルト", "deleteChatDesc": "このチャットを削除してもよろしいですか?すべての参加者に対して削除され、チャット内のすべてのメッセージは練習や学習分析に利用できなくなります。", "deleteSpaceDesc": "コースと選択されたチャットはすべての参加者に対して削除され、チャット内のすべてのメッセージは練習や学習分析に利用できなくなります。この操作は元に戻せません。", - "chatWithActivities": "アクティビティとチャット", "launch": "起動", - "launchActivityToChats": "チャットにアクティビティを起動", "searchChats": "チャットを検索", - "selectChats": "チャットを選択", - "selectChatToStart": "完了!開始するチャットを選択してください", "maxFifty": "最大50", "configureSpace": "コースを設定", "pinMessages": "メッセージを固定", @@ -4103,9 +3668,7 @@ "announcements": "お知らせ", "activities": "アクティビティ", "access": "アクセス", - "botSettings": "ボット設定", "activitySuggestionTimeoutMessage": "より多くのアクティビティを生成するために努力しています。しばらくしてからもう一度確認してください", - "accessSettingsWarning": "おっと!このルームのアクセスルールを設定する権限がないようです。必要に応じて確認し、変更が必要な場合はルーム管理者に相談してください。", "howSpaceCanBeFound": "このコースの見つけ方", "private": "プライベート", "cannotBeFoundInSearch": "検索で見つかりません", @@ -4118,16 +3681,6 @@ "canBeFoundViaKnock": "• 参加リクエストと管理者承認", "youHaveLeveledUp": "レベルアップしました!", "sendActivities": "アクティビティを送信", - "getStarted": "始めましょう", - "getStartedBotChatDesc": "AIとのチャットは始めるのに最適な場所です。Pangeaのリーディング、ライティング、リスニング、スピーキングツールを使えば簡単です!", - "getStartedCommunitiesDesc": "コミュニティと学ぶことは、Pangeaチャットの魅力です!\nクラスに参加したり、コースを見つけたり、自分で作ったりできます!", - "getStartedFriendsDesc": "一緒に学びたい友達はいますか?", - "getStartedBotChatComplete": "よくできました!ボットとチャットしています!", - "getStartedCommunitiesComplete": "素晴らしい、コースに参加しました!", - "getStartedComplete": "このセクションは完了です!\n友達とチャットして、素晴らしい機能を引き続き探索しましょう!", - "getStartedFriendsComplete": "やった!友達ができました!😊", - "getStartedBotChatButton": "チャットを始める!", - "getStartedFriendsButton": "友達とチャット", "groupChat": "グループチャット", "directMessage": "ダイレクトメッセージ", "newDirectMessage": "新しいダイレクトメッセージ", @@ -4143,7 +3696,6 @@ "mySavedActivities": "私の保存済みアクティビティ", "noSavedActivities": "保存済みのアクティビティはありません", "saveActivity": "このアクティビティを保存", - "yourSavedActivities": "保存済みアクティビティ", "failedToPlayVideo": "ビデオの再生に失敗しました", "done": "完了", "inThisSpace": "このコース内", @@ -4182,37 +3734,27 @@ "maximumActivityParticipants": "各アクティビティには最大 {count} 名の参加者が参加できます。", "pending": "保留中", "inactive": "非アクティブ", - "unjoinedActivityMessage": "参加しますか?オープンな役割を選択してください!\nまたは、ただ見て楽しもう!", - "fullActivityMessage": "ショーを自由に観覧してください!参加できる役割はありませんが、チャットを見ることができます!", "confirmRole": "役割を確認", "openRoleLabel": "開く", "joinedTheActivity": "👋 {username} が {role} として参加しました", "finishedTheActivity": "🏆 {username} がこの活動を終了しました", - "endActivityTitle": "終了しました", - "endActivityDesc": "目標を達成しましたか?\nこれは、チャットから離れることを確認するためのものです。でも心配しないで、チャットは続きます!みんなが「完了」をクリックするまで、気軽に遊んで楽しんでください。", "archiveToAnalytics": "完了した活動に追加", "activitySummaryError": "活動の概要を利用できません", "requestSummaries": "概要をリクエスト", - "loadingActivitySummary": "活動の概要を読み込み中...", "generatingNewActivities": "この言語ペアの最初のユーザーです!少々お待ちください。あなたのために活動を準備しています。", - "requestAccessTitle": "分析ビューのアクセスをリクエストしますか?", + "requestAccessTitle": "分析アクセスをリクエストしますか?", "requestAccessDesc": "参加者の分析を見るためのアクセスをリクエストしますか?\n\n参加者が同意すれば、このコースの管理者は以下を閲覧できます:\n • 単語総数\n • 文法概念の合計\n • 完了した活動セッションの合計\n • 正しく使われた、誤って使われた特定の文法概念\n\n閲覧できない情報は以下です:\n • コース外のチャットのメッセージ\n • 単語リスト", "requestAccess": "アクセスをリクエスト ({count})", "analyticsInactiveTitle": "非アクティブなユーザーへのリクエストは送信できませんでした", "analyticsInactiveDesc": "この機能が導入されて以来ログインしていない非アクティブなユーザーはリクエストを見ることができません。\n\nユーザーが戻ったときにリクエストボタンが表示されます。後で、利用可能になったときにその名前の下のリクエストボタンをクリックして再送信できます。", "accessRequestedTitle": "分析アクセスリクエスト", - "accessRequestedDesc": "「{space}」の管理者があなたの学習分析を閲覧するためのリクエストをしています。\n\n同意すれば、このコースの管理者は以下を閲覧できます:\n • 単語総数\n • 文法概念の合計\n • 完了した活動セッションの合計\n • 正しく使われた、誤って使われた特定の文法概念\n\n閲覧できない情報は以下です:\n • コース外のチャットのメッセージ\n • 単語リスト", - "allowAccess": "アクセスを許可", - "denyAccess": "アクセスを拒否", + "accessRequestedDesc": "リクエスト中の管理者: {admin} \n\n「{space}」の管理者があなたの学習分析を表示することをリクエストしています。\n\n同意する場合、彼らはあなたの以下を表示できるようになります:\n • 総語彙\n • 総文法概念\n • 完了した総活動セッション\n • 正しくおよび誤って使用された特定の文法概念\n\n彼らはあなたの以下を表示できません:\n • コース外のチャットでのメッセージ\n • 語彙リスト", "adminRequestedAccess": "管理者があなたの分析を閲覧するようリクエストしました。", "lastUpdated": "更新日\n{time}", "activityFinishedMessage": "すべて完了!", "endForAll": "全員に終了", "newCourse": "新しいコース", - "newCourseSubtitle": "どのコースプランを使用しますか?", - "failedToLoadCourses": "コースの読み込みに失敗しました", "numModules": "{num} モジュール", - "numActivityPlans": "{num} アクティビティプラン", "coursePlan": "コースプラン", "editCourseLater": "テンプレートのタイトル、説明、コース画像は後で編集できます。", "newCourseAccess": "デフォルトでは、コースはプライベートで、参加には管理者の承認が必要です。これらの設定はいつでも編集できます。", @@ -4226,17 +3768,11 @@ "accessDesc": "コースを公開して世界に向けることも、プライベートで安全に保つこともできます。", "createGroupChatDesc": "アクティビティセッションは開始と終了がありますが、グループチャットは日常的なコミュニケーションのために開いたままにします。", "deleteDesc": "コースを削除できるのは管理者のみです。これはすべてのユーザーを削除し、コース内のすべての選択されたチャットを削除する破壊的な操作です。注意して進めてください。", - "failedToLoadCourseInfo": "コース情報の読み込みに失敗しました", "noCourseFound": "おっと、このコースにはプランが必要です!\n\nコースプランはトピックと会話活動のシーケンスです。", "additionalParticipants": "+ {num} その他", - "activityNotFoundForCourse": "この活動はコース内で見つかりませんでした", - "courseChats": "コースチャット", - "myActivitySessions": "私のアクティビティセッション", "directMessages": "ダイレクトメッセージ", "whatNow": "次はどうする?", "chooseNextActivity": "次の活動を選択してください!", - "seeInstructions": "指示を見る", - "hideInstructions": "指示を隠す", "letsGo": "行きましょう", "chooseRole": "役割を選択してください!", "chooseRoleToParticipate": "参加する役割を選択してください!", @@ -4246,23 +3782,15 @@ "inviteFriends": "友達を招待", "waitNotDone": "待って、まだ終わっていません!", "waitingForOthersToFinish": "他の人が終わるのを待っています...", - "saveToCompletedActivities": "完了したアクティビティに保存", "generatingSummary": "チャットを分析して結果を生成しています", - "instructionsLanguage": "指示の言語", "findCourse": "コースを見つける", - "activityCompletedDesc": "完了したアクティビティは分析に追加され、使用した言語を確認および練習できます。", "pingParticipantsNotification": "{user}が{room}のアクティビティセッションに参加するユーザーを探しています", "course": "コース", "courses": "コース", "courseName": "コース名", "createNewCourse": "新しいコース", - "publicCourses": "公開コース", "goToCourse": "コースへ移動:{course}", "activityComplete": "このアクティビティは完了しました。アクティビティの概要は下に表示されるはずです。", - "haventChattedMuch": "あまりチャットしていないようです。もっと語彙を使ってみてください!目的を達成したと感じたら、下の終了ボタンを押してください。", - "haveChatted": "しばらくチャットしているようです!目的を達成したと感じたら、終了してアクティビティを完了し、チャットで概要を生成します!", - "userDoneAndWaiting": "{num1}/{num2}人の参加者が終了しました。全員が終わるのを待って、チャットで概要を生成します!\n\n会話に再参加したい場合は、チャットの続行ボタンをクリックしてください。", - "othersDoneAndWaiting": "{num1}/{num2}人が終了しました。あなたは目的を達成しましたか?", "startNewSession": "新しいセッションを開始", "joinOpenSession": "オープンセッションに参加", "less": "少ない", @@ -4272,7 +3800,6 @@ "openToJoin": "参加可能", "results": "結果", "activityDone": "アクティビティ完了!", - "moreLabel": "もっと", "promoCodeInfo": "次のページでプロモーションコードを入力できます", "editsComingSoon": "都市とアクティビティの編集機能は近日公開予定です。", "editing": "編集中", @@ -4288,13 +3815,10 @@ "courseSavedSuccessfully": "コースが正常に保存されました", "addCoursePlan": "コースプランを追加", "activityStatsButtonInstruction": "ここをクリックして活動統計を表示し、終了時に活動を閉じます", - "readingAnalyticsDesc": "各メッセージの練習をクリックして読解活動を行います。", - "speakingAnalyticsDesc": "話す練習のために音声メッセージを録音します。", - "audioAnalyticsDesc": "各メッセージの練習をクリックしてリスニング活動を行います。", "loginToAccount": "マイアカウントにログイン", "appDescription": "友達とメッセージを送りながら言語を学びましょう。", "languages": "言語", - "chooseLanguage": "言語を選択してください。", + "chooseLanguage": "ターゲット言語を選択してください。", "planTrip": "旅行を計画する", "howAreYouTraveling": "どのように旅行していますか?", "unlockPrivateTrip": "プライベート旅行を解除", @@ -4307,25 +3831,20 @@ "courseCode": "秘密のパスワードは何ですか?", "courseCodeHint": "旅行コードまたはリンク", "unlockMyTrip": "私の旅行を解除", - "anyLevel": "すべてのレベル", "signupOption": "どのように登録しますか?", "withApple": "Appleで", "withGoogle": "Googleで", "withEmail": "メールで", "createAccount": "アカウントを作成", - "noCoursesFound": "コースが見つかりません", "loginWithEmail": "メールでログイン", "usernameOrEmail": "ユーザー名またはメール", "email": "メール", "forgotPassword": "パスワードをお忘れですか?", - "writingAnalyticsDesc": "書き取り練習のためにメッセージを送信します。", "endActivity": "アクティビティを終了", "allLanguages": "すべての言語", - "allCefrLevels": "すべてのCEFRレベル", "chatListTooltip": "ここにあなたのダイレクトメッセージがあります!任意のユーザーのアバターをクリックして「会話を開始」し、DMを送信してください。", "directMessageBotTitle": "ダイレクトメッセージ Pangea Bot", "feedbackTitle": "アクティビティのフィードバック", - "feedbackDesc": "活動をどのように改善すればよいですか?詳細を提供していただければ、変更します!", "feedbackHint": "あなたのフィードバック", "feedbackButton": "フィードバックを送信", "directMessageBotDesc": "人間と話す方が楽しいですが... AIはいつでも準備万端です!", @@ -5795,30 +5314,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5834,18 +5329,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5870,18 +5353,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5918,38 +5389,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5958,62 +5401,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6050,10 +5449,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6062,14 +5457,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6078,46 +5465,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6126,10 +5477,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6186,18 +5533,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6206,14 +5541,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6242,18 +5569,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6262,42 +5577,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6306,14 +5589,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6334,26 +5609,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6374,10 +5629,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6410,25 +5661,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6485,34 +5717,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6541,778 +5745,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8305,14 +6741,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8324,14 +6752,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8363,10 +6783,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8375,18 +6791,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8395,14 +6799,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8427,38 +6823,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8504,10 +6872,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8532,10 +6896,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8560,10 +6920,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8572,66 +6928,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8652,42 +6952,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8712,154 +6988,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8876,18 +7004,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8908,14 +7024,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8932,10 +7040,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8948,14 +7052,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8964,14 +7060,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8999,26 +7087,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9047,18 +7115,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9095,10 +7155,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10031,10 +8087,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10215,34 +8267,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10255,10 +8279,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10267,14 +8287,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10291,22 +8303,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10454,14 +8450,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10470,34 +8458,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10506,54 +8466,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10562,10 +8486,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10582,10 +8502,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10757,26 +8673,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10805,10 +8701,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10865,30 +8757,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10917,18 +8793,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11045,14 +8913,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11065,10 +8925,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11077,14 +8933,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11101,14 +8949,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11117,22 +8957,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11145,18 +8969,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11173,22 +8985,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11197,30 +8997,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11293,18 +9069,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11361,18 +9125,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11401,30 +9153,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11477,18 +9213,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11537,46 +9265,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11641,10 +9329,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11816,14 +9500,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11851,14 +9527,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11871,10 +9539,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11910,19 +9574,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11947,14 +9606,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11963,14 +9614,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12023,10 +9666,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12039,18 +9678,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12063,14 +9690,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12111,26 +9730,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12158,10 +9765,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12172,36 +9775,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12238,10 +9811,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12306,18 +9875,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12382,10 +9939,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12406,10 +9959,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12426,10 +9975,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12438,10 +9983,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12454,10 +9995,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12482,16 +10019,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "友達をアクティビティに招待する", - "inviteFriendsToActivityCourse": "友達をアクティビティとコースに招待する", "feedbackRespDesc": "明日、アクティビティの更新情報を確認してください。", "activityDropdownDesc": "これが終わったら、下のボタンをクリックしてください", - "activityAnalyticsListBody": "これらはあなたの完了したアクティビティです!アクティビティを終えた後、こちらで確認できます。", "languageMismatchTitle": "言語の不一致", "languageMismatchDesc": "あなたのターゲット言語はこのアクティビティの言語と一致しません。ターゲット言語を更新しますか?", "reportWordIssueTooltip": "単語情報の問題を報告", "tokenInfoFeedbackDialogTitle": "単語情報フィードバック", - "tokenInfoFeedbackDialogDesc": "AIは間違いを犯します。上記の情報に関して見つけた問題を詳しく説明してください。", "noPublicCoursesFound": "公開コースが見つかりませんでした。新しく作成しますか?", "noCourseTemplatesFound": "ターゲット言語のコースが見つかりませんでした。その間、Pangea Botとチャットしたり、後でコースを確認したりできます。", "botActivityJoinFailMessage": "Pangea Botの応答に時間がかかっています。後でもう一度試すか、友達を招待してください。", @@ -12499,14 +10032,6 @@ "leaveDesc": "このスペースとその中のすべてのチャットを退出します", "selectAll": "すべて選択", "deselectAll": "すべて解除", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12515,10 +10040,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12535,10 +10056,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12572,7 +10089,6 @@ "newMessageInPangeaChat": "📩 Pangeaチャットに新しいメッセージ", "shareCourse": "コースを共有", "addCourse": "コースを追加", - "joinCourseWithCode": "コードでコースに参加", "joinPublicCourse": "公開コースに参加", "vocabLevelsDesc": "これが語彙をレベルアップしたら表示される場所です!", "highlightVocabTooltip": "チャットで送信したり練習したりすることで、下のターゲット語彙をハイライトします。", @@ -12596,10 +10112,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12608,7 +10120,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "DMやチャットが見つかりません。検索が正しくスペルされていることを確認してください。", + "activityAnalyticsTooltipBody": "これがあなたのレビューと練習のために保存されたアクティビティです。", + "numSavedActivities": "保存されたアクティビティの数", + "saveActivityTitle": "アクティビティを保存", + "saveActivityDesc": "よくできました!このアクティビティを後でレビューと練習のために保存します", + "levelInfoTooltip": "ここであなたが獲得したすべてのポイントとその方法を見ることができます!", + "alreadyInCourseWithID": "あなたはすでにこのプランのコースに参加しています。同じプランのコースを作成しますか、それとも既存のコースに行きますか?", + "goToExistingCourse": "既存のコースに行く", + "emojiView": "絵文字ビュー", + "feedbackDialogDesc": "私も間違いを犯します!私を改善するために何かありますか?", + "contactHasBeenInvitedToTheCourse": "連絡先がコースに招待されました", + "activityStatsButtonTooltip": "アクティビティ情報", + "allow": "許可", + "deny": "拒否", + "enabledRenewal": "サブスクリプション更新を有効にする", + "subscriptionEndsOn": "サブスクリプションの終了日", + "subscriptionRenewsOn": "サブスクリプションの更新日", + "waitForSubscriptionChanges": "サブスクリプションの変更がアプリに反映されるまで少々お待ちください。", + "subscribeReadingAssistance": "メッセージツールを解除するために購読する", + "aceDisplayName": "アチネース", + "achDisplayName": "アコリ", + "afDisplayName": "アフリカーンス", + "akDisplayName": "アカン", + "alzDisplayName": "アルール", + "amDisplayName": "アムハラ語", + "arDisplayName": "アラビア語", + "asDisplayName": "アッサム語", + "awaDisplayName": "アワディ", + "ayDisplayName": "アイマラ", + "azDisplayName": "アゼルバイジャン語", + "baDisplayName": "バシキール語", + "banDisplayName": "バリ語", + "bbcDisplayName": "バタク・トバ語", + "beDisplayName": "ベラルーシ語", + "bemDisplayName": "ベンバ語", + "bewDisplayName": "ブタウィ語", + "bgDisplayName": "ブルガリア語", + "bhoDisplayName": "ボージュプリー語", + "bikDisplayName": "ビコール語", + "bmDisplayName": "バンバラ語", + "bnDisplayName": "バングラ", + "bnBDDisplayName": "ベンガル語(バングラデシュ)", + "bnINDisplayName": "ベンガル語(インド)", + "brDisplayName": "ブルトン語", + "bsDisplayName": "ボスニア語", + "btsDisplayName": "バタク・シマルンゴン語", + "btxDisplayName": "バタク・カロ語", + "buaDisplayName": "ブリヤート語", + "caDisplayName": "カタルーニャ語", + "cebDisplayName": "セブアノ語", + "cggDisplayName": "チガ", + "chmDisplayName": "マリ", + "ckbDisplayName": "中央クルド語", + "cnhDisplayName": "ハカチン", + "coDisplayName": "コルシカ語", + "crhDisplayName": "クリミアトルコ語", + "crsDisplayName": "セセルワクレオールフランス語", + "csDisplayName": "チェコ語", + "cvDisplayName": "チュヴァシ語", + "cyDisplayName": "ウェールズ語", + "daDisplayName": "デンマーク語", + "deDisplayName": "ドイツ語", + "dinDisplayName": "ディンカ語", + "doiDisplayName": "ドグリ語", + "dovDisplayName": "ドンベ語", + "dzDisplayName": "ゾンカ語", + "eeDisplayName": "エウェ語", + "enDisplayName": "英語", + "enAUDisplayName": "英語 (オーストラリア)", + "enGBDisplayName": "英語 (イギリス)", + "enINDisplayName": "英語(インド)", + "enUSDisplayName": "英語(アメリカ)", + "eoDisplayName": "エスペラント", + "esDisplayName": "スペイン語", + "esESDisplayName": "スペイン語(スペイン)", + "esMXDisplayName": "スペイン語(メキシコ)", + "euDisplayName": "バスク語", + "faDisplayName": "ペルシャ語", + "ffDisplayName": "フラ語", + "fiDisplayName": "フィンランド語", + "filDisplayName": "フィリピン語", + "fjDisplayName": "フィジー語", + "foDisplayName": "ファロー語", + "frDisplayName": "フランス語", + "frCADisplayName": "フランス語 (カナダ)", + "frFRDisplayName": "フランス語 (フランス)", + "fyDisplayName": "西フリジア語", + "gaDisplayName": "アイルランド語", + "gaaDisplayName": "ガ", + "gdDisplayName": "スコットランド・ゲール語", + "glDisplayName": "ガリシア語", + "gnDisplayName": "グアラニー語", + "gomDisplayName": "ゴア・コンカニ語", + "guDisplayName": "グジャラート語", + "haDisplayName": "ハウサ語", + "hawDisplayName": "ハワイ語", + "heDisplayName": "ヘブライ語", + "hiDisplayName": "ヒンディー語", + "hilDisplayName": "ヒリガイノン語", + "hmnDisplayName": "モン語", + "hneDisplayName": "チャッティースガル語", + "hrDisplayName": "クロアチア語", + "hrxDisplayName": "フンスリック語", + "htDisplayName": "ハイチ・クレオール語", + "huDisplayName": "ハンガリー語", + "hyDisplayName": "アルメニア語", + "idDisplayName": "インドネシア語", + "igDisplayName": "イボ語", + "iloDisplayName": "イロコ語", + "isDisplayName": "アイスランド語", + "itDisplayName": "イタリア語", + "jaDisplayName": "日本語", + "jvDisplayName": "ジャワ語", + "kaDisplayName": "グルジア語", + "kkDisplayName": "カザフ語", + "kmDisplayName": "クメール語", + "knDisplayName": "カンナダ語", + "koDisplayName": "韓国語", + "kokDisplayName": "コンカニ語", + "kriDisplayName": "クリオ語", + "ksDisplayName": "カシミール語", + "ktuDisplayName": "キトゥバ語(コンゴ民主共和国)", + "kuDisplayName": "クルド語", + "kyDisplayName": "キルギス語", + "laDisplayName": "ラテン語", + "lbDisplayName": "ルクセンブルク語", + "lgDisplayName": "ガンダ語", + "liDisplayName": "リンブルフ語", + "lijDisplayName": "リグリア語", + "lmoDisplayName": "ロンバルド語", + "lnDisplayName": "リンガラ語", + "loDisplayName": "ラオ語", + "ltDisplayName": "リトアニア語", + "ltgDisplayName": "ラトガリア語", + "luoDisplayName": "ルオ語(ケニアとタンザニア)", + "lusDisplayName": "ミゾ語", + "lvDisplayName": "ラトビア語", + "maiDisplayName": "マイティリ語", + "makDisplayName": "マカサール語", + "mgDisplayName": "マダガスカル語", + "miDisplayName": "マオリ", + "minDisplayName": "ミナンカバウ", + "mkDisplayName": "マケドニア語", + "mlDisplayName": "マラヤーラム語", + "mnDisplayName": "モンゴル語", + "mniDisplayName": "マニプール語", + "mrDisplayName": "マラーティー語", + "msDisplayName": "マレー語", + "msArabDisplayName": "マレー語(アラビア語)", + "msMYDisplayName": "マレー語(マレーシア)", + "mtDisplayName": "マルタ語", + "mwrDisplayName": "マワリ語", + "myDisplayName": "ビルマ語", + "nanDisplayName": "ミンナン語", + "nbDisplayName": "ノルウェー語 (ブークモール)", + "neDisplayName": "ネパール語", + "newDisplayName": "ネワール語", + "nlDisplayName": "オランダ語", + "nlBEDisplayName": "フラマン語", + "noDisplayName": "ノルウェー語", + "nrDisplayName": "南ンデベレ語", + "nsoDisplayName": "北ソト語", + "nusDisplayName": "ヌエール語", + "nyDisplayName": "ニャンジャ語", + "ocDisplayName": "オック語", + "omDisplayName": "オロモ語", + "orDisplayName": "オディア語", + "paDisplayName": "パンジャブ語", + "paArabDisplayName": "パンジャブ語 (シャームキ)", + "paINDisplayName": "パンジャブ語 (グルムキ)", + "pagDisplayName": "パンガシナン", + "pamDisplayName": "パンパンガ", + "papDisplayName": "パピアメント", + "plDisplayName": "ポーランド語", + "psDisplayName": "パシュトー語", + "ptDisplayName": "ポルトガル語", + "ptBRDisplayName": "ポルトガル語 (ブラジル)", + "ptPTDisplayName": "ポルトガル語 (ポルトガル)", + "quDisplayName": "ケチュア語", + "rajDisplayName": "ラージャスターン語", + "rnDisplayName": "ルンディ", + "roDisplayName": "ルーマニア語", + "roMDDisplayName": "モルドバ語", + "romDisplayName": "ロマ語", + "ruDisplayName": "ロシア語", + "rwDisplayName": "キニヤルワンダ語", + "saDisplayName": "サンスクリット語", + "satDisplayName": "サンタリ語", + "scnDisplayName": "シチリア語", + "sdDisplayName": "シンド語", + "sgDisplayName": "サンゴ", + "shnDisplayName": "シャン", + "siDisplayName": "シンハラ語", + "skDisplayName": "スロバキア語", + "slDisplayName": "スロベニア語", + "smDisplayName": "サモア語", + "snDisplayName": "ショナ語", + "soDisplayName": "ソマリ語", + "sqDisplayName": "アルバニア語", + "srDisplayName": "セルビア語", + "srMEDisplayName": "モンテネグロ語", + "ssDisplayName": "スワティ語", + "stDisplayName": "南ソト語", + "suDisplayName": "スンダ語", + "svDisplayName": "スウェーデン語", + "swDisplayName": "スワヒリ語", + "szlDisplayName": "シレジア語", + "taDisplayName": "タミル語", + "teDisplayName": "テルグ語", + "tetDisplayName": "テトゥム語", + "tgDisplayName": "タジク語", + "thDisplayName": "タイ語", + "tiDisplayName": "ティグリニャ語", + "tkDisplayName": "トルクメン語", + "tlDisplayName": "タガログ語", + "tnDisplayName": "ツワナ語", + "trDisplayName": "トルコ語", + "tsDisplayName": "ツォンガ語", + "ttDisplayName": "タタール語", + "ugDisplayName": "ウイグル語", + "ukDisplayName": "ウクライナ語", + "urDisplayName": "ウルドゥー語", + "urINDisplayName": "ウルドゥー語 (インド)", + "urPKDisplayName": "ウルドゥー語 (パキスタン)", + "uzDisplayName": "ウズベク語", + "viDisplayName": "ベトナム語", + "wuuDisplayName": "呉語", + "xhDisplayName": "コサ語", + "yiDisplayName": "イディッシュ語", + "yoDisplayName": "ヨルバ語", + "yuaDisplayName": "ユカテコ", + "yueDisplayName": "広東語", + "yueCNDisplayName": "広東語(中国)", + "yueHKDisplayName": "広東語(香港)", + "zhDisplayName": "中国語", + "zhCNDisplayName": "中国語(簡体字)", + "zhTWDisplayName": "中国語(繁体字)", + "zuDisplayName": "ズールー語", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12675,6 +11373,7 @@ "notStartedActivitiesTitle": "オープンセッション ({num})", "inProgressActivitiesTitle": "現在進行中 ({num})", "completedActivitiesTitle": "完了 ({num})", + "pickDifferentActivity": "別のアクティビティを選択", "inOngoingActivity": "進行中のアクティビティがあります!", "@notStartedActivitiesTitle": { "type": "String", @@ -12700,10 +11399,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "ターゲット言語がこのメッセージと一致しません。ターゲット言語を更新しますか?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "これはこのコースの全員です。任意のユーザーのアバターをクリックし、「会話を開始」を選択してDMを送信します。", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "この語彙はあなたの分析から永久に削除されます", + "woman": "女性", + "man": "男性", + "otherGender": "その他", + "unselectedGender": "性別オプションを選択してください", + "gender": "性別", + "chatParticipantTooltip": "これはこのチャットの全員です。任意のユーザーのアバターをクリックして「会話を開始」を選択すると、DMを送信できます。", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "学習ツールは、ターゲット言語でないメッセージには無効です。", + "vocabEmoji": "語彙絵文字", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "再生成をリクエスト", + "optionalRegenerateReason": "(オプション) 理由", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "{lemma}の絵文字が設定されました!今後の練習活動ではこの絵文字を使ってその単語を表現します。", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "サインインの完了を待っています", + "ssoDialogDesc": "安全にサインインできるように新しいタブを開きました。", + "ssoDialogHelpText": "🤔 新しいタブが表示されない場合は、ポップアップブロッカーを確認してください。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "言語ツールを無効にする", + "disableLanguageToolsDesc": "自動言語支援を無効にしますか?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "権限が拒否されました。音声メッセージを録音するには、録音権限を有効にしてください。", + "genericWebRecordingError": "何かがうまくいきませんでした。メッセージを録音する際は、Chromeブラウザの使用をお勧めします。", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "このアプリケーションを最適に使用するには、画面サイズを拡大してください。", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "次のトピックをアンロックするためのアクティビティ", "activitiesToUnlockTopicDesc": "次のコーストピックをアンロックするためのアクティビティの数を設定します", "@activitiesToUnlockTopicTitle": { @@ -12713,5 +11530,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "正しい語彙定義の練習", + "constructUseIncLMDesc": "誤った語彙定義の練習", + "constructUseCorLADesc": "正しい語彙音声の練習", + "constructUseIncLADesc": "誤った語彙音声の練習", + "constructUseBonus": "語彙練習中のボーナス", + "practiceVocab": "語彙を練習する", + "selectMeaning": "意味を選択する", + "selectAudio": "一致する音声を選択する", + "congratulations": "おめでとうございます!", + "anotherRound": "もう一回", + "noActivityRequest": "現在のアクティビティリクエストはありません。", + "quit": "終了", + "congratulationsYouveCompletedPractice": "おめでとうございます!練習セッションを完了しました。", + "mustHave10Words": "練習するには、少なくとも10語の語彙が必要です。友達やPangea Botに話しかけて、もっと発見してみてください!", + "botSettings": "ボット設定", + "activitySettingsOverrideWarning": "アクティビティプランによって決定された言語と言語レベル", + "voice": "声", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index 91bd64b51..9b6f413e3 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -1461,28 +1461,16 @@ "commandHint_logoutall": "გამოსვლა ყველა აქტიურ მოწყობილობიდან", "displayNavigationRail": "მოჩვენება ნავიგაციის რკალი მობილურზე", "customReaction": "მოწოდება პერსონალური რეაქცია", - "accountInformation": "ანგარიშის ინფორმაცია", - "addGroupDescription": "დაამატეთ ჩატის აღწერა", - "addNewFriend": "დაამატეთ ახალი მეგობარი", - "alreadyHaveAnAccount": "უკვე გაქვთ ანგარიში?", - "createNewGroup": "შექმენით ახალი ჩატი", - "editChatPermissions": "რეგულაციების რედაქტირება", "ignore": "ბლოკირება", "ignoredUsers": "ბლოკირებული მომხმარებლები", "writeAMessageLangCodes": "დაწერეთ {l1} ან {l2}...", "requests": "მოთხოვნები", - "allCorrect": "ასე ვიტყოდი! კარგია!", - "newWayAllGood": "ეს ასე არ ვიტყოდი, მაგრამ კარგია!", - "othersAreBetter": "ჰმ, შეიძლება უკეთესი გზა არსებობს ამის თქმისთვის.", "holdForInfo": "დააჭირეთ და შეინახეთ სიტყვების ინფორმაციისთვის.", "greenFeedback": "ეს არის ის, რასაც მე დავწერდი!", "yellowFeedback": "ჰმ, შეგიძლიათ სცადოთ და ნახოთ, მუშაობს თუ არა! ამ სიტყვისთვის, უბრალოდ დააჭირეთ ისევ.", "redFeedback": "მგონია, რომ ეს სწორია არა...", "itInstructionsTitle": "მიძლია დაგეხმაროთ თარგმნაში!", "itInstructionsBody": "თქვენ შეგიძლიათ დააჭიროთ და შეინახოთ არჩევანი სიტყვების ინფორმაციისთვის.", - "oneday": "გუშინ 24 საათში", - "oneweek": "გუშინ 7 დღეში", - "onemonth": "გუშინ ერთი თვე", "gaTooltip": "L2 გამოყენება გრამატიკის დახმარებით", "taTooltip": "L2 გამოყენება თარგმნის დახმარებით", "unTooltip": "სხვა", @@ -1492,58 +1480,27 @@ "interactiveTranslatorAllowed": "სტუდენტის არჩევანი", "interactiveTranslatorRequired": "მოსახერხია", "notYetSet": "ჯერ არ არის მითითებული", - "myLearning": "ჩემი ანალიტიკა", "waTooltip": "L2 გამოყენება დახმარების გარეშე", - "changeDateRange": "თარიღის დიაპაზონის შეცვლა", - "classDescription": "აღწერა", - "addStudents": "მომხმარებლების მოწვევა ბმულით ან კოდით", - "copyClassLink": "მოწვევის ბმულის კოპირება", - "copyClassCode": "მოწვევის კოდის კოპირება", - "inviteStudentByUserName": "მომხმარებლის სახელით მოწვევა", "languageSettings": "ენის პარამეტრები", "interactiveTranslator": "თარგმნის დახმარება", - "shareVideo": "ვიდეო გაზიარება", - "shareVideoDesc": "ჩართეთ ეს ფუნქცია, რათა სტუდენტებს შეეძლოთ ვიდეოების გაზიარება ჩატებში.", - "shareFiles": "ფაილების გაზიარება", - "selectLanguageLevel": "ენის დონეს არჩევა", "noIdenticalLanguages": "გთხოვთ, აირჩიოთ განსხვავებული საწყისი და სამიზნე ენები", - "iWantALanguagePartnerFrom": "მოდის:", - "worldWide": "მსოფლიოს მასშტაბით", - "noResults": "მონაცემები არ მოიძებნა! სცადეთ თქვენი ძიების გაფართოება.", "searchBy": "ძებნა ქვეყნით და ენებით", - "iWantAConversationPartner": "მინდა საუბრის პარტნიორი, რომელიც", - "iWantALanguagePartnerWhoSpeaks": "მეტყველებს:", - "iWantALanguagePartnerWhoIsLearning": "სწავლობს:", "joinWithClassCode": "შეერთება კურსში", - "joinWithClassCodeHint": "შეიყვანეთ მოწვევის კოდი", - "languageLevelPreA1": "სინამდვილე დამწყები (Pre A1)", - "languageLevelA1": "დამწყები (A1)", - "languageLevelA2": "საშუალო (A2)", - "languageLevelB1": "შუალედური (B1)", - "languageLevelB2": "ზედა შუალედური (B2)", - "languageLevelC1": "მაღალი დონის (C1)", - "languageLevelC2": "მასტერული (C2)", + "languageLevelPreA1": "ახალი დაბალი (წინა A1)", + "languageLevelA1": "ახალი შუა (A1)", + "languageLevelA2": "დაწყებითი მაღალი (A2)", + "languageLevelB1": "შუალედური საშუალო (B1)", + "languageLevelB2": "წინასწარი დაბალი (B2)", + "languageLevelC1": "წინასწარი საშუალო (C1)", + "languageLevelC2": "უმაღლესი (C2)", "changeTheNameOfTheClass": "შეცვალეთ კლასი", "changeTheNameOfTheChat": "შეცვალეთ ჩატის სახელი", - "askPangeaBot": "მოითხოვეთ Pangea Bot-გან კონტექსტუალური განმარტება.", "sorryNoResults": "უკაცრავად, მონაცემები არ მოიძებნა.", "ignoreInThisText": "გაამახვილეთ ყურადღება", - "helpMeTranslate": "დიახ!", - "needsItShortMessage": "გარე მიზნიდან", "needsItMessage": "გადაიწიე, ეს არაა {targetLanguage}! გჭირდება დახმარება თარგმნაში?", - "needsIgcMessage": "ამ შეტყობინებას აქვს გრამატიკული შეცდომა.", - "tokenTranslationTitle": "სიტყვა არის თქვენს საწყის ენაზე.", - "spanTranslationDesc": "იხილეთ შესაძლო თარგმანები ქვემოთ.", - "spanTranslationTitle": "ზოგიერთი სიტყვა არის თქვენს საწყის ენაზე.", - "l1SpanAndGrammarTitle": "გარე მიზნის ენაზე", - "l1SpanAndGrammarDesc": "ეს შეიძლება იყოს თქვენს საწყის ენაზე ან გრამატიკული შეცდომა.", - "otherTitle": "შენ გაქვს შეცდომა.", - "otherDesc": "იხილეთ შესაძლო კორექტირებები ქვემოთ.", "countryInformation": "ჩემი ქვეყანა", - "myLanguages": "ჩემი საწყისი და მიზნის ენები", "targetLanguage": "მიზნის ენა", "sourceLanguage": "საწყისი ენა", - "languagesISpeak": "ენები, რომლებიც ვსაუბრობ", "updateLanguage": "ჩემი ენები", "whatLanguageYouWantToLearn": "რომელი ენა გსურს ისწავლო?", "whatIsYourBaseLanguage": "რა არის შენი საწყისი ენა?", @@ -1558,13 +1515,8 @@ "errorDisableLanguageAssistanceUserDesc": "დააჭირეთ აქ, რათა განაახლოთ თარგმნის და გრამატიკის დახმარების პარამეტრები", "errorDisableITClassDesc": "თარგმნის დახმარება გამორთულია ამ კურსისთვის, სადაც ეს ჩატი მდებარეობს.", "errorDisableIGCClassDesc": "გრამატიკის დახმარება გამორთულია ამ კურსისთვის, სადაც ეს ჩატი მდებარეობს.", - "itIsDisabled": "ინტერაქტიული თარგმნა გამორთულია", - "igcIsDisabled": "ინტერაქტიული გრამატიკის შემოწმება გამორთულია", - "goToLearningSettings": "გადადი სწავლების პარამეტრებზე", "error405Title": "ენა არ არის მითითებული", "error405Desc": "გთხოვთ, დააყენოთ თქვენი ენები მთავარი მენიუდან > სწავლების პარამეტრებიდან.", - "loginOrSignup": "შესვლა ან რეგისტრაცია", - "iAgreeToThe": "მე ვეთანხმები", "termsAndConditions": "წესებს და პირობებს", "andCertifyIAmAtLeast13YearsOfAge": "და ვადასტურებ, რომ მე მინიმუმ 16 წლის ვარ.", "error502504Title": "ვაი, ბევრი სტუდენტი ონლაინშია!", @@ -1572,40 +1524,21 @@ "error404Title": "თარგმნის შეცდომა!", "error404Desc": "Pangea Bot-ი ვერ გარჩევს, როგორ უნდა თარგმნოს ეს...", "errorPleaseRefresh": "ჩვენ ამას ვისწრაფვით! გთხოვთ, განაახლოთ გვერდი და სცადოთ თავიდან.", - "toggleIT": "ინტერაქტიული თარგმანი", - "toggleIGC": "ინტერაქტიული გრამატიკის შემოწმება", - "toggleToolSettingsDescription": "აქ შეგიძლიათ შეცვალოთ თქვენი ინდივიდუალური ენის ხელსაწყოების პარამეტრები.", "connectedToStaging": "დაკავშირებულია სტეიჯთან", "learningSettings": "სწავლების პარამეტრები", - "sendVoiceNotes": "გაგზავნეთ ხმის შეტყობინებები", - "sendVoiceNotesDesc": "ჩართეთ ეს ფუნქცია, რათა სტუდენტებს შეეძლოთ ხმის შეტყობინებების გაგზავნა ჩატში.", - "chatTopic": "ჩატის თემა", - "chatTopicDesc": "სეტეთ ჩატის თემა", - "inviteStudentByUserNameDesc": "თუ თქვენი სტუდენტი უკვე აქვს ანგარიში, შეგიძლიათ მოძებნოთ იგი.", "participants": "მონაწილეები", - "almostPerfect": "ეს სწორია! აი, რა ვიტყოდი მე.", - "prettyGood": "ძალიან კარგი! აი, რა ვიტყოდი მე.", - "letMeThink": "ჰმ, დავინახოთ, როგორ გამოგივიდა!", "clickMessageTitle": "გჭირდებათ დახმარება?", "clickMessageBody": "დააჭირეთ შეტყობინებას, რათა მიიღოთ ენის ხელსაწყოები, როგორიცაა თარგმანი, დაკვრა და სხვა!", - "understandingMessagesTitle": "განმარტებები და თარგმანები!", - "understandingMessagesBody": "დააჭირეთ ხაზგასმულ სიტყვებს განმარტებისთვის. თარგმნა შეტყობინების ვარიანტებით (ზედა მარჯვენა).", "allDone": "ყველაფერი დასრულებულია!", "vocab": "სიტყვის მარაგი", "low": "ჩვენ გვაქვს მტკიცებულება, რომ მომხმარებელი არ ესმის ამ სიტყვებს.", "medium": "ამ სიტყვებს იყენებენ. უცნობია, სრულად არის თუ არა ეს სიტყვები გამგები.", "high": "ჩვენ გვაქვს მტკიცებულება, რომ მომხმარებელი ესმის ამ სიტყვებს.", - "unknownProficiency": "ამ სიტყვებს პანგეა ჩატში არ იყენებენ.", - "changeView": "ნახვების შეცვლა.", - "clearAll": "წაშალოთ ყველა სიტყვა?", - "generateVocabulary": "შექმენით სიტყვების მარაგი სათაურიდან და აღწერილობიდან", - "generatePrompts": "შექმენით წახალისებები", "subscribe": "გამოწერა", "getAccess": "გამოწერით ახლა!", "subscriptionDesc": "შეტყობინებები უფასოა! გამოიწერეთ ინტერაქტიული თარგმნის, გრამატიკის შემოწმებისა და სწავლების ანალიტიკის გასახსნელად.", "subscriptionManagement": "გამოწერის მართვა", "currentSubscription": "მიმდინარე გამოწერა", - "changeSubscription": "შეცვალეთ თქვენი გამოწერა", "cancelSubscription": "გაუქმეთ თქვენი გამოწერა", "selectYourPlan": "აირჩიეთ თქვენი გეგმა", "subsciptionPlatformTooltip": "გთხოვთ, შესულიყავით თქვენს ორიგინალურ მოწყობილობაზე თქვენი გამოწერის მართვისთვის", @@ -1614,9 +1547,6 @@ "paymentHistory": "გადახდის ისტორია", "emptyChatDownloadWarning": "ცარიელი ჩატის ჩამოტვირთვა შეუძლებელია", "update": "განახლება", - "updateDesc": "ახლა შეგიძლიათ განაახლოთ ეს აპლიკაცია {localVersion}-დან {storeVersion}-მდე", - "maybeLater": "შესაძლოა მოგვიანებით", - "mainMenu": "მთავარი მენიუ", "toggleImmersionMode": "ჩაშვების რეჟიმი", "toggleImmersionModeDesc": "როდესაც ჩართულია, ყველა შეტყობინება გამოჩნდება თქვენს სამიზნე ენაზე. ეს პარამეტრი განსაკუთრებით სასარგებლოა ენის გაცვლის დროს.", "itToggleDescription": "ეს ენის სწავლების ინსტრუმენტი იპოვის სიტყვებს თქვენს საწყის ენაზე და დაეხმარება მათ თარგმნაში თქვენს სამიზნე ენაზე. იშვიათად, AI შეიძლება დაუშვას თარგმნის შეცდომები.", @@ -1631,212 +1561,13 @@ "definitionsToolDescription": "როდესაც ჩართულია, ლურჯი ხაზით აღნიშნული სიტყვები შეიძლება დაწკაპუნებით იხილოთ განმარტებისთვის. დაწკაპუნეთ შეტყობინებებზე განმარტებების მისაღებად.", "translationsToolDescrption": "როდესაც ჩართულია, დააჭირეთ შეტყობინებას და თარგმნის ხატულას, რათა იხილოთ შეტყობინება თქვენს ძირითად ენაზე.", "welcomeBack": "კეთილი იყოს თქვენი დაბრუნება! თუ თქვენ მონაწილეობდით 2023-2024 წლის პილოტში, გთხოვთ დაგვიკავშირდეთ თქვენი სპეციალური პილოტის გამოწერისთვის. თუ თქვენ მასწავლებელი ხართ და გაქვთ (ან თქვენი დაწესებულება აქვს) ლიცენზიები თქვენი კლასი, გთხოვთ დაგვიკავშირდეთ თქვენი მასწავლებლის გამოწერისთვის.", - "kickAllStudents": "ყველა სტუდენტის გამოთიშვა", - "kickAllStudentsConfirmation": "დარწმუნებული ხართ, რომ გსურთ ყველა სტუდენტის გამოთიშვა?", - "inviteAllStudents": "ყველა სტუდენტის მოწვევა", - "inviteAllStudentsConfirmation": "დარწმუნებული ხართ, რომ გსურთ ყველა სტუდენტის მოწვევა?", - "inviteUsersFromPangea": "ადმინების დამატება", - "redeemPromoCode": "პრომო კოდის გადახდა", - "enterPromoCode": "შეიყვანეთ პრომო კოდი", "downloadTxtFile": "ტექსტის ფაილის ჩამოტვირთვა", "downloadCSVFile": "CSV ფაილის ჩამოტვირთვა", "promotionalSubscriptionDesc": "ამჟამად გაქვთ სიცოცხლის ხანგრძლივობის პრომო გამოწერა. დახმარებისთვის დაუკავშირდით support@pangea.chat-ს, თქვენი გამოწერის შეცვლის მიზნით.", "originalSubscriptionPlatform": "გამოწერა შეძენილი {purchasePlatform}-დან", "oneWeekTrial": "ერთი კვირის საცდელი პერიოდი", "downloadXLSXFile": "Excel ფაილის ჩამოტვირთვა", - "abDisplayName": "აფხაზური", - "aaDisplayName": "აფარისი", - "afDisplayName": "აფრიკანერი", - "akDisplayName": "აკანი", - "sqDisplayName": "ალბანური", - "amDisplayName": "ამჰარიული", - "arDisplayName": "არაბული", - "anDisplayName": "არაგონული", - "hyDisplayName": "სომხური", - "asDisplayName": "ასამური", - "avDisplayName": "ავარიული", - "aeDisplayName": "ავესტური", - "ayDisplayName": "აიმარა", - "azDisplayName": "აზერბაიჯანული", - "bmDisplayName": "ბამბარიული", - "baDisplayName": "ბაშკირული", - "euDisplayName": "ბასკური", - "beDisplayName": "ბელარუსული", - "bnDisplayName": "ბენგალური", - "bhDisplayName": "ბიჰარული", - "biDisplayName": "ბისლამა", - "bsDisplayName": "ბოსნური", - "brDisplayName": "ბრეტონული", - "bgDisplayName": "ბულგარული", - "myDisplayName": "ბირმული", - "caDisplayName": "კატალონური, ვალენსიური", - "chDisplayName": "ჩამორო", - "ceDisplayName": "ჩეჩნური", - "nyDisplayName": "ჩიჩევა, ჩეუა, ნიანჯა", - "zhDisplayName": "ჩინური", - "cvDisplayName": "ჩუვაშური", - "kwDisplayName": "კორნიშური", - "coDisplayName": "კორსიკური", - "crDisplayName": "კრიუ", - "hrDisplayName": "ხორვატული", - "csDisplayName": "ჩეხური", - "daDisplayName": "დანიელი", - "dvDisplayName": "დივეჰი; დივეჰი; მალდივული;", - "nlDisplayName": "ჰოლანდიური", - "enDisplayName": "ინგლისური", - "eoDisplayName": "ესპერანტო", - "etDisplayName": "ესტონური", - "eeDisplayName": "ეუგვე", - "foDisplayName": "ფაროსული", - "fjDisplayName": "ფიჯი", - "fiDisplayName": "ფინური", - "frDisplayName": "ფრანგული", - "ffDisplayName": "ფულა; ფულაჰ; პულარი; პულარ", - "glDisplayName": "გალიციური", - "kaDisplayName": "ქართული", - "deDisplayName": "გერმანული", - "elDisplayName": "ახალი ბერძნული", - "gnDisplayName": "გუარანი", - "guDisplayName": "გუჯარათი", - "htDisplayName": "ჰაიტიანი, ჰაიტიური კრეოლური", - "haDisplayName": "ჰაუსა", - "heDisplayName": "ებრაული (ახალი)", - "hzDisplayName": "ჰერერო", - "hiDisplayName": "ჰინდი", - "hoDisplayName": "ჰირი მოტუ", - "huDisplayName": "უნგრული", - "iaDisplayName": "ინტერლინგუა", - "idDisplayName": "ინდონეზიური", - "ieDisplayName": "ინტერლინგუი", - "gaDisplayName": "ირლანდიური", - "igDisplayName": "იგბო", - "ikDisplayName": "ინუპიაკი", - "ioDisplayName": "იდო", - "isDisplayName": "ისლანდიური", - "itDisplayName": "იტალიური", - "iuDisplayName": "ინუკტიტუტი", - "jaDisplayName": "იაპონური", - "jvDisplayName": "ჯავანური", - "klDisplayName": "კალალიწუტ, გრინლანდიური", - "knDisplayName": "კანადა", - "krDisplayName": "კანური", - "ksDisplayName": "კაშმირული", - "kkDisplayName": "ყაზახური", - "kmDisplayName": "ხმერული", - "kiDisplayName": "კიკიუუი, გიკიუუი", - "rwDisplayName": "კინიანვანდა", - "kyDisplayName": "ყირგიზული, ყირგიზული", - "kvDisplayName": "კომი", - "kgDisplayName": "კონგო", - "koDisplayName": "კორეული", - "kuDisplayName": "კურკული", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "ლათინური", - "lbDisplayName": "ლუქსემბურგული, ლეტცებურგული", - "lgDisplayName": "ლუგანდა", - "liDisplayName": "ლიმბურგული, Limburgan, Limburger", - "lnDisplayName": "ლინგალა", - "loDisplayName": "ლაოსური", - "ltDisplayName": "ლიტვური", - "luDisplayName": "ლუბა-კანგატა", - "lvDisplayName": "ლატვური", - "gvDisplayName": "მანქსური", - "mkDisplayName": "მაკედონური", - "mgDisplayName": "მალაგასული", - "msDisplayName": "მალაიური", - "mlDisplayName": "მალაიალამური", - "mtDisplayName": "მალტური", - "miDisplayName": "მაორი", - "mrDisplayName": "მარათჰი (მარათჰი)", - "mhDisplayName": "მარშალური", - "mnDisplayName": "მონღოლური", - "naDisplayName": "ნაურუ", - "nvDisplayName": "ნავაჰო, ნავაჰო", - "nbDisplayName": "ნორვეგიული ბოკმალე", - "ndDisplayName": "ჩრდილოეთ ნდებელე", - "neDisplayName": "ნეპალური", - "ngDisplayName": "ნდონგა", - "nnDisplayName": "ნორვეგიული ნიუნორსკი", - "noDisplayName": "ნორვეგიული", - "iiDisplayName": "ნუსოუ", - "nrDisplayName": "სამხრეთ ნდებელე", - "ocDisplayName": "ოკსიტანული", - "ojDisplayName": "ოჟიბვე, ოჯიბვა", - "cuDisplayName": "ძველი ეკლესიის სლავური, ეკლესიის სლავური, ძველი ბულგარული, ძველი სლავური", - "omDisplayName": "ორომო", - "orDisplayName": "ორია", - "osDisplayName": "ოსეტური, ოსეტური", - "paDisplayName": "პანჯაბი, პანჯაბური", - "piDisplayName": "პალი", - "faDisplayName": "პერსიული", - "plDisplayName": "პოლონური", - "psDisplayName": "პაშტო, პუშტო", - "ptDisplayName": "პორტუგალიური", - "quDisplayName": "კეჩუა", - "rmDisplayName": "რომანშული", - "rnDisplayName": "კირუნდული", - "roDisplayName": "რუმინული, მოლდავური, მოლდოვური", - "ruDisplayName": "რუსული", - "saDisplayName": "სანსკრიტი (სანსკრტა)", - "scDisplayName": "სარდინიული", - "sdDisplayName": "სინდი", - "seDisplayName": "ჩრდილოეთ სამიური", - "smDisplayName": "სამოანური", - "sgDisplayName": "სანგო", - "srDisplayName": "სერბული", - "gdDisplayName": "შოტლანდიური გალური, გალური", - "snDisplayName": "შონა", - "siDisplayName": "სინჰალური, სინჰალეზი", - "skDisplayName": "სლოვაკური", - "slDisplayName": "სლოვენური", - "soDisplayName": "სომალური", - "stDisplayName": "სამხრეთ სოთო", - "esDisplayName": "ესპანური", - "suDisplayName": "სუნდანური", - "swDisplayName": "სვაჰილი", - "ssDisplayName": "სვატი", - "svDisplayName": "შვედური", - "taDisplayName": "ტამილური", - "teDisplayName": "ტელუგუ", - "tgDisplayName": "ტაჯიკური", - "thDisplayName": "თაილანდური", - "tiDisplayName": "ტიგრინია", - "boDisplayName": "ტიბეტური სტანდარტი, ტიბეტური, ცენტრალური", - "tkDisplayName": "თურქმენი", - "tlDisplayName": "ტაგალოგი", - "tnDisplayName": "ცვანა", - "toDisplayName": "ტონგა (ტონგას კუნძულები)", - "trDisplayName": "თურქული", - "tsDisplayName": "ცონგა", - "ttDisplayName": "ტატარი", - "twDisplayName": "ტვიტერი", - "tyDisplayName": "ტაიტური", - "ugDisplayName": "უიღური, უღური", - "ukDisplayName": "უკრაინული", - "urDisplayName": "ურუდული", - "uzDisplayName": "უზბეკური", - "veDisplayName": "ვენდა", - "viDisplayName": "ვიეტნამური", - "voDisplayName": "ვლაპულუკი", - "waDisplayName": "ვალონი", - "cyDisplayName": "ვილური", - "woDisplayName": "ვლოფი", - "fyDisplayName": "დასავლეთ ფризიული", - "xhDisplayName": "ხოსა", - "yiDisplayName": "იდიში", - "yoDisplayName": "იორუბა", - "zaDisplayName": "ჟუანგი, ჩუანგი", "unkDisplayName": "უცნობი", - "zuDisplayName": "ზულუ", - "hawDisplayName": "ჰავაიური", - "hmnDisplayName": "მონღოლური", - "multiDisplayName": "მრავალმხრივი", - "cebDisplayName": "სებუანო", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "ებრაული", - "jwDisplayName": "ჯავანური", - "moDisplayName": "მოლდავური", - "shDisplayName": "სერბო-ხორვატული", "wwCountryDisplayName": "მსოფლიოს მასშტაბით", "afCountryDisplayName": "აფგანისტანი", "axCountryDisplayName": "ალანდის კუნძულები", @@ -2084,41 +1815,25 @@ "yeCountryDisplayName": "იემენი", "zmCountryDisplayName": "ზამბია", "zwCountryDisplayName": "ზიმბაბვე", - "pay": "გადახდა", - "allPrivateChats": "მხოლოდ პირადი ჩეთები", - "unknownPrivateChat": "უცნობი პირადი ჩათი", + "pay": "Checkout", "invitedToSpace": "{user} გეპატიჟება გაერთო კურსში: {space}! გსურთ მიიღოთ?", - "declinedInvitation": "პირობა უარყო", - "acceptedInvitation": "დადასტურებული მოწვევა", "youreInvited": "📩 თქვენ მოწვევა გაქვთ!", "invitedToChat": "{user} გიწვევთ ჩატში: {name}! გსურთ მიიღოთ?", "monthlySubscription": "თვიური", "yearlySubscription": "წელიწადიური", "defaultSubscription": "Pangea Chat გამოწერა", "freeTrial": "უფასო საცდელი პერიოდი", - "grammarAnalytics": "გრამატიკის ანალიტიკა", "total": "სულ: ", "noDataFound": "მონაცემები არ მოიძებნა", - "promoSubscriptionExpirationDesc": "თქვენი მიმდინარე გამოწერა არის პრომო და ამოიწურება {expiration}-ზე. დახმარებისთვის დაუკავშირდით support@pangea.chat-ს.", - "emptyChatNameWarning": "გთხოვთ, შეიყვანეთ სახელწოდება ამ ჩატისთვის", "blurMeansTranslateTitle": "რატომ არის შეტყობინება დაბლერილი?", "blurMeansTranslateBody": "როდესაც იმერსიული რეჟიმი ჩართულია, თქვენს ძირითად ენაზე გაგზავნილი შეტყობინებები დაბლერილი იქნება, ხოლო Pangea Bot-ი თარგმნის მათ თქვენს სამიზნე ენაზე. იმერსიული რეჟიმი შეიძლება ჩართოთ და გამორთოთ ინდივიდუალურ და კურსის პარამეტრებში.", - "someErrorTitle": "ჰმ, რაღაც არ არის სწორად", - "someErrorBody": "ეს შეიძლება იყოს შეცდომა ან რამე თქვენს ძირითად ენაზე.", "bestCorrectionFeedback": "ეს სწორია!", "distractorFeedback": "ეს არ არის ზუსტად სწორი.", "bestAnswerFeedback": "ეს სწორია!", "definitionDefaultPrompt": "რა ნიშნავს ეს სიტყვა?", "practiceDefaultPrompt": "რა არის საუკეთესო პასუხი?", "correctionDefaultPrompt": "რა არის საუკეთესო ჩანაცვლება?", - "itStartDefaultPrompt": "გსურთ დახმარება თარგმნაში?", - "lockedChatWarning": "🔒 ეს ჩატი დაილუქა", - "lockChat": "დაილუქე ჩატი", - "suggestToChat": "შეთავაზე ეს ჩატი", - "suggestToChatDesc": "შეეთავაზებული ჩატები გამოჩნდება ჩატის სიებში", "acceptSelection": "დადასტურება შეცდომის", - "acceptSelectionAnyway": "მიუხედავად ამისა, გამოიყენე ეს", - "makingActivity": "მოქმედების შექმნა", "why": "რატომ?", "definition": "განმარტება", "exampleSentence": "მაგალითი წინადადება", @@ -2126,128 +1841,55 @@ "reportMessageTitle": "{reportingUserId} შეტყობინება გაასაჯაროვა {reportedUserId}-ისგან ჩატში {roomName}", "reportMessageBody": "შეტყობინება: {reportedMessage}\nმიზეზი: {reason}", "noTeachersFound": "მასწავლებელი ვერ მოიძებნა შეტყობინებისთვის", - "viewArchive": "ნახე არქივი", "trialExpiration": "თქვენს უფასო ცდას ვადა ამოიწურება {expiration}", "freeTrialDesc": "ახალი მომხმარებლები იღებენ ერთკვირიან უფასო ცდას Pangea Chat-ის", "activateTrial": "უფასო 7-დღიანი საცდელი პერიოდი", "successfullySubscribed": "თქვენ წარმატებით გამოწერეთ!", "clickToManageSubscription": "დააჭირეთ აქ, რათა მართოთ თქვენი გამოწერა.", - "errorGettingAudio": "შეცდომა აუდიოს მიღებაში. გთხოვთ განაახლოთ გვერდი და სცადოთ თავიდან.", "signUp": "რეგისტრაცია", "pleaseChooseAtLeastChars": "გთხოვთ, აირჩიოთ სულ მცირე {min} სიმბოლო.", "noEmailWarning": "გთხოვთ, შეიყვანოთ ვალიდური ელფოსტის მისამართი. წინააღმდეგ შემთხვევაში, ვერ შეძლებთ პაროლის აღდგენას. თუ არ გსურთ, დააჭირეთ ისევ ღილაკს გაგრძელებისთვის.", "pleaseEnterValidEmail": "გთხოვთ, შეიყვანოთ ვალიდური ელფოსტის მისამართი.", "pleaseChooseAUsername": "გთხოვთ, აირჩიოთ მომხმარებლის სახელი", - "chooseAUsername": "აირჩიეთ მომხმარებლის სახელი", "define": "განმარტება", "listen": "მოსმენა", - "addConversationBot": "ჩართეთ საუბრის ბოტი", - "addConversationBotDesc": "დაამატეთ ბოტი ამ ჩათში", - "convoBotSettingsDescription": "რედაქტირება საუბრის თემასა და სირთულეზე", - "enterAConversationTopic": "შეიყვანეთ საუბრის თემა", - "conversationTopic": "საუბრის თემა", - "enableModeration": "ჩართეთ მოდერაცია", - "enableModerationDesc": "ჩართეთ ავტომატური მოდერაცია, რათა გადახედოთ შეტყობინებებს წინასწარ", - "conversationLanguageLevel": "რა არის ამ საუბრის ენის დონე?", - "showDefinition": "აჩვენე განმარტება", - "subscriptionPopupTitle": "ეს წინადადება შეიძლება შეიცავდეს გრამატიკის შეცდომას...", - "subscriptionPopupDesc": "გამოწერით დღესვე, რათა გააქტიუროთ თარგმნა და გრამატიკის კორექტირება!", - "seeOptions": "იხილეთ პარამეტრები", - "continuedWithoutSubscription": "გაგრძელება აბონენტობის გარეშე", "trialPeriodExpired": "საბრძოლო პერიოდი ამოიწურა", - "selectToDefine": "დააჭირეთ ნებისმიერ სიტყვას მისი განმარტებისთვის!", "translations": "თარგმნები", "messageAudio": "შეტყობინების აუდიო", "definitions": "განმარტებები", "subscribedToUnlockTools": "გამოწერით გააქტიურეთ ინტერკტივული თარგმნა და გრამატიკის შემოწმება, აუდიო დაკვრა, პერსონალიზებული პრაქტიკული აქტივობები და სწავლების ანალიტიკა!", "translationTooltip": "თარგმნა", - "audioTooltip": "აუდიო დაკვრა", "speechToTextTooltip": "ტრანსკრიპტი", - "certifyAge": "ვადასტურებ, რომ მე ვარ {age} წლის ზევით", "kickBotWarning": "პანგეა ბოტის გამოთიშვა ამ საუბრის ბოტს ამოიღებს ამ ჩატიდან.", - "joinToView": "შეერთდით ამ ოთახში დეტალების სანახავად", "refresh": "განახლება", - "autoPlayTitle": "ავტომატური დაკვრა შეტყობინებების", - "autoPlayDesc": "როდესაც ჩართულია, ტექსტიდან-ხმაზე აუდიო ავტომატურად დაკვრის ფუნქცია მუშაობს, როდესაც აირჩევა.", "messageAnalytics": "შეტყობინებების ანალიტიკა", "words": "სიტყვები", "score": "შეფასება", "accuracy": "სწორობა", "points": "ქულები", "noPaymentInfo": "გადახდის ინფორმაცია საჭირო არაა!", - "conversationBotModeSelectDescription": "ჩეთის აქტივობა", - "conversationBotModeSelectOption_discussion": "დისკუსია", - "conversationBotModeSelectOption_custom": "მოწოდება", - "conversationBotModeSelectOption_conversation": "საუბარი", - "conversationBotModeSelectOption_textAdventure": "ტექსტური თავგადასავალი", - "conversationBotModeSelectOption_storyGame": "სიუჟეტის თამაში", - "conversationBotDiscussionZone_title": "დისკუსიის პარამეტრები", - "conversationBotDiscussionZone_discussionTopicLabel": "დისკუსიის თემა", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "საზოგადოების თემა", - "conversationBotDiscussionZone_discussionKeywordsLabel": "დისკუსიის საკვანძო სიტყვები", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "საკვანძო სიტყვების მითითება", - "conversationBotDiscussionZone_discussionKeywordsHintText": "საკვანძო სიტყვების სია, რომელიც განაპირობებს განხილვას", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "გაგზავნეთ განხილვის წახალისება განრიგით", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "საათები განხილვის წახალისებებს შორის", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "პასუხი რეაქციაზე ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "რეაქცია განხილვის დაწყებისთვის", - "conversationBotCustomZone_title": "საბაჟო პარამეტრები", - "conversationBotCustomZone_customSystemPromptLabel": "სისტემის შეტყობინება", - "conversationBotCustomZone_customSystemPromptPlaceholder": "სისტემის შეტყობინების დაყენება", - "conversationBotCustomZone_customSystemPromptEmptyError": "სისტემის შეტყობინება აკლია", - "botConfig": "ბოტისა და აქტივობის პარამეტრები", - "botConfigNoPermissionTitle": "უფლება აკლია", - "botConfigNoPermissionMessage": "დაკავშირდით ოთახის ადმინისტრატორს ბოტის კონფიგურაციის შეცვლისთვის", - "addConversationBotDialogTitleInvite": "დაადასტურეთ საუბრის ბოტის მიწვევა", - "addConversationBotButtonInvite": "მიწვევა", - "addConversationBotDialogInviteConfirmation": "მიწვევა", - "addConversationBotButtonTitleRemove": "დაადასტურეთ საუბრის ბოტის წაშლა", - "addConversationBotButtonRemove": "წაშლა", - "addConversationBotDialogRemoveConfirmation": "წაშლა", - "conversationBotConfigConfirmChange": "დადასტურება", - "conversationBotStatus": "ბოტის მიწვევა", - "conversationBotTextAdventureZone_title": "ტექსტური თავგადასავალი", - "conversationBotTextAdventureZone_instructionLabel": "თამაშის მმართველის ინსტრუქციები", - "conversationBotTextAdventureZone_instructionPlaceholder": "თამაშის მმართველის ინსტრუქციების დაყენება", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "გაკვეთილის მფლობელის მითითებები აკლია", - "studentAnalyticsNotAvailable": "სტუდენტის მონაცემები ამჟამად ხელმისაწვდომი არ არის", - "roomDataMissing": "ზოგიერთი მონაცემი შეიძლება აკლია ოთახებიდან, სადაც თქვენ წევრი არ ხართ.", "updatePhoneOS": "შესაძლოა დაგჭირდეთ თქვენი მოწყობილობის ოპერაციული სისტემის განახლება.", "wordsPerMinute": "სიტყვები წუთში", "autoIGCToolName": "ავტომატურად ჩართეთ პანგეა წერის დახმარება", "autoIGCToolDescription": "ავტომატურად ჩართეთ პანგეა ჩატის გრამატიკა და თარგმნის დახმარება ჩემი შეტყობინების გაგზავნამდე.", - "runGrammarCorrection": "შეტყობინების შემოწმება", - "grammarCorrectionFailed": "გადაჭრილი საკითხები", - "grammarCorrectionComplete": "კარგია!", "tooltipInstructionsTitle": "არ იცით რა აკეთებს ეს?", "tooltipInstructionsMobileBody": "დაჭერით და შეინახეთ ინსტრუმენტების სანახავად.", "tooltipInstructionsBrowserBody": "მოძრაობით მერყეობთ ნივთებზე ინსტრუმენტების სანახავად.", "chatCapacity": "ჩატის შესაძლებლობა", "roomFull": "ეს ოთახი უკვე სავსეა.", - "topicNotSet": "თემა არ არის მითითებული.", - "chatCapacityNotSet": "ამ ჩატს არ აქვს შესაძლებლობის შეზღუდვა.", "chatCapacityHasBeenChanged": "ჩატის შესაძლებლობა შეიცვალა", "chatCapacitySetTooLow": "ჩატის შესაძლებლობა უნდა იყოს მინიმუმ {count}.", "chatCapacityExplanation": "ჩატის შესაძლებლობა განსაზღვრავს წევრთა რაოდენობას, რომელიც შეიძლება იყოს ჩატში.", - "chatExceedsCapacity": "ეს ჩატი აჭარბებს თავის შესაძლებლობას.", "tooManyRequest": "ძალიან ბევრი მოთხოვნა, გთხოვთ სცადოთ მოგვიანებით.", "enterNumber": "გთხოვთ შეიყვანოთ მთელი რიცხვი.", "buildTranslation": "შექმენით თქვენი თარგმანი ზემოთ მოცემული არჩევანებიდან", - "nonexistentSelection": "არჩევანი აღარ არსებობს.", - "changeAnalyticsLanguage": "შეცვალეთ ანალიტიკის ენა", "practice": "ვარჯიში", "noLanguagesSet": "ენა არ არის მითითებული", - "noActivitiesFound": "ამაზე ახლა საკმარისია! დაბრუნდით მოგვიანებით მეტი ინფორმაციისთვის.", - "hintTitle": "რჩევა:", "speechToTextBody": "ხმოვანი შეტყობინებებისთვის შეგიძლიათ იხილოთ ტრანსკრიპტი და ასევე Sprecher-ის სიტყვების წუთში ქულა.", "versionNotFound": "ვერსია ვერ მოიძებნა", "fetchingVersion": "ვერსიის მიღება...", "versionFetchError": "შეცდომა ვერსიის მიღებისას", "versionText": "ვერსია: {version}+{buildNumber}", - "languageButtonLabel": "ენა: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "ავტომატური თარგმნის ჩართვა", - "interactiveTranslatorAutoPlayDesc": "შესრულებს ინტერაქტიულ თარგმანს გარეშე კითხვების.", - "changeAnalyticsView": "შეცვალეთ ანალიტიკის ხედი", "l1TranslationBody": "თქვენი ძირითადი ენის შეტყობინებები არ იქნება თარგმნილი.", "deleteSubscriptionWarningTitle": "თქვენ გაქვთ აქტიური გამოწერა", "deleteSubscriptionWarningBody": "თქვენის ანგარიშის წაშლა ავტომატურად არ გააუქმებს თქვენს გამოწერას.", @@ -2255,9 +1897,7 @@ "error520Title": "გთხოვთ, სცადეთ თავიდან.", "error520Desc": "უკაცრავად, ვერ გავიგეთ თქვენი შეტყობინება...", "wordsUsed": "გამოყენებული სიტყვები", - "errorTypes": "შეცდომის ტიპები", "level": "საფეხური", - "canceledSend": "გაუქმებული გაგზავნა", "morphsUsed": "გამოყენებული მორფები", "translationChoicesBody": "დააჭირეთ და დაჭერით ვარიანტზე რჩევისთვის.", "grammar": "სიტყვისმეტყველება", @@ -2267,7 +1907,6 @@ "reportContentIssueTitle": "შეტყობინების პრობლმის შეტანა", "feedback": "სურვილისამებრ გამოხმაურება", "reportContentIssueDescription": "აჰო! AI შეუძლია პერსონალიზებული სწავლების გამოცდილების შექმნა, მაგრამ... ასევე ჰალუცინაციას ახდენს. გთხოვთ, მიაწოდოთ ნებისმიერი გამოხმაურება, და ჩვენ ისევ ვეცდებით.", - "changeContent": "აჰო! AI შეუძლია პერსონალიზებული სწავლების გამოცდილების შექმნა, მაგრამ... ასევე ჰალუცინაციას ახდენს. რა უნდა იყოს?", "clickTheWordAgainToDeselect": "დააჭირეთ შერჩეულ სიტყვას, რათა გააუქმოთ არჩევანი.", "l2SupportNa": "არ არის ხელმისაწვდომი", "l2SupportAlpha": "ალფა", @@ -2501,7 +2140,6 @@ "grammarCopySPC": "სპეციფიკაცია", "grammarCopyPARTTYPE": "პარტიტიული ტიპი", "grammarCopyINTREL": "შეკითხვითი-შესახებ", - "grammarCopyNUMFORMpsor": "მქონის ნომერი", "grammarCopyUNKNOWN": "უცნობი", "grammarCopyNUMBERPSOR": "მქონის ნომერი", "grammarCopyPOSS": "მქონე", @@ -2547,28 +2185,14 @@ "grammarCopyVOICEdir": "მხოლოდ პირდაპირი", "grammarCopyVOICEinv": "გადატრიალებული", "grammarCopyVOICErcp": "ურთიერთსხვა", - "enterPrompt": "გთხოვთ, შეიყვანეთ სისტემის წახალისება", - "selectBotLanguage": "აირჩიეთ ბოტის ენა", - "chooseVoice": "აირჩიეთ ხმა", - "enterLanguageLevel": "გთხოვთ, შეიყვანოთ ენის დონე", - "enterDiscussionTopic": "გთხოვთ, შეიყვანოთ განხილვის თემა", - "selectBotChatMode": "აირჩიეთ ჩატის რეჟიმი", - "messageNotInTargetLang": "შეტყობინება არ არის მიზნობრივ ენაზე", "other": "სხვა", "levelShort": "LVL {level}", - "botModeValidation": "გთხოვთ, აირჩიოთ ჩატის რეჟიმი", "clickBestOption": "აირჩიეთ საუკეთესო ვარიანტები თქვენი შეტყობინების თარგმნისთვის!", "completeActivitiesToUnlock": "დასრულეთ მინიმუმ ერთი აქტივობა თარგმანის გასახსნელად!", - "botSettingsSubtitle": "პატივი მიეცით ბოტს ჩატის აქტივობის მოდერაციისთვის", - "invitePeople": "პატივი მიეცით მომხმარებლებს", "noCapacityLimit": "შესაძლებლობის შეზღუდვა არ არის", "downloadGroupText": "გთხოვთ, ჩამოტვირთოთ ჯგუფის ტექსტი", "notificationsOn": "შეტყობინებები ჩართულია", "notificationsOff": "შეტყობინებები გამორთულია", - "chatCanBeFoundViaSearch": "ჩატი შეიძლება იპოვოთ ძიებით", - "requireCodeToJoin": "კოდი სჭირდება შესვლისთვის", - "canFindInSearch": "შეგიძლიათ იპოვოთ ძიებით", - "addChatToSpace": "ჩატი დაამატეთ სივრცეში", "createChatAndInviteUsers": "შექმენით ჩატი და მიიწვიეთ მომხმარებლები", "updatedNewSpaceDescription": "კურსები გეხმარებათ თქვენი ჩატების კონსოლიდაციაში და პირადი ან საჯარო საზოგადოებების შექმნაში.", "joinWithCode": "შეერთდით კოდის საშუალებით", @@ -2604,39 +2228,19 @@ "constructUseCollected": "შეაგროვა ჩატში", "constructUseNanDesc": "არასამართლებელი", "xpIntoLevel": "{currentXP} / {maxXP} გამოცდილება", - "signInWithUsername": "შესვლა მომხმარებლის სახელით და პაროლით", - "registrationEmailMessage": "გთხოვთ დაადასტუროთ თქვენი ელფოსტა ლინკის საშუალებით, რომელიც იქ გაგზავნეს. ზოგიერთ შემთხვევაში, ელფოსტა შეიძლება მიაღწიოს 5 წუთში. გთხოვთ, შეამოწმოთ სპამ ფოლდერი.", "enableTTSToolName": "ჩართულია ტექსტიდან ხმას გამოთქმა", "enableTTSToolDescription": "დაშვება აპლიკაციას შექმნას ტექსტიდან ხმას გამოთქმის გამოსავალი თქვენი სამიზნე ენის ნაწილებისთვის.", - "couldNotFindTTS": "ჩვენ ვერ აღმოვაჩინეთ ტექსტიდან ხმას გამოთქმის მექანიზმი თქვენი მიმდინარე სამიზნე ენისთვის.", - "ttsInstructionsHyperlink": "დააჭერთ აქ, რათა იხილოთ ინსტრუქციები ახალი ხმოვანი სერვისის ჩამოტვირთვის შესახებ თქვენს მოწყობილობაზე.", - "createAnAccount": "ანგარიშის შექმნა", - "signIn": "შესვლა", - "signUpWithEmail": "რეგისტრაცია ელფოსტით", - "signUpWithGoogle": "რეგისტრაცია Google-ით", - "signUpWithApple": "რეგისტრაცია Apple-ით", "yourUsername": "თქვენი მომხმარებლის სახელი", "yourEmail": "თქვენი ელფოსტა", - "pleaseEnterAnEmail": "გთხოვთ, შეიყვანოთ ელფოსტის მისამართი", - "signInWithGoogle": "შესვლა Google-ით", - "signInWithApple": "შესვლა Apple-ით", - "chooseYourAvatar": "აირჩიეთ თქვენი ავატარი", "iWantToLearn": "მინდა ვისწავლო", - "letsStart": "დავიწყოთ", - "pleaseAgreeToTOS": "გთხოვთ, დაეთანხმოთ პირობებს და წესებს", "pleaseEnterEmail": "გთხოვთ, შეიყვანოთ სწორი ელფოსტის მისამართი.", - "pleaseSelectALanguage": "გთხოვთ, აირჩიოთ ენა", "myBaseLanguage": "ჩემი ძირითადი ენა", - "clickWordsInstructions": "🧻 დააჭირეთ ნებისმიერ სიტყვას დეტალებისთვის. 🤐", - "chooseBestDefinition": "რა ნიშნავს ეს სიტყვა?", "meaningSectionHeader": "მნიშვნელობა:", "formSectionHeader": "ფორმები, რომლებიც გამოიყენება ჩატებში:", - "noEmojiSelectedTooltip": "ემოჯი არ არის არჩეული", "writingExercisesTooltip": "წერა", "listeningExercisesTooltip": "მოსმენა", "readingExercisesTooltip": "კითხვა", "meaningNotFound": "მნიშვნელობა ვერ მოიძებნა.", - "formsNotFound": "ფორმები ვერ მოიძებნა.", "chooseBaseForm": "აირჩიეთ ძირითადი ფორმა", "notTheCodeError": "უკაცრავად, ეს კოდი არ არის!", "totalXP": "სულ XP", @@ -2676,9 +2280,6 @@ "pickAnEmoji": "რა არის თქვენი საყვარელი ემოჯი '{lemma}'-სთვის?", "chooseLemmaMeaningInstructionsBody": "შეადარეთ მნიშვნელობები სიტყვებთან შეტყობინებაში!", "doubleClickToEdit": "ჩამკეცეთ ორჯერ რედაქტირებისთვის.", - "removeFeature": "წაშალეთ {feature}", - "chooseCorrectLabel": "აირჩიეთ სწორი ეტიკეტი.", - "levelPopupTitle": "გილოცავთ დონეზე მისვლას\nდონე {level}", "activityPlannerTitle": "აქტივობის დაგეგმვა", "topicLabel": "თემა", "topicPlaceholder": "აირჩიეთ თემა...", @@ -2686,7 +2287,6 @@ "modePlaceholder": "აირჩიეთ რეჟიმი...", "learningObjectiveLabel": "სწავლების მიზანი", "learningObjectivePlaceholder": "აირჩიეთ სასწავლო მიზანი...", - "mediaLabel": "მედია, რომელსაც უნდა გაუზიარონ სწავლულებმა", "languageOfInstructionsLabel": "შეკითხვების ენა", "targetLanguageLabel": "მიზნობრივი ენა", "cefrLevelLabel": "CEFR დონე", @@ -2701,20 +2301,15 @@ "instructions": "ინსტრუქციები", "numberOfLearners": "სწავლողների რაოდენობა", "mustBeInteger": "უნდა იყოს მთელი რიცხვი, მაგ. 1, 2, 3, ...", - "noLemmasFound": "არ არის ლექსიკა, რომელიც აღემატება {xp} XP-ს. გააგრძელეთ პრაქტიკა!", "constructUsePvmDesc": "წარმოქმნილი ხმის შეტყობინებაში", - "lockedMorphFeature": "მოსალოდნელია გახსნა", "leaveSpaceDescription": "კურსის დატოვებით, დატოვებთ ყველა ჩათს მასში. სხვა მომხმარებლები იხილავენ, რომ დატოვეთ კურსი.", - "whatIsLemma": "რა არის ლემა?", "constructUseCorMmDesc": "სწორი შეტყობინების მნიშვნელობა", "constructUseIncMmDesc": "არასწორი შეტყობინების მნიშვნელობა", "constructUseIgnMmDesc": "გაუქმებული შეტყობინების მნიშვნელობა", "clickForMeaningActivity": "აწკაპუნეთ აქ მნიშვნელობის გამოწვევისთვის", "meaning": "მნიშვნელობა", "chatWith": "ჯგუფი {displayname} -თან", - "slightlyOffensive": "მცირედ შეურაცხმყოფელი", "clickOnEmailLink": "გთხოვთ, დააჭირეთ ელფოსტის ბმულს და შემდეგ განაგრძეთ.\n\nშეამოწმეთ სპამ ფოლდერი, თუ ელფოსტა არ მოგივათ.", - "whoIsAllowedToJoinThisChat": "ვინ არის დაშვებული ამ ჩატის შეუერთებლად", "dontForgetPassword": "არ დაგავიწყდეთ თქვენი პაროლი!", "enableAutocorrectToolName": "ჩართეთ მოწყობილობის ავტომატური კორექტორი", "enableAutocorrectDescription": "თუ თქვენი მოწყობილობა მხარს უჭერს ისლანდიურ ენას, რომელსაც სწავლობთ, შეგიძლიათ ჩართოთ ავტომატური კორექტორი, რათა შეცვალოთ საერთო შეცდომები ტიპინგის დროს.", @@ -2742,48 +2337,26 @@ "autocorrectNotAvailable": "სამწუხაროდ, თქვენი პლატფორმა ამ ფუნქციისთვის ამჟამად არ არის მხარდაჭერილი. დარჩით განახლებებისთვის!", "pleaseUpdateApp": "გთხოვთ განაახლოთ აპლიკაცია გაგრძელებისთვის.", "chooseEmojiInstructionsBody": "შეადარეთ ემოჯები მათ სიტყვებთან, რომლებიც საუკეთესოდ გამოხატავენ მათ. ნუ იდარდებთ! არ არის ქულები გამოთიშული წინააღმდეგობისთვის. 😅", - "pickAnEmojiFor": "აირჩიეთ ემოჯი {lemma}-ისთვის", "analyticsVocabListBody": "ეს არის თქვენი ყველა სიტყვა! როგორც თქვენ მიიღებთ XP-ს თითოეულ სიტყვაზე, ისინი გაიზრდებიან ნერგიდან სრული ყვავილამდე. დაწკაპეთ ნებისმიერ სიტყვაზე მეტი დეტალებისთვის.", "morphAnalyticsListBody": "ეს არის ყველა გრამატიკული კონცეფცია თქვენს ეანში! თქვენ გააღრმავებთ მათ საუბრის დროს. დაწკაპეთ დეტალებისთვის.", "knockSpaceSuccess": "თქვენ მოითხოვეთ ამ კურსში ჩართვა! ადმინისტრატორი უპასუხებს თქვენს მოთხოვნას, როდესაც მიიღებს მას 😊", - "joinByCode": "შეერთება კოდის საშუალებით", "chooseWordAudioInstructionsBody": "მოსმინეთ სრულ შეტყობინებას. შემდეგ შეადარეთ აუდიოები მათ სიტყვებთან.", "chooseMorphsInstructionsBody": "დაწკაპეთ პაზლის ნაწილებს გრამატიკული კითხვებისთვის!", - "inviteAndLaunch": "პატიჟე და წამოიწყე", - "createOwnChat": "შექმენი შენი საკუთარი ჩატი", "pleaseEnterInt": "გთხოვთ, შეიყვანეთ რიცხვი", "home": "მთავარი", "join": "შეერთება", "readingAssistanceOverviewBody": "დააჭირეთ ქვემოთ მყოფ ღილაკებს მინიგეიმებისთვის ემოჯების, აუდიოების, სიტყვების მნიშვნელობებისა და გრამატიკის კონცეპტების შესაბამისობაში. ან დააჭირეთ ნებისმიერ სიტყვას დეტალებისთვის.", - "learnByTexting": "სწავლა ტექსტით", - "levelSummaryTrigger": "ნახეთ სიღრმისეული მიმოხილვა", "levelSummaryPopupTitle": "საფეხურის {level} მიმოხილვა", - "referFriends": "შეატყობინეთ მეგობრებს", - "referFriendDialogTitle": "პატიჟეთ მეგობარი თქვენს საუბარში", - "referFriendDialogDesc": "გაქვთ მეგობარი, რომელიც აღფრთოვანებულია ახალი ენის სწავლით თქვენთან ერთად? შემდეგ დააკოპირეთ და გაუზიარეთ ეს მოწვევის ბმული, რათა შეუერთდეს და დაიწყოს საუბარი თქვენთან დღეს.", - "youUnlocked": "თქვენ გახსენი", "resetInstructionTooltipsTitle": "გადატვირთეთ ინსტრუქციის ხატულები", "resetInstructionTooltipsDesc": "დააჭირეთ, რათა აჩვენოთ ინსტრუქციის ხატულები, როგორც ახალი მომხმარებლისთვის.", "selectForGrammar": "აირჩიეთ გრამატიკის ხატული აქტივობებისთვის და დეტალებისთვის.", - "newChatActivityTitle": "გსურთ დაამატოთ სასაცილო აქტივობა?", - "newChatActivityDesc": "გაახალისეთ ყოველი ჯგუფური საუბარი აქტივობის გეგმარებით! განსაზღვრეთ საინტერესო თემები და მიზნები ჯგუფისთვის, და გააცოცხლეთ საუბრები შთამბეჭდავი სურათებით. წამოიწყეთ შემოქმედებითი დისკუსიები და გააგრძელეთ სასიამოვნო განწყობა!", - "exploreMore": "მეტი გამოკვლევა", "randomize": "შემთხვევითი", "clear": "წაშლა", "makeYourOwnActivity": "შექმენით თქვენი საკუთარი აქტივობა", "featuredActivities": "გამორჩეული", - "goToChat": "მოდით ჩათში", "save": "შენახვა", - "selectActivity": "აირჩიეთ აქტივობა", - "wordFocusListeningMultipleChoice": "რომელი აუდიო ემთხვევა სიტყვას?", "startChat": "დაიწყეთ ჩათი", "translationProblem": "თარგმნის პრობლემა", - "perfectTranslation": "შესანიშნავი თარგმანი!", - "greatJobTranslation": "შესანიშნავი სამუშაო ამ თარგმნით!", - "goodJobTranslation": "კარგი მუშაობა ამ თარგმნაზე.", - "makingProgress": "თქვენ პროგრესირებთ!", - "keepPracticing": "განაგრძეთ პრაქტიკა!", - "niceJob": "კარგი საქმე!", "askToJoin": "მოითხოვეთ შეუერთება", "emptyChatWarningTitle": "ჩათი ცარიელია", "emptyChatWarningDesc": "თქვენ არ მოგიწვიათ ვინმე თქვენს ჩათში. გადადით ჩატის პარამეტრებში და მოიწვიეთ თქვენი კონტაქტები ან ბოტი. ასევე შეგიძლიათ ამის გაკეთება მოგვიანებით.", @@ -2802,8 +2375,6 @@ "languageLevelC2Desc": "მიძლია გავიგო თითქმის ყველაფერი, რაც მსმენია ან წაკითხული მაქვს, და გამოვხატო თავი თავისუფლად და ზუსტად.", "newVocab": "ახალი ლექსიკა", "newGrammar": "ახალი გრამატიკული კონცეფციები", - "congratulationsOnReaching": "თქვენ მიაღწიეთ დონეს {level}!", - "seeDetails": "დაწვრილებით ნახვა", "choosePracticeMode": "დააჭირეთ ერთ-ერთ ღილაკს ზემოთ, რათა დაიწყოთ პრაქტიკული აქტივობა", "ban": "თაღლითობა", "unban": "გათავისუფლება", @@ -2817,8 +2388,6 @@ "timesUsedWithAssistance": "გამოყენებულია დახმარებით", "shareInviteCode": "გაზიარეთ მოწვევის კოდი: {code}", "leaderboard": "წინსვლის სია", - "welcomeUser": "კეთილი იყოს თქვენი მობრძანება, {user}", - "joinSpaceOnboardingDesc": "გაქვთ თუ არა მოწვევის კოდი ან ბმული საჯარო კურსზე დასაწევად?", "skipForNow": "ამ დროისთვის გამოტოვება", "permissions": "უფლებები", "spaceChildPermission": "ვინ შეუძლია დაამატოს ახალი ჩატები ამ კურსში", @@ -2826,12 +2395,8 @@ "defaultOption": "ნაგულისხმევი", "deleteChatDesc": "დარწმუნებული ხართ, რომ გსურთ ამ ჩატის წაშლა? ის წაიშლება ყველა მონაწილისთვის და ყველა შეტყობინება, რომელიც ჩატშია, აღარ იქნება ხელმისაწვდომი პრაქტიკის ან სწავლების ანალიტიკისთვის.", "deleteSpaceDesc": "კურსი და ნებისმიერი არჩეული ჩატები წაიშლება ყველა მონაწილისთვის და ყველა შეტყობინება, რომელიც ჩატშია, აღარ იქნება ხელმისაწვდომი პრაქტიკის ან სწავლების ანალიტიკისთვის. ეს მოქმედება ვერ იქნება გაუქმებული.", - "chatWithActivities": "ჩატი აქტივობებით", "launch": "შესრულება", - "launchActivityToChats": "აქტივობის დაწყება ჩატებში", "searchChats": "ძებნა საუბრები", - "selectChats": "აირჩიეთ საუბრები", - "selectChatToStart": "შესანიშნავია! აირჩიეთ საუბარი დასაწყებად", "maxFifty": "მაქსიმუმ 50", "configureSpace": "კურსის კონფიგურაცია", "pinMessages": "მესიჯების პინვა", @@ -2845,9 +2410,7 @@ "announcements": "შეტყობინებები", "activities": "აქტივობები", "access": "წვდომა", - "botSettings": "ბოტის პარამეტრები", "activitySuggestionTimeoutMessage": "ჩვენ ვმუშაობთ აქტივობების დამატებაზე, გთხოვთ, დაბრუნდეთ ერთ წუთში", - "accessSettingsWarning": "უი! נראה რომ თქვენ არ გაქვთ უფლება ამ ოთახის წვდომის წესების დასაყენებლად. გთხოვთ, გადაამოწმოთ ისინი, რათა დარწმუნდეთ, რომ ისინი თქვენთვის სასურველია და თუ საჭიროა, მიმართეთ ოთახის ადმინისტრატორს", "howSpaceCanBeFound": "როგორ შეიძლება ამ კურსის მოძებნა", "private": "პირადი", "cannotBeFoundInSearch": "ძებნაში ვერ მოიძებნება", @@ -2860,16 +2423,6 @@ "canBeFoundViaKnock": "• მოთხოვნა შეუერთების და ადმინისტრატორის დამტკიცება", "youHaveLeveledUp": "თქვენ განახლდით!", "sendActivities": "გაგზავნეთ აქტივობები", - "getStarted": "დაიწყეთ", - "getStartedBotChatDesc": "ჩატირება AI-თან არის შესანიშნავი ადგილი დასაწყებად, ხოლო პანგეა კითხვა, წერა, მოსმენა და საუბრის ხელსაწყოები მარტივია!", - "getStartedCommunitiesDesc": "სწავლა საზოგადოებასთან ერთად არის სადაც პანგეა ჩატი აყვავდება!\nთქვენ შეგიძლიათ შეუერთდეთ თქვენს კლასს, იპოვოთ კურსი, ან even შექმნათ თქვენი საკუთარი!", - "getStartedFriendsDesc": "გაქვს მეგობარი, რომელიც გსურს ისწავლოს შენთან ერთად?", - "getStartedBotChatComplete": "კარგია! თქვენ საუბრობთ ბოტთან!", - "getStartedCommunitiesComplete": "შესანიშნავია, თქვენ შეუერთდით კურსს!", - "getStartedComplete": "თქვენ ამ ნაწილს დაასრულეთ!\nგაგრძელეთ ჩვენი საოცარი ფუნქციების გამოკვლევა მეგობრებთან საუბრის საშუალებით!", - "getStartedFriendsComplete": "ვაუ! თქვენ გაქვთ მეგობრები! 😊", - "getStartedBotChatButton": "დაიწყეთ საუბარი!", - "getStartedFriendsButton": "მეგობართან ჩატი", "groupChat": "ჯგუფური ჩატი", "directMessage": "მხოლოდ შეტყობინება", "newDirectMessage": "ახალი პირდაპირი შეტყობინება", @@ -2885,7 +2438,6 @@ "mySavedActivities": "ჩემი შენახული აქტივობები", "noSavedActivities": "შენახული აქტივობები არ არის", "saveActivity": "შენახე ეს აქტივობა", - "yourSavedActivities": "შენახული აქტივობები", "failedToPlayVideo": "ვიდეოს გაშვება ვერ მოხერხდა", "done": "შესრულებულია", "inThisSpace": "ამ კურსში", @@ -2924,37 +2476,27 @@ "maximumActivityParticipants": "ყოველი აქტივობა შეიძლება ჰქონდეს მაქსიმუმ {count} მონაწილე.", "pending": "მოლოდინში", "inactive": "არაქტიული", - "unjoinedActivityMessage": "გსურთ მონაწილეობა? აირჩიეთ ღია როლი!\nან ისიამოვნეთ და უყურეთ შოუ!", - "fullActivityMessage": "გთხოვთ, უყურეთ შოუ! მიუხედავად იმისა, რომ არ არის ღია როლები, შეგიძლიათ ნახოთ ჩატი!", "confirmRole": "დადასტურება როლი", "openRoleLabel": "ღია", "joinedTheActivity": "👋 {username} შეუერთდა როგორც {role}", "finishedTheActivity": "🎯 {username} დასრულდა ეს აქტივობა", - "endActivityTitle": "მოვრჩი", - "endActivityDesc": "შეასრულეთ მიზნები?\nეს არის თქვენი დადასტურება, რომ გადიხართ ტექსტისგან. მაგრამ ნუ იდარდებთ, გართობა გრძელდება ჩატში! თავისუფლად ისხართ და უყურეთ შოუს მანამ, სანამ ყველა არ დააჭერს 'დასრულდა'.", "archiveToAnalytics": "დამატე ჩემი დასრულებული აქტივობებში", "activitySummaryError": "აქტივობის მიმოხილვები ხელმისაწვდომი არაა", "requestSummaries": "მოთხოვნა მიმოხილვებისთვის", - "loadingActivitySummary": "აქტივობის მიმოხილვის ჩატვირთვა...", "generatingNewActivities": "თქვენ ხართ ამ ენის წყვილის პირველი მომხმარებელი! გთხოვთ, ერთი წუთი გქონდეთ, ჩვენ ვამზადებთ აქტივობებს თქვენთვის.", - "requestAccessTitle": "მოთხოვნა ანალიტიკის ნახვის დაშვების შესახებ?", + "requestAccessTitle": "ანალიტიკის წვდომის მოთხოვნა?", "requestAccessDesc": "გსურთ მიიღოთ დაშვება მონაწილეთა ანალიტიკის სანახავად?\n\nთუ მონაწილეები თანხმდებიან, ამ კურსის ადმინისტრატორები შეძლებენ ნახონ მათ:\n • საერთო ლექსიკონი\n • საერთო გრამატიკის კონცეპტები\n • დასრულებული აქტივობის სესიონები\n • გამოყენებული, სწორად და არასწორად გრამატიკის კონცეპტები\n\nისინი ვერ შეძლებენ ნახონ:\n • შეტყობინებები ჩატებში კურსის გარეთ\n • ლექსიკონის სია", "requestAccess": "მოთხოვნა დაშვებაზე ({count})", "analyticsInactiveTitle": "მოთხოვნები არაქტიურ მომხმარებლებს ვერ გაიგზავნება", "analyticsInactiveDesc": "არაქტიური მომხმარებლები, რომლებიც ამ ფუნქციის გამოჩენის შემდეგ არ შესულან, თქვენი მოთხოვნა ვერ იხილავენ.\n\nმოთხოვნის ღილაკი გამოჩნდება, როდესაც ისინი დაბრუნდებიან. შეგიძლიათ მოგვიანებით ისევ გამოაგზავნოთ მოთხოვნა მათი სახელის ქვეშ არსებული ღილაკის დაჭერით, როდესაც ის ხელმისაწვდომია.", "accessRequestedTitle": "ანალიტიკის დაშვების მოთხოვნა", - "accessRequestedDesc": "„{space}“-ის ადმინისტრატორები გთხოვენ თქვენი სწავლების ანალიტიკის ნახვას.\n\nთუ თანხმდებით, ამ კურსის ადმინისტრატორები შეძლებენ ნახონ თქვენს:\n • საერთო ლექსიკონი\n • საერთო გრამატიკის კონცეპტები\n • დასრულებული აქტივობის სესიონები\n • გამოყენებული, სწორად და არასწორად გრამატიკის კონცეპტები\n\nისინი ვერ შეძლებენ ნახონ:\n • შეტყობინებები ჩატებში კურსის გარეთ\n • ლექსიკონის სია", - "allowAccess": "დაშვების ნება", - "denyAccess": "უარყოფა დაშვებაზე", + "accessRequestedDesc": "მოთხოვნა ადმინისტრატორ(ებ)ისთვის: {admin} \n\n„{space}“-დან ადმინისტრატორები ითხოვენ თქვენი სასწავლო ანალიტიკის ნახვას.\n\nთუ თანახმა ხართ, ისინი შეძლებენ თქვენი:\n • საერთო ლექსიკის\n • საერთო გრამატიკული კონცეფციების\n • დასრულებული აქტივობის სესიების\n • გამოყენებული კონკრეტული გრამატიკული კონცეფციების, სწორად და არასწორად\n\nისინი ვერ შეძლებენ თქვენი:\n • შეტყობინებების ნახვას კურსის გარეთ\n • ლექსიკის სიას", "adminRequestedAccess": "ადმინისტრატორებმა მოითხოვეს თქვენი ანალიტიკის ნახვა.", "lastUpdated": "განახლებულია\n{time}", "activityFinishedMessage": "ყველაფერი დასრულდა!", "endForAll": "დასრულება ყველასთვის", "newCourse": "ახალი კურსი", - "newCourseSubtitle": "რომელ კურსის გეგმას გსურთ გამოყენება?", - "failedToLoadCourses": "კურსების ჩატვირთვა ვერ მოხერხდა", "numModules": "{num} მოდული", - "numActivityPlans": "{num} აქტივობის გეგმა", "coursePlan": "კურსის გეგმა", "editCourseLater": "შეგიძლიათ მოგვიანებით შეცვალოთ ტემპლეტის სათაური, აღწერები და კურსის სურათი.", "newCourseAccess": "ჩაშენებული წესით, კურსები პირადია და საჭიროებს ადმინისტრატორის დამტკიცებას შესასვლელად. შეგიძლიათ ნებისმიერ დროს შეცვალოთ ეს პარამეტრები.", @@ -2968,17 +2510,11 @@ "accessDesc": "თქვენ შეგიძლიათ გახსნათ თქვენი კურსი მსოფლიოისთვის! ან, გახადოთ თქვენი კურსი პირადი და უსაფრთხო.", "createGroupChatDesc": "სადაც იწყება და მთავრდება აქტივობის სესია, ჯგუფური ჩატები დარჩება ღია რეგულარული კომუნიკაციისთვის.", "deleteDesc": "მხოლოდ ადმინისტრატორებს შეუძლიათ კურსის წაშლა. ეს არის განადგურების მოქმედება, რომელიც წაშლის ყველა მომხმარებელს და ყველა არჩეულ ჩატს კურსის ფარგლებში. გთხოვთ, გამოიჩინოთ სიფრთხილე.", - "failedToLoadCourseInfo": "კურსის ინფორმაციის ჩატვირთვა ვერ მოხერხდა", "noCourseFound": "ოჰ, ამ კურსისთვის სჭირდება გეგმა!\n\nკურსის გეგმა არის თემების და საუბრის აქტივობების სერია.", "additionalParticipants": "+ {num} სხვა", - "activityNotFoundForCourse": "ეს აქტივობა ვერ მოიძებნა კურსის ფარგლებში", - "courseChats": "კურსის ჩატები", - "myActivitySessions": "ჩემი აქტივობის სესია", "directMessages": "მიმართულებული შეტყობინებები", "whatNow": "ახლა რა?", "chooseNextActivity": "აირჩიეთ თქვენი შემდეგი აქტივობა!", - "seeInstructions": "იხილეთ ინსტრუქციები", - "hideInstructions": "დამალეთ ინსტრუქციები", "letsGo": "მოდით დავიწყოთ", "chooseRole": "აირჩიეთ როლი!", "chooseRoleToParticipate": "აირჩიეთ მონაწილეობისთვის როლი!", @@ -2988,23 +2524,15 @@ "inviteFriends": "პატიჟეთ მეგობრები", "waitNotDone": "მოვიცადე, არ დამთავრებულა!", "waitingForOthersToFinish": "მოსალოდნელია დანარჩენების დასრულება...", - "saveToCompletedActivities": "შეინახეთ დასრულებულ აქტივობებში", "generatingSummary": "საუბრის ანალიზი და შედეგების გენერირება", - "instructionsLanguage": "ინსტრუქციების ენა", "findCourse": "კურსის მოძებნა", - "activityCompletedDesc": "თქვენი დასრულებული აქტივობა დამატებულია ანალიტიკაში, სადაც შეგიძლიათ მიმოხილოთ და პრაქტიკულად გამოიყენოთ თქვენი გამოყენებული ენა.", "pingParticipantsNotification": "{user} ეძებს მომხმარებლებს, რომ შეუერთდნენ აქტივობის სესიას {room}-ში", "course": "კურსი", "courses": "კურსები", "courseName": "კურსის სახელი", "createNewCourse": "ახალი კურსი", - "publicCourses": "საჯარო კურსები", "goToCourse": "გადადი კურსზე: {course}", "activityComplete": "ეს აქტივობა დასრულებულია. აქტივობის მიმოხილვა უნდა იყოს ხელმისაწვდომი ქვემოთ.", - "haventChattedMuch": "განსხვავებით, თქვენ არ გქონიათ ბევრი საუბარი, სცადეთ მეტი სიტყვების გამოყენება! თუ გგონიათ, რომ თქვენი მიზანი მიაღწიეთ, შეგიძლიათ ქვემოთ დაასრულოთ აქტივობა.", - "haveChatted": "განსხვავებით, თქვენ საუბრობთ უკვე გარკვეული დროა! თუ გგონიათ, რომ თქვენი მიზანი მიაღწიეთ, დაასრულეთ აქტივობა და ჩვენ შეგვიძლია გენერირება თქვენი მიმოხილვა საუბარში!", - "userDoneAndWaiting": "{num1}/{num2} მონაწილეებმა დაასრულეს. დაელოდეთ ყველას დასრულებას, და ჩვენ შეგვიძლია გენერირება თქვენი მიმოხილვა საუბარში! \n\nთუ გსურთ საუბარში დაბრუნება, დააჭირეთ განაგრძეთ ღილაკს საუბარში.", - "othersDoneAndWaiting": "{num1}/{num2} დასრულდა. მიაღწიეთ თქვენს მიზანს?", "startNewSession": "ახალი სესიის დაწყება", "joinOpenSession": "შეერთება ღია სესიაში", "less": "ნაკლები", @@ -3014,7 +2542,6 @@ "openToJoin": "ღია შეუერთებისთვის", "results": "შედეგები", "activityDone": "აქტივობა დასრულებულია!", - "moreLabel": "მეტი", "promoCodeInfo": "პრომო კოდებს შეიძლება შეიყვანოთ შემდეგ გვერდზე", "editsComingSoon": "ქალაქებისა და აქტივობების რედაქტირების შესაძლებლობა მალე იქნება ხელმისაწვდომი.", "editing": "რედაქტირება", @@ -3030,13 +2557,10 @@ "courseSavedSuccessfully": "კურსი წარმატებით შენახულია", "addCoursePlan": "კურსის გეგმის დამატება", "activityStatsButtonInstruction": "აწკაპუნეთ აქ თქვენი აქტივობის სტატისტიკის სანახავად და აქტივობის დახურვისთვის, როდესაც დასრულდება", - "readingAnalyticsDesc": "წაიკითხეთ პრაქტიკა თითოეულ შეტყობინებაზე, წაკითხვის აქტივობებისთვის.", - "speakingAnalyticsDesc": "ჩაწერეთ ხმოვანი შეტყობინებები საუბრის პრაქტიკისთვის.", - "audioAnalyticsDesc": "აწკაპუნეთ პრაქტიკა თითოეულ შეტყობინებაზე, მოსმენის აქტივობებისთვის.", "loginToAccount": "შესვლა ჩემს ანგარიშზე", "appDescription": "სწავლა ენის\nმეგობრებთან მესენჯერში საუბრის დროს.", "languages": "ენები", - "chooseLanguage": "აირჩიეთ ენა.", + "chooseLanguage": "აირჩიეთ მიზნობრივი ენა.", "planTrip": "გეგმა თქვენი მოგზაურობის", "howAreYouTraveling": "როგორ მოგზაურობთ?", "unlockPrivateTrip": "გახსნათ პირადი მოგზაურობა", @@ -3049,25 +2573,20 @@ "courseCode": "რა არის საიდუმლო პაროლი?", "courseCodeHint": "მოგზაურობის კოდი ან ლინკი", "unlockMyTrip": "გახსნათ ჩემი მოგზაურობა", - "anyLevel": "ნებისმიერი დონე", "signupOption": "როგორ გსურთ დარეგისტრირება?", "withApple": "მხოლოდ Apple-თან", "withGoogle": "Google-თან", "withEmail": "ელფოსტით", "createAccount": "ანგარიშის შექმნა", - "noCoursesFound": "კურსები ვერ მოიძებნა", "loginWithEmail": "შესვლა ელფოსტით", "usernameOrEmail": "მომხმარებლის სახელი ან ელფოსტა", "email": "ელფოსტა", "forgotPassword": "დაგავიწყდათ პაროლი?", - "writingAnalyticsDesc": "გაგზავნეთ შეტყობინებები წერის პრაქტიკისთვის.", "endActivity": "ფართოება აქტივობა", "allLanguages": "ყველა ენა", - "allCefrLevels": "ყველა CEFR დონე", "chatListTooltip": "აქ ნახავთ თქვენს პირდაპირ შეტყობინებებს! დაწკაპეთ ნებისმიერი მომხმარებლის ავატარი და „საუბრის დაწყება“, რათა გაგზავნოთ შეტყობინება.", "directMessageBotTitle": "პირდაპირი შეტყობინება Pangea Bot-თან", "feedbackTitle": "აქტივობის გამოხმაურება", - "feedbackDesc": "როგორ უნდა გაუმჯობესდეს აქტივობა? თუ შეგიძლიათ დეტალების მიწოდება, ჩვენ შევცვლით!", "feedbackHint": "თქვენი გამოხმაურება", "feedbackButton": "წინადადების გაგზავნა", "directMessageBotDesc": "ადამიანებთან საუბარი უფრო სასიამოვნოა, მაგრამ... AI ყოველთვის მზადაა!", @@ -3075,7 +2594,7 @@ "playWithAI": "ამ დროისთვის ითამაშეთ AI-თან", "courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!", "@@locale": "ka", - "@@last_modified": "2026-01-06 13:02:45.195897", + "@@last_modified": "2026-01-07 14:29:07.353656", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6027,30 +5546,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6074,18 +5569,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6110,18 +5593,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6158,38 +5629,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6198,62 +5641,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6290,10 +5689,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6302,14 +5697,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6318,46 +5705,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6366,10 +5717,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6426,18 +5773,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6446,14 +5781,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6482,18 +5809,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6502,42 +5817,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6546,14 +5829,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6574,26 +5849,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6614,10 +5869,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6650,25 +5901,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6725,34 +5957,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6781,778 +5985,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8545,14 +6981,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8564,14 +6992,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8603,10 +7023,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8615,18 +7031,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8635,14 +7039,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8667,38 +7063,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8744,10 +7112,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8772,10 +7136,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8800,10 +7160,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8812,66 +7168,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8892,42 +7192,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8952,154 +7228,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9116,18 +7244,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9148,14 +7264,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9172,10 +7280,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9188,14 +7292,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9204,14 +7300,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9239,26 +7327,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9287,18 +7355,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9335,10 +7395,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10271,10 +8327,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10455,34 +8507,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10495,10 +8519,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10507,14 +8527,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10531,22 +8543,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10694,14 +8690,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10710,34 +8698,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10746,54 +8706,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10802,10 +8726,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10822,10 +8742,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10997,26 +8913,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11045,10 +8941,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11105,30 +8997,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11157,18 +9033,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11285,14 +9153,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11305,10 +9165,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11317,14 +9173,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11341,14 +9189,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11357,22 +9197,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11385,18 +9209,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11413,22 +9225,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11437,30 +9237,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11533,18 +9309,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11601,18 +9365,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11641,30 +9393,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11717,18 +9453,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11777,46 +9505,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11881,10 +9569,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12056,14 +9740,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12091,14 +9767,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12111,10 +9779,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12150,19 +9814,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12187,14 +9846,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12203,14 +9854,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12263,10 +9906,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12279,18 +9918,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12303,14 +9930,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12351,26 +9970,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12398,10 +10005,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12412,36 +10015,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12478,10 +10051,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12546,18 +10115,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12622,10 +10179,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12646,10 +10199,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12666,10 +10215,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12678,10 +10223,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12694,10 +10235,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12722,16 +10259,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "მოძებნეთ მეგობრები აქტივობაში", - "inviteFriendsToActivityCourse": "მოძებნეთ მეგობრები აქტივობასა და კურსში", "feedbackRespDesc": "ხვედრეთ ხვალისთვის აქტივობის განახლებებისთვის.", "activityDropdownDesc": "როდესაც ამ აქტივობას დაასრულებთ, დაწკაპეთ ქვემოთ", - "activityAnalyticsListBody": "ეს თქვენი დასრულებული აქტივობები არიან! აქტივობების დასრულების შემდეგ, შეგიძლიათ იხილოთ ისინი აქ.", "languageMismatchTitle": "ენის შეუთავსებლობა", "languageMismatchDesc": "თქვენი სამიზნე ენა არ ემთხვევა ამ აქტივობის ენას. განაახლეთ თქვენი სამიზნე ენა?", "reportWordIssueTooltip": "გთხოვთ, გამოეხმაუროთ სიტყვების ინფორმაციის პრობლემას", "tokenInfoFeedbackDialogTitle": "სიტყვის ინფორმაციის გამოხმაურება", - "tokenInfoFeedbackDialogDesc": "AI-ს აქვს შეცდომები. გთხოვთ, აღწეროთ ნებისმიერი პრობლემა, რომელიც აღმოაჩინეთ ზემოთ მოცემულ ინფორმაციაში.", "noPublicCoursesFound": "საჯარო კურსები არ მოიძებნა. გსურთ შექმნათ ერთი?", "noCourseTemplatesFound": "ჩვენ ვერ აღმოვაჩინეთ თქვენი სამიზნე ენის კურსები. ამ დროისთვის შეგიძლიათ ისაუბროთ პანგეა ბოტთან და მოგვიანებით შემოწმოთ მეტი კურსისთვის.", "botActivityJoinFailMessage": "პანგეა ბოტი პასუხის გაცემაში გვიანდება. გთხოვთ, სცადეთ მოგვიანებით ან მიიწვიეთ მეგობარი.", @@ -12739,14 +10272,6 @@ "leaveDesc": "დაშორდეთ ამ სივრცეს და ყველა ჩათს მასში", "selectAll": "მთლიანი არჩევა", "deselectAll": "ყველას მოხსნა", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12755,10 +10280,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12775,10 +10296,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12812,7 +10329,6 @@ "newMessageInPangeaChat": "💬 ახალი შეტყობინება Pangea ჩატში", "shareCourse": "გააზიარე კურსი", "addCourse": "დაამატე კურსი", - "joinCourseWithCode": "შეერთდი კურსთან კოდის საშუალებით", "joinPublicCourse": "შეერთდი საჯარო კურსთან", "vocabLevelsDesc": "ეს არის ადგილი, სადაც სიტყვები განთავსდება, როგორც კი მათ დონე გაუმჯობესდება!", "highlightVocabTooltip": "გამოაჩინე მიზნობრივი სიტყვები ქვემოთ, მათი გაგზავნით ან ჩატში ვარჯიშით", @@ -12836,10 +10352,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12848,7 +10360,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "არ არის პირადი შეტყობინებები ან ჩეთები. დარწმუნდით, რომ თქვენი ძიება სწორად არის დაწერილი.", + "activityAnalyticsTooltipBody": "ეს არის თქვენი შენახული აქტივობები განხილვისა და პრაქტიკისთვის.", + "numSavedActivities": "შენახული აქტივობების რაოდენობა", + "saveActivityTitle": "აქტივობის შენახვა", + "saveActivityDesc": "კარგი სამუშაო! შეინახეთ ეს აქტივობა შემდგომი განხილვისა და პრაქტიკისთვის", + "levelInfoTooltip": "აქ შეგიძლიათ იხილოთ ყველა ქულა, რომელიც მოიპოვეთ და როგორ!", + "alreadyInCourseWithID": "თქვენ უკვე იმყოფებით ამ გეგმასთან კურსში. გსურთ შექმნათ კურსი იმავე გეგმით, თუ წახვიდეთ არსებულ კურსზე?", + "goToExistingCourse": "წადი არსებულ კურსზე", + "emojiView": "ემოჯი ხედვა", + "feedbackDialogDesc": "მეაც ვაკეთებ შეცდომებს! რაიმე, რაც დამეხმარება გაუმჯობესებაში?", + "contactHasBeenInvitedToTheCourse": "კონტაქტი მოწვეულ იქნა კურსზე", + "activityStatsButtonTooltip": "აქტივობის ინფორმაცია", + "allow": "დაშვება", + "deny": "უარყოფა", + "enabledRenewal": "გამოწერის განახლების გაწვდვა", + "subscriptionEndsOn": "გამოწერა მთავრდება", + "subscriptionRenewsOn": "გამოწერა განახლდება", + "waitForSubscriptionChanges": "თქვენი გამოწერის ცვლილებებს შეიძლება რამდენიმე წუთი დასჭირდეს აპლიკაციაში ასახვისთვის.", + "subscribeReadingAssistance": "გამოწერა მესიჯების ინსტრუმენტების გასახსნელად", + "aceDisplayName": "აჩინეზი", + "achDisplayName": "აკოლი", + "afDisplayName": "აფრიკანული", + "akDisplayName": "აკანი", + "alzDisplayName": "ალური", + "amDisplayName": "ამჰარული", + "arDisplayName": "არაბული", + "asDisplayName": "ასამური", + "awaDisplayName": "ავადჰი", + "ayDisplayName": "აიმარა", + "azDisplayName": "აზერბაიჯანული", + "baDisplayName": "ბაშკირელი", + "banDisplayName": "ბალინეზური", + "bbcDisplayName": "ბატაკ ტობა", + "beDisplayName": "ბელარუსული", + "bemDisplayName": "ბემბა", + "bewDisplayName": "ბეტავი", + "bgDisplayName": "ბულგარიული", + "bhoDisplayName": "ბოჰპური", + "bikDisplayName": "ბიკოლური", + "bmDisplayName": "ბამბარა", + "bnDisplayName": "ბანგლა", + "bnBDDisplayName": "ბენგალური (ბანგლადეში)", + "bnINDisplayName": "ბენგალური (ინდოეთი)", + "brDisplayName": "ბრეტონი", + "bsDisplayName": "ბოსნიური", + "btsDisplayName": "ბატაკ სიმალუნგუნი", + "btxDisplayName": "ბატაკ კარო", + "buaDisplayName": "ბურიატი", + "caDisplayName": "კატალონური", + "cebDisplayName": "სებუანო", + "cggDisplayName": "ჩიგა", + "chmDisplayName": "მარი", + "ckbDisplayName": "ცენტრალური ქურთული", + "cnhDisplayName": "ჰახა ჩინი", + "coDisplayName": "კორსიკელი", + "crhDisplayName": "კრიმული თურქული", + "crsDisplayName": "სესelwa კრეოლური ფრანგული", + "csDisplayName": "ჩეხური", + "cvDisplayName": "ჩუვაში", + "cyDisplayName": "უელსური", + "daDisplayName": "დანიელი", + "deDisplayName": "გერმანული", + "dinDisplayName": "დინკა", + "doiDisplayName": "დოგრი", + "dovDisplayName": "დომბე", + "dzDisplayName": "ძონგხა", + "eeDisplayName": "ევე", + "enDisplayName": "ინგლისური", + "enAUDisplayName": "ინგლისური (ავსტრალია)", + "enGBDisplayName": "ინგლისური (ბრიტანეთი)", + "enINDisplayName": "ინგლისური (ინდოეთი)", + "enUSDisplayName": "ინგლისური (აშშ)", + "eoDisplayName": "ესპერანტო", + "esDisplayName": "ესპანური", + "esESDisplayName": "ესპანური (ესპანეთი)", + "esMXDisplayName": "ესპანური (მექსიკა)", + "euDisplayName": "ბასკური", + "faDisplayName": "პერსული", + "ffDisplayName": "ფულა", + "fiDisplayName": "ფინური", + "filDisplayName": "ფილიპინური", + "fjDisplayName": "ფიჯიური", + "foDisplayName": "ფაროსული", + "frDisplayName": "ფრანგული", + "frCADisplayName": "ფრანგული (კანადა)", + "frFRDisplayName": "ფრანგული (ფრანსა)", + "fyDisplayName": "დასავლეთ ფრიზული", + "gaDisplayName": "ირლანდიური", + "gaaDisplayName": "გა", + "gdDisplayName": "შოტლანდიური გელური", + "glDisplayName": "გალიციური", + "gnDisplayName": "გუარანი", + "gomDisplayName": "გოანური კონკანი", + "guDisplayName": "გუჯარატი", + "haDisplayName": "ჰაუსა", + "hawDisplayName": "ჰავაიური", + "heDisplayName": "ებრაული", + "hiDisplayName": "ჰინდი", + "hilDisplayName": "ჰილიგაინონი", + "hmnDisplayName": "ჰმონგი", + "hneDisplayName": "ჩჰატისგარჰი", + "hrDisplayName": "ხორვატული", + "hrxDisplayName": "ჰუნსრიკი", + "htDisplayName": "ჰაიტური კრეოლი", + "huDisplayName": "უნგრული", + "hyDisplayName": "არმენული", + "idDisplayName": "ინდონეზიური", + "igDisplayName": "იგბო", + "iloDisplayName": "ილოკო", + "isDisplayName": "ისლანდიური", + "itDisplayName": "იტალიური", + "jaDisplayName": "იაპონური", + "jvDisplayName": "იავანური", + "kaDisplayName": "ქართული", + "kkDisplayName": "ყაზახური", + "kmDisplayName": "ხმერური", + "knDisplayName": "კანადური", + "koDisplayName": "კორეული", + "kokDisplayName": "კონკანი", + "kriDisplayName": "კრიო", + "ksDisplayName": "კაშმირელი", + "ktuDisplayName": "კიტუბა (დემოკრატიული რესპუბლიკა კონგო)", + "kuDisplayName": "კურდული", + "kyDisplayName": "კირგიზული", + "laDisplayName": "ლათინური", + "lbDisplayName": "ლუქსემბურგული", + "lgDisplayName": "განდა", + "liDisplayName": "ლიმბურგული", + "lijDisplayName": "ლიგურიული", + "lmoDisplayName": "ლომბარდული", + "lnDisplayName": "ლინგალა", + "loDisplayName": "ლაო", + "ltDisplayName": "ლიტვური", + "ltgDisplayName": "ლატგალიური", + "luoDisplayName": "ლუო (კენია და ტანზანია)", + "lusDisplayName": "მიზო", + "lvDisplayName": "ლატვიური", + "maiDisplayName": "მაითილი", + "makDisplayName": "მაკასარი", + "mgDisplayName": "მალაგაზი", + "miDisplayName": "მაორი", + "minDisplayName": "მინანკაბაუ", + "mkDisplayName": "მაკედონური", + "mlDisplayName": "მალაიალამი", + "mnDisplayName": "მონღოლური", + "mniDisplayName": "მანიპური", + "mrDisplayName": "მარათჰი", + "msDisplayName": "მალაი", + "msArabDisplayName": "მალაი (არაბული)", + "msMYDisplayName": "მალაი (მალაიზია)", + "mtDisplayName": "მალტური", + "mwrDisplayName": "მარვარი", + "myDisplayName": "ბირმული", + "nanDisplayName": "მინ ნანი", + "nbDisplayName": "ნორვეგიული (ბოკმალ)", + "neDisplayName": "ნეპალური", + "newDisplayName": "ნევარი", + "nlDisplayName": "ნიდერლანდური", + "nlBEDisplayName": "ფლამანდური", + "noDisplayName": "ნორვეგიული", + "nrDisplayName": "სამხრეთ ნდებლე", + "nsoDisplayName": "ჩრდილოეთ სოთო", + "nusDisplayName": "ნუერი", + "nyDisplayName": "ნიაჯა", + "ocDisplayName": "ოკიტანი", + "omDisplayName": "ორომო", + "orDisplayName": "ოდია", + "paDisplayName": "პუნჯაბი", + "paArabDisplayName": "პუნჯაბი (შაჰმუხი)", + "paINDisplayName": "პუნჯაბი (გურმუხი)", + "pagDisplayName": "პანგასინანი", + "pamDisplayName": "პამპანგა", + "papDisplayName": "პაპიამენტო", + "plDisplayName": "პოლონური", + "psDisplayName": "პუშტუ", + "ptDisplayName": "პორტუგალიური", + "ptBRDisplayName": "პორტუგალიური (ბრაზილია)", + "ptPTDisplayName": "პორტუგალიური (პორტუგალია)", + "quDisplayName": "კეჩუა", + "rajDisplayName": "რაჯასტანი", + "rnDisplayName": "რუნდი", + "roDisplayName": "რომანული", + "roMDDisplayName": "მოლდოვური", + "romDisplayName": "რომანული", + "ruDisplayName": "რუსული", + "rwDisplayName": "კინიარვანდა", + "saDisplayName": "სანსკრიტი", + "satDisplayName": "სანტალი", + "scnDisplayName": "სიცილიური", + "sdDisplayName": "სინდური", + "sgDisplayName": "სანგო", + "shnDisplayName": "შან", + "siDisplayName": "სინჰალა", + "skDisplayName": "სლოვაკური", + "slDisplayName": "სლოვენური", + "smDisplayName": "სამოური", + "snDisplayName": "შონა", + "soDisplayName": "სომალიური", + "sqDisplayName": "ალბანური", + "srDisplayName": "სერბული", + "srMEDisplayName": "მონტენეგრიული", + "ssDisplayName": "სვატი", + "stDisplayName": "სამხრეთ სოთო", + "suDisplayName": "სუნდანური", + "svDisplayName": "შვედური", + "swDisplayName": "სუაჰილი", + "szlDisplayName": "სილეზიური", + "taDisplayName": "ტამილი", + "teDisplayName": "ტელუგუ", + "tetDisplayName": "ტეტუმი", + "tgDisplayName": "ტაჯიკური", + "thDisplayName": "თაი", + "tiDisplayName": "ტიგრინია", + "tkDisplayName": "თურქმენური", + "tlDisplayName": "ტაგალოგური", + "tnDisplayName": "წვანური", + "trDisplayName": "თურქული", + "tsDisplayName": "ცონგა", + "ttDisplayName": "ტატარული", + "ugDisplayName": "უიღური", + "ukDisplayName": "უკრაინული", + "urDisplayName": "ურდუ", + "urINDisplayName": "ურდუ (ინდოეთი)", + "urPKDisplayName": "ურდუ (პაკისტანი)", + "uzDisplayName": "უზბეკური", + "viDisplayName": "ვიეტნამური", + "wuuDisplayName": "ვუ", + "xhDisplayName": "ხოსა", + "yiDisplayName": "იდიშ", + "yoDisplayName": "იორუბა", + "yuaDisplayName": "იუკატეკო", + "yueDisplayName": "კანტონური", + "yueCNDisplayName": "კანტონური (ჩინეთი)", + "yueHKDisplayName": "კანტონური (ჰონგკონგი)", + "zhDisplayName": "ჩინური", + "zhCNDisplayName": "ჩინური (გადამუშავებული)", + "zhTWDisplayName": "ჩინური (ტრადიციული)", + "zuDisplayName": "ზულუ", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12915,6 +11613,7 @@ "notStartedActivitiesTitle": "ღია სესიები ({num})", "inProgressActivitiesTitle": "მიმდინარე ({num})", "completedActivitiesTitle": "დასრულებულია ({num})", + "pickDifferentActivity": "აირჩიეთ სხვა აქტივობა", "inOngoingActivity": "თქვენ გაქვთ მიმდინარე აქტივობა!", "@notStartedActivitiesTitle": { "type": "String", @@ -12940,10 +11639,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "თქვენი მიზნობრივი ენა არ ემთხვევა ამ შეტყობინებას. განაახლეთ თქვენი მიზნობრივი ენა?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "ეს არის ყველა ადამიანი ამ კურსში. დააწკაპუნეთ ნებისმიერი მომხმარებლის ავატარზე და „დაიწყეთ საუბარი“, რომ მოიგზავნოთ პირადი შეტყობინება.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "ეს სიტყვა მუდმივად წაიშლება თქვენი ანალიტიკიდან", + "woman": "ქალი", + "man": "კაცი", + "otherGender": "სხვა", + "unselectedGender": "აირჩიეთ სქესის ვარიანტი", + "gender": "სქესი", + "chatParticipantTooltip": "ეს არის ყველა ადამიანი ამ ჩატში. დააწკაპუნეთ ნებისმიერი მომხმარებლის ავატარზე და „საუბრის დაწყება“, რომ გამოგიგზავნოთ პირადი შეტყობინება.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "სწავლების ინსტრუმენტები გამორთულია იმ შეტყობინებებისთვის, რომლებიც არ არის თქვენს მიზნობრივ ენაზე.", + "vocabEmoji": "ვოკაბულარის ემოჯი", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "მოთხოვნა რეგენერაციისთვის", + "optionalRegenerateReason": "(Optional) მიზეზი", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "თქვენ დააყენეთ ემოჯი {lemma}-ისთვის! ჩვენ ამ ემოჯის გამოყენებას ვაპირებთ სიტყვების პრაქტიკული აქტივობების წარმოსადგენად.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "მოლოდინი შესვლის დასრულებამდე", + "ssoDialogDesc": "ჩვენ გავხსენით ახალი ჩანართი, რათა უსაფრთხოდ შეხვიდეთ.", + "ssoDialogHelpText": "🤔 თუ ახალი ჩანართი არ გინახავთ, გთხოვთ შეამოწმოთ თქვენი პოპ-აპ ბლოკერი.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "გამორთეთ ენის ხელსაწყოები", + "disableLanguageToolsDesc": "გსურთ ავტომატური ენის დახმარების გამორთვა?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "შეთავაზება უარყოფილია. გააქტიურეთ ჩანაწერის უფლებები აუდიო შეტყობინებების ჩაწერისთვის.", + "genericWebRecordingError": "რაღაც არასწორი მოხდა. რეკომენდებულია Chrome ბრაუზერის გამოყენება შეტყობინებების ჩაწერისას.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "ამ აპლიკაციის საუკეთესო გამოცდილებისათვის, გთხოვთ, გააფართოვოთ თქვენი ეკრანის ზომა.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "აქტივობები შემდეგ თემაზე გადასასვლელად", "activitiesToUnlockTopicDesc": "განსაზღვრეთ აქტივობების რაოდენობა, რათა გახსნათ შემდეგი კურსის თემა", "@activitiesToUnlockTopicTitle": { @@ -12953,5 +11770,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "სწორი სიტყვების განმარტების პრაქტიკა", + "constructUseIncLMDesc": "არასწორი სიტყვების განმარტების პრაქტიკა", + "constructUseCorLADesc": "სწორი სიტყვების აუდიო პრაქტიკა", + "constructUseIncLADesc": "არასწორი სიტყვების აუდიო პრაქტიკა", + "constructUseBonus": "ბონუსი სიტყვების პრაქტიკის დროს", + "practiceVocab": "სიტყვების პრაქტიკა", + "selectMeaning": "მნიშვნელობის არჩევა", + "selectAudio": "შესაბამის აუდიოს არჩევა", + "congratulations": "გილოცავთ!", + "anotherRound": "მეორე რაუნდი", + "noActivityRequest": "ამჟამად აქტივობის მოთხოვნა არ არის.", + "quit": "გამოსვლა", + "congratulationsYouveCompletedPractice": "გილოცავთ! თქვენ დაასრულეთ პრაქტიკის სესია.", + "mustHave10Words": "თქვენ უნდა გქონდეთ მინიმუმ 10 სიტყვა, რომ მათ პრაქტიკაში გამოიყენოთ. სცადეთ მეგობართან ან Pangea Bot-თან საუბარი, რომ მეტი აღმოაჩინოთ!", + "botSettings": "ბოტის პარამეტრები", + "activitySettingsOverrideWarning": "ენასა და ენების დონეს განსაზღვრავს აქტივობის გეგმა", + "voice": "ხმა", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index f82fc9758..dc4bac579 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:00:55.145584", + "@@last_modified": "2026-01-07 14:23:16.118299", "about": "소개", "@about": { "type": "String", @@ -3314,26 +3314,14 @@ "commandHint_logoutall": "모든 활성 기기에서 로그아웃", "displayNavigationRail": "모바일에서 내비게이션 레일 표시", "customReaction": "맞춤 반응", - "accountInformation": "계정 정보", - "addGroupDescription": "채팅 설명 추가", - "addNewFriend": "새 친구 추가", - "alreadyHaveAnAccount": "계정이 이미 있으신가요?", - "createNewGroup": "새 채팅 만들기", - "editChatPermissions": "채팅 권한 편집", "writeAMessageLangCodes": "{l1} 또는 {l2}로 입력...", "requests": "요청", - "allCorrect": "그렇게 말할 것 같아요! 좋아요!", - "newWayAllGood": "그렇게 말하지는 않겠지만 좋아 보여요!", - "othersAreBetter": "음, 더 나은 표현이 있을지도 몰라요.", "holdForInfo": "단어 정보를 위해 클릭하고 길게 누르세요.", "greenFeedback": "그게 제가 넣고 싶은 거예요!", "yellowFeedback": "음, 시도해보고 작동하는지 볼 수 있어요! 이 단어를 사용하려면 다시 클릭하세요.", "redFeedback": "그게 맞지 않는 것 같아요...", "itInstructionsTitle": "번역을 도와드릴 수 있어요!", "itInstructionsBody": "단어 정보를 위해 선택지를 클릭하고 길게 누르세요.", - "oneday": "지난 24시간", - "oneweek": "지난 7일", - "onemonth": "지난 한 달", "gaTooltip": "문법 도움말과 함께 L2 사용", "taTooltip": "번역 도움말과 함께 L2 사용", "unTooltip": "기타", @@ -3343,58 +3331,27 @@ "interactiveTranslatorAllowed": "학생 선택", "interactiveTranslatorRequired": "필수", "notYetSet": "아직 설정되지 않음", - "myLearning": "내 분석", "waTooltip": "도움말 없이 L2 사용", - "changeDateRange": "날짜 범위 변경", - "classDescription": "설명", - "addStudents": "링크 또는 코드로 사용자 초대", - "copyClassLink": "초대 링크 복사", - "copyClassCode": "초대 코드 복사", - "inviteStudentByUserName": "사용자 이름으로 사용자 초대", "languageSettings": "언어 설정", "interactiveTranslator": "번역 지원", - "shareVideo": "비디오 공유", - "shareVideoDesc": "이 기능을 켜면 학생들이 채팅에서 비디오를 공유할 수 있습니다.", - "shareFiles": "파일 공유", - "selectLanguageLevel": "언어 수준 선택", "noIdenticalLanguages": "기본 언어와 대상 언어를 다르게 선택하세요", - "iWantALanguagePartnerFrom": "출신:", - "worldWide": "전 세계", - "noResults": "결과가 없습니다! 검색 범위를 넓혀보세요.", "searchBy": "국가 및 언어별 검색", - "iWantAConversationPartner": "대화 상대를 원합니다", - "iWantALanguagePartnerWhoSpeaks": "구사하는 언어:", - "iWantALanguagePartnerWhoIsLearning": "학습 중인 언어:", "joinWithClassCode": "수업 참여", - "joinWithClassCodeHint": "초대 코드를 입력하세요", - "languageLevelPreA1": "초보자 (Pre A1)", - "languageLevelA1": "초급 (A1)", - "languageLevelA2": "초급 (A2)", - "languageLevelB1": "중급 (B1)", - "languageLevelB2": "상급 중급 (B2)", - "languageLevelC1": "고급 (C1)", - "languageLevelC2": "숙달 (C2)", + "languageLevelPreA1": "초급 낮음 (Pre A1)", + "languageLevelA1": "초급 중급 (A1)", + "languageLevelA2": "초급 고급 (A2)", + "languageLevelB1": "중급 중 (B1)", + "languageLevelB2": "고급 저 (B2)", + "languageLevelC1": "고급 중 (C1)", + "languageLevelC2": "우수 (C2)", "changeTheNameOfTheClass": "이름 변경", "changeTheNameOfTheChat": "채팅 이름 변경", - "askPangeaBot": "Pangea Bot에게 맥락에 맞는 정의를 요청하세요.", "sorryNoResults": "죄송합니다, 결과가 없습니다.", "ignoreInThisText": "무시", - "helpMeTranslate": "네!", - "needsItShortMessage": "목표 외", "needsItMessage": "잠깐만요, {targetLanguage}가 아니에요! 번역 도움 필요하신가요?", - "needsIgcMessage": "이 메시지에 문법 오류가 있습니다.", - "tokenTranslationTitle": "단어가 기본 언어에 있습니다.", - "spanTranslationDesc": "아래에서 가능한 번역을 확인하세요.", - "spanTranslationTitle": "일부 단어가 기본 언어에 있습니다.", - "l1SpanAndGrammarTitle": "목표 언어 외", - "l1SpanAndGrammarDesc": "이것은 기본 언어일 수도 있고 문법 오류일 수도 있습니다.", - "otherTitle": "오류가 있습니다.", - "otherDesc": "아래에서 가능한 수정 사항을 확인하세요.", "countryInformation": "내 나라", - "myLanguages": "내 기본 및 대상 언어", "targetLanguage": "대상 언어", "sourceLanguage": "기본 언어", - "languagesISpeak": "내가 구사하는 언어", "updateLanguage": "내 언어", "whatLanguageYouWantToLearn": "어떤 언어를 배우고 싶나요?", "whatIsYourBaseLanguage": "당신의 기본 언어는 무엇인가요?", @@ -3409,13 +3366,8 @@ "errorDisableLanguageAssistanceUserDesc": "여기를 클릭하여 번역 지원과 문법 지원 설정을 업데이트하세요", "errorDisableITClassDesc": "이 채팅이 속한 강좌에 대한 번역 지원이 꺼져 있습니다.", "errorDisableIGCClassDesc": "이 채팅이 속한 강좌에 대한 문법 지원이 꺼져 있습니다.", - "itIsDisabled": "인터랙티브 번역이 비활성화되었습니다", - "igcIsDisabled": "인터랙티브 문법 검사 비활성화됨", - "goToLearningSettings": "학습 설정으로 이동", "error405Title": "언어가 설정되지 않음", "error405Desc": "메인 메뉴 > 학습 설정에서 언어를 설정하세요.", - "loginOrSignup": "로그인 또는 가입하기", - "iAgreeToThe": "나는 동의합니다 ", "termsAndConditions": "이용 약관", "andCertifyIAmAtLeast13YearsOfAge": " 및 만 16세 이상임을 인증합니다.", "error502504Title": "와, 온라인에 학생이 정말 많네요!", @@ -3423,40 +3375,21 @@ "error404Title": "번역 오류!", "error404Desc": "파니아 봇이 어떻게 번역해야 할지 확실하지 않아요...", "errorPleaseRefresh": "문제를 해결 중입니다! 새로고침 후 다시 시도하세요.", - "toggleIT": "인터랙티브 번역", - "toggleIGC": "인터랙티브 문법 검사", - "toggleToolSettingsDescription": "여기서 개별 언어 도구 설정을 전환할 수 있습니다.", "connectedToStaging": "스테이징에 연결됨", "learningSettings": "학습 설정", - "sendVoiceNotes": "음성 노트 보내기", - "sendVoiceNotesDesc": "이 기능을 켜면 학생들이 채팅에서 음성 노트를 보낼 수 있습니다.", - "chatTopic": "채팅 주제", - "chatTopicDesc": "채팅 주제 설정", - "inviteStudentByUserNameDesc": "학생이 이미 계정을 가지고 있다면 검색할 수 있습니다.", "participants": "참가자", - "almostPerfect": "거의 맞았어요! 제가 말했을 내용을 보여드릴게요.", - "prettyGood": "꽤 좋아요! 제가 말했을 내용을 보여드릴게요.", - "letMeThink": "음, 한번 볼게요!", "clickMessageTitle": "도움이 필요하신가요?", "clickMessageBody": "언어 도구가 포함된 메시지를 클릭하세요. 번역, 재생 등!", - "understandingMessagesTitle": "정의와 번역!", - "understandingMessagesBody": "밑줄 친 단어를 클릭하면 정의를 볼 수 있습니다. 메시지 옵션(우측 상단)으로 번역하세요.", "allDone": "모든 작업 완료!", "vocab": "어휘", "low": "이 단어들을 사용했지만 사용자가 이해하지 못하는 증거가 있습니다.", "medium": "이 단어들이 사용되었습니다. 단어를 완전히 이해했는지 여부는 불분명합니다.", "high": "이 단어들을 사용자가 이해하는 증거가 있습니다.", - "unknownProficiency": "이 단어들은 판게아 채팅에서 사용되지 않았습니다.", - "changeView": "보기 전환.", - "clearAll": "모든 단어를 지우시겠습니까?", - "generateVocabulary": "제목과 설명에서 어휘 생성", - "generatePrompts": "프롬프트 생성", "subscribe": "구독하기", "getAccess": "지금 구독하세요!", "subscriptionDesc": "메시징은 무료입니다! 인터랙티브 번역, 문법 검사 및 학습 분석을 잠금 해제하려면 구독하세요.", "subscriptionManagement": "구독 관리", "currentSubscription": "현재 구독", - "changeSubscription": "구독 변경", "cancelSubscription": "구독 취소", "selectYourPlan": "요금제 선택", "subsciptionPlatformTooltip": "구독 플랜을 관리하려면 원래 기기에 로그인하세요", @@ -3465,9 +3398,6 @@ "paymentHistory": "지불 내역", "emptyChatDownloadWarning": "빈 채팅은 다운로드할 수 없습니다", "update": "업데이트", - "updateDesc": "이제 {localVersion}에서 {storeVersion}로 이 앱을 업데이트할 수 있습니다", - "maybeLater": "나중에 할게요", - "mainMenu": "메인 메뉴", "toggleImmersionMode": "몰입 모드 전환", "toggleImmersionModeDesc": "활성화하면 모든 메시지가 대상 언어로 표시됩니다. 이 설정은 언어 교환에 가장 유용합니다.", "itToggleDescription": "이 언어 학습 도구는 기본 언어의 단어를 식별하고 대상 언어로 번역하는 데 도움을 줍니다. 드물게 AI가 번역 오류를 일으킬 수 있습니다.", @@ -3482,212 +3412,13 @@ "definitionsToolDescription": "활성화하면 파란색 밑줄이 그어진 단어를 클릭하여 정의를 볼 수 있습니다. 메시지를 클릭하여 정의에 접근하세요.", "translationsToolDescrption": "활성화하면 메시지를 클릭하고 번역 아이콘을 눌러 기본 언어로 된 메시지를 볼 수 있습니다.", "welcomeBack": "다시 오신 것을 환영합니다! 2023-2024 파일럿에 참여하셨다면, 특별 파일럿 구독을 위해 저희에게 연락하세요. 교사이거나 귀하의 기관이 수업용 라이선스를 구매한 경우, 교사 구독을 위해 저희에게 연락하세요.", - "kickAllStudents": "모든 학생 퇴장", - "kickAllStudentsConfirmation": "모든 학생을 퇴장시키시겠습니까?", - "inviteAllStudents": "모든 학생 초대", - "inviteAllStudentsConfirmation": "모든 학생을 초대하시겠습니까?", - "inviteUsersFromPangea": "관리자 추가", - "redeemPromoCode": "프로모션 코드 사용", - "enterPromoCode": "프로모션 코드 입력", "downloadTxtFile": "텍스트 파일 다운로드", "downloadCSVFile": "CSV 파일 다운로드", "promotionalSubscriptionDesc": "현재 평생 프로모션 구독을 보유하고 있습니다. 구독 변경에 대한 도움을 원하시면 support@pangea.chat으로 메시지를 보내세요.", "originalSubscriptionPlatform": "구매 플랫폼: {purchasePlatform}", "oneWeekTrial": "일주일 무료 체험", "downloadXLSXFile": "엑셀 파일 다운로드", - "abDisplayName": "압하스어", - "aaDisplayName": "아파르어", - "afDisplayName": "아프리칸스어", - "akDisplayName": "아칸어", - "sqDisplayName": "알바니아어", - "amDisplayName": "암하라어", - "arDisplayName": "아랍어", - "anDisplayName": "아라곤어", - "hyDisplayName": "아르메니아어", - "asDisplayName": "아삼어", - "avDisplayName": "아바리크어", - "aeDisplayName": "아베스타어", - "ayDisplayName": "아이마라어", - "azDisplayName": "아제르바이잔어", - "bmDisplayName": "밤바라어", - "baDisplayName": "바시키르어", - "euDisplayName": "바스크어", - "beDisplayName": "벨라루어", - "bnDisplayName": "벵골어", - "bhDisplayName": "비하리어", - "biDisplayName": "비슬라마어", - "bsDisplayName": "보스니아어", - "brDisplayName": "브르타뉴어", - "bgDisplayName": "불가리아어", - "myDisplayName": "버마어", - "caDisplayName": "카탈로니아어, 발렌시아어", - "chDisplayName": "차모로어", - "ceDisplayName": "체첸어", - "nyDisplayName": "치체와어, 체와어, 니안자어", - "zhDisplayName": "중국어", - "cvDisplayName": "추바시어", - "kwDisplayName": "콘월어", - "coDisplayName": "코르시카어", - "crDisplayName": "크리어", - "hrDisplayName": "크로아티아어", - "csDisplayName": "체코어", - "daDisplayName": "덴마크어", - "dvDisplayName": "디베히어; 디베히; 몰디브어;", - "nlDisplayName": "네덜란드어", - "enDisplayName": "영어", - "eoDisplayName": "에스페란토어", - "etDisplayName": "에스토니아어", - "eeDisplayName": "에웨어", - "foDisplayName": "페로어", - "fjDisplayName": "피지어", - "fiDisplayName": "핀란드어", - "frDisplayName": "프랑스어", - "ffDisplayName": "풀라어; 풀라; 풀라르; 풀라르", - "glDisplayName": "갈리시아어", - "kaDisplayName": "조지아어", - "deDisplayName": "독일어", - "elDisplayName": "현대 그리스어", - "gnDisplayName": "과라니어", - "guDisplayName": "구자라티어", - "htDisplayName": "아이티 크리올어", - "haDisplayName": "하우사어", - "heDisplayName": "히브리어 (현대)", - "hzDisplayName": "헤레로어", - "hiDisplayName": "힌디어", - "hoDisplayName": "히리 모투", - "huDisplayName": "헝가리어", - "iaDisplayName": "인터링구아", - "idDisplayName": "인도네시아어", - "ieDisplayName": "인터링귀에", - "gaDisplayName": "아일랜드어", - "igDisplayName": "이그보어", - "ikDisplayName": "이누피아크어", - "ioDisplayName": "이도어", - "isDisplayName": "아이슬란드어", - "itDisplayName": "이탈리아어", - "iuDisplayName": "이누크티투트어", - "jaDisplayName": "일본어", - "jvDisplayName": "자바어", - "klDisplayName": "칼라알리수트어, 그린란드어", - "knDisplayName": "칸나다어", - "krDisplayName": "카누리어", - "ksDisplayName": "카슈미르어", - "kkDisplayName": "카자흐어", - "kmDisplayName": "크메르어", - "kiDisplayName": "키쿠유어, 기쿠유어", - "rwDisplayName": "키냐르완다어", - "kyDisplayName": "키르기스어", - "kvDisplayName": "코미어", - "kgDisplayName": "콩고어", - "koDisplayName": "한국어", - "kuDisplayName": "쿠르드어", - "kjDisplayName": "콰냐마어, 쿠아냐마어", - "laDisplayName": "라틴어", - "lbDisplayName": "룩셈부르크어", - "lgDisplayName": "룽다어", - "liDisplayName": "림부르어, 림부르어", - "lnDisplayName": "링갈라어", - "loDisplayName": "라오어", - "ltDisplayName": "리투아니아어", - "luDisplayName": "루바-칸타가어", - "lvDisplayName": "라트비아어", - "gvDisplayName": "맨스", - "mkDisplayName": "마케도니아어", - "mgDisplayName": "말라가시어", - "msDisplayName": "말레이어", - "mlDisplayName": "말라얄람어", - "mtDisplayName": "몰타어", - "miDisplayName": "마오리어", - "mrDisplayName": "마라티어 (माराठी)", - "mhDisplayName": "마셜어", - "mnDisplayName": "몽골어", - "naDisplayName": "나우루어", - "nvDisplayName": "나바호어", - "nbDisplayName": "노르웨이어 북부 방언", - "ndDisplayName": "북부 은데벨레어", - "neDisplayName": "네팔어", - "ngDisplayName": "은도가어", - "nnDisplayName": "노르웨이어 니노르스크 방언", - "noDisplayName": "노르웨이어", - "iiDisplayName": "누오수어", - "nrDisplayName": "남부 은데벨레어", - "ocDisplayName": "오크시탄", - "ojDisplayName": "오지브와, 오지브와어", - "cuDisplayName": "고대 교회 슬라브어, 교회 슬라브어, 교회 슬라브어, 고대 불가리아어, 고대 슬라브어", - "omDisplayName": "오로모", - "orDisplayName": "오리야어", - "osDisplayName": "오세트어, 오세트어", - "paDisplayName": "펀자브어, 펀자브어", - "piDisplayName": "팔리어", - "faDisplayName": "페르시아어", - "plDisplayName": "폴란드어", - "psDisplayName": "파슈토어, 푸슈토어", - "ptDisplayName": "포르투갈어", - "quDisplayName": "케추아어", - "rmDisplayName": "로망슈어", - "rnDisplayName": "키룬디어", - "roDisplayName": "루마니아어, 몰도바어", - "ruDisplayName": "러시아어", - "saDisplayName": "산스크리트어 (사스키타)", - "scDisplayName": "사르디니아어", - "sdDisplayName": "신디어", - "seDisplayName": "북부 사미어", - "smDisplayName": "사모아어", - "sgDisplayName": "상고어", - "srDisplayName": "세르비아어", - "gdDisplayName": "스코틀랜드 게일어, 게일어", - "snDisplayName": "쇼나어", - "siDisplayName": "신할라어, 싱할라어", - "skDisplayName": "슬로바키아어", - "slDisplayName": "슬로베니아어", - "soDisplayName": "소말리어", - "stDisplayName": "남소토어", - "esDisplayName": "스페인어", - "suDisplayName": "순다어", - "swDisplayName": "스와힐리어", - "ssDisplayName": "스와티어", - "svDisplayName": "스웨덴어", - "taDisplayName": "타밀어", - "teDisplayName": "텔루구어", - "tgDisplayName": "타지크어", - "thDisplayName": "태국어", - "tiDisplayName": "티그리냐어", - "boDisplayName": "티베트어, 표준, 중앙", - "tkDisplayName": "투르크멘어", - "tlDisplayName": "타갈로그어", - "tnDisplayName": "츠와나어", - "toDisplayName": "통가어 (통가 제도)", - "trDisplayName": "터키어", - "tsDisplayName": "총가어", - "ttDisplayName": "타타르어", - "twDisplayName": "트위어", - "tyDisplayName": "타히티어", - "ugDisplayName": "위구르어, 우이그르어", - "ukDisplayName": "우크라이나어", - "urDisplayName": "우르두어", - "uzDisplayName": "우즈베크어", - "veDisplayName": "벤다어", - "viDisplayName": "베트남어", - "voDisplayName": "볼라푸크어", - "waDisplayName": "왈롱어", - "cyDisplayName": "웨일스어", - "woDisplayName": "울로프", - "fyDisplayName": "서부 프리지아어", - "xhDisplayName": "코사어", - "yiDisplayName": "이디시어", - "yoDisplayName": "요루바어", - "zaDisplayName": "좡어, 츄앙어", "unkDisplayName": "알 수 없음", - "zuDisplayName": "줄루어", - "hawDisplayName": "하와이어", - "hmnDisplayName": "흐몽어", - "multiDisplayName": "다중", - "cebDisplayName": "세부아노어", - "dzDisplayName": "종카어", - "iwDisplayName": "히브리어", - "jwDisplayName": "자바어", - "moDisplayName": "몰도바어", - "shDisplayName": "세르보크로아티아어", "wwCountryDisplayName": "전 세계", "afCountryDisplayName": "아프가니스탄", "axCountryDisplayName": "올란드 제도", @@ -3936,40 +3667,24 @@ "zmCountryDisplayName": "잠비아", "zwCountryDisplayName": "짐바브웨", "pay": "결제", - "allPrivateChats": "개인 채팅", - "unknownPrivateChat": "알 수 없는 개인 채팅", "invitedToSpace": "{user}님이 {space} 강좌에 초대하셨습니다! 수락하시겠습니까?", - "declinedInvitation": "초대 거절", - "acceptedInvitation": "초대 수락", "youreInvited": "📩 초대받았습니다!", "invitedToChat": "{user}님이 {name} 채팅에 초대하셨습니다! 수락하시겠습니까?", "monthlySubscription": "월간", "yearlySubscription": "연간", "defaultSubscription": "판게아 채팅 구독", "freeTrial": "무료 체험", - "grammarAnalytics": "오류 분석", "total": "총계: ", "noDataFound": "데이터를 찾을 수 없습니다", - "promoSubscriptionExpirationDesc": "현재 구독은 프로모션용이며 {expiration}에 만료됩니다. 도움을 원하시면 support@pangea.chat으로 메시지를 보내세요.", - "emptyChatNameWarning": "이 채팅의 이름을 입력하세요", "blurMeansTranslateTitle": "왜 메시지가 흐림 처리되나요?", "blurMeansTranslateBody": "몰입 모드가 켜져 있는 동안, 기본 언어로 보내진 메시지는 흐림 처리되며 Pangea Bot이 대상 언어로 번역합니다. 몰입 모드는 개별 및 강좌 설정에서 전환할 수 있습니다.", - "someErrorTitle": "음, 뭔가 잘못됐어요", - "someErrorBody": "오류이거나 기본 언어에 문제가 있을 수 있습니다.", "bestCorrectionFeedback": "맞습니다!", "distractorFeedback": "그건 조금 틀렸어요.", "bestAnswerFeedback": "맞습니다!", "definitionDefaultPrompt": "이 단어는 무슨 뜻인가요?", "practiceDefaultPrompt": "가장 좋은 답변은 무엇인가요?", "correctionDefaultPrompt": "가장 적절한 대체 답변은 무엇인가요?", - "itStartDefaultPrompt": "번역 도움을 원하시나요?", - "lockedChatWarning": "🔒 이 채팅이 잠겼습니다", - "lockChat": "채팅 잠금", - "suggestToChat": "이 채팅 제안", - "suggestToChatDesc": "제안된 채팅은 채팅 목록에 표시됩니다", "acceptSelection": "수정 승인", - "acceptSelectionAnyway": "이것을 어쨌든 사용", - "makingActivity": "활동 만들기", "why": "왜?", "definition": "정의", "exampleSentence": "예문", @@ -3977,128 +3692,55 @@ "reportMessageTitle": "{reportingUserId}님이 채팅 {roomName}에서 {reportedUserId}의 메시지를 신고했습니다", "reportMessageBody": "메시지: {reportedMessage}\n이유: {reason}", "noTeachersFound": "신고할 선생님을 찾을 수 없습니다", - "viewArchive": "아카이브 보기", "trialExpiration": "무료 체험이 {expiration}에 만료됩니다", "freeTrialDesc": "신규 사용자는 일주일간 무료 체험을 받습니다", "activateTrial": "무료 7일 체험 시작", "successfullySubscribed": "구독이 성공적으로 완료되었습니다!", "clickToManageSubscription": "여기를 클릭하여 구독을 관리하세요.", - "errorGettingAudio": "오디오를 가져오는 중 오류가 발생했습니다. 새로고침 후 다시 시도하세요.", "signUp": "가입하기", "pleaseChooseAtLeastChars": "최소 {min}자 이상을 선택하세요.", "noEmailWarning": "유효한 이메일 주소를 입력하세요. 그렇지 않으면 비밀번호 재설정이 불가능합니다. 원하지 않으면 다시 버튼을 눌러 계속하세요.", "pleaseEnterValidEmail": "유효한 이메일 주소를 입력하세요.", "pleaseChooseAUsername": "사용자 이름을 선택하세요", - "chooseAUsername": "사용자 이름 선택", "define": "정의", "listen": "듣기", - "addConversationBot": "대화 봇 활성화", - "addConversationBotDesc": "이 채팅에 봇 추가", - "convoBotSettingsDescription": "대화 주제와 난이도 편집", - "enterAConversationTopic": "대화 주제 입력", - "conversationTopic": "대화 주제", - "enableModeration": "중재 활성화", - "enableModerationDesc": "메시지 전송 전에 자동 중재를 통해 검토", - "conversationLanguageLevel": "이 대화의 언어 수준은 무엇입니까?", - "showDefinition": "정의 보기", - "subscriptionPopupTitle": "이 문장에 문법 오류가 있을 수 있습니다...", - "subscriptionPopupDesc": "오늘 구독하여 번역 및 문법 교정을 해제하세요!", - "seeOptions": "옵션 보기", - "continuedWithoutSubscription": "구독 없이 계속", "trialPeriodExpired": "체험 기간이 만료되었습니다", - "selectToDefine": "단어를 클릭하여 정의를 확인하세요!", "translations": "번역", "messageAudio": "메시지 오디오", "definitions": "정의", "subscribedToUnlockTools": "구독하여 인터랙티브 번역, 문법 검사, 오디오 재생, 맞춤 연습 활동, 학습 분석을 이용하세요!", "translationTooltip": "번역", - "audioTooltip": "오디오 재생", "speechToTextTooltip": "전사", - "certifyAge": "나는 만 {age}세 이상임을 인증합니다", "kickBotWarning": "Pangea Bot을 제거하면 이 채팅에서 대화 봇이 삭제됩니다.", - "joinToView": "이 방에 참여하여 세부 정보를 확인하세요", "refresh": "새로 고침", - "autoPlayTitle": "자동 재생 메시지", - "autoPlayDesc": "활성화하면 선택된 메시지의 텍스트-음성 변환 오디오가 자동으로 재생됩니다.", "messageAnalytics": "메시지 분석", "words": "단어", "score": "점수", "accuracy": "정확도", "points": "포인트", "noPaymentInfo": "결제 정보가 필요 없습니다!", - "conversationBotModeSelectDescription": "채팅 활동", - "conversationBotModeSelectOption_discussion": "토론", - "conversationBotModeSelectOption_custom": "사용자 정의", - "conversationBotModeSelectOption_conversation": "대화", - "conversationBotModeSelectOption_textAdventure": "텍스트 어드벤처", - "conversationBotModeSelectOption_storyGame": "스토리 게임", - "conversationBotDiscussionZone_title": "토론 설정", - "conversationBotDiscussionZone_discussionTopicLabel": "토론 주제", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "토론 주제 설정", - "conversationBotDiscussionZone_discussionKeywordsLabel": "토론 키워드", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "토론 키워드 설정", - "conversationBotDiscussionZone_discussionKeywordsHintText": "토론을 안내하는 쉼표로 구분된 키워드 목록", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "일정에 따라 토론 유도 메시지 전송", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "토론 유도 메시지 간 시간(시간 단위)", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "반응에 따라 반응", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "토론 유도 메시지에 대한 반응", - "conversationBotCustomZone_title": "맞춤 설정", - "conversationBotCustomZone_customSystemPromptLabel": "시스템 프롬프트", - "conversationBotCustomZone_customSystemPromptPlaceholder": "맞춤 시스템 프롬프트 설정", - "conversationBotCustomZone_customSystemPromptEmptyError": "맞춤 시스템 프롬프트가 없습니다", - "botConfig": "봇 및 활동 설정", - "botConfigNoPermissionTitle": "권한 없음", - "botConfigNoPermissionMessage": "봇 구성을 변경하려면 방 관리자에게 문의하세요", - "addConversationBotDialogTitleInvite": "대화 봇 초대 확인", - "addConversationBotButtonInvite": "초대", - "addConversationBotDialogInviteConfirmation": "초대", - "addConversationBotButtonTitleRemove": "대화 봇 제거 확인", - "addConversationBotButtonRemove": "제거", - "addConversationBotDialogRemoveConfirmation": "제거", - "conversationBotConfigConfirmChange": "확인", - "conversationBotStatus": "봇 초대", - "conversationBotTextAdventureZone_title": "텍스트 어드벤처", - "conversationBotTextAdventureZone_instructionLabel": "게임 마스터 지침", - "conversationBotTextAdventureZone_instructionPlaceholder": "게임 마스터 지침 설정", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "게임 마스터 지침이 누락되었습니다", - "studentAnalyticsNotAvailable": "학생 데이터는 현재 사용할 수 없습니다", - "roomDataMissing": "가입하지 않은 방의 일부 데이터가 누락될 수 있습니다.", "updatePhoneOS": "기기의 OS 버전을 업데이트해야 할 수 있습니다.", "wordsPerMinute": "분당 단어 수", "autoIGCToolName": "판게아 작문 지원 자동 실행", "autoIGCToolDescription": "메시지를 보내기 전에 판게아 채팅 문법 및 번역 작문 지원을 자동으로 실행합니다.", - "runGrammarCorrection": "메시지 확인", - "grammarCorrectionFailed": "수정할 문제", - "grammarCorrectionComplete": "좋아 보입니다!", "tooltipInstructionsTitle": "이게 무슨 기능인지 잘 모르겠나요?", "tooltipInstructionsMobileBody": "항목을 길게 눌러 툴팁을 볼 수 있습니다.", "tooltipInstructionsBrowserBody": "항목 위에 마우스를 올려 툴팁을 볼 수 있습니다.", "chatCapacity": "채팅 용량", "roomFull": "이 방은 이미 용량이 가득 찼습니다.", - "topicNotSet": "주제가 설정되지 않았습니다.", - "chatCapacityNotSet": "이 채팅에는 용량 제한이 없습니다.", "chatCapacityHasBeenChanged": "채팅 용량이 변경되었습니다.", "chatCapacitySetTooLow": "채팅 용량은 최소 {count} 이상이어야 합니다.", "chatCapacityExplanation": "채팅 용량은 채팅에 허용되는 멤버 수를 제한합니다.", - "chatExceedsCapacity": "이 채팅은 용량을 초과했습니다.", "tooManyRequest": "요청이 너무 많습니다. 잠시 후 다시 시도하세요.", "enterNumber": "정수 값을 입력하세요.", "buildTranslation": "위 선택지에서 번역을 만드세요", - "nonexistentSelection": "선택이 더 이상 존재하지 않습니다.", - "changeAnalyticsLanguage": "분석 언어 변경", "practice": "연습", "noLanguagesSet": "설정된 언어가 없습니다", - "noActivitiesFound": "이제 그만! 나중에 다시 오세요.", - "hintTitle": "힌트:", "speechToTextBody": "음성 메시지의 경우, 전사본과 화자의 분당 단어 수 점수도 볼 수 있습니다.", "versionNotFound": "버전을 찾을 수 없습니다", "fetchingVersion": "버전 정보를 가져오는 중...", "versionFetchError": "버전 정보를 가져오는 데 오류가 발생했습니다", "versionText": "버전: {version}+{buildNumber}", - "languageButtonLabel": "언어: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "자동 재생 번역", - "interactiveTranslatorAutoPlayDesc": "사용자에게 묻지 않고 인터랙티브 번역기를 시작합니다.", - "changeAnalyticsView": "분석 보기 변경", "l1TranslationBody": "기본 언어의 메시지는 번역되지 않습니다.", "deleteSubscriptionWarningTitle": "활성 구독이 있습니다", "deleteSubscriptionWarningBody": "계정을 삭제하더라도 구독이 자동으로 취소되지 않습니다.", @@ -4106,9 +3748,7 @@ "error520Title": "다시 시도해 주세요.", "error520Desc": "죄송합니다, 메시지를 이해하지 못했습니다...", "wordsUsed": "사용된 단어", - "errorTypes": "오류 유형", "level": "레벨", - "canceledSend": "전송 취소됨", "morphsUsed": "사용된 형태소", "translationChoicesBody": "옵션을 클릭하고 길게 눌러 힌트를 확인하세요.", "grammar": "문법", @@ -4118,7 +3758,6 @@ "reportContentIssueTitle": "콘텐츠 문제 신고", "feedback": "선택적 피드백", "reportContentIssueDescription": "이런! AI는 개인화된 학습 경험을 촉진할 수 있지만... 환각도 일으킵니다. 피드백이 있으면 제공해 주세요. 다시 시도하겠습니다.", - "changeContent": "이런! AI는 개인화된 학습 경험을 촉진할 수 있지만... 환각도 일으킵니다. 어떤 내용이어야 할까요?", "clickTheWordAgainToDeselect": "선택된 단어를 다시 클릭하여 선택 해제하세요.", "l2SupportNa": "사용 불가", "l2SupportAlpha": "알파", @@ -4352,7 +3991,6 @@ "grammarCopySPC": "특이성", "grammarCopyPARTTYPE": "부분 유형", "grammarCopyINTREL": "의문-관계대명사", - "grammarCopyNUMFORMpsor": "소유격의 수", "grammarCopyUNKNOWN": "알 수 없음", "grammarCopyNUMBERPSOR": "소유격의 수", "grammarCopyPOSS": "소유격", @@ -4398,28 +4036,14 @@ "grammarCopyVOICEdir": "직접적", "grammarCopyVOICEinv": "반전적", "grammarCopyVOICErcp": "상호적", - "enterPrompt": "시스템 프롬프트를 입력하세요", - "selectBotLanguage": "봇 언어 선택", - "chooseVoice": "목소리 선택", - "enterLanguageLevel": "언어 수준을 입력하세요", - "enterDiscussionTopic": "토론 주제를 입력하세요", - "selectBotChatMode": "채팅 모드 선택", - "messageNotInTargetLang": "목표 언어가 아닙니다", "other": "기타", "levelShort": "LVL {level}", - "botModeValidation": "채팅 모드를 선택하세요", "clickBestOption": "메시지를 번역할 최적의 옵션을 선택하세요!", "completeActivitiesToUnlock": "최소 한 개의 활동을 완료하여 번역을 잠금 해제하세요!", - "botSettingsSubtitle": "봇을 초대하여 채팅 활동을 조정하세요", - "invitePeople": "사용자 초대", "noCapacityLimit": "용량 제한 없음", "downloadGroupText": "그룹 텍스트 다운로드", "notificationsOn": "알림 켜기", "notificationsOff": "알림 끄기", - "chatCanBeFoundViaSearch": "채팅 검색으로 찾기 가능", - "requireCodeToJoin": "코드 필요", - "canFindInSearch": "검색에서 찾기 가능", - "addChatToSpace": "채팅 추가", "createChatAndInviteUsers": "채팅 생성 및 사용자 초대", "updatedNewSpaceDescription": "코스는 채팅을 통합하고 비공개 또는 공개 커뮤니티를 구축할 수 있게 합니다.", "joinWithCode": "코드로 참여", @@ -4455,39 +4079,19 @@ "constructUseCollected": "채팅에서 수집됨", "constructUseNanDesc": "적용 불가", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "사용자 이름과 비밀번호로 로그인", - "registrationEmailMessage": "그곳으로 전송된 링크로 이메일을 확인하세요. 경우에 따라 이메일이 도착하는 데 최대 5분이 걸릴 수 있습니다. 스팸 폴더도 확인하세요.", "enableTTSToolName": "텍스트 음성 변환 활성화", "enableTTSToolDescription": "앱이 대상 언어의 일부 텍스트에 대해 텍스트 음성 변환 출력을 생성할 수 있도록 허용합니다.", - "couldNotFindTTS": "현재 대상 언어에 대한 텍스트 음성 변환 엔진을 찾을 수 없습니다.", - "ttsInstructionsHyperlink": "여기를 클릭하여 기기에서 새 음성을 다운로드하는 방법을 확인하세요.", - "createAnAccount": "계정 만들기", - "signIn": "로그인", - "signUpWithEmail": "이메일로 가입", - "signUpWithGoogle": "구글로 가입", - "signUpWithApple": "애플로 가입", "yourUsername": "사용자 이름", "yourEmail": "이메일", - "pleaseEnterAnEmail": "이메일 주소를 입력하세요", - "signInWithGoogle": "구글로 로그인", - "signInWithApple": "애플로 로그인", - "chooseYourAvatar": "아바타를 선택하세요", "iWantToLearn": "배우고 싶어요", - "letsStart": "시작합시다", - "pleaseAgreeToTOS": "이용약관에 동의해주세요", "pleaseEnterEmail": "유효한 이메일 주소를 입력하세요.", - "pleaseSelectALanguage": "언어를 선택하세요", "myBaseLanguage": "내 기본 언어", - "clickWordsInstructions": "🧻 아무 단어를 클릭하여 자세한 정보를 확인하세요.🤐", - "chooseBestDefinition": "이 단어의 의미는 무엇인가요?", "meaningSectionHeader": "의미:", "formSectionHeader": "채팅에 사용된 형태:", - "noEmojiSelectedTooltip": "이모지가 선택되지 않았습니다", "writingExercisesTooltip": "쓰기", "listeningExercisesTooltip": "듣기", "readingExercisesTooltip": "읽기", "meaningNotFound": "의미를 찾을 수 없습니다.", - "formsNotFound": "형태를 찾을 수 없습니다.", "chooseBaseForm": "기본 형태를 선택하세요", "notTheCodeError": "죄송합니다, 그 코드는 아닙니다!", "totalXP": "총 경험치", @@ -4527,9 +4131,6 @@ "pickAnEmoji": "'{lemma}'에 대한 좋아하는 이모티콘은 무엇입니까?", "chooseLemmaMeaningInstructionsBody": "메시지의 단어와 의미를 일치시키세요!", "doubleClickToEdit": "더블 클릭하여 편집하세요.", - "removeFeature": "{feature} 제거", - "chooseCorrectLabel": "올바른 레이블을 선택하세요.", - "levelPopupTitle": "축하합니다! 레벨 {level}에 도달하셨습니다", "activityPlannerTitle": "활동 계획자", "topicLabel": "주제", "topicPlaceholder": "주제 선택...", @@ -4537,7 +4138,6 @@ "modePlaceholder": "모드 선택...", "learningObjectiveLabel": "학습 목표", "learningObjectivePlaceholder": "학습 목표 선택...", - "mediaLabel": "학습자가 공유해야 하는 미디어", "languageOfInstructionsLabel": "활동 지침 언어", "targetLanguageLabel": "목표 언어", "cefrLevelLabel": "CEFR 수준", @@ -4552,20 +4152,15 @@ "instructions": "지침", "numberOfLearners": "학습자 수", "mustBeInteger": "정수여야 합니다. 예: 1, 2, 3, ...", - "noLemmasFound": "{xp} XP 이상인 어휘가 없습니다. 계속 연습하세요!", "constructUsePvmDesc": "음성 메시지로 제작됨", - "lockedMorphFeature": "잠금 해제 대기 중", "leaveSpaceDescription": "코스를 떠나면 그 안의 모든 채팅이 종료됩니다. 다른 사용자는 당신이 코스를 떠났다는 것을 볼 수 있습니다.", - "whatIsLemma": "레마란 무엇인가요?", "constructUseCorMmDesc": "메시지 의미가 정확함", "constructUseIncMmDesc": "메시지 의미가 부정확함", "constructUseIgnMmDesc": "무시된 메시지 의미", "clickForMeaningActivity": "여기를 클릭하여 의미 도전", "meaning": "의미", "chatWith": "{displayname}와 그룹 채팅", - "slightlyOffensive": "약간 공격적임", "clickOnEmailLink": "이메일의 링크를 클릭한 후 계속 진행하세요.\n\n이메일이 도착하지 않았다면 스팸 폴더를 확인하세요.", - "whoIsAllowedToJoinThisChat": "이 채팅에 참여할 수 있는 사람", "dontForgetPassword": "비밀번호를 잊지 마세요!", "enableAutocorrectToolName": "기기 자동 교정 활성화", "enableAutocorrectDescription": "학습하는 언어를 지원하는 기기라면, 타이핑 시 일반적인 오류를 수정하는 기기 자동 교정을 활성화할 수 있습니다.", @@ -4593,48 +4188,26 @@ "autocorrectNotAvailable": "안타깝게도 현재 이 플랫폼은 이 기능을 지원하지 않습니다. 향후 개발을 기대하세요!", "pleaseUpdateApp": "앱을 계속 사용하려면 업데이트하세요.", "chooseEmojiInstructionsBody": "이모지를 가장 잘 나타내는 단어와 일치시키세요. 걱정하지 마세요! 의견이 다르다고 해서 점수가 깎이진 않아요! 😅", - "pickAnEmojiFor": "{lemma}에 대한 이모지를 선택하세요", "analyticsVocabListBody": "이것이 당신의 모든 어휘입니다! 각 단어에 대해 XP를 얻으면 싹에서 꽃으로 피어납니다. 자세한 내용을 보려면 어떤 단어를 클릭하세요.", "morphAnalyticsListBody": "이것은 당신이 배우고 있는 언어의 모든 문법 개념입니다! 채팅하면서 만날 때마다 잠금이 해제됩니다. 자세한 내용을 보려면 클릭하세요.", "knockSpaceSuccess": "이 강좌에 참여 요청을 보냈습니다! 관리자가 요청을 받으면 응답할 것입니다 😄", - "joinByCode": "코드로 참여하기", "chooseWordAudioInstructionsBody": "전체 메시지를 듣고, 그 다음에 오디오와 단어를 일치시키세요.", "chooseMorphsInstructionsBody": "문법 질문을 위해 퍼즐 조각을 클릭하세요!", - "inviteAndLaunch": "초대하고 시작하기", - "createOwnChat": "나만의 채팅 만들기", "pleaseEnterInt": "숫자를 입력하세요", "home": "홈", "join": "참여하기", "readingAssistanceOverviewBody": "아래 버튼을 클릭하여 이모지, 오디오, 단어 의미, 문법 개념 맞추기 미니게임을 즐기세요. 또는 어떤 단어를 클릭하여 자세한 정보를 확인하세요.", - "learnByTexting": "문자 보내기로 배우기", - "levelSummaryTrigger": "요약 보기", "levelSummaryPopupTitle": "레벨 {level} 요약", - "referFriends": "친구 추천하기", - "referFriendDialogTitle": "대화에 친구를 초대하세요", - "referFriendDialogDesc": "함께 새 언어를 배우고 싶어하는 친구가 있나요? 그렇다면 이 초대 링크를 복사하여 보내어 오늘 바로 채팅을 시작하세요.", - "youUnlocked": "당신이 잠금 해제한 항목", "resetInstructionTooltipsTitle": "설명 툴팁 재설정", "resetInstructionTooltipsDesc": "클릭하여 새 사용자처럼 설명 툴팁을 표시하세요.", "selectForGrammar": "활동 및 세부 정보에 대한 문법 아이콘 선택.", - "newChatActivityTitle": "재미있는 활동을 추가하시겠어요?", - "newChatActivityDesc": "활동 플래너와 함께 그룹 채팅을 모험으로 만드세요! 매력적인 주제와 목표를 설정하고, 멋진 이미지를 통해 대화를 활기차게 만드세요. 상상력을 자극하는 토론을 유도하고 즐거움을 자연스럽게 유지하세요!", - "exploreMore": "더 탐색하기", "randomize": "무작위로 선택", "clear": "지우기", "makeYourOwnActivity": "나만의 활동 만들기", "featuredActivities": "추천 활동", - "goToChat": "채팅으로 이동", "save": "저장", - "selectActivity": "활동 선택", - "wordFocusListeningMultipleChoice": "어떤 오디오가 단어와 일치합니까?", "startChat": "채팅 시작", "translationProblem": "번역 문제", - "perfectTranslation": "완벽한 번역!", - "greatJobTranslation": "이 번역 정말 잘했어요!", - "goodJobTranslation": "이 번역에 대해 잘하셨습니다.", - "makingProgress": "진행 중이군요!", - "keepPracticing": "계속 연습하세요!", - "niceJob": "잘했어요!", "askToJoin": "참여 요청", "emptyChatWarningTitle": "채팅이 비어 있습니다", "emptyChatWarningDesc": "아무도 채팅에 초대하지 않으셨습니다. 채팅 설정으로 이동하여 연락처 또는 봇을 초대하세요. 나중에 하셔도 됩니다.", @@ -4653,8 +4226,6 @@ "languageLevelC2Desc": "거의 모든 것을 듣거나 읽고, 유창하고 정확하게 자신을 표현할 수 있습니다.", "newVocab": "새 어휘", "newGrammar": "새 문법 개념", - "congratulationsOnReaching": "레벨 {level}에 도달하셨습니다!", - "seeDetails": "세부 정보 보기", "choosePracticeMode": "위의 버튼 중 하나를 클릭하여 연습 활동을 시작하세요", "ban": "차단", "unban": "차단 해제", @@ -4668,8 +4239,6 @@ "timesUsedWithAssistance": "도움과 함께 사용된 횟수", "shareInviteCode": "초대 코드 공유: {code}", "leaderboard": "리더보드", - "welcomeUser": "{user}님 환영합니다", - "joinSpaceOnboardingDesc": "공개 강좌의 초대 코드 또는 링크가 있나요?", "skipForNow": "지금은 건너뛰기", "permissions": "권한", "spaceChildPermission": "이 강좌에 새 채팅을 추가할 수 있는 사람", @@ -4677,12 +4246,8 @@ "defaultOption": "기본값", "deleteChatDesc": "이 채팅을 삭제하시겠습니까? 모든 참가자에게 삭제되며, 채팅 내 모든 메시지는 더 이상 연습이나 학습 분석에 사용할 수 없습니다.", "deleteSpaceDesc": "이 강좌와 선택된 채팅은 모든 참가자에게 삭제되며, 채팅 내 모든 메시지는 더 이상 연습이나 학습 분석에 사용할 수 없습니다. 이 작업은 되돌릴 수 없습니다.", - "chatWithActivities": "활동과 채팅하기", "launch": "시작", - "launchActivityToChats": "채팅에 활동 시작", "searchChats": "채팅 검색", - "selectChats": "채팅 선택", - "selectChatToStart": "완료! 시작할 채팅을 선택하세요", "maxFifty": "최대 50개", "configureSpace": "강좌 구성", "pinMessages": "메시지 고정", @@ -4696,9 +4261,7 @@ "announcements": "공지사항", "activities": "활동", "access": "접근", - "botSettings": "봇 설정", "activitySuggestionTimeoutMessage": "더 많은 활동을 생성하기 위해 열심히 노력하고 있습니다. 잠시 후 다시 확인하세요", - "accessSettingsWarning": "이런! 이 방의 접근 규칙을 설정할 권한이 없는 것 같습니다. 필요에 맞는지 확인하고 변경이 필요하면 방 관리자에게 문의하세요", "howSpaceCanBeFound": "이 강좌를 찾는 방법", "private": "비공개", "cannotBeFoundInSearch": "검색에서 찾을 수 없음", @@ -4711,16 +4274,6 @@ "canBeFoundViaKnock": "• 요청 후 관리자 승인", "youHaveLeveledUp": "레벨이 올랐어요!", "sendActivities": "활동 보내기", - "getStarted": "시작하기", - "getStartedBotChatDesc": "AI와 채팅하는 것은 시작하기에 좋은 곳이며, Pangea의 읽기, 쓰기, 듣기, 말하기 도구들이 쉽게 사용할 수 있게 만들어졌어요!", - "getStartedCommunitiesDesc": "커뮤니티와 함께 배우는 곳이 바로 Pangea Chat의 빛나는 곳입니다!\n수업에 참여하거나, 강좌를 찾거나, 직접 만들어보세요!", - "getStartedFriendsDesc": "함께 배우고 싶은 친구가 있나요?", - "getStartedBotChatComplete": "잘했어요! 봇과 채팅하고 있어요!", - "getStartedCommunitiesComplete": "좋아요, 강좌에 참여하셨군요!", - "getStartedComplete": "이 섹션을 완료했어요!\n친구들과 채팅하며 우리의 멋진 기능들을 계속 탐험하세요!", - "getStartedFriendsComplete": "와우! 친구들이 생겼어요! 😙", - "getStartedBotChatButton": "채팅 시작하기!", - "getStartedFriendsButton": "친구와 채팅하기", "groupChat": "단체 채팅", "directMessage": "개인 메시지", "newDirectMessage": "새 개인 메시지", @@ -4736,7 +4289,6 @@ "mySavedActivities": "내 저장된 활동", "noSavedActivities": "저장된 활동이 없습니다", "saveActivity": "이 활동 저장", - "yourSavedActivities": "저장된 활동", "failedToPlayVideo": "비디오 재생 실패", "done": "완료", "inThisSpace": "이 과정에서", @@ -4775,37 +4327,27 @@ "maximumActivityParticipants": "각 활동은 최대 {count} 명의 참가자가 참여할 수 있습니다.", "pending": "보류 중", "inactive": "비활성", - "unjoinedActivityMessage": "참여하시겠습니까? 공개 역할을 선택하세요!\n또는 그냥 구경하며 쇼를 감상하세요!", - "fullActivityMessage": "자유롭게 쇼를 감상하세요! 참여할 수 있는 역할이 없지만, 채팅을 볼 수 있습니다!", "confirmRole": "역할 확인", "openRoleLabel": "오픈", "joinedTheActivity": "👋 {username}님이 {role}로 참여하셨습니다", "finishedTheActivity": "🎯 {username}님이 이 활동을 마무리하셨습니다", - "endActivityTitle": "끝내기", - "endActivityDesc": "목표를 완료하셨나요?\n이것은 채팅을 종료하고 돌아간다는 확인입니다. 걱정하지 마세요, 채팅에서 즐거운 시간이 계속됩니다! 모두 '완료'를 클릭할 때까지 자유롭게 구경하며 쇼를 즐기세요.", "archiveToAnalytics": "내 완료된 활동에 추가", "activitySummaryError": "활동 요약을 사용할 수 없습니다", "requestSummaries": "요약 요청", - "loadingActivitySummary": "활동 요약을 불러오는 중...", "generatingNewActivities": "이 언어 쌍의 첫 사용자입니다! 잠시만 기다려 주세요, 여러분만을 위한 활동을 준비 중입니다.", - "requestAccessTitle": "분석 보기 권한 요청?", + "requestAccessTitle": "분석 접근 요청?", "requestAccessDesc": "참가자 분석 보기 권한을 요청하시겠습니까?\n\n참가자가 동의하면, 이 강좌의 관리자는 다음을 볼 수 있습니다:\n • 총 어휘 수\n • 총 문법 개념\n • 완료된 활동 세션 수\n • 사용된 문법 개념, 맞게 또는 틀리게\n\n그들은 다음을 볼 수 없습니다:\n • 강좌 외 채팅 메시지\n • 어휘 목록", "requestAccess": "접근 요청 ({count})", "analyticsInactiveTitle": "비활성 사용자에게 요청을 보낼 수 없습니다", "analyticsInactiveDesc": "이 기능이 도입된 이후로 로그인하지 않은 비활성 사용자는 요청을 볼 수 없습니다.\n\n사용자가 돌아오면 요청 버튼이 표시됩니다. 요청 버튼을 클릭하여 나중에 다시 요청할 수 있습니다.", "accessRequestedTitle": "분석 액세스 요청", - "accessRequestedDesc": "“{space}”의 관리자들이 귀하의 학습 분석 정보를 보기를 요청하고 있습니다.\n\n동의하시면, 이 과정의 관리자들이 귀하의 다음 정보를 볼 수 있습니다:\n • 총 어휘 수\n • 총 문법 개념\n • 완료된 활동 세션 수\n • 사용된 문법 개념, 올바른 것과 잘못된 것\n\n그들은 귀하의 다음 정보를 볼 수 없습니다:\n • 과정 외 채팅 메시지\n • 어휘 목록", - "allowAccess": "액세스 허용", - "denyAccess": "액세스 거부", + "accessRequestedDesc": "요청한 관리자: {admin} \n\n“{space}”의 관리자가 귀하의 학습 분석을 보기를 요청하고 있습니다.\n\n동의하시면, 그들은 귀하의:\n • 총 어휘\n • 총 문법 개념\n • 완료된 총 활동 세션\n • 사용된 특정 문법 개념(정확하게 및 부정확하게)\n\n을 볼 수 있습니다.\n\n그들은 귀하의:\n • 과정 외의 채팅 메시지\n • 어휘 목록\n\n을 볼 수 없습니다.", "adminRequestedAccess": "관리자가 귀하의 분석 정보를 보기를 요청했습니다.", "lastUpdated": "업데이트됨\n{time}", "activityFinishedMessage": "모든 작업이 완료되었습니다!", "endForAll": "모두 종료", "newCourse": "새 과정", - "newCourseSubtitle": "어떤 과정 계획을 사용하시겠습니까?", - "failedToLoadCourses": "과정을 불러오지 못했습니다", "numModules": "{num}개 모듈", - "numActivityPlans": "{num}개 활동 계획", "coursePlan": "과정 계획", "editCourseLater": "템플릿 제목, 설명, 과정 이미지는 나중에 편집할 수 있습니다.", "newCourseAccess": "기본적으로 과정은 비공개이며 관리자 승인 후 참여할 수 있습니다. 언제든지 이 설정을 변경할 수 있습니다.", @@ -4819,17 +4361,11 @@ "accessDesc": "코스를 공개하거나 비공개로 안전하게 설정할 수 있습니다!", "createGroupChatDesc": "활동 세션이 시작되고 종료되는 동안, 그룹 채팅은 일상적인 소통을 위해 열려 있습니다.", "deleteDesc": "코스는 관리자만 삭제할 수 있습니다. 이는 모든 사용자와 선택된 채팅을 삭제하는 파괴적인 작업입니다. 신중히 진행하세요.", - "failedToLoadCourseInfo": "코스 정보를 불러오지 못했습니다", "noCourseFound": "이 코스에는 계획이 필요합니다!\n\n코스 계획은 주제와 대화 활동의 연속입니다.", "additionalParticipants": "+ {num}명 더", - "activityNotFoundForCourse": "이 활동은 코스 내에서 찾을 수 없습니다", - "courseChats": "코스 채팅", - "myActivitySessions": "내 활동 세션", "directMessages": "직접 메시지", "whatNow": "이제 무엇을 할까요?", "chooseNextActivity": "다음 활동을 선택하세요!", - "seeInstructions": "지침 보기", - "hideInstructions": "지침 숨기기", "letsGo": "시작합시다", "chooseRole": "역할을 선택하세요!", "chooseRoleToParticipate": "참여할 역할을 선택하세요!", @@ -4839,23 +4375,15 @@ "inviteFriends": "친구 초대하기", "waitNotDone": "기다리세요, 아직 끝나지 않았어요!", "waitingForOthersToFinish": "나머지 사람들이 끝내기를 기다리는 중...", - "saveToCompletedActivities": "완료된 활동에 저장", "generatingSummary": "채팅 분석 및 결과 생성 중", - "instructionsLanguage": "지침 언어", "findCourse": "코스 찾기", - "activityCompletedDesc": "완료한 활동이 분석에 추가되어 사용한 언어를 검토하고 연습할 수 있습니다.", "pingParticipantsNotification": "{user}님이 {room}에서 활동 세션에 참여할 사용자를 찾고 있습니다", "course": "코스", "courses": "코스들", "courseName": "코스 이름", "createNewCourse": "새 코스 만들기", - "publicCourses": "공개 코스", "goToCourse": "코스로 이동: {course}", "activityComplete": "이 활동이 완료되었습니다. 활동 요약은 아래에서 확인하실 수 있습니다.", - "haventChattedMuch": "채팅을 많이 하지 않은 것 같네요, 더 많은 어휘를 사용해보세요! 목표를 달성했다고 느끼시면 아래에서 활동을 종료할 수 있습니다.", - "haveChatted": "오랫동안 채팅하신 것 같네요! 목표를 달성했다고 느끼시면 활동을 마무리하고 채팅에서 요약을 생성하겠습니다!", - "userDoneAndWaiting": "{num1}/{num2} 참가자가 종료했습니다. 모두 종료할 때까지 기다리세요, 그러면 채팅에서 요약을 생성하겠습니다! \n\n대화에 다시 참여하고 싶으시면 채팅의 계속 버튼을 클릭하세요.", - "othersDoneAndWaiting": "{num1}/{num2}명이 종료했습니다. 목표를 달성하셨나요?", "startNewSession": "새 세션 시작", "joinOpenSession": "열린 세션에 참여하기", "less": "더 적게", @@ -4865,7 +4393,6 @@ "openToJoin": "참여 가능", "results": "결과", "activityDone": "활동 완료!", - "moreLabel": "더 보기", "promoCodeInfo": "프로모션 코드는 다음 페이지에서 입력할 수 있습니다", "editsComingSoon": "도시와 활동을 편집하는 기능이 곧 제공될 예정입니다.", "editing": "편집 중", @@ -4881,13 +4408,10 @@ "courseSavedSuccessfully": "강좌가 성공적으로 저장되었습니다", "addCoursePlan": "강좌 계획 추가", "activityStatsButtonInstruction": "여기를 클릭하여 활동 통계를 보고 완료 시 활동을 종료하세요", - "readingAnalyticsDesc": "읽기 활동을 위해 각 메시지에서 연습을 클릭하세요.", - "speakingAnalyticsDesc": "말하기 연습을 위해 음성 메시지를 녹음하세요.", - "audioAnalyticsDesc": "듣기 활동을 위해 각 메시지에서 연습을 클릭하세요.", "loginToAccount": "내 계정에 로그인", "appDescription": "친구들과 문자 메시지를 보내며 언어를 배우세요.", "languages": "언어", - "chooseLanguage": "언어를 선택하세요.", + "chooseLanguage": "대상 언어를 선택하세요.", "planTrip": "여행 계획 세우기", "howAreYouTraveling": "어떻게 여행하고 계세요?", "unlockPrivateTrip": "개인 여행 잠금 해제", @@ -4900,25 +4424,20 @@ "courseCode": "비밀 비밀번호는 무엇인가요?", "courseCodeHint": "여행 코드 또는 링크", "unlockMyTrip": "내 여행 잠금 해제", - "anyLevel": "모든 수준", "signupOption": "어떻게 가입하시겠어요?", "withApple": "Apple로 가입", "withGoogle": "Google로 가입", "withEmail": "이메일로 가입", "createAccount": "계정 만들기", - "noCoursesFound": "강좌를 찾을 수 없습니다", "loginWithEmail": "이메일로 로그인", "usernameOrEmail": "사용자 이름 또는 이메일", "email": "이메일", "forgotPassword": "비밀번호를 잊으셨나요?", - "writingAnalyticsDesc": "글쓰기를 연습하려면 메시지를 보내세요.", "endActivity": "활동 종료", "allLanguages": "모든 언어", - "allCefrLevels": "모든 CEFR 수준", "chatListTooltip": "여기서 직접 메시지를 찾을 수 있습니다! 사용자 아바타를 클릭하고 “대화 시작”을 선택하여 DM을 보내세요.", "directMessageBotTitle": "파니아 봇에게 직접 메시지 보내기", "feedbackTitle": "활동 피드백", - "feedbackDesc": "활동을 어떻게 개선할 수 있을까요? 세부 정보를 제공해 주시면 변경하겠습니다!", "feedbackHint": "당신의 피드백", "feedbackButton": "피드백 제출", "directMessageBotDesc": "사람과 이야기하는 것이 더 재미있지만... AI는 항상 준비되어 있습니다!", @@ -5113,30 +4632,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5152,18 +4647,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5188,18 +4671,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5236,38 +4707,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5276,62 +4719,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5368,10 +4767,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5380,14 +4775,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5396,46 +4783,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5444,10 +4795,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5504,18 +4851,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5524,14 +4859,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5560,18 +4887,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5580,42 +4895,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5624,14 +4907,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5652,26 +4927,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5692,10 +4947,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5728,25 +4979,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5803,34 +5035,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5859,778 +5063,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7623,14 +6059,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7642,14 +6070,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7681,10 +6101,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7693,18 +6109,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7713,14 +6117,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7745,38 +6141,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7822,10 +6190,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7850,10 +6214,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7878,10 +6238,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7890,66 +6246,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7970,42 +6270,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8030,154 +6306,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8194,18 +6322,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8226,14 +6342,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8250,10 +6358,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8266,14 +6370,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8282,14 +6378,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8317,26 +6405,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8365,18 +6433,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8413,10 +6473,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9349,10 +7405,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9533,34 +7585,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9573,10 +7597,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9585,14 +7605,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9609,22 +7621,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9772,14 +7768,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9788,34 +7776,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9824,54 +7784,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9880,10 +7804,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9900,10 +7820,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10075,26 +7991,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10123,10 +8019,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10183,30 +8075,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10235,18 +8111,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10363,14 +8231,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10383,10 +8243,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10395,14 +8251,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10419,14 +8267,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10435,22 +8275,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10463,18 +8287,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10491,22 +8303,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10515,30 +8315,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10611,18 +8387,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10679,18 +8443,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10719,30 +8471,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10795,18 +8531,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10855,46 +8583,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10959,10 +8647,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11134,14 +8818,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11169,14 +8845,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11189,10 +8857,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11228,19 +8892,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11265,14 +8924,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11281,14 +8932,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11341,10 +8984,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11357,18 +8996,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11381,14 +9008,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11429,26 +9048,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11476,10 +9083,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11490,36 +9093,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11556,10 +9129,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11624,18 +9193,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11700,10 +9257,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11724,10 +9277,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11744,10 +9293,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11756,10 +9301,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11772,10 +9313,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11800,16 +9337,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "친구들을 활동에 초대하기", - "inviteFriendsToActivityCourse": "친구들을 활동과 강좌에 초대하기", "feedbackRespDesc": "내일 다시 확인하여 활동 업데이트를 확인하세요.", "activityDropdownDesc": "이 활동이 끝나면 아래를 클릭하세요", - "activityAnalyticsListBody": "이것은 완료한 활동입니다! 활동을 마친 후 여기에서 볼 수 있습니다.", "languageMismatchTitle": "언어 불일치", "languageMismatchDesc": "목표 언어가 이 활동의 언어와 일치하지 않습니다. 목표 언어를 업데이트하시겠습니까?", "reportWordIssueTooltip": "단어 정보 문제 신고", "tokenInfoFeedbackDialogTitle": "단어 정보 피드백", - "tokenInfoFeedbackDialogDesc": "AI가 실수할 수 있습니다. 위 정보에 대해 발견한 문제를 설명해 주세요.", "noPublicCoursesFound": "공개 강좌를 찾을 수 없습니다. 새로 만드시겠습니까?", "noCourseTemplatesFound": "목표 언어에 대한 강좌를 찾을 수 없습니다. 그동안 Pangea Bot과 채팅하거나 나중에 더 많은 강좌를 확인하세요.", "botActivityJoinFailMessage": "Pangea Bot이 응답하는 데 시간이 걸리고 있습니다. 잠시 후 다시 시도하거나 친구를 초대하세요.", @@ -11817,14 +9350,6 @@ "leaveDesc": "이 공간과 그 안의 모든 채팅을 떠나기", "selectAll": "모두 선택", "deselectAll": "모두 선택 해제", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11833,10 +9358,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11853,10 +9374,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11890,7 +9407,6 @@ "newMessageInPangeaChat": "💬 Pangea 채팅에 새 메시지", "shareCourse": "강좌 공유", "addCourse": "강좌 추가", - "joinCourseWithCode": "코드로 강좌 참여", "joinPublicCourse": "공개 강좌 참여", "vocabLevelsDesc": "단어를 레벨업하면 여기에 단어가 표시됩니다!", "highlightVocabTooltip": "아래의 목표 어휘 단어를 강조 표시하려면 채팅에서 보내거나 연습하세요.", @@ -11914,10 +9430,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11926,7 +9438,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "DM이나 채팅이 없습니다. 검색어가 올바르게 입력되었는지 확인하세요.", + "activityAnalyticsTooltipBody": "이것은 검토 및 연습을 위한 저장된 활동입니다.", + "numSavedActivities": "저장된 활동 수", + "saveActivityTitle": "활동 저장", + "saveActivityDesc": "잘했어요! 이 활동을 나중에 검토하고 연습하기 위해 저장하세요.", + "levelInfoTooltip": "여기에서 당신이 얻은 모든 포인트와 그 방법을 볼 수 있습니다!", + "alreadyInCourseWithID": "당신은 이미 이 계획의 과정에 있습니다. 같은 계획으로 과정을 만들고 싶으신가요, 아니면 기존 과정을 가고 싶으신가요?", + "goToExistingCourse": "기존 과정으로 가기", + "emojiView": "이모지 보기", + "feedbackDialogDesc": "저도 실수를 해요! 제가 개선할 수 있도록 도와줄 수 있는 것이 있나요?", + "contactHasBeenInvitedToTheCourse": "연락처가 과정에 초대되었습니다", + "activityStatsButtonTooltip": "활동 정보", + "allow": "허용", + "deny": "거부", + "enabledRenewal": "구독 갱신 활성화", + "subscriptionEndsOn": "구독 종료일", + "subscriptionRenewsOn": "구독 갱신일", + "waitForSubscriptionChanges": "구독 변경 사항이 앱에 반영되는 데 잠시 시간이 걸릴 수 있습니다.", + "subscribeReadingAssistance": "메시지 도구 잠금을 해제하려면 구독하세요", + "aceDisplayName": "아치네스", + "achDisplayName": "아콜리", + "afDisplayName": "아프리칸스", + "akDisplayName": "아칸", + "alzDisplayName": "알루르", + "amDisplayName": "암하라어", + "arDisplayName": "아랍어", + "asDisplayName": "아삼어", + "awaDisplayName": "아와디", + "ayDisplayName": "아이마라", + "azDisplayName": "아제르바이잔어", + "baDisplayName": "바시키르어", + "banDisplayName": "발리어", + "bbcDisplayName": "바탁 토바어", + "beDisplayName": "벨라루스어", + "bemDisplayName": "벰바어", + "bewDisplayName": "베타위어", + "bgDisplayName": "불가리아어", + "bhoDisplayName": "보지푸리어", + "bikDisplayName": "비콜어", + "bmDisplayName": "밤바라어", + "bnDisplayName": "벵골어", + "bnBDDisplayName": "벵골어 (방글라데시)", + "bnINDisplayName": "벵골어 (인도)", + "brDisplayName": "브르타뉴어", + "bsDisplayName": "보스니아어", + "btsDisplayName": "바탁 시말룽군어", + "btxDisplayName": "바탁 카로어", + "buaDisplayName": "부리야트어", + "caDisplayName": "카탈루냐어", + "cebDisplayName": "세부아노어", + "cggDisplayName": "치가", + "chmDisplayName": "마리", + "ckbDisplayName": "중앙 쿠르드어", + "cnhDisplayName": "하카 친", + "coDisplayName": "코르시카어", + "crhDisplayName": "크림 터키어", + "crsDisplayName": "세셀와 크레올 프랑스어", + "csDisplayName": "체코어", + "cvDisplayName": "추바시어", + "cyDisplayName": "웨일스어", + "daDisplayName": "덴마크어", + "deDisplayName": "독일어", + "dinDisplayName": "딩카어", + "doiDisplayName": "도그리어", + "dovDisplayName": "돔베어", + "dzDisplayName": "종카어", + "eeDisplayName": "에웨어", + "enDisplayName": "영어", + "enAUDisplayName": "영어 (호주)", + "enGBDisplayName": "영어 (영국)", + "enINDisplayName": "영어 (인도)", + "enUSDisplayName": "영어 (미국)", + "eoDisplayName": "에스페란토", + "esDisplayName": "스페인어", + "esESDisplayName": "스페인어 (스페인)", + "esMXDisplayName": "스페인어 (멕시코)", + "euDisplayName": "바스크어", + "faDisplayName": "페르시아어", + "ffDisplayName": "풀라어", + "fiDisplayName": "핀란드어", + "filDisplayName": "필리핀어", + "fjDisplayName": "피지어", + "foDisplayName": "파로에세어", + "frDisplayName": "프랑스어", + "frCADisplayName": "프랑스어 (캐나다)", + "frFRDisplayName": "프랑스어 (프랑스)", + "fyDisplayName": "서부 프리슬란드어", + "gaDisplayName": "아일랜드어", + "gaaDisplayName": "가어", + "gdDisplayName": "스코틀랜드 게일어", + "glDisplayName": "갈리시아어", + "gnDisplayName": "과라니어", + "gomDisplayName": "고안 콘카니", + "guDisplayName": "구자라티어", + "haDisplayName": "하우사어", + "hawDisplayName": "하와이어", + "heDisplayName": "히브리어", + "hiDisplayName": "힌디어", + "hilDisplayName": "힐리가이논어", + "hmnDisplayName": "몽어", + "hneDisplayName": "차티스가르어", + "hrDisplayName": "크로아티아어", + "hrxDisplayName": "훈스리크어", + "htDisplayName": "아이티 크리올어", + "huDisplayName": "헝가리어", + "hyDisplayName": "아르메니아어", + "idDisplayName": "인도네시아어", + "igDisplayName": "이그보어", + "iloDisplayName": "일로카노어", + "isDisplayName": "아이슬란드어", + "itDisplayName": "이탈리아어", + "jaDisplayName": "일본어", + "jvDisplayName": "자바어", + "kaDisplayName": "조지아어", + "kkDisplayName": "카자흐어", + "kmDisplayName": "크메르어", + "knDisplayName": "칸나다어", + "koDisplayName": "한국어", + "kokDisplayName": "콘카니어", + "kriDisplayName": "크리올어", + "ksDisplayName": "카슈미르어", + "ktuDisplayName": "키투바어 (콩고 민주 공화국)", + "kuDisplayName": "쿠르드어", + "kyDisplayName": "키르기스어", + "laDisplayName": "라틴어", + "lbDisplayName": "룩셈부르크어", + "lgDisplayName": "간다어", + "liDisplayName": "림부르크어", + "lijDisplayName": "리구리아어", + "lmoDisplayName": "롬바르드어", + "lnDisplayName": "링갈라", + "loDisplayName": "라오", + "ltDisplayName": "리투아니아어", + "ltgDisplayName": "라트갈리안", + "luoDisplayName": "루오 (케냐와 탄자니아)", + "lusDisplayName": "미조", + "lvDisplayName": "라트비아어", + "maiDisplayName": "마이틸리", + "makDisplayName": "마카사르", + "mgDisplayName": "말라가시", + "miDisplayName": "마오리", + "minDisplayName": "미낭카바우", + "mkDisplayName": "마케도니아어", + "mlDisplayName": "말라얄람어", + "mnDisplayName": "몽골어", + "mniDisplayName": "Manipuri", + "mrDisplayName": "마라티어", + "msDisplayName": "말레이어", + "msArabDisplayName": "말레이어 (아랍어)", + "msMYDisplayName": "말레이어 (말레이시아)", + "mtDisplayName": "몰타어", + "mwrDisplayName": "마르와리어", + "myDisplayName": "버마어", + "nanDisplayName": "민난어", + "nbDisplayName": "노르웨이어 (복말)", + "neDisplayName": "네팔어", + "newDisplayName": "뉴어리어", + "nlDisplayName": "네덜란드어", + "nlBEDisplayName": "플랑드르어", + "noDisplayName": "노르웨이어", + "nrDisplayName": "남부 엔데벨레", + "nsoDisplayName": "북부 소토", + "nusDisplayName": "누에르", + "nyDisplayName": "니안자", + "ocDisplayName": "옥시탄", + "omDisplayName": "오로모", + "orDisplayName": "오디아", + "paDisplayName": "펀자비", + "paArabDisplayName": "펀자비 (샤흐무키)", + "paINDisplayName": "펀자비 (구르무키)", + "pagDisplayName": "팡가시난", + "pamDisplayName": "팜팡가", + "papDisplayName": "파피아멘토", + "plDisplayName": "폴란드어", + "psDisplayName": "파슈토어", + "ptDisplayName": "포르투갈어", + "ptBRDisplayName": "포르투갈어 (브라질)", + "ptPTDisplayName": "포르투갈어 (포르투갈)", + "quDisplayName": "케추아어", + "rajDisplayName": "라자스탄어", + "rnDisplayName": "룬디", + "roDisplayName": "루마니아어", + "roMDDisplayName": "몰도바어", + "romDisplayName": "로마니어", + "ruDisplayName": "러시아어", + "rwDisplayName": "키냐르완다어", + "saDisplayName": "산스크리트어", + "satDisplayName": "산탈리어", + "scnDisplayName": "시칠리아어", + "sdDisplayName": "신디어", + "sgDisplayName": "상고", + "shnDisplayName": "샨", + "siDisplayName": "신할라", + "skDisplayName": "슬로바키아어", + "slDisplayName": "슬로베니아어", + "smDisplayName": "사모아어", + "snDisplayName": "쇼나어", + "soDisplayName": "소말리어", + "sqDisplayName": "알바니아어", + "srDisplayName": "세르비아어", + "srMEDisplayName": "몬테네그린어", + "ssDisplayName": "스와티어", + "stDisplayName": "남부 소토어", + "suDisplayName": "순다어", + "svDisplayName": "스웨덴어", + "swDisplayName": "스와힐리어", + "szlDisplayName": "실레시안어", + "taDisplayName": "타밀어", + "teDisplayName": "텔루구어", + "tetDisplayName": "테툼어", + "tgDisplayName": "타지크어", + "thDisplayName": "태국어", + "tiDisplayName": "티그리냐어", + "tkDisplayName": "투르크멘어", + "tlDisplayName": "타갈로그어", + "tnDisplayName": "츠와나어", + "trDisplayName": "터키어", + "tsDisplayName": "송가어", + "ttDisplayName": "타타르어", + "ugDisplayName": "위구르어", + "ukDisplayName": "우크라이나어", + "urDisplayName": "우르두어", + "urINDisplayName": "우르두어 (인도)", + "urPKDisplayName": "우르두어 (파키스탄)", + "uzDisplayName": "우즈벡어", + "viDisplayName": "베트남어", + "wuuDisplayName": "우어", + "xhDisplayName": "코사어", + "yiDisplayName": "이디시어", + "yoDisplayName": "요루바어", + "yuaDisplayName": "유카텍어", + "yueDisplayName": "광둥어", + "yueCNDisplayName": "광둥어 (중국)", + "yueHKDisplayName": "광둥어 (홍콩)", + "zhDisplayName": "중국어", + "zhCNDisplayName": "중국어 (간체)", + "zhTWDisplayName": "중국어 (번체)", + "zuDisplayName": "줄루어", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11993,6 +10691,7 @@ "notStartedActivitiesTitle": "열린 세션 ({num})", "inProgressActivitiesTitle": "현재 진행 중 ({num})", "completedActivitiesTitle": "완료됨 ({num})", + "pickDifferentActivity": "다른 활동 선택", "inOngoingActivity": "진행 중인 활동이 있습니다!", "@notStartedActivitiesTitle": { "type": "String", @@ -12018,10 +10717,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "대상 언어가 이 메시지와 일치하지 않습니다. 대상 언어를 업데이트하시겠습니까?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "이것은 이 과정의 모든 사람입니다. 사용자의 아바타를 클릭하고 \"대화 시작\"을 클릭하여 DM을 보내세요.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "이 어휘 단어는 귀하의 분석에서 영구적으로 제거됩니다.", + "woman": "여성", + "man": "남성", + "otherGender": "기타", + "unselectedGender": "성별 옵션을 선택하세요", + "gender": "성별", + "chatParticipantTooltip": "이 채팅의 모든 사람입니다. 사용자 아바타를 클릭하고 '대화 시작'을 클릭하여 DM을 보내세요.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "학습 도구는 목표 언어가 아닌 메시지에 대해 비활성화되어 있습니다.", + "vocabEmoji": "어휘 이모지", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "재생 요청", + "optionalRegenerateReason": "(선택 사항) 이유", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "{lemma}에 대한 이모지를 설정했습니다! 앞으로 연습 활동에서 이 이모지를 사용하여 단어를 나타낼 것입니다.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "로그인 완료 대기 중", + "ssoDialogDesc": "안전하게 로그인할 수 있도록 새 탭을 열었습니다.", + "ssoDialogHelpText": "🤔 새 탭이 보이지 않으면 팝업 차단기를 확인하세요.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "언어 도구 비활성화", + "disableLanguageToolsDesc": "자동 언어 지원을 비활성화하시겠습니까?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "권한이 거부되었습니다. 오디오 메시지를 녹음하려면 녹음 권한을 활성화하세요.", + "genericWebRecordingError": "문제가 발생했습니다. 메시지를 녹음할 때 Chrome 브라우저를 사용하는 것이 좋습니다.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "이 애플리케이션을 최상의 경험으로 사용하려면 화면 크기를 확장해 주십시오.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "다음 주제를 잠금 해제할 활동", "activitiesToUnlockTopicDesc": "다음 과정 주제를 잠금 해제할 활동 수를 설정하세요", "@activitiesToUnlockTopicTitle": { @@ -12031,5 +10848,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "정확한 어휘 정의 연습", + "constructUseIncLMDesc": "부정확한 어휘 정의 연습", + "constructUseCorLADesc": "정확한 어휘 오디오 연습", + "constructUseIncLADesc": "부정확한 어휘 오디오 연습", + "constructUseBonus": "어휘 연습 중 보너스", + "practiceVocab": "어휘 연습", + "selectMeaning": "의미 선택", + "selectAudio": "일치하는 오디오 선택", + "congratulations": "축하합니다!", + "anotherRound": "또 다른 라운드", + "noActivityRequest": "현재 활동 요청이 없습니다.", + "quit": "종료", + "congratulationsYouveCompletedPractice": "축하합니다! 연습 세션을 완료했습니다.", + "mustHave10Words": "연습할 단어가 최소 10개 이상 있어야 합니다. 친구나 Pangea Bot과 대화하여 더 많은 것을 발견해 보세요!", + "botSettings": "봇 설정", + "activitySettingsOverrideWarning": "활동 계획에 의해 결정된 언어 및 언어 수준", + "voice": "음성", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index f285cb289..fd8eadc44 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -2730,26 +2730,14 @@ "commandHint_logoutall": "Atsijungti nuo visų aktyvių įrenginių", "displayNavigationRail": "Rodyti navigacijos juostą mobiliajame įrenginyje", "customReaction": "Pasirinktinis reakcija", - "accountInformation": "Paskyros informacija", - "addGroupDescription": "Pridėti pokalbio aprašymą", - "addNewFriend": "Pridėti naują draugą", - "alreadyHaveAnAccount": "Jau turite paskyrą?", - "createNewGroup": "Sukurti naują pokalbį", - "editChatPermissions": "Redaguoti pokalbio leidimus", "writeAMessageLangCodes": "Įveskite {l1} arba {l2}...", "requests": "Užklausos", - "allCorrect": "Taip sakyčiau aš! Puiku!", - "newWayAllGood": "Nors taip nesakyčiau, atrodo gerai!", - "othersAreBetter": "Hm, gal yra geresnis būdas tai pasakyti.", "holdForInfo": "Paspauskite ir palaikykite žodžio informacijai.", "greenFeedback": "Tai, ką aš dėčiau!", "yellowFeedback": "Hm, galite tai išbandyti ir pamatyti, ar veikia! Norėdami naudoti šį žodį, tiesiog dar kartą paspauskite jį.", "redFeedback": "Manau, tai nėra teisinga...", "itInstructionsTitle": "Galiu jums padėti išversti!", "itInstructionsBody": "Galite paspausti ir palaikyti pasirinkimus, kad gautumėte žodžio informaciją.", - "oneday": "Pastarąsias 24 valandas", - "oneweek": "Pastarąsias 7 dienas", - "onemonth": "Praėjęs mėnuo", "gaTooltip": "L2 naudojimas su gramatikos pagalba", "taTooltip": "L2 naudojimas su vertimo pagalba", "unTooltip": "Kita", @@ -2759,58 +2747,27 @@ "interactiveTranslatorAllowed": "Studentų pasirinkimas", "interactiveTranslatorRequired": "Būtina", "notYetSet": "Dar nenustatyta", - "myLearning": "Mano analizė", "waTooltip": "L2 naudojimas be pagalbos", - "changeDateRange": "Keisti datų intervalą", - "classDescription": "Aprašymas", - "addStudents": "Pakviesti naudotojus nuoroda arba kodu", - "copyClassLink": "Kopijuoti kvietimo nuorodą", - "copyClassCode": "Kopijuoti kvietimo kodą", - "inviteStudentByUserName": "Pakviesti naudotojus pagal vartotojo vardą", "languageSettings": "Kalbos nustatymai", "interactiveTranslator": "Vertimo pagalba", - "shareVideo": "Dalintis vaizdo įrašu", - "shareVideoDesc": "Įjungus šį funkciją, studentai galės dalintis vaizdo įrašais pokalbiuose.", - "shareFiles": "Dalintis failais", - "selectLanguageLevel": "Pasirinkti kalbos lygį", "noIdenticalLanguages": "Prašome pasirinkti skirtingas pagrindines ir tikslines kalbas", - "iWantALanguagePartnerFrom": "Noriu kalbos partnerio iš:", - "worldWide": "Visame pasaulyje", - "noResults": "Rezultatų nėra! Pabandykite plačiau ieškoti.", "searchBy": "Ieškoti pagal šalį ir kalbas", - "iWantAConversationPartner": "Noriu pokalbio partnerio, kuris", - "iWantALanguagePartnerWhoSpeaks": "Kalba:", - "iWantALanguagePartnerWhoIsLearning": "Mokosi:", "joinWithClassCode": "Prisijungti prie kurso", - "joinWithClassCodeHint": "Įveskite kvietimo kodą", - "languageLevelPreA1": "Tikras pradedantysis (Pre A1)", - "languageLevelA1": "Pradedantysis (A1)", - "languageLevelA2": "Pradedantysis (A2)", - "languageLevelB1": "Tarpinis (B1)", - "languageLevelB2": "Aukštesnysis tarpinis (B2)", - "languageLevelC1": "Pažengęs (C1)", - "languageLevelC2": "Meistrystė (C2)", + "languageLevelPreA1": "Pradedantysis Žemas (Pre A1)", + "languageLevelA1": "Pradedančiojo vidurinis (A1)", + "languageLevelA2": "Pradedančiųjų aukštas (A2)", + "languageLevelB1": "Vidutinio lygio vidurys (B1)", + "languageLevelB2": "Išplėstinis žemas (B2)", + "languageLevelC1": "Išplėstinis vidurys (C1)", + "languageLevelC2": "Pats aukščiausias (C2)", "changeTheNameOfTheClass": "Pakeisti pavadinimą", "changeTheNameOfTheChat": "Pakeisti pokalbio pavadinimą", - "askPangeaBot": "Paklausk Pangea bot'o apie kontekstinę apibrėžimą.", "sorryNoResults": "Atsiprašome, rezultatų nėra.", "ignoreInThisText": "Ignoruoti", - "helpMeTranslate": "Taip!", - "needsItShortMessage": "Nuo tikslo", "needsItMessage": "Palaukite, tai nėra {targetLanguage}! Ar jums reikia pagalbos verčiant?", - "needsIgcMessage": "Šiame pranešime yra gramatikos klaida.", - "tokenTranslationTitle": "Žodis yra jūsų pagrindinėje kalboje.", - "spanTranslationDesc": "Žemiau matote galimas vertimus.", - "spanTranslationTitle": "Kai kurios žodžių dalys yra jūsų pagrindinėje kalboje.", - "l1SpanAndGrammarTitle": "Už tikslo ribų", - "l1SpanAndGrammarDesc": "Tai gali būti jūsų pagrindinėje kalboje arba tai gali būti gramatikos klaida.", - "otherTitle": "Jūs turite klaidą.", - "otherDesc": "Žemiau matote galimas pataisas.", "countryInformation": "Mano šalis", - "myLanguages": "Mano pagrindinės ir tikslo kalbos", "targetLanguage": "Tikslo kalba", "sourceLanguage": "Pagrindinė kalba", - "languagesISpeak": "Kalbos, kurias kalbu", "updateLanguage": "Mano kalbos", "whatLanguageYouWantToLearn": "Kokią kalbą norite išmokti?", "whatIsYourBaseLanguage": "Kokia yra jūsų pagrindinė kalba?", @@ -2825,13 +2782,8 @@ "errorDisableLanguageAssistanceUserDesc": "Spustelėkite čia, norėdami atnaujinti vertimo ir gramatikos pagalbos nustatymus", "errorDisableITClassDesc": "Vertimo pagalba išjungta kursui, kuriame yra šis pokalbis.", "errorDisableIGCClassDesc": "Gramatikos pagalba išjungta kursui, kuriame yra šis pokalbis.", - "itIsDisabled": "Interaktyvus vertimas išjungtas", - "igcIsDisabled": "Interaktyvus gramatikos tikrinimas išjungtas", - "goToLearningSettings": "Eiti į mokymosi nustatymus", "error405Title": "Kalbos nėra nustatytos", "error405Desc": "Prašome nustatyti savo kalbas pagrindiniame meniu > Mokymosi nustatymai.", - "loginOrSignup": "Prisijungti su", - "iAgreeToThe": "Sutinku su ", "termsAndConditions": " Paslaugų teikimo sąlygomis", "andCertifyIAmAtLeast13YearsOfAge": " ir patvirtinu, kad man yra bent 16 metų.", "error502504Title": "Oho, internete yra daug mokinių!", @@ -2839,40 +2791,21 @@ "error404Title": "Vertimo klaida!", "error404Desc": "Pangea robotas nėra tikras, kaip tai išversti...", "errorPleaseRefresh": "Mes tai tikriname! Prašome įkelti dar kartą ir bandyti iš naujo.", - "toggleIT": "Interaktyvus vertimas", - "toggleIGC": "Interaktyvi gramatikos patikra", - "toggleToolSettingsDescription": "Čia galite įjungti arba išjungti savo individualius kalbos įrankių nustatymus.", "connectedToStaging": "Prisijungta prie Staging", "learningSettings": "Mokymosi nustatymai", - "sendVoiceNotes": "Siųsti balso įrašus", - "sendVoiceNotesDesc": "Įjunkite šį nustatymą, kad mokiniai galėtų siųsti balso įrašus pokalbiuose.", - "chatTopic": "Pokalbio tema", - "chatTopicDesc": "Nustatykite pokalbio temą", - "inviteStudentByUserNameDesc": "Jei jūsų mokinys jau turi paskyrą, galite jį paieškoti.", "participants": "Dalyviai", - "almostPerfect": "Atrodo, kad taip! Štai ką aš būčiau pasakęs.", - "prettyGood": "Gan gerai! Štai ką aš būčiau pasakęs.", - "letMeThink": "Hmmm, pažiūrėkime, kaip tau sekėsi!", "clickMessageTitle": "Reikia pagalbos?", "clickMessageBody": "Spustelėkite žinutę, kad naudotumėte kalbos įrankius, tokius kaip vertimas, atkūrimas ir kt!", - "understandingMessagesTitle": "Apibrėžimai ir vertimai!", - "understandingMessagesBody": "Spustelėkite pabrauktus žodžius, kad gautumėte apibrėžimus. Vertimą naudokite žinutės parinktyse (viršutiniame dešiniajame kampe).", "allDone": "Viskas paruošta!", "vocab": "Žodynas", "low": "Turime įrodymų, kad naudotojas nesupranta šių žodžių.", "medium": "Šie žodžiai buvo naudoti. Neaišku, ar jie visiškai suprantami ar ne.", "high": "Turime įrodymų, kad naudotojas supranta šiuos žodžius.", - "unknownProficiency": "Šie žodžiai nebuvo naudoti Pangea pokalbyje.", - "changeView": "Pakeisti peržiūrą.", - "clearAll": "Išvalyti visus žodžius?", - "generateVocabulary": "Sugeneruoti žodyną iš pavadinimo ir aprašymo", - "generatePrompts": "Sugeneruoti užklausas", "subscribe": "Prenumeruoti", "getAccess": "Prenumeruokite dabar!", "subscriptionDesc": "Žinučių siuntimas yra nemokamas! Prenumeruokite, kad atrakintumėte interaktyvų vertimą, gramatikos tikrinimą ir mokymosi analitiką.", "subscriptionManagement": "Prenumeratos valdymas", "currentSubscription": "Dabartinė prenumerata", - "changeSubscription": "Pakeisti prenumeratą", "cancelSubscription": "Atšaukti prenumeratą", "selectYourPlan": "Pasirinkite savo planą", "subsciptionPlatformTooltip": "Prašome prisijungti prie savo originalios įrenginio, kad galėtumėte valdyti prenumeratos planą", @@ -2881,9 +2814,6 @@ "paymentHistory": "Apmokėjimo istorija", "emptyChatDownloadWarning": "Negalima atsisiųsti tuščios pokalbio", "update": "Atnaujinti", - "updateDesc": "Dabar galite atnaujinti šią programėlę nuo {localVersion} iki {storeVersion}", - "maybeLater": "Galbūt vėliau", - "mainMenu": "Pagrindinis meniu", "toggleImmersionMode": "Įsitraukimo režimas", "toggleImmersionModeDesc": "Įjungus, visi pranešimai rodomi jūsų tikslo kalba. Šis nustatymas yra ypač naudingas kalbų keitimuose.", "itToggleDescription": "Šis kalbų mokymosi įrankis atpažins žodžius jūsų pagrindinėje kalboje ir padės juos išversti į jūsų tikslinę kalbą. Nors retai, dirbtinis intelektas gali padaryti vertimo klaidų.", @@ -2898,212 +2828,13 @@ "definitionsToolDescription": "Įjungus, žodžiai pažymėti mėlyna spalva gali būti spustelėti norint gauti apibrėžimus. Spustelėkite žinutes, kad pasiektumėte apibrėžimus.", "translationsToolDescrption": "Įjungus, spustelėkite žinutę ir vertimo piktogramą, kad pamatytumėte žinutę savo pagrindine kalba.", "welcomeBack": "Sveiki sugrįžę! Jei buvote 2023-2024 m. bandomojo projekto dalyvis, susisiekite su mumis dėl specialios bandomojo projekto prenumeratos. Jei esate mokytojas, kuris (arba jūsų įstaiga) įsigijo licencijas savo klasei, susisiekite su mumis dėl mokytojo prenumeratos.", - "kickAllStudents": "Išmesti visus studentus", - "kickAllStudentsConfirmation": "Ar tikrai norite išmesti visus studentus?", - "inviteAllStudents": "Pakviesti visus studentus", - "inviteAllStudentsConfirmation": "Ar tikrai norite pakviesti visus studentus?", - "inviteUsersFromPangea": "Pridėti administratorių", - "redeemPromoCode": "Atsiskaityti už nuolaidos kodą", - "enterPromoCode": "Įveskite nuolaidos kodą", "downloadTxtFile": "Parsisiųsti teksto failą", "downloadCSVFile": "Parsisiųsti CSV failą", "promotionalSubscriptionDesc": "Šiuo metu turite visam laikui galiojančią reklaminę prenumeratą. Susisiekite su support@pangea.chat dėl pagalbos keičiant prenumeratą.", "originalSubscriptionPlatform": "Prenumerata įsigyta per {purchasePlatform}", "oneWeekTrial": "Vienos savaitės bandomoji versija", "downloadXLSXFile": "Parsisiųsti Excel failą", - "abDisplayName": "Abchazų", - "aaDisplayName": "Afarų", - "afDisplayName": "Afrikansų", - "akDisplayName": "Akan", - "sqDisplayName": "Albanų", - "amDisplayName": "Amharų", - "arDisplayName": "Arabų", - "anDisplayName": "Aragoniečių", - "hyDisplayName": "Armėnų", - "asDisplayName": "Assamų", - "avDisplayName": "Avarų", - "aeDisplayName": "Avestų", - "ayDisplayName": "Aimarų", - "azDisplayName": "Azerbaidžaniečių", - "bmDisplayName": "Bambara", - "baDisplayName": "Baškirų", - "euDisplayName": "Baskų", - "beDisplayName": "Baltarusų", - "bnDisplayName": "Bengalų", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnių", - "brDisplayName": "Bretonų", - "bgDisplayName": "Bulgarų", - "myDisplayName": "Burmiečių", - "caDisplayName": "Katalonų, Valensiečių", - "chDisplayName": "Chamorro", - "ceDisplayName": "Čečėnų", - "nyDisplayName": "Čicheva, Chewa, Nyanja", - "zhDisplayName": "Kinų", - "cvDisplayName": "Čuvašų", - "kwDisplayName": "Kornų", - "coDisplayName": " Korsikiečių", - "crDisplayName": "Kree", - "hrDisplayName": "Kroatų", - "csDisplayName": "Čekų", - "daDisplayName": "Danų", - "dvDisplayName": "Divehi; Dhivehi; Maldiviečių;", - "nlDisplayName": "Olandų", - "enDisplayName": "Anglų", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estų", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijian", - "fiDisplayName": "Suomi", - "frDisplayName": "Prancūzų", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicų", - "kaDisplayName": "Gruziniškai", - "deDisplayName": "Vokiečių", - "elDisplayName": "Graikų, šiuolaikinė", - "gnDisplayName": "Gvaraní", - "guDisplayName": "Gujarati", - "htDisplayName": "Haičio, Haičio kreolų", - "haDisplayName": "Hausų", - "heDisplayName": "Hebrajų (šiuolaikiniai)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Vengrų", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indoneziečių", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Airių", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": " Islandų", - "itDisplayName": "Italų", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonų", - "jvDisplayName": "Javų", - "klDisplayName": "Kalaallisut, Grenlandų", - "knDisplayName": "Kanadų", - "krDisplayName": "Kanurių", - "ksDisplayName": "Kašmyro", - "kkDisplayName": "Kazachų", - "kmDisplayName": "Khmers", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizų, Kirgizų", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korėjiečių", - "kuDisplayName": "Kurdų", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Lotynų", - "lbDisplayName": "Liuksemburgiečių, Letzeburgesch", - "lgDisplayName": "Gandų", - "liDisplayName": "Limburgiečių, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiečių", - "ltDisplayName": "Lietuvių", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latvių", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedoniečių", - "mgDisplayName": "Malagasių", - "msDisplayName": "Malajiečių", - "mlDisplayName": "Malajalių", - "mtDisplayName": "Maltiečių", - "miDisplayName": "Maorių", - "mrDisplayName": "Maratų (Marādhī)", - "mhDisplayName": "Maršaliečių", - "mnDisplayName": "Mongolų", - "naDisplayName": "Nauru", - "nvDisplayName": "Navahų, Navaho", - "nbDisplayName": "Norvegų Bokmāl", - "ndDisplayName": "Šiaurės Ndebele", - "neDisplayName": "Nepalo", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norvegų Nynorsk", - "noDisplayName": "Norvegų", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Pietų Ndebele", - "ocDisplayName": "Okcitano", - "ojDisplayName": "Ojibvė, Ojibwa", - "cuDisplayName": "Senovės Bažnytinė slavų kalba, Bažnytinė slavų, Bažnytinė slavų, Senovės bulgarų, Senovės slavų", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Osetų, Osetų kalba", - "paDisplayName": "Pandžabi, Pandžabi", - "piDisplayName": "Pali", - "faDisplayName": "Persų", - "plDisplayName": "Lenkų", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugalų", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumunų, Moldavų", - "ruDisplayName": "Rusų", - "saDisplayName": "Sanskritas (Sanskṛta)", - "scDisplayName": "Sardų", - "sdDisplayName": "Sindhi", - "seDisplayName": "Šiaurės samių", - "smDisplayName": "Samoanų", - "sgDisplayName": "Sango", - "srDisplayName": "Serbų", - "gdDisplayName": "Škotų gaelikų, Gaelic", - "snDisplayName": "Šona", - "siDisplayName": "Sinhala, Sinhalų", - "skDisplayName": "Slovakų", - "slDisplayName": "Slovėnų", - "soDisplayName": "Somalių", - "stDisplayName": " Pietų Sotho", - "esDisplayName": "Ispanų", - "suDisplayName": "Sundanų", - "swDisplayName": "Suahili", - "ssDisplayName": "Svati", - "svDisplayName": "Švedų", - "taDisplayName": "Tamilų", - "teDisplayName": "Telugų", - "tgDisplayName": "Tadžikų", - "thDisplayName": "Tajų", - "tiDisplayName": "Tigrinų", - "boDisplayName": "Tibetiečių Standartinė, Tibeto, Centrinė", - "tkDisplayName": "Turkmėnų", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tsvanos", - "toDisplayName": "Tonganų (Tonga salos)", - "trDisplayName": "Turkų", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uigūrų, Uighur", - "ukDisplayName": "Ukrainiečių", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbekų", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamiečių", - "voDisplayName": "Volapüko", - "waDisplayName": "Valūnų", - "cyDisplayName": "Velsiečių", - "woDisplayName": "Volofų", - "fyDisplayName": "Vakarų frisų", - "xhDisplayName": "Khosų", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Jorubų", - "zaDisplayName": "Zhuang, Čuang", "unkDisplayName": "Nežinoma", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havajiečių", - "hmnDisplayName": "Hmongų", - "multiDisplayName": "Daugialypis", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrajų", - "jwDisplayName": "Javiečių", - "moDisplayName": "Moldavų", - "shDisplayName": "Serbo-kroatų", "wwCountryDisplayName": "Pasaulinis", "afCountryDisplayName": "Afganistanas", "axCountryDisplayName": "Alandų Salos", @@ -3351,41 +3082,25 @@ "yeCountryDisplayName": "Jemenas", "zmCountryDisplayName": "Zambija", "zwCountryDisplayName": "Zimbabvė", - "pay": "Mokėti", - "allPrivateChats": "Tiesioginiai pokalbiai", - "unknownPrivateChat": "Nežinomas privatų pokalbis", + "pay": "Checkout", "invitedToSpace": "{user} pakvietė jus prisijungti prie kurso: {space}! Ar norite priimti?", - "declinedInvitation": "Atmesta kvietimas", - "acceptedInvitation": "Priimtas kvietimas", "youreInvited": "📩 Jūs pakviestas!", "invitedToChat": "{user} pakvietė jus prisijungti prie pokalbio: {name}! Ar norite priimti?", "monthlySubscription": "Mėnesinė", "yearlySubscription": "Metinė", "defaultSubscription": "Pangea pokalbių prenumerata", "freeTrial": "Nemokamas bandomasis laikotarpis", - "grammarAnalytics": "Klaidų analizė", "total": "Iš viso: ", "noDataFound": "Duomenų nerasta", - "promoSubscriptionExpirationDesc": "Jūsų dabartinė prenumerata yra reklaminė ir baigiasi {expiration}. Susisiekite su support@pangea.chat pagalbai keisti prenumeratą.", - "emptyChatNameWarning": "Įveskite šio pokalbio pavadinimą", "blurMeansTranslateTitle": "Kodėl žinutė yra neryški?", "blurMeansTranslateBody": "Kol įjungtas įsitraukimo režimas, žinutės, siunčiamos jūsų pagrindine kalba, bus neryškios, kol Pangea robotas jas išvers į jūsų tikslinę kalbą. Įsitraukimo režimą galima įjungti arba išjungti individualiuose ir kurso nustatymuose.", - "someErrorTitle": "Hm, kažkas ne taip", - "someErrorBody": "Tai gali būti klaida arba kažkas jūsų pagrindinėje kalboje.", "bestCorrectionFeedback": "Tai teisinga!", "distractorFeedback": "Tai nėra visiškai teisinga.", "bestAnswerFeedback": "Tai teisinga!", "definitionDefaultPrompt": "Ką reiškia ši žodis?", "practiceDefaultPrompt": "Kokia yra geriausia atsakymo versija?", "correctionDefaultPrompt": "Kokia yra geriausia pakeitimo versija?", - "itStartDefaultPrompt": "Ar norite pagalbos verčiant?", - "lockedChatWarning": "🔒 Šis pokalbis buvo užrakintas", - "lockChat": "Užrakinti pokalbį", - "suggestToChat": "Pasiūlyti šį pokalbį", - "suggestToChatDesc": "Pasiūlyti pokalbiai pasirodys pokalbių sąraše", "acceptSelection": "Priimti pataisymą", - "acceptSelectionAnyway": "Nepaisant to, naudoti šį", - "makingActivity": "Vykdoma veikla", "why": "Kodėl?", "definition": "Apibrėžimas", "exampleSentence": "Pavyzdinis sakinys", @@ -3393,128 +3108,55 @@ "reportMessageTitle": "{reportingUserId} pranešė apie žinutę iš {reportedUserId} pokalbyje {roomName}", "reportMessageBody": "Žinutė: {reportedMessage}\nPriežastis: {reason}", "noTeachersFound": "Nerasta mokytojų pranešti", - "viewArchive": "Peržiūrėti archyvą", "trialExpiration": "Jūsų nemokamas bandomasis laikotarpis baigsis {expiration}", "freeTrialDesc": "Nauji vartotojai gauna vienos savaitės nemokamą Pangea Chat bandomąjį laikotarpį", "activateTrial": "Aktyvuoti 7 dienų nemokamą bandomąjį laikotarpį", "successfullySubscribed": "Jūs sėkmingai užsiprenumeravote!", "clickToManageSubscription": "Spustelėkite čia, norėdami valdyti savo prenumeratą.", - "errorGettingAudio": "Klaida gaunant garsą. Prašome atnaujinti puslapį ir bandyti dar kartą.", "signUp": "Registruotis", "pleaseChooseAtLeastChars": "Prašome pasirinkti bent {min} simbolius.", "noEmailWarning": "Prašome įvesti galiojantį el. pašto adresą. Kitaip negalėsite atstatyti slaptažodžio. Jei nenorite, spustelėkite dar kartą mygtuką, kad tęstumėte.", "pleaseEnterValidEmail": "Prašome įvesti galiojantį el. pašto adresą.", "pleaseChooseAUsername": "Prašome pasirinkti vartotojo vardą", - "chooseAUsername": "Pasirinkite vartotojo vardą", "define": "Apibrėžti", "listen": "Klausytis", - "addConversationBot": "Įgalinti pokalbių robotą", - "addConversationBotDesc": "Pridėti robotą į šį pokalbį", - "convoBotSettingsDescription": "Redaguoti pokalbio temą ir sudėtingumą", - "enterAConversationTopic": "Įveskite pokalbio temą", - "conversationTopic": "Pokalbio tema", - "enableModeration": "Įgalinti moderavimą", - "enableModerationDesc": "Įgalinti automatinį moderavimą, kad peržiūrėtumėte žinutes prieš jas išsiunčiant", - "conversationLanguageLevel": "Koks yra šios pokalbio kalbos lygis?", - "showDefinition": "Rodyti apibrėžimą", - "subscriptionPopupTitle": "Šiame sakinyje gali būti gramatikos klaida...", - "subscriptionPopupDesc": "Prenumeruokite šiandien, kad atrakintumėte vertimą ir gramatikos taisymą!", - "seeOptions": "Peržiūrėti parinktis", - "continuedWithoutSubscription": "Tęsti be prenumeratos", "trialPeriodExpired": "Jūsų bandomasis laikotarpis pasibaigė", - "selectToDefine": "Spustelėkite bet kurį žodį, kad pamatytumėte jo apibrėžimą!", "translations": "vertimai", "messageAudio": "žinutės garsas", "definitions": "apibrėžimai", "subscribedToUnlockTools": "Prenumeruokite, kad atrakintumėte interaktyvų vertimą ir gramatikos tikrinimą, garso atkūrimą, personalizuotas praktikos veiklas ir mokymosi analitikus!", "translationTooltip": "Vertimas", - "audioTooltip": "Groti garsą", "speechToTextTooltip": "Transkripcija", - "certifyAge": "Patvirtinu, kad man daugiau nei {age} metų", "kickBotWarning": "Išmetus Pangea botą, šis pokalbių robotas bus pašalintas iš šio pokalbio.", - "joinToView": "Prisijunkite prie šios patalpos, kad pamatytumėte detales", "refresh": "Atnaujinti", - "autoPlayTitle": "Automatinis žinučių grojimas", - "autoPlayDesc": "Įjungus, teksto į kalbą garsas automatiškai grojamas pasirinkus žinutę.", "messageAnalytics": "Žinučių analizė", "words": "Žodžiai", "score": "Įvertinimas", "accuracy": "Tikslumas", "points": "Taškai", "noPaymentInfo": "Apmokėjimo informacija nereikalinga!", - "conversationBotModeSelectDescription": "Pokalbio veikla", - "conversationBotModeSelectOption_discussion": "Diskusija", - "conversationBotModeSelectOption_custom": "Pasirinktinis", - "conversationBotModeSelectOption_conversation": "Pokalbis", - "conversationBotModeSelectOption_textAdventure": "Teksto nuotykis", - "conversationBotModeSelectOption_storyGame": "Istorijos žaidimas", - "conversationBotDiscussionZone_title": "Diskusijos nustatymai", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskusijos tema", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Nustatyti diskusijos temą", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskusijos raktiniai žodžiai", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Nustatyti diskusijos raktinius žodžius", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Raktinių žodžių sąrašas, atskirtas kableliais, diskusijai vadovauti", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Siųsti diskusijos užduotį pagal tvarkaraštį", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Valandos tarp diskusijos užduočių", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reaguoja į reakciją ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakcija diskusijos užduočiai siųsti", - "conversationBotCustomZone_title": "Pasirinktiniai nustatymai", - "conversationBotCustomZone_customSystemPromptLabel": "Sistema užklausa", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Nustatyti pasirinktą sistemos užklausą", - "conversationBotCustomZone_customSystemPromptEmptyError": "Trūksta pasirinktų sistemos užklausos", - "botConfig": "Bot ir veiklos nustatymai", - "botConfigNoPermissionTitle": "Nėra leidimo", - "botConfigNoPermissionMessage": "Susisiekite su kambario administratoriumi, kad pakeistumėte bot nustatymus", - "addConversationBotDialogTitleInvite": "Patvirtinti kvietimą įtraukti pokalbių botą", - "addConversationBotButtonInvite": "Kviesti", - "addConversationBotDialogInviteConfirmation": "Kviesti", - "addConversationBotButtonTitleRemove": "Patvirtinti pašalinimą iš pokalbių boto", - "addConversationBotButtonRemove": "Pašalinti", - "addConversationBotDialogRemoveConfirmation": "Pašalinti", - "conversationBotConfigConfirmChange": "Patvirtinti", - "conversationBotStatus": "Kviesti botą", - "conversationBotTextAdventureZone_title": "Teksto nuotykis", - "conversationBotTextAdventureZone_instructionLabel": "Žaidimo vadovo instrukcijos", - "conversationBotTextAdventureZone_instructionPlaceholder": "Nustatyti žaidimo vadovo instrukcijas", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Trūksta žaidimo vadovo instrukcijų", - "studentAnalyticsNotAvailable": "Studentų duomenys šiuo metu nėra prieinami", - "roomDataMissing": "Kai kuriais duomenimis gali būti trūksta kambariuose, kurių narys nesate.", "updatePhoneOS": "Gali būti, kad reikės atnaujinti įrenginio operacinės sistemos versiją.", "wordsPerMinute": "Žodžių per minutę", "autoIGCToolName": "Automatiškai paleisti Pangea rašymo pagalbą", "autoIGCToolDescription": "Automatiškai paleisti Pangea pokalbio gramatikos ir vertimo rašymo pagalbą prieš išsiunčiant žinutę.", - "runGrammarCorrection": "Patikrinti žinutę", - "grammarCorrectionFailed": "Koreguotini klausimai", - "grammarCorrectionComplete": "Atrodo gerai!", "tooltipInstructionsTitle": "Nesate tikri, ką tai daro?", "tooltipInstructionsMobileBody": "Paspauskite ir palaikykite elementus, kad pamatytumėte įrankių patarimus.", "tooltipInstructionsBrowserBody": "Užveskite pelės žymeklį ant elementų, kad pamatytumėte įrankių patarimus.", "chatCapacity": "Pokalbių talpa", "roomFull": "Šis kambarys jau yra pilnas.", - "topicNotSet": "Temos nėra nustatyta.", - "chatCapacityNotSet": "Šis pokalbis neturi talpos ribos.", "chatCapacityHasBeenChanged": "Pokalbių talpa pasikeitė", "chatCapacitySetTooLow": "Pokalbių talpa turi būti ne mažesnė kaip {count}.", "chatCapacityExplanation": "Pokalbių talpa riboja leidžiamų narių skaičių pokalbyje.", - "chatExceedsCapacity": "Šis pokalbis viršija savo talpą.", "tooManyRequest": "Per daug užklausų, bandykite vėliau.", "enterNumber": "Įveskite sveiko skaičiaus reikšmę.", "buildTranslation": "Sukurkite savo vertimą iš aukščiau pateiktų pasirinkimų", - "nonexistentSelection": "Pasirinkimas nebegalioja.", - "changeAnalyticsLanguage": "Pakeisti analizės kalbą", "practice": "Praktika", "noLanguagesSet": "Nenurodyta jokių kalbų", - "noActivitiesFound": "Pakankamai apie tai šiuo metu! Grįžkite vėliau daugiau.", - "hintTitle": "Patarimas:", "speechToTextBody": "Girdėdami balso žinutes, galite matyti transkriptą bei kalbėtojo žodžių per minutę įvertinimą.", "versionNotFound": "Versija nerasta", "fetchingVersion": "Gaunama versija...", "versionFetchError": "Klaida gaunant versiją", "versionText": "Versija: {version}+{buildNumber}", - "languageButtonLabel": "Kalba: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatinis vertimo paleidimas", - "interactiveTranslatorAutoPlayDesc": "Paleidžia interaktyvųjį vertėją be klausimo.", - "changeAnalyticsView": "Pakeisti analizės rodinį", "l1TranslationBody": "Jūsų pagrindinės kalbos žinutės nebus išverstos.", "deleteSubscriptionWarningTitle": "Jūs turite aktyvią prenumeratą", "deleteSubscriptionWarningBody": "Ištrynus savo paskyrą, jūsų prenumerata nebus automatiškai atšaukta.", @@ -3522,9 +3164,7 @@ "error520Title": "Prašome bandyti dar kartą.", "error520Desc": "Atsiprašome, mes nesupratome jūsų žinutės...", "wordsUsed": "Naudoti žodžiai", - "errorTypes": "Klaidų tipai", "level": "Lygis", - "canceledSend": "Atšaukta siuntimas", "morphsUsed": "Naudoti morfai", "translationChoicesBody": "Spustelėkite ir palaikykite parinktį, kad gautumėte užuominą.", "grammar": "Gramatika", @@ -3534,7 +3174,6 @@ "reportContentIssueTitle": "Pranešti apie turinio problemą", "feedback": "Pasirinktinė atsiliepimas", "reportContentIssueDescription": "O ne! Dirbtinis intelektas gali palengvinti personalizuotą mokymosi patirtį, bet... taip pat haliucinuoja. Prašome pateikti bet kokią jūsų turimą atsiliepimą ir mes bandysime dar kartą.", - "changeContent": "O, ne! Dirbtinis intelektas gali palengvinti personalizuotas mokymosi patirtis, bet... taip pat haliucinacijų. Ką jis turėtų būti?", "clickTheWordAgainToDeselect": "Spustelėkite pasirinkta žodį, kad jį atšauktumėte.", "l2SupportNa": "Nepasiekiama", "l2SupportAlpha": "Alpha", @@ -3768,7 +3407,6 @@ "grammarCopySPC": "Specifiškumas", "grammarCopyPARTTYPE": "Dalijimosi tipas", "grammarCopyINTREL": "Klausiamasis-ryšys", - "grammarCopyNUMFORMpsor": "Turėtojo skaičius", "grammarCopyUNKNOWN": "Nežinoma", "grammarCopyNUMBERPSOR": "Turėtojo skaičius", "grammarCopyPOSS": "Nuosavybės", @@ -3814,28 +3452,14 @@ "grammarCopyVOICEdir": "Tiesioginis", "grammarCopyVOICEinv": "Atvirkštinis", "grammarCopyVOICErcp": "Abipusis", - "enterPrompt": "Įveskite sistemos užklausą", - "selectBotLanguage": "Pasirinkite bot kalbą", - "chooseVoice": "Pasirinkite balsą", - "enterLanguageLevel": "Įveskite kalbos lygį", - "enterDiscussionTopic": "Įveskite diskusijos temą", - "selectBotChatMode": "Pasirinkite pokalbio režimą", - "messageNotInTargetLang": "Žinutė nėra tikslinėje kalboje", "other": "Kita", "levelShort": "LYGIS {level}", - "botModeValidation": "Prašome pasirinkti pokalbio režimą", "clickBestOption": "Pasirinkite geriausias parinktis savo žinutei išversti!", "completeActivitiesToUnlock": "Užbaikite bent vieną veiklą, kad atrakintumėte vertimą!", - "botSettingsSubtitle": "Pakvieskite botą moderuoti pokalbio veiklą", - "invitePeople": "Pakviesti naudotojus", "noCapacityLimit": "Nėra talpos limito", "downloadGroupText": "Parsisiųsti grupės tekstą", "notificationsOn": "Pranešimai įjungti", "notificationsOff": "Pranešimai išjungti", - "chatCanBeFoundViaSearch": "Pokalbį galima rasti per paiešką", - "requireCodeToJoin": "Reikalauti kodo prisijungimui", - "canFindInSearch": "Gali rasti paieškoje", - "addChatToSpace": "Pridėti pokalbį", "createChatAndInviteUsers": "Sukurti pokalbį ir pakviesti naudotojus", "updatedNewSpaceDescription": "Kursai leidžia sujungti jūsų pokalbius ir kurti privačias arba viešas bendruomenes.", "joinWithCode": "Prisijungti su kodu", @@ -3871,39 +3495,19 @@ "constructUseCollected": "Surinkta pokalbyje", "constructUseNanDesc": "Nepatikoma", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Prisijungti naudotojo vardu ir slaptažodžiu", - "registrationEmailMessage": "Patvirtinkite savo el. paštą naudodami nuorodą, kuri buvo išsiųsta. Kai kuriais atvejais el. laiškas gali būti atsiųstas iki 5 minučių. Taip pat patikrinkite savo šlamšto aplanką.", "enableTTSToolName": "Įjungtas teksto į kalbą įrankis", "enableTTSToolDescription": "Leiskite programai generuoti tekstą į kalbą išvestį tam tikroms teksto dalims jūsų tikslo kalba.", - "couldNotFindTTS": "Nepavyko rasti teksto į kalbą variklio jūsų dabartinei tikslo kalbai.", - "ttsInstructionsHyperlink": "Spustelėkite čia, norėdami peržiūrėti instrukcijas, kaip atsisiųsti naują balsą į savo įrenginį.", - "createAnAccount": "Sukurti paskyrą", - "signIn": "Prisijungti", - "signUpWithEmail": "Registruotis el. paštu", - "signUpWithGoogle": "Registruotis su Google", - "signUpWithApple": "Registruotis su Apple", "yourUsername": "Jūsų vartotojo vardas", "yourEmail": "Jūsų el. paštas", - "pleaseEnterAnEmail": "Įveskite el. pašto adresą", - "signInWithGoogle": "Prisijungti su Google", - "signInWithApple": "Prisijungti su Apple", - "chooseYourAvatar": "Pasirinkite savo avatarą", "iWantToLearn": "Noriu mokytis", - "letsStart": "Pradėkime", - "pleaseAgreeToTOS": "Prašome sutikti su Paslaugų teikimo sąlygomis", "pleaseEnterEmail": "Prašome įvesti galiojantį el. pašto adresą.", - "pleaseSelectALanguage": "Prašome pasirinkti kalbą", "myBaseLanguage": "Mano pagrindinė kalba", - "clickWordsInstructions": "🧪 Spustelėkite bet kurį žodį, kad gautumėte daugiau informacijos. 🤓", - "chooseBestDefinition": "Ką reiškia šis žodis?", "meaningSectionHeader": "Reikšmė:", "formSectionHeader": "Naudojamos formos pokalbiuose:", - "noEmojiSelectedTooltip": "Nepasirinktas joks emoji", "writingExercisesTooltip": "Rašymas", "listeningExercisesTooltip": "Klausymas", "readingExercisesTooltip": "Skaitymas", "meaningNotFound": "Reikšmės nerasta.", - "formsNotFound": "Formų nerasta.", "chooseBaseForm": "Pasirinkite pagrindinę formą", "notTheCodeError": "Atsiprašome, tai ne kodas!", "totalXP": "Bendras XP", @@ -3943,9 +3547,6 @@ "pickAnEmoji": "Koks tavo mėgstamiausias emoji '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Suderink reikšmes su žodžiais žinutėje!", "doubleClickToEdit": "Dukart spustelėkite norėdami redaguoti.", - "removeFeature": "Pašalinti {feature}", - "chooseCorrectLabel": "Pasirinkite teisingą žymę.", - "levelPopupTitle": "Sveikiname pasiekus\nLygį {level}", "activityPlannerTitle": "Veiklos planuotojas", "topicLabel": "Tema", "topicPlaceholder": "Pasirinkite temą...", @@ -3953,7 +3554,6 @@ "modePlaceholder": "Pasirinkite režimą...", "learningObjectiveLabel": "Mokymosi tikslas", "learningObjectivePlaceholder": "Pasirinkite mokymosi tikslą...", - "mediaLabel": "Medijos, kurias mokiniai turėtų pasidalinti", "languageOfInstructionsLabel": "Veiklos instrukcijų kalba", "targetLanguageLabel": "Tikslo kalba", "cefrLevelLabel": "CEFR lygis", @@ -3968,20 +3568,15 @@ "instructions": "Instrukcijos", "numberOfLearners": "Mokinių skaičius", "mustBeInteger": "Turi būti sveikas skaičius, pvz., 1, 2, 3, ...", - "noLemmasFound": "Nėra žodyno su daugiau nei {xp} XP. Toliau praktikuokitės!", "constructUsePvmDesc": "Sukurtas balso žinutėje", - "lockedMorphFeature": "Laukiama atrakinti", "leaveSpaceDescription": "Palikus kursą, paliksite visus jame esančius pokalbius. Kiti naudotojai matys, kad palikote kursą.", - "whatIsLemma": "Kas yra lema?", "constructUseCorMmDesc": "Teisingas žinutės reikšmė", "constructUseIncMmDesc": "Netinkama žinutės prasmė", "constructUseIgnMmDesc": "Praleista žinutės prasmė", "clickForMeaningActivity": "Spustelėkite čia, kad pradėtumėte prasmės iššūkį", "meaning": "Prasmė", "chatWith": "Grupė su {displayname}", - "slightlyOffensive": "Šiek tiek įžeidžiama", "clickOnEmailLink": "Prašome spustelėti nuorodą el. laiške ir tęsti.\n\nPatikrinkite savo šlamšto aplanką, jei laiškas nebuvo gautas.", - "whoIsAllowedToJoinThisChat": "Kas gali prisijungti prie šio pokalbio", "dontForgetPassword": "Nepamirškite savo slaptažodžio!", "enableAutocorrectToolName": "Įgalinti įrenginio automatinį taisymą", "enableAutocorrectDescription": "Jei jūsų įrenginys palaiko mokomąją kalbą, galite įjungti automatinį taisymą, kad būtų ištaisytos dažnos klaidos rašant.", @@ -4009,48 +3604,26 @@ "autocorrectNotAvailable": "Deja, jūsų platforma šiuo metu nepalaikoma šiai funkcijai. Sekite naujienas dėl tolimesnio vystymo!", "pleaseUpdateApp": "Prašome atnaujinti programėlę, kad galėtumėte tęsti.", "chooseEmojiInstructionsBody": "Suderinkite emocijas su žodžiais, kuriuos jos geriausiai atitinka. Nesijaudinkite! Nėra jokių taškų mažinimo už nesutikimą. 😅", - "pickAnEmojiFor": "Pasirinkite emociją {lemma}", "analyticsVocabListBody": "Tai visa jūsų žodynas! Kiekvieną kartą uždirbdami XP už žodį, jie pereis nuo daigelio iki pilno žydėjimo. Spustelėkite bet kurį žodį, kad pamatytumėte daugiau detalių.", "morphAnalyticsListBody": "Tai visi gramatikos konceptai jūsų mokomoje kalboje! Juos atrakinsite, kai juos susidursite pokalbio metu. Spustelėkite, kad sužinotumėte daugiau.", "knockSpaceSuccess": "Jūs pateikėte užklausą prisijungti prie šio kurso! Administratorius atsakys į jūsų užklausą, kai gaus ją 😊", - "joinByCode": "Prisijungti pagal kodą", "chooseWordAudioInstructionsBody": "Klausykite viso pranešimo. Tada suderinkite garso įrašus su žodžiais.", "chooseMorphsInstructionsBody": "Spustelėkite dėlionės dalis gramatikos klausimams!", - "inviteAndLaunch": "Pakvieskite ir paleiskite", - "createOwnChat": "Sukurkite savo pokalbį", "pleaseEnterInt": "Įveskite skaičių", "home": "Pradžia", "join": "Prisijungti", "readingAssistanceOverviewBody": "Spustelėkite žemiau esančius mygtukus mini žaidimams, kuriuose derinami emojiai, garso įrašai, žodžių reikšmės ir gramatikos sąvokos. Arba spustelėkite bet kurį žodį norėdami sužinoti daugiau.", - "learnByTexting": "Mokytis rašant žinutes", - "levelSummaryTrigger": "Peržiūrėti santrauką", "levelSummaryPopupTitle": "Lygio {level} santrauka", - "referFriends": "Rekomenduoti draugus", - "referFriendDialogTitle": "Pakvieskite draugą į savo pokalbį", - "referFriendDialogDesc": "Ar turite draugą, kuris džiaugiasi mokytis naujos kalbos su jumis? Tada nukopijuokite ir išsiųskite šią kvietimo nuorodą, kad prisijungtų ir pradėtų pokalbį su jumis šiandien.", - "youUnlocked": "Jūs atrakinate", "resetInstructionTooltipsTitle": "Atstatyti instrukcijų patarimus", "resetInstructionTooltipsDesc": "Spustelėkite, kad parodytumėte instrukcijų patarimus kaip naujam vartotojui.", "selectForGrammar": "Pasirinkite gramatikos piktogramą veikloms ir detalėms.", - "newChatActivityTitle": "Pridėti smagią veiklą?", - "newChatActivityDesc": "Padarykite kiekvieną grupės pokalbį nuotykį su Veiklos planu! Nustatykite įdomias temas ir tikslus grupei, ir įkvėpkite pokalbius su nuostabiomis nuotraukomis. Skatinkite vaizduotę ir palaikykite smagų srautą be pastangų!", - "exploreMore": "Tyrinėti daugiau", "randomize": "Atsitiktinai parinkti", "clear": "Išvalyti", "makeYourOwnActivity": "Sukurti savo veiklą", "featuredActivities": "Pasiūlytos veiklos", - "goToChat": "Eiti į pokalbį", "save": "Išsaugoti", - "selectActivity": "Pasirinkti veiklą", - "wordFocusListeningMultipleChoice": "Kuris garso įrašas atitinka žodį?", "startChat": "Pradėti pokalbį", "translationProblem": "Vertimo problema", - "perfectTranslation": "Puikus vertimas!", - "greatJobTranslation": "Puikus darbas su šiuo vertimu!", - "goodJobTranslation": "Gerai padirbėta su šiuo vertimu.", - "makingProgress": "Jūs darote pažangą!", - "keepPracticing": "Tęskite praktikuotis!", - "niceJob": "Puikus darbas!", "askToJoin": "Paprašyti prisijungti", "emptyChatWarningTitle": "Pokalbis tuščias", "emptyChatWarningDesc": "Niekas nebuvo pakviestas į jūsų pokalbį. Eikite į Pokalbio nustatymus, kad pakviestumėte kontaktus arba Botą. Taip pat galite tai padaryti vėliau.", @@ -4069,8 +3642,6 @@ "languageLevelC2Desc": "Galiu suprasti beveik viską, ką girdžiu ar skaitau, ir reiškiuosi laisvai bei tiksliai.", "newVocab": "Nauji žodžiai", "newGrammar": "Nauji gramatikos konceptai", - "congratulationsOnReaching": "Pasiekėte lygį {level}!", - "seeDetails": "Peržiūrėti išsamiau", "choosePracticeMode": "Paspauskite vieną iš viršuje esančių mygtukų, kad pradėtumėte praktikos veiklą", "ban": "Uždrausti", "unban": "Atšaukti draudimą", @@ -4084,8 +3655,6 @@ "timesUsedWithAssistance": "Naudota su pagalba kartų", "shareInviteCode": "Pasidalink kvietimo kodu: {code}", "leaderboard": "Rezultatų lentelė", - "welcomeUser": "Sveiki, {user}", - "joinSpaceOnboardingDesc": "Ar turite kvietimo kodą ar nuorodą į viešą kursą?", "skipForNow": "Nuošalyje dabar", "permissions": "Leidimai", "spaceChildPermission": "Kas gali pridėti naujus pokalbius šiam kursui", @@ -4093,12 +3662,8 @@ "defaultOption": "Numatytasis", "deleteChatDesc": "Ar tikrai norite ištrinti šį pokalbį? Jis bus ištrintas visiems dalyviams, o visi pranešimai pokalbyje nebeprieinami praktikai ar mokymosi analitikai.", "deleteSpaceDesc": "Kursas ir bet kurie pasirinktini pokalbiai bus ištrinti visiems dalyviams, o visi pranešimai pokalbyje nebeprieinami praktikai ar mokymosi analitikai. Šis veiksmas nėra atšaukiamas.", - "chatWithActivities": "Pokalbis su veiklomis", "launch": "Pradėti", - "launchActivityToChats": "Pradėti veiklą pokalbiuose", "searchChats": "Ieškoti pokalbių", - "selectChats": "Pasirinkti pokalbius", - "selectChatToStart": "Baigta! Pasirinkite pokalbį pradėti", "maxFifty": "Maks. 50", "configureSpace": "Konfigūruoti kursą", "pinMessages": "Prisegti žinutes", @@ -4112,9 +3677,7 @@ "announcements": "Pranešimai", "activities": "Veiklos", "access": "Prieiga", - "botSettings": "Bot nustatymai", "activitySuggestionTimeoutMessage": "Mes intensyviai dirbame, kad sukurtume daugiau veiklų jums, prašome grįžti po minutės", - "accessSettingsWarning": "Opa! Atrodo, kad neturite leidimo nustatyti šios kambario prieigos taisyklių. Patikrinkite jas, kad įsitikintumėte, ar jos atitinka jūsų poreikius, ir susisiekite su kambario administratoriumi, jei reikia jas pakeisti.", "howSpaceCanBeFound": "Kaip galima rasti šį kursą", "private": "Privatus", "cannotBeFoundInSearch": "Negalima rasti paieškoje", @@ -4127,16 +3690,6 @@ "canBeFoundViaKnock": "• prašymą prisijungti ir administratoriaus patvirtinimą", "youHaveLeveledUp": "Jūs pakilote lygmeniu!", "sendActivities": "Siųsti veiklas", - "getStarted": "Pradėti", - "getStartedBotChatDesc": "Pokalbiai su dirbtiniu intelektu yra puiki pradžia, o Pangea skaitymo, rašymo, klausymo ir kalbėjimo įrankiai tai padaro lengva!", - "getStartedCommunitiesDesc": "Mokymasis su bendruomene yra vieta, kur Pangea pokalbis išsiskiria!\nJūs galite prisijungti prie savo klasės, rasti kursą arba net sukurti savo!", - "getStartedFriendsDesc": "Ar turite draugą, kuris nori mokytis kartu su jumis?", - "getStartedBotChatComplete": "Puiku! Jūs kalbate su botu!", - "getStartedCommunitiesComplete": "Puiku, jūs prisijungėte prie kurso!", - "getStartedComplete": "Jūs baigėte šį skyrių!\nTęskite mūsų nuostabių funkcijų tyrinėjimą bendraudami su draugais!", - "getStartedFriendsComplete": "Woohoo! Jūs turite draugų! 😉", - "getStartedBotChatButton": "Pradėti pokalbį!", - "getStartedFriendsButton": "Pokalbis su draugu", "groupChat": " Grupinis pokalbis", "directMessage": "Tiesioginė žinutė", "newDirectMessage": "Nauja tiesioginė žinutė", @@ -4152,7 +3705,6 @@ "mySavedActivities": "Mano išsaugotos veiklos", "noSavedActivities": "Nėra išsaugotų veiklų", "saveActivity": "Išsaugoti šią veiklą", - "yourSavedActivities": "Išsaugotos veiklos", "failedToPlayVideo": "Nepavyko paleisti vaizdo įrašo", "done": "Atlikta", "inThisSpace": "Šio kurso metu", @@ -4191,37 +3743,27 @@ "maximumActivityParticipants": "Kiekviena veikla gali turėti iki {count} dalyvių.", "pending": "Laukiama", "inactive": "Nekeičiama", - "unjoinedActivityMessage": "Ar norite dalyvauti? Pasirinkite atvirą vaidmenį!\nArba praleiskite laiką ir stebėkite šou!", - "fullActivityMessage": "Nesijaudinkite, žiūrėkite šou! Nors nėra atvirų vaidmenų dalyvauti, galite peržiūrėti pokalbį!", "confirmRole": "Patvirtinti vaidmenį", "openRoleLabel": "ATVIRAS", "joinedTheActivity": "👋 {username} prisijungė kaip {role}", "finishedTheActivity": "🎯 {username} užbaigė šią veiklą", - "endActivityTitle": "Aš baigiau", - "endActivityDesc": "Ar pasiekėte tikslus?\nTai jūsų patvirtinimas, kad atsisakote rašymo. Bet nesijaudinkite, linksmybės tęsiasi pokalbyje! Drąsiai leiskitės ir mėgaukitės šou, kol visi paspaus 'Baigta'.", "archiveToAnalytics": "Pridėti prie mano užbaigtų veiklų", "activitySummaryError": "Veiklos santraukų nėra", "requestSummaries": "Prašyti santraukų", - "loadingActivitySummary": "Įkeliama veiklos santrauka...", "generatingNewActivities": "Jūs esate pirmasis šios kalbos poros naudotojas! Prašome palaukti minutėlę, ruošiame veiklas būtent jums.", - "requestAccessTitle": "Prašyti prieigos prie analitikos?", + "requestAccessTitle": "Prašyti analizės prieigos?", "requestAccessDesc": "Ar norėtumėte prašyti prieigos peržiūrėti dalyvių analitiką?\n\nJei dalyviai sutiks, šios kurso administratoriai galės matyti:\n • bendrą žodyną\n • bendrus gramatikos konceptus\n • atliktų veiklos sesijų skaičių\n • naudotus, teisingus ir neteisingus gramatikos konceptus\n\nJie negalės matyti:\n • žinučių pokalbiuose už kurso ribų\n • žodyno sąrašo", "requestAccess": "Prašyti prieigos ({count})", "analyticsInactiveTitle": "Užklausų nebuvo galima siųsti neaktyviems vartotojams", "analyticsInactiveDesc": "Neaktyvūs vartotojai, kurie nesiregistravo nuo šios funkcijos įdiegimo, nematys jūsų užklausos.\n\nUžklausos mygtukas pasirodys, kai jie sugrįš. Galite iš naujo siųsti užklausą vėliau paspausdami Užklausos mygtuką po jų vardu, kai jis bus prieinamas.", "accessRequestedTitle": "Prieigos prie analitikos užklausa", - "accessRequestedDesc": "„{space}“ administratoriai prašo peržiūrėti jūsų mokymosi analitiką.\n\nJei sutinkate, šios kurso administratoriai galės matyti:\n • bendrą žodyną\n • bendrus gramatikos konceptus\n • atliktų veiklos sesijų skaičių\n • naudotus, teisingus ir neteisingus gramatikos konceptus\n\nJie negalės matyti:\n • žinučių pokalbiuose už kurso ribų\n • žodyno sąrašo", - "allowAccess": "Leisti prieigą", - "denyAccess": "Atmesti prieigą", + "accessRequestedDesc": "Prašomi administratoriai: {admin} \n\nAdministratoriai iš „{space}“ prašo peržiūrėti jūsų mokymosi analizę.\n\nJei sutinkate, jie galės peržiūrėti jūsų:\n • bendrą žodyną\n • bendras gramatikos sąvokas\n • bendrą užsiėmimų skaičių\n • konkrečias gramatikos sąvokas, naudojamas teisingai ir neteisingai\n\nJie negalės peržiūrėti jūsų:\n • žinučių pokalbiuose už kurso ribų\n • žodyno sąrašo", "adminRequestedAccess": "Administratoriai prašo peržiūrėti jūsų analitiką.", "lastUpdated": "Atnaujinta\n{time}", "activityFinishedMessage": "Viskas baigta!", "endForAll": "Uždaryti visiems", "newCourse": "Naujas kursas", - "newCourseSubtitle": "Kokią kurso planą norėtumėte naudoti?", - "failedToLoadCourses": "Nepavyko įkelti kursų", "numModules": "{num} moduliai", - "numActivityPlans": "{num} veiklos planai", "coursePlan": "Kurso planas", "editCourseLater": "Vėliau galite redaguoti šablono pavadinimą, aprašymus ir kurso vaizdą.", "newCourseAccess": "Pagal numatytuosius nustatymus kursai yra privatūs ir reikalauja administratoriaus patvirtinimo prisijungiant. Šiuos nustatymus galite redaguoti bet kuriuo metu.", @@ -4235,17 +3777,11 @@ "accessDesc": "Galite padaryti savo kursą atvirą visiems! Arba, padaryti jį privačiu ir saugiu.", "createGroupChatDesc": "Nors veiklos sesijos prasideda ir baigiasi, grupiniai pokalbiai liks atviri kasdieniam bendravimui.", "deleteDesc": "Tik tik administratori gali ištrinti kursą. Tai yra destruktyvus veiksmas, kuris pašalina visus naudotojus ir ištrina visus pasirinktus pokalbius kurse. Būkite atsargūs.", - "failedToLoadCourseInfo": "Nepavyko įkelti kurso informacijos", "noCourseFound": "O, šis kursas turi būti suplanuotas!\n\nKurso planai yra temų ir pokalbių veiklų seka.", "additionalParticipants": "+ {num} kiti", - "activityNotFoundForCourse": "Ši veikla kurse nerasta", - "courseChats": "Kurso pokalbiai", - "myActivitySessions": "Mano veiklos sesijos", "directMessages": "Tiesioginės žinutės", "whatNow": "Kas dabar?", "chooseNextActivity": "Pasirinkite savo kitą veiklą!", - "seeInstructions": "Peržiūrėti instrukcijas", - "hideInstructions": "Slėpti instrukcijas", "letsGo": "Pradėkime", "chooseRole": "Pasirinkite vaidmenį!", "chooseRoleToParticipate": "Pasirinkite vaidmenį dalyvauti!", @@ -4255,23 +3791,15 @@ "inviteFriends": "Pakvieskite draugus", "waitNotDone": "Laukite, aš dar nesu baigęs!", "waitingForOthersToFinish": "Laukiama kitų pabaigos...", - "saveToCompletedActivities": "Išsaugoti kaip užbaigtas veiklas", "generatingSummary": "Analizuojama pokalbis ir generuojami rezultatai", - "instructionsLanguage": "Instrukcijų kalba", "findCourse": "Rasti kursą", - "activityCompletedDesc": "Jūsų užbaigta veikla buvo pridėta prie analizės, kur galite peržiūrėti ir praktikuoti naudotą kalbą.", "pingParticipantsNotification": "{user} ieško naudotojų prisijungti prie veiklos sesijos {room}", "course": "Kursas", "courses": "Kursai", "courseName": "Kurso pavadinimas", "createNewCourse": "Naujas kursas", - "publicCourses": "Vieši kursai", "goToCourse": "Eiti į kursą: {course}", "activityComplete": "Ši veikla buvo užbaigta. Apžvalga turėtų būti prieinama žemiau.", - "haventChattedMuch": "Atrodo, kad nesikalbėjote daug, pabandykite naudoti daugiau žodžių! Jei jau įvykdėte savo tikslą, galite užbaigti veiklą žemiau.", - "haveChatted": "Atrodo, kad jau kalbėjotės šiek tiek! Jei jau įvykdėte savo tikslą, užbaikite veiklą ir mes sugeneruosime jums apžvalgą pokalbyje!", - "userDoneAndWaiting": "{num1}/{num2} dalyvių jau baigė. Laukiama visų pabaigos, ir mes sugeneruosime jums apžvalgą pokalbyje! \n\nJei norite vėl prisijungti prie pokalbio, spustelėkite tęsti mygtuką pokalbyje.", - "othersDoneAndWaiting": "{num1}/{num2} jau baigė. Ar įvykdėte savo tikslą?", "startNewSession": "Pradėti naują sesiją", "joinOpenSession": "Prisijungti prie atviros sesijos", "less": "mažiau", @@ -4281,7 +3809,6 @@ "openToJoin": "Atvira prisijungimui", "results": "Rezultatai", "activityDone": "Veikla atlikta!", - "moreLabel": "daugiau", "promoCodeInfo": "Nuolaidos kodus galima įvesti kitame puslapyje", "editsComingSoon": "Kurių miestų ir veiklų redagavimo funkcijos netrukus bus prieinamos.", "editing": "Redagavimas", @@ -4297,13 +3824,10 @@ "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", - "chooseLanguage": "Pasirinkite kalbą.", + "chooseLanguage": "Pasirinkite tikslinę kalbą.", "planTrip": "Planuoti kelionę", "howAreYouTraveling": "Kaip keliaujate?", "unlockPrivateTrip": "Atrakinti privačią kelionę", @@ -4316,25 +3840,20 @@ "courseCode": "Koks yra slaptažodis?", "courseCodeHint": "Kelionės kodas arba nuoroda", "unlockMyTrip": "Atrakinti mano kelionę", - "anyLevel": "Bet koks lygis", "signupOption": "Kaip norite užsiregistruoti?", "withApple": "Su Apple", "withGoogle": "Su Google", "withEmail": "Su el. paštu", "createAccount": "Sukurti paskyrą", - "noCoursesFound": "Nepavyko rasti kursų", "loginWithEmail": "Prisijungti su el. paštu", "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", - "allCefrLevels": "Visi CEFR lygiai", "chatListTooltip": "Čia rasite savo tiesiogines žinutes! Spustelėkite bet kurio vartotojo avatarą ir „pradėti pokalbį“, kad išsiųstumėte tiesioginę žinutę.", "directMessageBotTitle": "Tiesioginė žinutė Pangea Bot", "feedbackTitle": "Veiklos atsiliepimai", - "feedbackDesc": "Kaip galima patobulinti veiklą? Jei galite pateikti keletą detalių, mes padarysime pakeitimą!", "feedbackHint": "Jūsų atsiliepimas", "feedbackButton": "Pateikti atsiliepimą", "directMessageBotDesc": "Kalbėtis su žmonėmis yra smagiau, bet... dirbtinis intelektas visada pasiruošęs!", @@ -4342,7 +3861,7 @@ "playWithAI": "Žaiskite su dirbtiniu intelektu dabar", "courseStartDesc": "Pangea botas pasiruošęs bet kada pradėti!\n\n...bet mokymasis yra geresnis su draugais!", "@@locale": "lt", - "@@last_modified": "2026-01-06 13:02:14.517811", + "@@last_modified": "2026-01-07 14:27:30.418081", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -5810,30 +5329,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5849,18 +5344,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5885,18 +5368,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5933,38 +5404,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5973,62 +5416,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6065,10 +5464,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6077,14 +5472,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6093,46 +5480,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6141,10 +5492,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6201,18 +5548,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6221,14 +5556,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6257,18 +5584,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6277,42 +5592,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6321,14 +5604,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6349,26 +5624,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6389,10 +5644,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6425,25 +5676,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6500,34 +5732,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6556,778 +5760,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8320,14 +6756,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8339,14 +6767,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8378,10 +6798,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8390,18 +6806,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8410,14 +6814,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8442,38 +6838,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8519,10 +6887,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8547,10 +6911,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8575,10 +6935,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8587,66 +6943,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8667,42 +6967,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8727,154 +7003,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8891,18 +7019,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8923,14 +7039,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8947,10 +7055,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8963,14 +7067,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8979,14 +7075,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9014,26 +7102,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9062,18 +7130,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9110,10 +7170,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10046,10 +8102,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10230,34 +8282,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10270,10 +8294,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10282,14 +8302,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10306,22 +8318,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10469,14 +8465,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10485,34 +8473,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10521,54 +8481,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10577,10 +8501,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10597,10 +8517,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10772,26 +8688,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10820,10 +8716,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10880,30 +8772,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10932,18 +8808,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11060,14 +8928,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11080,10 +8940,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11092,14 +8948,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11116,14 +8964,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11132,22 +8972,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11160,18 +8984,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11188,22 +9000,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11212,30 +9012,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11308,18 +9084,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11376,18 +9140,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11416,30 +9168,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11492,18 +9228,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11552,46 +9280,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11656,10 +9344,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11831,14 +9515,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11866,14 +9542,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11886,10 +9554,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11925,19 +9589,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11962,14 +9621,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11978,14 +9629,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12038,10 +9681,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12054,18 +9693,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12078,14 +9705,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12126,26 +9745,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12173,10 +9780,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12187,36 +9790,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12253,10 +9826,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12321,18 +9890,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12397,10 +9954,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12421,10 +9974,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12441,10 +9990,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12453,10 +9998,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12469,10 +10010,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12497,16 +10034,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Pakvieskite draugus į veiklą", - "inviteFriendsToActivityCourse": "Pakvieskite draugus į veiklą ir kursą", "feedbackRespDesc": "Kitą dieną patikrinkite atnaujinimus apie veiklą.", "activityDropdownDesc": "Kai baigsite šią veiklą, spustelėkite žemiau", - "activityAnalyticsListBody": "Tai yra jūsų užbaigtos veiklos! Baigę veiklas, jas galite peržiūrėti čia.", "languageMismatchTitle": "Kalbos neatitikimas", "languageMismatchDesc": "Jūsų tikslinė kalba nesutampa su šios veiklos kalba. Ar norite atnaujinti savo tikslinę kalbą?", "reportWordIssueTooltip": "Pranešti apie žodžio informacijos problemą", "tokenInfoFeedbackDialogTitle": "Žodžio informacijos atsiliepimai", - "tokenInfoFeedbackDialogDesc": "Dirbtinis intelektas daro klaidų. Prašome aprašyti bet kokias problemas, kurias radote su aukščiau pateikta informacija.", "noPublicCoursesFound": "Nerasta viešųjų kursų. Ar norėtumėte sukurti vieną?", "noCourseTemplatesFound": "Nepavyko rasti jokių kursų jūsų tikslinei kalbai. Tuo tarpu galite bendrauti su Pangea Bot ir vėliau grįžti pasitikrinti daugiau kursų.", "botActivityJoinFailMessage": "Pangea Bot šiek tiek užtrunka atsakydamas. Prašome pabandyti vėliau arba pakviesti draugą.", @@ -12514,14 +10047,6 @@ "leaveDesc": "Išeikite iš šios erdvės ir visų pokalbių joje", "selectAll": "Pasirinkti viską", "deselectAll": "Atšaukti viską", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12530,10 +10055,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12550,10 +10071,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12587,7 +10104,6 @@ "newMessageInPangeaChat": "📩 Naujiena žinutė Pangea pokalbyje", "shareCourse": "Pasidalinti kursu", "addCourse": "Pridėti kursą", - "joinCourseWithCode": "Prisijungti prie kurso su kodu", "joinPublicCourse": "Prisijungti prie viešo kurso", "vocabLevelsDesc": "Čia pateks žodžiai, kai juos pakelsite į aukštesnį lygį!", "highlightVocabTooltip": "Išryškinkite tikslinius žodžius žemiau, juos siųsdami arba praktikuodami pokalbyje", @@ -12611,10 +10127,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12623,7 +10135,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nerasta tiesioginių žinučių ar pokalbių. Įsitikinkite, kad jūsų paieška parašyta teisingai.", + "activityAnalyticsTooltipBody": "Tai jūsų išsaugotos veiklos peržiūrai ir praktikai.", + "numSavedActivities": "Išsaugotų veiklų skaičius", + "saveActivityTitle": "Išsaugoti veiklą", + "saveActivityDesc": "Puikus darbas! Išsaugokite šią veiklą vėlesnei peržiūrai ir praktikai", + "levelInfoTooltip": "Čia galite pamatyti visus taškus, kuriuos uždirbote, ir kaip!", + "alreadyInCourseWithID": "Jūs jau esate šiame kurse su šiuo planu. Ar norite sukurti kursą su tuo pačiu planu, ar eiti į esamą kursą?", + "goToExistingCourse": "Eiti į esamą kursą", + "emojiView": "Emodžių peržiūra", + "feedbackDialogDesc": "Aš taip pat darau klaidų! Ar yra kas nors, kas galėtų man padėti tobulėti?", + "contactHasBeenInvitedToTheCourse": "Kontaktas buvo pakviestas į kursą", + "activityStatsButtonTooltip": "Veiklos informacija", + "allow": "Leisti", + "deny": "Atmesti", + "enabledRenewal": "Įjungti prenumeratos atnaujinimą", + "subscriptionEndsOn": "Prenumerata baigiasi", + "subscriptionRenewsOn": "Prenumerata atnaujinama", + "waitForSubscriptionChanges": "Prenumeratos pakeitimai gali užtrukti, kol atsispindės programėlėje.", + "subscribeReadingAssistance": "Prenumeruokite, kad atrakintumėte žinučių įrankius", + "aceDisplayName": "Ačinė", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikiečių", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharų", + "arDisplayName": "Arabų", + "asDisplayName": "Asamiečių", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaidžaniečių", + "baDisplayName": "Baškirų", + "banDisplayName": "Balių", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Baltarusų", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betavi", + "bgDisplayName": "Bulgarų", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalų", + "bnBDDisplayName": "Bengalų (Bangladešas)", + "bnINDisplayName": "Bengalų (Indija)", + "brDisplayName": "Bretonų", + "bsDisplayName": "Bosnių", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriatų", + "caDisplayName": "Katalonų", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centrinė kurdų kalba", + "cnhDisplayName": "Hakha Čin", + "coDisplayName": "Korsikiečių", + "crhDisplayName": "Krymo turkų", + "crsDisplayName": "Seselwa kreolų prancūzų", + "csDisplayName": "Čekų", + "cvDisplayName": "Čuvašų", + "cyDisplayName": "Velsiečių", + "daDisplayName": "Danų", + "deDisplayName": "Vokiečių", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Anglų", + "enAUDisplayName": "Anglų (Australija)", + "enGBDisplayName": "Anglų (JK)", + "enINDisplayName": "Anglų (Indija)", + "enUSDisplayName": "Anglų (JAV)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Ispanų", + "esESDisplayName": "Ispanų (Ispanija)", + "esMXDisplayName": "Ispanų (Meksika)", + "euDisplayName": "Baskų", + "faDisplayName": "Persų", + "ffDisplayName": "Fulah", + "fiDisplayName": "Suomi", + "filDisplayName": "Filipiniečių", + "fjDisplayName": "Fidžiečių", + "foDisplayName": "Faroejų", + "frDisplayName": "Prancūzų", + "frCADisplayName": "Prancūzų (Kanada)", + "frFRDisplayName": "Prancūzų (Prancūzija)", + "fyDisplayName": "Vakarų Frisų", + "gaDisplayName": "Airių", + "gaaDisplayName": "Ga", + "gdDisplayName": "Škotų gėlų", + "glDisplayName": "Gališų", + "gnDisplayName": "Guaraní", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havajų", + "heDisplayName": "Hebrajų", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Čatįsgaris", + "hrDisplayName": "Kroatų", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitiečių kreolų", + "huDisplayName": "Vengrų", + "hyDisplayName": "Armėnų", + "idDisplayName": "Indoneziečių", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandų", + "itDisplayName": "Italų", + "jaDisplayName": "Japonų", + "jvDisplayName": "Javanų", + "kaDisplayName": "Gruzinių", + "kkDisplayName": "Kazachų", + "kmDisplayName": "Khmerų", + "knDisplayName": "Kannada", + "koDisplayName": "Korėjiečių", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kašmyro", + "ktuDisplayName": "Kituba (Demokratinė Kongo Respublika)", + "kuDisplayName": "Kurdų", + "kyDisplayName": "Kirgizų", + "laDisplayName": "Lotynų", + "lbDisplayName": "Luksemburgiečių", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgo", + "lijDisplayName": "Ligurų", + "lmoDisplayName": "Lombardų", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lietuvių", + "ltgDisplayName": "Latgalių", + "luoDisplayName": "Luo (Kenija ir Tanzanija)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvių", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagazų", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonų", + "mlDisplayName": "Malajų", + "mnDisplayName": "Mongolų", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malajų", + "msArabDisplayName": "Malajų (arabų)", + "msMYDisplayName": "Malajų (Malazija)", + "mtDisplayName": "Maltiečių", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmiečių", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvegų (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Olandų", + "nlBEDisplayName": "Flandrų", + "noDisplayName": "Norvegų", + "nrDisplayName": "Pietų Ndebele", + "nsoDisplayName": "Šiaurės Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Lenkų", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugalų", + "ptBRDisplayName": "Portugalų (Brazilija)", + "ptPTDisplayName": "Portugalų (Portugalija)", + "quDisplayName": "Kvečua", + "rajDisplayName": "Radžastano", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumunų", + "roMDDisplayName": "Moldovos", + "romDisplayName": "Romų", + "ruDisplayName": "Rusų", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskritas", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilietiškai", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Šan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovakų", + "slDisplayName": "Slovėnų", + "smDisplayName": "Samoanų", + "snDisplayName": "Shonų", + "soDisplayName": "Somalų", + "sqDisplayName": "Albanų", + "srDisplayName": "Serbų", + "srMEDisplayName": "Juodkalniečių", + "ssDisplayName": "Swati", + "stDisplayName": "Pietų Sotho", + "suDisplayName": "Sundų", + "svDisplayName": "Švedų", + "swDisplayName": "Suahili", + "szlDisplayName": "Sileziečių", + "taDisplayName": "Tamilų", + "teDisplayName": "Telugų", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadžikų", + "thDisplayName": "Tailandiečių", + "tiDisplayName": "Tigrinų", + "tkDisplayName": "Turkmėnų", + "tlDisplayName": "Tagalogų", + "tnDisplayName": "Cvanų", + "trDisplayName": "Turkų", + "tsDisplayName": "Tsongų", + "ttDisplayName": "Tatarų", + "ugDisplayName": "Uigūrų", + "ukDisplayName": "Ukrainiečių", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indija)", + "urPKDisplayName": "Urdu (Pakistanas)", + "uzDisplayName": "Uzbekų", + "viDisplayName": "Vietnamiečių", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukatekas", + "yueDisplayName": "Kantoniečių", + "yueCNDisplayName": "Kantoniečių (Kinija)", + "yueHKDisplayName": "Kantoniečių (Honkongas)", + "zhDisplayName": "Kinų", + "zhCNDisplayName": "Kinų (Supaprastinta)", + "zhTWDisplayName": "Kinų (Tradiciška)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12688,6 +11386,7 @@ "placeholders": {} }, "notStartedActivitiesTitle": "Atidarytos sesijos ({num})", + "pickDifferentActivity": "Pasirinkite kitą veiklą", "inProgressActivitiesTitle": "Dabar vyksta ({num})", "completedActivitiesTitle": "Baigta ({num})", "inOngoingActivity": "Turite vykdomą veiklą!", @@ -12715,10 +11414,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Jūsų tikslinė kalba nesutampa su šiuo pranešimu. Ar norite atnaujinti savo tikslinę kalbą?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Tai yra visi šio kurso dalyviai. Spustelėkite bet kurio vartotojo avatarą ir „pradėti pokalbį“, kad siųstumėte DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Šis žodynas bus nuolat pašalintas iš jūsų analizės", + "woman": "Moteris", + "man": "Vyras", + "otherGender": "Kitas", + "unselectedGender": "Pasirinkite lyties parinktį", + "gender": "Lytis", + "chatParticipantTooltip": "Tai visi šioje pokalbyje. Spustelėkite bet kurio vartotojo avatarą ir „pradėti pokalbį“, kad siųstumėte DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Mokymosi įrankiai yra išjungti žinutėms, kurios nėra jūsų tikslinėje kalboje.", + "vocabEmoji": "Žodyno emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Prašyti regeneracijos", + "optionalRegenerateReason": "(Pasirinktinai) Priežastis", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Jūs nustatėte emociją {lemma}! Mes naudosime šią emociją, kad atstovautume žodžiui praktinėse veiklose ateityje.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Laukiama, kol prisijungimas bus baigtas", + "ssoDialogDesc": "Atidarėme naują skirtuką, kad galėtumėte saugiai prisijungti.", + "ssoDialogHelpText": "🤔 Jei nematėte naujo skirtuko, patikrinkite savo iššokančių langų blokatorių.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Išjungti kalbos įrankius", + "disableLanguageToolsDesc": "Ar norėtumėte išjungti automatinę kalbos pagalbą?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Leidimas atmestas. Įgalinkite įrašymo leidimus, kad galėtumėte įrašyti garso pranešimus.", + "genericWebRecordingError": "Kažkas nepavyko. Rekomenduojame naudoti „Chrome“ naršyklę įrašant pranešimus.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Norint geriausiai naudotis šia programa, prašome padidinti ekrano dydį.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Veiklos, kad atrakintumėte kitą temą", "activitiesToUnlockTopicDesc": "Nustatykite veiklų skaičių, kad atrakintumėte kitą kurso temą", "@activitiesToUnlockTopicTitle": { @@ -12728,5 +11545,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Teisinga žodyno apibrėžimo praktika", + "constructUseIncLMDesc": "Neteisinga žodyno apibrėžimo praktika", + "constructUseCorLADesc": "Teisinga žodyno garso praktika", + "constructUseIncLADesc": "Neteisinga žodyno garso praktika", + "constructUseBonus": "Premija žodyno praktikos metu", + "practiceVocab": "Praktikuoti žodyną", + "selectMeaning": "Pasirinkite reikšmę", + "selectAudio": "Pasirinkite atitinkamą garsą", + "congratulations": "Sveikiname!", + "anotherRound": "Dar viena raundas", + "noActivityRequest": "Nėra dabartinio veiklos prašymo.", + "quit": "Išeiti", + "congratulationsYouveCompletedPractice": "Sveikiname! Jūs baigėte praktikos sesiją.", + "mustHave10Words": "Turite turėti bent 10 žodžių, kad galėtumėte juos praktikuoti. Pabandykite pasikalbėti su draugu arba Pangea Bot, kad sužinotumėte daugiau!", + "botSettings": "Roboto nustatymai", + "activitySettingsOverrideWarning": "Kalba ir kalbos lygis nustatomi pagal veiklos planą", + "voice": "Balsas", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index da62402e1..a52336e79 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -3364,28 +3364,16 @@ "displayNavigationRail": "Rādīt pārvietošanās sliedi viedierīcēs", "@displayNavigationRail": {}, "customReaction": "Pielāgota reakcija", - "accountInformation": "Konta informācija", - "addGroupDescription": "Pievienot čata aprakstu", - "addNewFriend": "Pievienot jaunu draugu", - "alreadyHaveAnAccount": "Vai jau ir konts?", - "createNewGroup": "Izveidot jaunu čatu", - "editChatPermissions": "Rediģēt čata atļaujas", "ignore": "Bloķēt", "ignoredUsers": "Bloķētie lietotāji", "writeAMessageLangCodes": "Rakstiet {l1} vai {l2}...", "requests": "Pieprasījumi", - "allCorrect": "Tā es to teiktu! Labi!", - "newWayAllGood": "Es to neesmu teicis tā, bet tas izskatās labi!", - "othersAreBetter": "Hm, varbūt ir labāks veids, kā to pateikt.", "holdForInfo": "Nospiediet un turiet, lai uzzinātu vārda informāciju.", "greenFeedback": "Tas būtu tas, ko es liktu!", "yellowFeedback": "Hm, vari to pamēģināt un redzēt, vai tas strādā! Lai izmantotu šo vārdu, vienkārši vēlreiz noklikšķini uz tā.", "redFeedback": "Es domāju, ka tas nav pareizi...", "itInstructionsTitle": "Es varu palīdzēt ar tulkošanu!", "itInstructionsBody": "Jūs varat noklikšķināt un turēt izvēles, lai uzzinātu vārda informāciju.", - "oneday": "Pēdējās 24 stundas", - "oneweek": "Pēdējās 7 dienas", - "onemonth": "Pagājušais mēnesis", "gaTooltip": "L2 lietošana ar gramatikas palīdzību", "taTooltip": "L2 lietošana ar tulkošanas palīdzību", "unTooltip": "Cits", @@ -3395,58 +3383,27 @@ "interactiveTranslatorAllowed": "Studentu izvēle", "interactiveTranslatorRequired": "Nepieciešams", "notYetSet": "Vēl nav iestatīts", - "myLearning": "Mana analītika", "waTooltip": "L2 lietošana bez palīdzības", - "changeDateRange": "Mainīt datumu diapazonu", - "classDescription": "Apraksts", - "addStudents": "Uzaicināt lietotājus ar saiti vai kodu", - "copyClassLink": "Kopēt uzaicinājuma saiti", - "copyClassCode": "Kopēt uzaicināšanas kodu", - "inviteStudentByUserName": "Uzaicināt lietotājus ar lietotājvārdu", "languageSettings": "Valodas iestatījumi", "interactiveTranslator": "Tulkotāja palīdzība", - "shareVideo": "Dalīties ar video", - "shareVideoDesc": "Ieslēdziet šo, lai ļautu studentiem dalīties ar video ziņojumos.", - "shareFiles": "Dalīties ar failiem", - "selectLanguageLevel": "Izvēlieties valodas līmeni", "noIdenticalLanguages": "Lūdzu, izvēlieties atšķirīgas pamata un mērķa valodas", - "iWantALanguagePartnerFrom": "Ir no:", - "worldWide": "Visā pasaulē", - "noResults": "Nav rezultātu! Mēģiniet paplašināt meklēšanu.", "searchBy": "Meklēt pēc valsts un valodām", - "iWantAConversationPartner": "Vēlos sarunu partneri, kurš", - "iWantALanguagePartnerWhoSpeaks": "Runā:", - "iWantALanguagePartnerWhoIsLearning": "Mācās:", "joinWithClassCode": "Pievienoties kursam", - "joinWithClassCodeHint": "Ievadiet ielūguma kodu", - "languageLevelPreA1": "Ļoti iesācējs (Pre A1)", - "languageLevelA1": "Iesācējs (A1)", - "languageLevelA2": "Pamatskolas līmenis (A2)", - "languageLevelB1": "Vidējais līmenis (B1)", - "languageLevelB2": "Augstā vidējā līmenī (B2)", - "languageLevelC1": "Uzlabots (C1)", - "languageLevelC2": "Meistarība (C2)", + "languageLevelPreA1": "Sākuma līmenis Zems (Pre A1)", + "languageLevelA1": "Jaunais Vidējais (A1)", + "languageLevelA2": "Sākuma augstums (A2)", + "languageLevelB1": "Vidējais vidus (B1)", + "languageLevelB2": "Augstais zems (B2)", + "languageLevelC1": "Augstais vidus (C1)", + "languageLevelC2": "Augstākais (C2)", "changeTheNameOfTheClass": "Mainīt nosaukumu", "changeTheNameOfTheChat": "Mainīt čata nosaukumu", - "askPangeaBot": "Uzdod Pangea botam jautājumu par kontekstualizētu definīciju.", "sorryNoResults": "Atvainojiet, rezultāti nav atrasti.", "ignoreInThisText": "Ignorēt", - "helpMeTranslate": "Jā!", - "needsItShortMessage": "Bez mērķa", "needsItMessage": "Gaidiet, tas nav {targetLanguage}! Vai jums nepieciešama palīdzība tulkošanā?", - "needsIgcMessage": "Šai ziņojumam ir gramatikas kļūda.", - "tokenTranslationTitle": "Vārds ir jūsu pamatvalodā.", - "spanTranslationDesc": "Skatiet iespējamās tulkojumus zemāk.", - "spanTranslationTitle": "Daži vārdi ir jūsu pamatvalodā.", - "l1SpanAndGrammarTitle": "Ārpus mērķa valodas", - "l1SpanAndGrammarDesc": "Tas var būt jūsu pamatvalodā vai arī tas var būt gramatikas kļūda.", - "otherTitle": "Jums ir kļūda.", - "otherDesc": "Skatiet iespējamās korekcijas zemāk.", "countryInformation": "Mana valsts", - "myLanguages": "Manas pamata un mērķa valodas", "targetLanguage": "Mērķa valoda", "sourceLanguage": "Pamata valoda", - "languagesISpeak": "Valodas, kuras es runāju", "updateLanguage": "Manas valodas", "whatLanguageYouWantToLearn": "Kuru valodu vēlaties iemācīties?", "whatIsYourBaseLanguage": "Kāda ir jūsu pamata valoda?", @@ -3461,13 +3418,8 @@ "errorDisableLanguageAssistanceUserDesc": "Noklikšķiniet šeit, lai atjauninātu tulkošanas un gramatikas palīdzības iestatījumus", "errorDisableITClassDesc": "Tulkošanas palīdzība ir izslēgta kursam, kurā atrodas šī tērzēšana.", "errorDisableIGCClassDesc": "Gramatikas palīdzība ir izslēgta kursam, kurā atrodas šī tērzēšana.", - "itIsDisabled": "Interaktīvā tulkošana ir atspējota", - "igcIsDisabled": "Interaktīvā gramatikas pārbaude ir atspējota", - "goToLearningSettings": "Iet uz mācību iestatījumiem", "error405Title": "Valodas nav iestatītas", "error405Desc": "Lūdzu, iestatiet savas valodas galvenajā izvēlnē > Mācību iestatījumi.", - "loginOrSignup": "Pierakstieties ar", - "iAgreeToThe": "Es piekrītu ", "termsAndConditions": "Noteikumiem un nosacījumiem", "andCertifyIAmAtLeast13YearsOfAge": " un apliecinu, ka man ir vismaz 16 gadu.", "error502504Title": "Vau, ir daudz studentu tiešsaistē!", @@ -3475,40 +3427,21 @@ "error404Title": "Tulkotāja kļūda!", "error404Desc": "Pangea bots nav pārliecināts, kā to tulkot...", "errorPleaseRefresh": "Mēs to izpētām! Lūdzu, ielādējiet lapu vēlreiz un mēģiniet vēlreiz.", - "toggleIT": "Interaktīva tulkošana", - "toggleIGC": "Interaktīva gramatikas pārbaude", - "toggleToolSettingsDescription": "Šeit jūs varat pārslēgt savus individuālos valodu rīku iestatījumus.", "connectedToStaging": "Savienots ar testēšanas vidi", "learningSettings": "Mācību iestatījumi", - "sendVoiceNotes": "Sūtīt balss ziņas", - "sendVoiceNotesDesc": "Ieslēdziet šo, lai ļautu studentiem sūtīt balss ziņas čatos.", - "chatTopic": "Čata tēma", - "chatTopicDesc": "Iestatīt tēmas nosaukumu", - "inviteStudentByUserNameDesc": "Ja jūsu students jau ir konts, jūs varat viņu meklēt.", "participants": "Dalībnieki", - "almostPerfect": "Tas šķiet pareizi! Šeit ir tas, ko es būtu teicis.", - "prettyGood": "Ļoti labi! Šeit ir tas, ko es būtu teicis.", - "letMeThink": "Hmmm, paskatīsimies, kā tev ir gājis!", "clickMessageTitle": "Vai nepieciešama palīdzība?", "clickMessageBody": "Klikšķiniet uz ziņojuma, lai izmantotu valodu rīkus, piemēram, tulkošanu, atskaņošanu un citus!", - "understandingMessagesTitle": "Definīcijas un tulkojumi!", - "understandingMessagesBody": "Klikšķiniet uz pasvītrotiem vārdiem, lai uzzinātu definīcijas. Tulko ar ziņojuma opcijām (augšējā labajā stūrī).", "allDone": "Viss ir izdarīts!", "vocab": "Vokabula", "low": "Mēs esam pierādījuši, ka lietotājs nesaprot šos vārdus.", "medium": "Šie vārdi ir lietoti. Nav skaidrs, vai vārdi ir pilnībā saprasti vai nē.", "high": "Mēs esam pierādījuši, ka lietotājs saprot šos vārdus.", - "unknownProficiency": "Šie vārdi nav lietoti Pangea Čatā.", - "changeView": "Mainīt skatus.", - "clearAll": "Dzēst visus vārdus?", - "generateVocabulary": "Ģenerēt vārdnīcu no nosaukuma un apraksta", - "generatePrompts": "Ģenerēt uzvednes", "subscribe": "Abonēt", "getAccess": "Abonējiet tagad!", "subscriptionDesc": "Ziņojumapmaiņa ir bezmaksas! Abonējiet, lai atbloķētu interaktīvu tulkošanu, gramatikas pārbaudi un mācību analītiku.", "subscriptionManagement": "Abonēšanas pārvaldība", "currentSubscription": "Pašreizējā abonēšana", - "changeSubscription": "Mainīt savu abonēšanu", "cancelSubscription": "Atcelt savu abonēšanu", "selectYourPlan": "Izvēlieties savu plānu", "subsciptionPlatformTooltip": "Lūdzu, piesakieties savā sākotnējā ierīcē, lai pārvaldītu savu abonēšanas plānu", @@ -3517,9 +3450,6 @@ "paymentHistory": "Apmaksu vēsture", "emptyChatDownloadWarning": "Nevar lejupielādēt tukšu sarunu", "update": "Atjaunināt", - "updateDesc": "Tagad jūs varat atjaunināt šo lietotni no {localVersion} uz {storeVersion}", - "maybeLater": "Varbūt vēlāk", - "mainMenu": "Galvenā izvēlne", "toggleImmersionMode": "Iegremdēšanās režīms", "toggleImmersionModeDesc": "Kad tas ir ieslēgts, visas ziņas tiek rādītas jūsu mērķvalodā. Šis iestatījums ir visnoderīgākais valodu apmaiņās.", "itToggleDescription": "Šis valodu mācību rīks identificēs vārdus jūsu pamata valodā un palīdzēs tos tulkot jūsu mērķvalodā. Lai arī tas ir reti, AI var radīt tulkošanas kļūdas.", @@ -3534,212 +3464,13 @@ "definitionsToolDescription": "Kad ir ieslēgts, zili pasvītroti vārdi ir klikšķināmi, lai skatītu definīcijas. Klikšķiniet uz ziņojumiem, lai piekļūtu definīcijām.", "translationsToolDescrption": "Kad ir ieslēgts, klikšķiniet uz ziņojuma un tulkošanas ikonas, lai redzētu ziņojumu jūsu pamatvalodā.", "welcomeBack": "Laipni atpakaļ! Ja jūs bijāt 2023-2024. gada pilotprojektā, lūdzu, sazinieties ar mums par jūsu īpašo pilotabonementu. Ja jūs esat skolotājs, kurš ir (vai jūsu iestāde ir) iegādājies licenci jūsu klasei, sazinieties ar mums par jūsu skolotāja abonementu.", - "kickAllStudents": "Aizdzīt visus studentus", - "kickAllStudentsConfirmation": "Vai esat pārliecināts, ka vēlaties aizdzīt visus studentus?", - "inviteAllStudents": "Aicināt visus studentus", - "inviteAllStudentsConfirmation": "Vai esat pārliecināts, ka vēlaties uzaicināt visus studentus?", - "inviteUsersFromPangea": "Pievienot administratorus", - "redeemPromoCode": "Izmaksāt reklāmas kodu", - "enterPromoCode": "Ievadiet reklāmas kodu", "downloadTxtFile": "Lejupielādēt teksta failu", "downloadCSVFile": "Lejupielādēt CSV failu", "promotionalSubscriptionDesc": "Jums pašlaik ir uz mūžu spēkā esoša reklāmas abonēšana. Sazinieties ar support@pangea.chat, lai saņemtu palīdzību ar abonēšanas maiņu.", "originalSubscriptionPlatform": "Abonēšana iegādāta caur {purchasePlatform}", "oneWeekTrial": "Vienas nedēļas izmēģinājuma periods", "downloadXLSXFile": "Lejupielādēt Excel failu", - "abDisplayName": "Abhāzu", - "aaDisplayName": "Afaru", - "afDisplayName": "Afrikancu", - "akDisplayName": "Akan", - "sqDisplayName": "Albāņu", - "amDisplayName": "Amharu", - "arDisplayName": "Arābu", - "anDisplayName": "Aragoniešu", - "hyDisplayName": "Armēņu", - "asDisplayName": "Asāmu", - "avDisplayName": "Avaru", - "aeDisplayName": "Avestu", - "ayDisplayName": "Aymaru", - "azDisplayName": "Azerbaidžāņu", - "bmDisplayName": "Bambaru", - "baDisplayName": "Baškīru", - "euDisplayName": "Basque", - "beDisplayName": "Baltkrievu", - "bnDisplayName": "Bengāļu", - "bhDisplayName": "Bihāru", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniešu", - "brDisplayName": "Bretonu", - "bgDisplayName": "Bulgāru", - "myDisplayName": "Birmiešu", - "caDisplayName": "Katalāņu, Valensijas", - "chDisplayName": "Čamorro", - "ceDisplayName": "Čečenu", - "nyDisplayName": "Čičeva, Čeva, Njanža", - "zhDisplayName": "Ķīniešu", - "cvDisplayName": "Čuvašu", - "kwDisplayName": "Korniešu", - "coDisplayName": "Korsikas", - "crDisplayName": "Kri", - "hrDisplayName": "Horvātu", - "csDisplayName": "Čehu", - "daDisplayName": "Dāņu", - "dvDisplayName": "Divehi; Dhivehi; Maldivu;", - "nlDisplayName": "Nīderlandiešu", - "enDisplayName": "Angļu", - "eoDisplayName": "Esperanto", - "etDisplayName": "Igauniešu", - "eeDisplayName": "Evē", - "foDisplayName": "Fēru", - "fjDisplayName": "Fijiešu", - "fiDisplayName": "Somu", - "frDisplayName": "Franču", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galisiešu", - "kaDisplayName": "Goriešu", - "deDisplayName": "Vācu", - "elDisplayName": "Grieķu, mūsdienu", - "gnDisplayName": "Gvaranu", - "guDisplayName": "Gudžaratu", - "htDisplayName": "Haitiešu, Haitiešu kreoliešu", - "haDisplayName": "Hausa", - "heDisplayName": "Ebreju (mūsdienu)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungāru", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonēziešu", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Īru", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Īslandiešu", - "itDisplayName": "Itāļu", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japāņu", - "jvDisplayName": "Javaņu", - "klDisplayName": "Kalaallisut, Grenlandiešu", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmīru", - "kkDisplayName": "Kazahu", - "kmDisplayName": "Khmeru", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizu, Kirgīzu", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korejiešu", - "kuDisplayName": "Kurdu", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latīņu", - "lbDisplayName": "Luksemburgiešu, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgu, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiešu", - "ltDisplayName": "Lietuviešu", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latviešu", - "gvDisplayName": "Manx", - "mkDisplayName": "Maķedoniešu", - "mgDisplayName": "Malgaisiešu", - "msDisplayName": "Malajiešu", - "mlDisplayName": "Malajalu", - "mtDisplayName": "Malta", - "miDisplayName": "Maoru", - "mrDisplayName": "Maratu (Marāthī)", - "mhDisplayName": "Maršalašu", - "mnDisplayName": "Ķīniešu (Mongolijas)", - "naDisplayName": "Nauru", - "nvDisplayName": "Navaho, Navaho", - "nbDisplayName": "Norvēģu Bokmāla", - "ndDisplayName": "Ziemeļu Ndebele", - "neDisplayName": "Nepāliešu", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Ziemeļu Nīneska", - "noDisplayName": "Norvēģu", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Dienvidu Ndebele", - "ocDisplayName": "Okcitāņu", - "ojDisplayName": "Ojbve, Ojibwa", - "cuDisplayName": "Vecā baznīcas slāvu, Baznīcas slāvu, Baznīcas slāvu, Vecā bulgāru, Vecā slāvu", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Osetiešu, Osetiešu", - "paDisplayName": "Punjabi, Pandžabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persiešu", - "plDisplayName": "Poļu", - "psDisplayName": "Paštū, Pushtu", - "ptDisplayName": "Portugāļu", - "quDisplayName": "Kečua", - "rmDisplayName": "Retoromāņu", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumāņu, Moldāvu, Moldovāņu", - "ruDisplayName": "Krievu", - "saDisplayName": "Sanskrits (Sanskṛta)", - "scDisplayName": "Sardīnijas", - "sdDisplayName": "Sindhi", - "seDisplayName": "Ziemeļu sami", - "smDisplayName": "Samoānis", - "sgDisplayName": "Sango", - "srDisplayName": "Serbu", - "gdDisplayName": "Skotu gaēļu, Ģēļu", - "snDisplayName": "Šona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovāku", - "slDisplayName": "Slovēņu", - "soDisplayName": "Somāļu", - "stDisplayName": "Dienvidsotu", - "esDisplayName": "Spāņu", - "suDisplayName": "Sundanese", - "swDisplayName": "Svahili", - "ssDisplayName": "Svāti", - "svDisplayName": "Zviedru", - "taDisplayName": "Tamilu", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžiku", - "thDisplayName": "Taju", - "tiDisplayName": "Tigrinja", - "boDisplayName": "Tibetiešu standarta, Tibeta, Centrālā", - "tkDisplayName": "Turkmēņu", - "tlDisplayName": "Tagaloga", - "tnDisplayName": "Tsonas", - "toDisplayName": "Tonga (Tonga salas)", - "trDisplayName": "Turku", - "tsDisplayName": "Tsonžas", - "ttDisplayName": "Tataaru", - "twDisplayName": "Tvi", - "tyDisplayName": "Taivānas", - "ugDisplayName": " Uighur, Uighur", - "ukDisplayName": "Ukrainas", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbeku", - "veDisplayName": "Venda", - "viDisplayName": "Vjetnamiešu", - "voDisplayName": "Volapūka", - "waDisplayName": "Vallūnas", - "cyDisplayName": "Velsiešu", - "woDisplayName": "Volofu", - "fyDisplayName": "Rietumfrīzu", - "xhDisplayName": "Kosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Čuang", "unkDisplayName": "Nezināms", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havaju", - "hmnDisplayName": "Hmongu", - "multiDisplayName": "Daudzvalodu", - "cebDisplayName": "Sebuāņu", - "dzDisplayName": "Dzongka", - "iwDisplayName": "Ebreju", - "jwDisplayName": "Javaniešu", - "moDisplayName": "Moldāvu", - "shDisplayName": "Serbo-Kroātiešu", "wwCountryDisplayName": "Visā pasaulē", "afCountryDisplayName": "Afganistāna", "axCountryDisplayName": "Alandu salas", @@ -3987,41 +3718,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambija", "zwCountryDisplayName": "Zimbabve", - "pay": "Maksāt", - "allPrivateChats": "Tiešās sarunas", - "unknownPrivateChat": "Nezināma privāta saruna", + "pay": "Checkout", "invitedToSpace": "{user} ir ielūdzis jūs pievienoties kursam: {space}! Vai vēlaties pieņemt?", - "declinedInvitation": "Noraidīta ielūguma", - "acceptedInvitation": "Pieņemts ielūgums", "youreInvited": "📩 Jūs esat ielūgts!", "invitedToChat": "{user} ir ielūdzis jūs pievienoties sarunai: {name}! Vai vēlaties pieņemt?", "monthlySubscription": "Mēneša", "yearlySubscription": "Gada", "defaultSubscription": "Pangea Čata abonements", "freeTrial": "Bezmaksas izmēģinājums", - "grammarAnalytics": "Kļūdu analīze", "total": "Kopā: ", "noDataFound": "Dati nav atrasti", - "promoSubscriptionExpirationDesc": "Jūsu pašreizējais abonements ir reklāmas un beidzas {expiration}. Sazinieties ar support@pangea.chat, lai saņemtu palīdzību ar abonementa maiņu.", - "emptyChatNameWarning": "Lūdzu, ievadiet šī čata nosaukumu", "blurMeansTranslateTitle": "Kāpēc ziņa ir izplūdusi?", "blurMeansTranslateBody": "Kamēr ir ieslēgts Iedziļināšanās režīms, ziņas, kas tiek nosūtītas jūsu pamatvalodā, tiks izplūdušas, kamēr Pangea Bot tās tulko uz jūsu mērķvalodu. Iedziļināšanās režīmu var pārslēgt individuālo un kursu iestatījumos.", - "someErrorTitle": "Hm, kaut kas nav pareizi", - "someErrorBody": "Tas varētu būt kļūda vai kaut kas jūsu pamatvalodā.", "bestCorrectionFeedback": "Tas ir pareizi!", "distractorFeedback": "Tas nav pilnīgi pareizi.", "bestAnswerFeedback": "Tas ir pareizi!", "definitionDefaultPrompt": "Ko šī vārda nozīmē?", "practiceDefaultPrompt": "Kāda ir labākā atbilde?", "correctionDefaultPrompt": "Kāda ir labākā aizvietojuma iespēja?", - "itStartDefaultPrompt": "Vai vēlaties palīdzību ar tulkošanu?", - "lockedChatWarning": "🔒 Šis čats ir bloķēts", - "lockChat": "Bloķēt čatu", - "suggestToChat": "Ieteikt šo čatu", - "suggestToChatDesc": "Ieteiktie čati parādīsies čatu sarakstos", "acceptSelection": "Pieņemt labojumu", - "acceptSelectionAnyway": "Izmantot to tomēr", - "makingActivity": "Veido aktivitāti", "why": "Kāpēc?", "definition": "Definīcija", "exampleSentence": "Piemēra teikums", @@ -4029,128 +3744,55 @@ "reportMessageTitle": "{reportingUserId} ir ziņojis par ziņojumu no {reportedUserId} čatā {roomName}", "reportMessageBody": "Ziņojums: {reportedMessage}\nIemesls: {reason}", "noTeachersFound": "Nav atrasts skolotājs ziņošanai", - "viewArchive": "Skatīt arhīvu", "trialExpiration": "Jūsu bezmaksas izmēģinājuma termiņš beidzas {expiration}", "freeTrialDesc": "Jauniem lietotājiem ir viena nedēļa bezmaksas Pangea Chat izmēģinājuma", "activateTrial": "Bezmaksas 7 dienu izmēģinājums", "successfullySubscribed": "Jūs esat veiksmīgi abonējuši!", "clickToManageSubscription": "Noklikšķiniet šeit, lai pārvaldītu savu abonementu.", - "errorGettingAudio": "Kļūda, iegūstot audio. Lūdzu, atsvaidziniet lapu un mēģiniet vēlreiz.", "signUp": "Reģistrēties", "pleaseChooseAtLeastChars": "Lūdzu, izvēlieties vismaz {min} rakstzīmes.", "noEmailWarning": "Lūdzu, ievadiet derīgu e-pasta adresi. Pretējā gadījumā jūs nevarēsiet atiestatīt paroli. Ja nevēlaties, vēlreiz nospiediet pogu, lai turpinātu.", "pleaseEnterValidEmail": "Lūdzu, ievadiet derīgu e-pasta adresi.", "pleaseChooseAUsername": "Lūdzu, izvēlieties lietotājvārdu", - "chooseAUsername": "Izvēlieties lietotājvārdu", "define": "Definēt", "listen": "Klausīties", - "addConversationBot": "Iespējot sarunu botu", - "addConversationBotDesc": "Pievienot botu šai sarunai", - "convoBotSettingsDescription": "Rediģēt sarunas tēmu un grūtības pakāpi", - "enterAConversationTopic": "Ievadiet sarunas tēmu", - "conversationTopic": "Sarunas tēma", - "enableModeration": "Iespējot moderāciju", - "enableModerationDesc": "Iespējot automātisku moderāciju, lai pārskatītu ziņojumus pirms to nosūtīšanas", - "conversationLanguageLevel": "Kāds ir šīs sarunas valodas līmenis?", - "showDefinition": "Rādīt definīciju", - "subscriptionPopupTitle": "Šai teikumam varētu būt gramatikas kļūda...", - "subscriptionPopupDesc": "Abonējiet šodien, lai atbloķētu tulkošanu un gramatikas labojumus!", - "seeOptions": "Skatīt opcijas", - "continuedWithoutSubscription": "Turpināt bez abonēšanas", "trialPeriodExpired": "Jūsu izmēģinājuma periods ir beidzies", - "selectToDefine": "Klikšķiniet uz jebkura vārda, lai redzētu tā definīciju!", "translations": "tulkojumi", "messageAudio": "ziņojuma audio", "definitions": "definīcijas", "subscribedToUnlockTools": "Abonējiet, lai atbloķētu interaktīvu tulkošanu un gramatikas pārbaudi, audio atskaņošanu, personalizētas prakses aktivitātes un mācību analītiku!", "translationTooltip": "Tulkot", - "audioTooltip": "Atskaņot audio", "speechToTextTooltip": "Transkripts", - "certifyAge": "Es apliecinu, ka man ir vairāk nekā {age} gadu", "kickBotWarning": "Pangea robota izslēgšana no šīs sarunas izņems sarunu robota funkcionalitāti.", - "joinToView": "Pievienojieties šai istabai, lai skatītu detaļas", "refresh": "Atjaunot", - "autoPlayTitle": "Automātiska ziņojumu atskaņošana", - "autoPlayDesc": "Ieslēdzot, teksta runas audio tiks automātiski atskaņots, kad tas tiks atlasīts.", "messageAnalytics": "Ziņojumu analītika", "words": "Vārdi", "score": "Vērtējums", "accuracy": "Precizitāte", "points": "Punkti", "noPaymentInfo": "Nav nepieciešama maksājuma informācija!", - "conversationBotModeSelectDescription": "Čata aktivitāte", - "conversationBotModeSelectOption_discussion": "Diskusija", - "conversationBotModeSelectOption_custom": "Pielāgots", - "conversationBotModeSelectOption_conversation": "Saruna", - "conversationBotModeSelectOption_textAdventure": "Teksta piedzīvojums", - "conversationBotModeSelectOption_storyGame": "Stāsta spēle", - "conversationBotDiscussionZone_title": "Diskusijas iestatījumi", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskusijas tēma", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Iestatīt diskusijas tēmu", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskusijas atslēgvārdi", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Iestatīt diskusijas atslēgvārdus", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Atslēgvārdu saraksts ar komatiem, lai vadītu diskusiju", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Sūtīt diskusijas uzsaukumu pēc grafika", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Stundas starp diskusijas uzsaukumiem", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Atbildēt uz reakciju ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakcija, lai sūtītu diskusijas uzsaukumu", - "conversationBotCustomZone_title": "Pielāgoti iestatījumi", - "conversationBotCustomZone_customSystemPromptLabel": "Sistēmas uzsaukums", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Iestatīt pielāgotu sistēmas uzsaukumu", - "conversationBotCustomZone_customSystemPromptEmptyError": "Trūkst pielāgota sistēmas uzsaukuma", - "botConfig": "Bota un aktivitāšu iestatījumi", - "botConfigNoPermissionTitle": "Nav atļaujas", - "botConfigNoPermissionMessage": "Sazinieties ar istabas administratoru, lai mainītu bota konfigurāciju", - "addConversationBotDialogTitleInvite": "Apstiprināt ielūgumu uz sarunu botu", - "addConversationBotButtonInvite": "Ielūgt", - "addConversationBotDialogInviteConfirmation": "Aicināt", - "addConversationBotButtonTitleRemove": "Apstiprināt sarunu robota noņemšanu", - "addConversationBotButtonRemove": "Noņemt", - "addConversationBotDialogRemoveConfirmation": "Noņemt", - "conversationBotConfigConfirmChange": "Apstiprināt", - "conversationBotStatus": "Aicināt robotu", - "conversationBotTextAdventureZone_title": "Teksta piedzīvojums", - "conversationBotTextAdventureZone_instructionLabel": "Spēles vadītāja instrukcijas", - "conversationBotTextAdventureZone_instructionPlaceholder": "Iestatīt spēles vadītāja instrukcijas", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Trūkst spēles vadītāja instrukcijas", - "studentAnalyticsNotAvailable": "Studentu dati pašlaik nav pieejami", - "roomDataMissing": "Daži dati var būt trūkst no istabām, kurās neesat dalībnieks.", "updatePhoneOS": "Var būt nepieciešams atjaunināt ierīces operētājsistēmas versiju.", "wordsPerMinute": "Vārdi minūtē", "autoIGCToolName": "Automātiski palaist Pangea rakstīšanas palīgu", "autoIGCToolDescription": "Automātiski palaist Pangea Čata gramatikas un tulkošanas rakstīšanas palīgu pirms mana ziņojuma nosūtīšanas.", - "runGrammarCorrection": "Pārbaudīt ziņojumu", - "grammarCorrectionFailed": "Jārisina problēmas", - "grammarCorrectionComplete": "Izskatās labi!", "tooltipInstructionsTitle": "Neesat pārliecināts, kas tas dara?", "tooltipInstructionsMobileBody": "Turiet un turiet vienumus, lai skatītu rīku padomus.", "tooltipInstructionsBrowserBody": "Novietojiet peles kursoru virs vienumiem, lai skatītu rīku padomus.", "chatCapacity": "Čata jauda", "roomFull": "Šī istaba jau ir pilna.", - "topicNotSet": "Tēma nav iestatīta.", - "chatCapacityNotSet": "Šim čatam nav ierobežojuma uz jaudu.", "chatCapacityHasBeenChanged": "Čata jauda ir mainīta", "chatCapacitySetTooLow": "Čata jaudai jābūt vismaz {count}.", "chatCapacityExplanation": "Čata jauda ierobežo dalībnieku skaitu, kas var piedalīties čatā.", - "chatExceedsCapacity": "Šis čats pārsniedz savu jaudu.", "tooManyRequest": "Pārāk daudz pieprasījumu, lūdzu, mēģiniet vēlreiz vēlāk.", "enterNumber": "Lūdzu, ievadiet veselu skaitli.", "buildTranslation": "Veidojiet savu tulkojumu no iepriekš minētajām izvēlēm", - "nonexistentSelection": "Izvēle vairs neeksistē.", - "changeAnalyticsLanguage": "Mainīt analītikas valodu", "practice": "Prakse", "noLanguagesSet": "Nav iestatītas valodas", - "noActivitiesFound": "Šobrīd pietiek! Atgriezieties vēlāk, lai uzzinātu vairāk.", - "hintTitle": "Padoms:", "speechToTextBody": "Balss ziņojumiem jūs varat redzēt transkriptu, kā arī runātāja vārdus minūtē.", "versionNotFound": "Versija nav atrasta", "fetchingVersion": "Iegūst versiju...", "versionFetchError": "Kļūda, iegūstot versiju", "versionText": "Versija: {version}+{buildNumber}", - "languageButtonLabel": "Valoda: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automātiska tulkošana", - "interactiveTranslatorAutoPlayDesc": "Sāk interaktīvo tulkotāju bez jautājuma.", - "changeAnalyticsView": "Mainīt analītikas skatu", "l1TranslationBody": "Ziņojumi jūsu pamatvalodā netiks tulkoti.", "deleteSubscriptionWarningTitle": "Jums ir aktīva abonēšana", "deleteSubscriptionWarningBody": "Dzēšot savu kontu, jūsu abonēšana netiks automātiski atcelta.", @@ -4158,9 +3800,7 @@ "error520Title": "Lūdzu, mēģiniet vēlreiz.", "error520Desc": "Atvainojiet, mēs nesapratām jūsu ziņojumu...", "wordsUsed": "Izmantotās vārdi", - "errorTypes": "Kļūdu veidi", "level": "Līmenis", - "canceledSend": "Sūtīšana atcelta", "morphsUsed": "Izmantotās morfas", "translationChoicesBody": "Noklikšķiniet un turiet opciju, lai saņemtu norādi.", "grammar": "Gramatika", @@ -4170,7 +3810,6 @@ "reportContentIssueTitle": "Ziņot par satura problēmu", "feedback": "Neobligāts atsauksmes", "reportContentIssueDescription": "Ak! Mākslīgais intelekts var veidot personalizētas mācību pieredzes, bet... arī halucinē. Lūdzu, sniedziet jebkādu atsauksmi, un mēs mēģināsim vēlreiz.", - "changeContent": "Ak! Mākslīgais intelekts var veidot personalizētas mācību pieredzes, bet... arī halucinē. Ko tas būtu jābūt?", "clickTheWordAgainToDeselect": "Noklikšķiniet uz atlasītās vārda, lai to atceltu.", "l2SupportNa": "Nav pieejams", "l2SupportAlpha": "Alfa", @@ -4404,7 +4043,6 @@ "grammarCopySPC": "Specifiskums", "grammarCopyPARTTYPE": "Daļējs veids", "grammarCopyINTREL": "Jautājuma-saistīts", - "grammarCopyNUMFORMpsor": "Īpašnieka skaitlis", "grammarCopyUNKNOWN": "Nezināms", "grammarCopyNUMBERPSOR": "Īpašnieka skaitlis", "grammarCopyPOSS": "Īpašnieciskais", @@ -4450,28 +4088,14 @@ "grammarCopyVOICEdir": "Tiešs", "grammarCopyVOICEinv": "Apgriezts", "grammarCopyVOICErcp": "Abpusējs", - "enterPrompt": "Lūdzu, ievadiet sistēmas uzvedni", - "selectBotLanguage": "Izvēlieties robota valodu", - "chooseVoice": "Izvēlieties balsi", - "enterLanguageLevel": "Lūdzu, ievadiet valodas līmeni", - "enterDiscussionTopic": "Lūdzu, ievadiet diskusijas tēmu", - "selectBotChatMode": "Izvēlieties čata režīmu", - "messageNotInTargetLang": "Ziņa nav mērķvalodā", "other": "Cits", "levelShort": "LVL {level}", - "botModeValidation": "Lūdzu, izvēlieties čata režīmu", "clickBestOption": "Izvēlieties labākās iespējas, lai tulkotu savu ziņu!", "completeActivitiesToUnlock": "Lūdzu, pabeidziet vismaz vienu aktivitāti, lai atbloķētu tulkojumu!", - "botSettingsSubtitle": "Aiciniet robotu moderēt čata aktivitāti", - "invitePeople": "Aicināt lietotājus", "noCapacityLimit": "Nav kapacitātes ierobežojuma", "downloadGroupText": "Lejupielādēt grupas tekstu", "notificationsOn": "Paziņojumi ieslēgti", "notificationsOff": "Paziņojumi izslēgti", - "chatCanBeFoundViaSearch": "Čatu var atrast ar meklēšanu", - "requireCodeToJoin": "Nepieciešams kods, lai pievienotos", - "canFindInSearch": "Var atrast meklēšanā", - "addChatToSpace": "Pievienot čatu", "createChatAndInviteUsers": "Izveidot čatu un uzaicināt lietotājus", "updatedNewSpaceDescription": "Kurss ļauj konsolidēt jūsu čatus un veidot privātas vai publiskas kopienas.", "joinWithCode": "Pievienoties ar kodu", @@ -4507,39 +4131,19 @@ "constructUseCollected": "Savākti čatā", "constructUseNanDesc": "Nav piemērojams", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Pierakstieties ar lietotājvārdu un paroli", - "registrationEmailMessage": "Lūdzu, pārbaudiet savu e-pastu ar saiti, kas nosūtīta tur. Dažreiz e-pasta saņemšana aizņem līdz 5 minūtēm. Lūdzu, pārbaudiet arī savu surogātpasta mapi.", "enableTTSToolName": "Iespējots teksta runas funkcija", "enableTTSToolDescription": "Atļauj lietotnei ģenerēt teksta runas izvadi teksta daļām jūsu mērķvalodā.", - "couldNotFindTTS": "Mēs nevarējām atrast teksta runas dzinēju jūsu pašreizējai mērķvalodai.", - "ttsInstructionsHyperlink": "Noklikšķiniet šeit, lai skatītu instrukcijas par jaunas balss lejupielādi jūsu ierīcē.", - "createAnAccount": "Izveidot kontu", - "signIn": "Pierakstīties", - "signUpWithEmail": "Reģistrēties ar e-pastu", - "signUpWithGoogle": "Reģistrēties ar Google", - "signUpWithApple": "Reģistrēties ar Apple", "yourUsername": "Jūsu lietotājvārds", "yourEmail": "Jūsu e-pasts", - "pleaseEnterAnEmail": "Lūdzu, ievadiet e-pasta adresi", - "signInWithGoogle": "Pierakstīties ar Google", - "signInWithApple": "Pierakstīties ar Apple", - "chooseYourAvatar": "Izvēlieties savu avataru", "iWantToLearn": "Es vēlos mācīties", - "letsStart": "Sāksim", - "pleaseAgreeToTOS": "Lūdzu, piekrītiet noteikumiem un nosacījumiem", "pleaseEnterEmail": "Lūdzu, ievadiet derīgu e-pasta adresi.", - "pleaseSelectALanguage": "Lūdzu, izvēlieties valodu", "myBaseLanguage": "Mana pamatvaloda", - "clickWordsInstructions": "🕵️ Noklikšķiniet uz jebkuras vārda, lai uzzinātu sīkāku informāciju. 🧐", - "chooseBestDefinition": "Ko nozīmē šis vārds?", "meaningSectionHeader": "Nozīme:", "formSectionHeader": "Formas, kas tiek izmantotas sarunās:", - "noEmojiSelectedTooltip": "Nav izvēlēta emocija", "writingExercisesTooltip": "Rakstīšana", "listeningExercisesTooltip": "Klausīšanās", "readingExercisesTooltip": "Lasīšana", "meaningNotFound": "Nozīmi nevarēja atrast.", - "formsNotFound": "Formu nevarēja atrast.", "chooseBaseForm": "Izvēlieties pamatformu", "notTheCodeError": "Atvainojiet, tas nav kods!", "totalXP": "Kopējais pieredzes punkti", @@ -4579,9 +4183,6 @@ "pickAnEmoji": "Kura ir tava mīļākā emocijzīme '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Saskaņo nozīmes ar vārdiem ziņojumā!", "doubleClickToEdit": "Divreiz klikšķini, lai rediģētu.", - "removeFeature": "Noņemt {feature}", - "chooseCorrectLabel": "Izvēlies pareizo marķējumu.", - "levelPopupTitle": "Apsveicam ar sasniegto\nLīmeni {level}", "activityPlannerTitle": "Aktivitāšu plānotājs", "topicLabel": "Tēma", "topicPlaceholder": "Izvēlieties tēmu...", @@ -4589,7 +4190,6 @@ "modePlaceholder": "Izvēlieties režīmu...", "learningObjectiveLabel": "Mācību mērķis", "learningObjectivePlaceholder": "Izvēlieties mācību mērķi...", - "mediaLabel": "Mediji, ko mācīties dalīties", "languageOfInstructionsLabel": "Instrukciju valoda aktivitātei", "targetLanguageLabel": "Mērķvaloda", "cefrLevelLabel": "CEFR līmenis", @@ -4604,20 +4204,15 @@ "instructions": "Instrukcijas", "numberOfLearners": "Mācību dalībnieku skaits", "mustBeInteger": "Jābūt veselam skaitlim, piemēram, 1, 2, 3, ...", - "noLemmasFound": "Nav vārdnīcas ar vairāk nekā {xp} XP. Turpini praktizēties!", "constructUsePvmDesc": "Ražots balss ziņojumā", - "lockedMorphFeature": "Gaidīt atbloķēšanu", "leaveSpaceDescription": "Atstājot kursu, jūs atstājat visus tajā esošos čatus. Citi lietotāji redzēs, ka esat atstājis kursu.", - "whatIsLemma": "Kas ir lemmma?", "constructUseCorMmDesc": "Pareiza ziņojuma nozīme", "constructUseIncMmDesc": "Nepareiza ziņojuma nozīme", "constructUseIgnMmDesc": "Ignorēta ziņojuma nozīme", "clickForMeaningActivity": "Noklikšķiniet šeit, lai veiktu nozīmes izaicinājumu", "meaning": "Nozīme", "chatWith": "Grupa ar {displayname}", - "slightlyOffensive": "Mazliet aizskaroši", "clickOnEmailLink": "Lūdzu, noklikšķiniet uz saites e-pastā un turpiniet.\n\nPārbaudiet savu surogātpasta mapi, ja e-pasts nav ieradies.", - "whoIsAllowedToJoinThisChat": "Kurš drīkst pievienoties šim čatam", "dontForgetPassword": "Nepalaidiet garām savu paroli!", "enableAutocorrectToolName": "Iespējot ierīces automātisko labošanu", "enableAutocorrectDescription": "Ja jūsu ierīce atbalsta mācību valodu, jūs varat iespējojiet automātisko labošanu, lai labotu bieži sastopamās kļūdas rakstot.", @@ -4645,48 +4240,26 @@ "autocorrectNotAvailable": "Diemžēl jūsu platforma šobrīd nav atbalstīta šai funkcijai. Sekojiet līdzi turpmākajiem attīstības posmiem!", "pleaseUpdateApp": "Lūdzu, atjauniniet lietotni, lai turpinātu.", "chooseEmojiInstructionsBody": "Saskaņojiet emocijas ar vārdiem, ko tās vislabāk pārstāv. Neuztraucieties! Par nesaskaņām nav punktu zaudējumu. 😅", - "pickAnEmojiFor": "Izvēlieties emociju priekš {lemma}", "analyticsVocabListBody": "Šis ir viss jūsu vārdu krājums! Kad jūs iegūsit XP par katru vārdu, tie pāries no sēkliņas līdz pilnīgai ziedēšanai. Noklikšķiniet uz jebkura vārda, lai redzētu vairāk detaļu.", "morphAnalyticsListBody": "Šie ir visi gramatikas jēdzieni jūsu mācību valodā! Jūs tos atbloķēsiet, saskaroties ar tiem sarunā. Noklikšķiniet, lai redzētu detaļas.", "knockSpaceSuccess": "Jūs esat pieprasījis pievienoties šai kursam! Administrators atbildēs uz jūsu pieprasījumu, kad tas tiks saņemts 😀", - "joinByCode": "Pievienoties ar kodu", "chooseWordAudioInstructionsBody": "Klausieties pilnu ziņojumu. Tad saskaņojiet audio ar vārdiem.", "chooseMorphsInstructionsBody": "Noklikšķiniet uz puzles gabaliņiem, lai atbildētu uz gramatikas jautājumiem!", - "inviteAndLaunch": "Aicināt un palaist", - "createOwnChat": "Izveidot savu čatu", "pleaseEnterInt": "Lūdzu, ievadiet skaitli", "home": "Sākumlapa", "join": "Pievienoties", "readingAssistanceOverviewBody": "Noklikšķiniet uz pogām zemāk, lai spēlētu mini-spēles par emociju, audio, vārdu nozīmes un gramatikas jēdzienu saskaņošanu. Vai arī noklikšķiniet uz jebkura vārda, lai redzētu detaļas.", - "learnByTexting": "Mācieties, rakstot ziņas", - "levelSummaryTrigger": "Skatīt kopsavilkumu", "levelSummaryPopupTitle": "Līmeņa {level} kopsavilkums", - "referFriends": "Ieteikt draugus", - "referFriendDialogTitle": "Uzaiciniet draugu uz jūsu sarunu", - "referFriendDialogDesc": "Vai jums ir draugs, kurš ir sajūsmināts mācīties jaunu valodu kopā ar jums? Tad kopējiet un nosūtiet šo ielūguma saiti, lai pievienotos un sāktu sarunu ar jums jau šodien.", - "youUnlocked": "Jūs atbloķējāt", "resetInstructionTooltipsTitle": "Atiestatīt instrukciju rīkjoslas", "resetInstructionTooltipsDesc": "Klikšķiniet, lai parādītu instrukciju rīkjoslas, kā jauns lietotājs.", "selectForGrammar": "Izvēlieties gramatikas ikonu aktivitātēm un detaļām.", - "newChatActivityTitle": "Pievienot jautru aktivitāti?", - "newChatActivityDesc": "Padariet katru grupu sarunu par piedzīvojumu ar Activity Planner! Uzstādiet aizraujošas tēmas un mērķus grupai, un iedzīviniet sarunas ar satriecošiem attēliem. Iedvesmojiet radošas diskusijas un ļaujiet jautrībai plūst bez pūlēm!", - "exploreMore": "Izpētīt vairāk", "randomize": " nejauši izvēlēties", "clear": "Notīrīt", "makeYourOwnActivity": "Izveidojiet savu aktivitāti", "featuredActivities": "Ieteiktās", - "goToChat": "Dodieties uz sarunu", "save": "Saglabāt", - "selectActivity": "Izvēlieties aktivitāti", - "wordFocusListeningMultipleChoice": "Kura audio atbilst vārdam?", "startChat": "Sākt sarunu", "translationProblem": "Tulkošanas problēma", - "perfectTranslation": "Perfekta tulkošana!", - "greatJobTranslation": "Lielisks darbs ar šo tulkojumu!", - "goodJobTranslation": "Laba darba šajā tulkojumā.", - "makingProgress": "Tu dari progresu!", - "keepPracticing": "Turpini praktizēt!", - "niceJob": "Laba darba!", "askToJoin": "Lūgt pievienoties", "emptyChatWarningTitle": "Čats ir tukšs", "emptyChatWarningDesc": "Tu neesi uzaicinājis nevienu uz savu čatu. Dodies uz Čata iestatījumiem, lai uzaicinātu kontaktus vai Botu. To vari izdarīt arī vēlāk.", @@ -4705,8 +4278,6 @@ "languageLevelC2Desc": "Es spēju praktiski saprast visu, ko dzirdu vai lasu, un izteikt sevi brīvi un precīzi.", "newVocab": "Jauns vārdu krājums", "newGrammar": "Jauni gramatikas jēdzieni", - "congratulationsOnReaching": "Tu esi sasniedzis līmeni {level}!", - "seeDetails": "Skatīt detaļas", "choosePracticeMode": "Noklikšķini uz vienas no augšējām pogām, lai sāktu prakses aktivitāti", "ban": "Aizliegt", "unban": "Atcelt aizliegumu", @@ -4720,8 +4291,6 @@ "timesUsedWithAssistance": "Reizes, kad izmantots ar palīdzību", "shareInviteCode": "Dalīties ar ielūguma kodu: {code}", "leaderboard": "Rezultātu tabula", - "welcomeUser": "Laipni lūdzam, {user}", - "joinSpaceOnboardingDesc": "Vai tev ir ielūguma kods vai saite uz publisku kursu?", "skipForNow": "Pagaidām izlaist", "permissions": "Atļaujas", "spaceChildPermission": "Kas var pievienot jaunas tērzēšanas šim kursam", @@ -4729,12 +4298,8 @@ "defaultOption": "Noklusējuma", "deleteChatDesc": "Vai tiešām vēlaties dzēst šo tērzēšanu? Tā tiks dzēsta visiem dalībniekiem, un visas tērzēšanas ziņas vairs nebūs pieejamas praksei vai mācību analītikai.", "deleteSpaceDesc": "Kursa un jebkuru izvēlēto tērzēšanu tiks dzēsts visiem dalībniekiem, un visas tērzēšanas ziņas vairs nebūs pieejamas praksei vai mācību analītikai. Šo darbību nevar atsaukt.", - "chatWithActivities": "Tērzēt ar aktivitātēm", "launch": "Sākt", - "launchActivityToChats": "Sākt aktivitāti tērzēšanā", "searchChats": "Meklēt tērzēšanas", - "selectChats": "Izvēlēties tērzēšanas", - "selectChatToStart": "Pabeigts! Izvēlieties tērzēšanu, lai sāktu", "maxFifty": "Maks. 50", "configureSpace": "Konfigurēt kursu", "pinMessages": "Pin ziņas", @@ -4748,9 +4313,7 @@ "announcements": "Paziņojumi", "activities": "Aktivitātes", "access": "Piekļuve", - "botSettings": "Bot iestatījumi", "activitySuggestionTimeoutMessage": "Mēs strādājam, lai ģenerētu vairāk aktivitāšu jums, lūdzu, pārbaudiet vēlreiz minūtē", - "accessSettingsWarning": "Ups! Izskatās, ka jums nav atļaujas iestatīt šīs istabas piekļuves noteikumus. Jums vajadzētu pārbaudīt, vai tie atbilst jūsu vajadzībām, un sazināties ar istabas administratoru, ja nepieciešams tos mainīt", "howSpaceCanBeFound": "Kā šī kursa var atrast", "private": "Privāts", "cannotBeFoundInSearch": "Nevar atrast meklēšanā", @@ -4763,16 +4326,6 @@ "canBeFoundViaKnock": "• pieprasījums pievienoties un administratora apstiprinājums", "youHaveLeveledUp": "Jūs esat pacēlies līmenī!", "sendActivities": "Sūtīt aktivitātes", - "getStarted": "Sākt", - "getStartedBotChatDesc": "Sarunāties ar AI ir lieliska vieta, kur sākt, un Pangea lasīšanas, rakstīšanas, klausīšanās un runāšanas rīki to padara vienkāršu!", - "getStartedCommunitiesDesc": "Mācīšanās kopā ar kopienu ir vieta, kur Pangea Chat izceļas!\nJūs varat pievienoties savai klasei, atrast kursu vai pat izveidot savu!", - "getStartedFriendsDesc": "Vai jums ir draugs, kurš vēlas mācīties kopā ar jums?", - "getStartedBotChatComplete": "Lieliski! Jūs sarunājaties ar botu!", - "getStartedCommunitiesComplete": "Lieliski, jūs pievienojāties kursam!", - "getStartedComplete": "Jūs esat pabeidzis šo sadaļu!\nTurpiniet izpētīt mūsu brīnišķīgās funkcijas, sarunājoties ar draugiem!", - "getStartedFriendsComplete": "Uhhē! Jums ir draugi! 😉", - "getStartedBotChatButton": "Sākt sarunu!", - "getStartedFriendsButton": "Sarunāties ar draugu", "groupChat": "Grupas saruna", "directMessage": "Tiešā ziņa", "newDirectMessage": "Jauna tiešā ziņa", @@ -4788,7 +4341,6 @@ "mySavedActivities": "Mani saglabātie pasākumi", "noSavedActivities": "Nav saglabātu pasākumu", "saveActivity": "Saglabāt šo pasākumu", - "yourSavedActivities": "Saglabātie pasākumi", "failedToPlayVideo": "Neizdevās atskaņot video", "done": "Gatavs", "inThisSpace": "Šajā kursā", @@ -4827,20 +4379,15 @@ "maximumActivityParticipants": "Katrā aktivitātē var būt līdz {count} dalībniekam(s).", "pending": "Gaidāms", "inactive": "Neaktīvs", - "unjoinedActivityMessage": "Vai vēlaties piedalīties? Izvēlieties atvērtu lomu!\nVai arī pavadiet laiku un vērojiet šovu!", - "fullActivityMessage": "Jūtieties brīvi, skatieties šovu! Kamēr nav atvērtu lomu, lai piedalītos, jūs varat skatīt čatu!", "confirmRole": "Apstiprināt lomu", "openRoleLabel": "ATVĒRTS", "joinedTheActivity": "👋 {username} pievienojās kā {role}", "finishedTheActivity": "🎯 {username} pabeidza šo aktivitāti", - "endActivityTitle": "Es esmu pabeidzis", - "endActivityDesc": "Vai esat izpildījis mērķus?\nŠī ir jūsu apstiprinājums, ka atgriezīsieties no ziņošanas. Bet neuztraucieties, jautrība turpinās čatā! Jūtieties brīvi pavadīt laiku un baudīt šovu, kamēr visi noklikšķina uz 'Pabeigts'.", "archiveToAnalytics": "Pievienot maniem pabeigtajiem aktivitātes", "activitySummaryError": "Aktivitātes kopsavilkumi nav pieejami", "requestSummaries": "Pieprasīt kopsavilkumus", - "loadingActivitySummary": "Ielādē aktivitātes kopsavilkumu...", "generatingNewActivities": "Jūs esat šīs valodu pāra pirmais lietotājs! Lūdzu, dodiet mums minūti, mēs sagatavojam aktivitātes tieši jums.", - "requestAccessTitle": "Vai vēlaties pieprasīt piekļuvi analītikas skatījumam?", + "requestAccessTitle": "Pieprasīt analītikas piekļuvi?", "requestAccessDesc": "Vai vēlaties pieprasīt piekļuvi, lai skatītu dalībnieku analītiku?\n\nJa dalībnieki piekrīt, šīs kursa administratori varēs skatīt viņu:\n • kopējo vārdu krājumu\n • kopējo gramatikas jēdzienu skaitu\n • kopējo aktivitāšu sesiju skaitu\n • konkrētus izmantotos, pareizi un nepareizi, gramatikas jēdzienus\n\nViņi nevarēs skatīt viņu:\n • ziņojumus ārpus kursa čatos\n • vārdu krājuma sarakstu", "requestAccess": "Pieprasīt piekļuvi ({count})", "createGroupChat": "Izveidot grupu čatu", @@ -4851,17 +4398,11 @@ "accessDesc": "Jūs varat padarīt savu kursu atvērtu pasaulei! Vai arī padarīt kursu privātu un drošu.", "createGroupChatDesc": "Kamēr aktivitāšu sesijas sākas un beidzas, grupu čati paliks atvērti ikdienas saziņai.", "deleteDesc": "Tikai administratori var dzēst kursu. Šī ir postoša darbība, kas izdzēš visus lietotājus un dzēš visus atlasītos čatus kursā. Esiet uzmanīgs.", - "failedToLoadCourseInfo": "Neizdevās ielādēt kursa informāciju", "noCourseFound": "Ak, šim kursam ir nepieciešams plāns!\n\nKursa plāni ir tematu un sarunu aktivitāšu secība.", "additionalParticipants": "+ {num} citi", - "activityNotFoundForCourse": "Šī aktivitāte kursā nav atrasta", - "courseChats": "Kursa čati", - "myActivitySessions": "Manas aktivitātes sesijas", "directMessages": "Tiešziņas", "whatNow": "Kas tagad?", "chooseNextActivity": "Izvēlies nākamo aktivitāti!", - "seeInstructions": "Skatīt instrukcijas", - "hideInstructions": "Paslēpt instrukcijas", "letsGo": "Ejam", "chooseRole": "Izvēlieties lomu!", "chooseRoleToParticipate": "Izvēlieties lomu, lai piedalītos!", @@ -4871,23 +4412,15 @@ "inviteFriends": "Aicināt draugus", "waitNotDone": "Gaidiet, es vēl neesmu pabeidzis!", "waitingForOthersToFinish": "Gaidām, lai pārējie pabeigtu...", - "saveToCompletedActivities": "Saglabāt pabeigtās aktivitātes", "generatingSummary": "Analizē čatu un ģenerē rezultātus", - "instructionsLanguage": "Instrukciju valoda", "findCourse": "Atrodi kursu", - "activityCompletedDesc": "Jūsu pabeigtā aktivitāte tika pievienota analītikai, kur jūs varat pārskatīt un praktizēt izmantoto valodu.", "pingParticipantsNotification": "{user} meklē lietotājus, lai pievienotos aktivitātes sesijai {room}", "course": "Kursa", "courses": "Kursi", "courseName": "Kursa nosaukums", "createNewCourse": "Jauns kurss", - "publicCourses": "Publiskie kursi", "goToCourse": "Dodieties uz kursu: {course}", "activityComplete": "Šī aktivitāte ir pabeigta. Apakšā ir pieejams aktivitātes kopsavilkums.", - "haventChattedMuch": "Izskatās, ka jūs neesat daudz sarunājušies, mēģiniet izmantot vairāk vārdu! Ja jūtaties, ka esat sasniedzis mērķi, varat turpināt zemāk.", - "haveChatted": "Izskatās, ka jau kādu laiku sarunājaties! Ja jūtaties, ka esat sasniedzis mērķi, noslēdziet, lai pabeigtu aktivitāti, un mēs ģenerēsim jums kopsavilkumu čatā!", - "userDoneAndWaiting": "{num1}/{num2} dalībnieku ir pabeiguši. Gaidiet, kamēr visi pabeigs, un mēs ģenerēsim jums kopsavilkumu čatā! \n\nJa vēlaties atkal pievienoties sarunai, klikšķiniet uz pogas Turpināt čatā.", - "othersDoneAndWaiting": "{num1}/{num2} ir pabeiguši. Vai esat sasniedzis savu mērķi?", "startNewSession": "Sākt jaunu sesiju", "joinOpenSession": "Pievienoties atvērtai sesijai", "less": "mazāk", @@ -4897,7 +4430,6 @@ "openToJoin": "Atvērts pievienošanai", "results": "Rezultāti", "activityDone": "Aktivitate pabeigta!", - "moreLabel": "vairāk", "promoCodeInfo": "Akcijas kodus var ievadīt nākamajā lapā", "editsComingSoon": "Iespēja rediģēt pilsētas un aktivitātes drīz būs pieejama.", "editing": "Rediģēšana", @@ -4913,13 +4445,10 @@ "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", - "chooseLanguage": "Izvēlieties valodu.", + "chooseLanguage": "Izvēlieties mērķa valodu.", "planTrip": "Plānojiet savu ceļojumu", "howAreYouTraveling": "Kā jūs ceļojat?", "unlockPrivateTrip": "Atbloķēt privātu ceļojumu", @@ -4932,25 +4461,20 @@ "courseCode": "Kāda ir slepenā parole?", "courseCodeHint": "Brauciena kods vai saite", "unlockMyTrip": "Atbloķēt manu braucienu", - "anyLevel": "Jebkurš līmenis", "signupOption": "Kā vēlaties reģistrēties?", "withApple": "Ar Apple", "withGoogle": "Ar Google", "withEmail": "Ar e-pastu", "createAccount": "Izveidot kontu", - "noCoursesFound": "Nav atrasts neviens kurss", "loginWithEmail": "Pierakstīties ar e-pastu", "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", - "allCefrLevels": "Visi CEFR līmeņi", "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.", "directMessageBotTitle": "Tiešās ziņas Pangea botam", "feedbackTitle": "Aktivitātes atsauksmes", - "feedbackDesc": "Kā būtu jāuzlabo aktivitāte? Ja vari sniegt dažas detaļas, mēs veiksim izmaiņas!", "feedbackHint": "Tavs atsauksmes", "feedbackButton": "Iesniegt atsauksmes", "directMessageBotDesc": "Runāt ar cilvēkiem ir jautrāk, bet... AI vienmēr ir gatavs!", @@ -4958,22 +4482,17 @@ "playWithAI": "Tagad spēlējiet ar AI", "courseStartDesc": "Pangea bots ir gatavs jebkurā laikā!\n\n...bet mācīties ir labāk ar draugiem!", "@@locale": "lv", - "@@last_modified": "2026-01-06 13:02:05.693062", + "@@last_modified": "2026-01-07 14:27:04.364429", "analyticsInactiveTitle": "Pieprasījumi neaktīviem lietotājiem nevar tikt nosūtīti", "analyticsInactiveDesc": "Neaktīvi lietotāji, kuri nav pieteikušies kopš šīs funkcijas ieviešanas, neredzēs jūsu pieprasījumu.\n\nPieprasījuma poga parādīsies, kad viņi atgriezīsies. Jūs varat atkārtoti nosūtīt pieprasījumu vēlāk, noklikšķinot uz pieprasījuma pogas viņu vārdā, kad tā būs pieejama.", "accessRequestedTitle": "Pieprasījums piekļūt analītikai", - "accessRequestedDesc": "„{space}” administratori pieprasa skatīt jūsu mācību analītiku.\n\nJa piekrītat, šīs kursa administratori varēs skatīt jūsu:\n • kopējo vārdu krājumu\n • kopējo gramatikas jēdzienu skaitu\n • kopējo aktivitāšu sesiju skaitu\n • konkrētus izmantotos gramatikas jēdzienus, pareizi un nepareizi\n\nViņi nevarēs skatīt jūsu:\n • ziņas čatos ārpus kursa\n • vārdu krājuma sarakstu", - "allowAccess": "Atļaut piekļuvi", - "denyAccess": "Noraidīt piekļuvi", + "accessRequestedDesc": "Pieprasītāji admin(i): {admin} \n\nAdmini no „{space}” pieprasa iespēju apskatīt jūsu mācību analītiku.\n\nJa jūs piekrītat, viņi varēs apskatīt jūsu:\n • kopējais vārdu krājums\n • kopējie gramatikas jēdzieni\n • kopējās aktivitātes sesijas\n • konkrētie gramatikas jēdzieni, kas izmantoti pareizi un nepareizi\n\nViņi nevarēs apskatīt jūsu:\n • ziņojumi čatos ārpus kursa\n • vārdu krājuma saraksts", "adminRequestedAccess": "Administratori ir pieprasījuši skatīt jūsu analītiku.", "lastUpdated": "Atjaunināts\n{time}", "activityFinishedMessage": "Visi pabeigti!", "endForAll": "Beigt visiem", "newCourse": "Jauns kurss", - "newCourseSubtitle": "Kuru kursa plānu vēlaties izmantot?", - "failedToLoadCourses": "Neizdevās ielādēt kursus", "numModules": "{num} moduļi", - "numActivityPlans": "{num} aktivitāšu plāni", "coursePlan": "Kursa plāns", "editCourseLater": "Jūs varat vēlāk rediģēt šablona nosaukumu, aprakstus un kursa attēlu.", "newCourseAccess": "Pēc noklusējuma kursi ir privāti un prasa administratora apstiprinājumu, lai pievienotos. Jūs varat šīs iestatījumus mainīt jebkurā laikā.", @@ -4983,30 +4502,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -5030,18 +4525,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5066,18 +4549,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5114,38 +4585,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5154,62 +4597,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5246,10 +4645,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5258,14 +4653,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5274,46 +4661,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5322,10 +4673,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5382,18 +4729,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5402,14 +4737,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5438,18 +4765,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5458,42 +4773,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5502,14 +4785,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5530,26 +4805,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5570,10 +4825,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5606,25 +4857,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5681,34 +4913,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5737,778 +4941,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7501,14 +5937,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7520,14 +5948,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7559,10 +5979,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7571,18 +5987,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7591,14 +5995,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7623,38 +6019,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7700,10 +6068,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7728,10 +6092,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7756,10 +6116,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7768,66 +6124,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7848,42 +6148,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7908,154 +6184,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8072,18 +6200,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8104,14 +6220,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8128,10 +6236,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8144,14 +6248,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8160,14 +6256,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8195,26 +6283,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8243,18 +6311,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8291,10 +6351,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9227,10 +7283,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9411,34 +7463,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9451,10 +7475,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9463,14 +7483,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9487,22 +7499,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9650,14 +7646,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9666,34 +7654,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9702,54 +7662,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9758,10 +7682,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9778,10 +7698,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9953,26 +7869,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10001,10 +7897,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10061,30 +7953,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10113,18 +7989,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10241,14 +8109,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10261,10 +8121,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10273,14 +8129,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10297,14 +8145,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10313,22 +8153,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10341,18 +8165,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10369,22 +8181,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10393,30 +8193,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10489,18 +8265,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10557,18 +8321,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10597,30 +8349,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10673,18 +8409,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10733,46 +8461,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10837,10 +8525,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11012,14 +8696,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11047,14 +8723,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11067,10 +8735,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11106,19 +8770,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11143,14 +8802,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11159,14 +8810,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11219,10 +8862,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11235,18 +8874,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11259,14 +8886,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11307,26 +8926,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11354,10 +8961,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11368,36 +8971,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11434,10 +9007,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11502,18 +9071,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11578,10 +9135,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11602,10 +9155,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11622,10 +9171,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11634,10 +9179,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11650,10 +9191,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11678,16 +9215,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Aicināt draugus uz aktivitāti", - "inviteFriendsToActivityCourse": "Aicināt draugus uz aktivitāti un kursu", "feedbackRespDesc": "Pārbaudiet rīt, lai saņemtu aktivitātes atjauninājumus.", "activityDropdownDesc": "Kad esat pabeidzis šo aktivitāti, noklikšķiniet zemāk", - "activityAnalyticsListBody": "Šīs ir jūsu pabeigtās aktivitātes! Pēc aktivitāšu pabeigšanas jūs varat tās apskatīt šeit.", "languageMismatchTitle": "Valodu neatbilstība", "languageMismatchDesc": "Jūsu mērķa valoda neatbilst šīs aktivitātes valodai. Vai vēlaties atjaunināt savu mērķa valodu?", "reportWordIssueTooltip": "Ziņot par vārda informācijas problēmu", "tokenInfoFeedbackDialogTitle": "Vārda informācijas atsauksmes", - "tokenInfoFeedbackDialogDesc": "AI pieļauj kļūdas. Lūdzu, aprakstiet jebkādas problēmas, kuras atradāt ar iepriekš minēto informāciju.", "noPublicCoursesFound": "Publiskie kursi nav atrasti. Vai vēlaties izveidot jaunu?", "noCourseTemplatesFound": "Mēs nevarējām atrast kursus jūsu mērķa valodai. Tikmēr jūs varat sarunāties ar Pangea botu un vēlāk pārbaudīt vairāk kursu.", "botActivityJoinFailMessage": "Pangea bots nedaudz aizkavējas ar atbildi. Lūdzu, mēģiniet vēlreiz vēlāk vai aiciniet draugu.", @@ -11695,14 +9228,6 @@ "leaveDesc": "Atstājiet šo telpu un visas tajā esošās sarunas", "selectAll": "Izvēlēties visu", "deselectAll": "Izņemt izvēli no visa", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11711,10 +9236,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11731,10 +9252,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11768,7 +9285,6 @@ "newMessageInPangeaChat": "💬 Jauna ziņa Pangea Čatā", "shareCourse": "Dalīties ar kursu", "addCourse": "Pievienot kursu", - "joinCourseWithCode": "Pievienoties kursam ar kodu", "joinPublicCourse": "Pievienoties publiskajam kursam", "vocabLevelsDesc": "Šeit ietilps vārdu krājuma vārdi, kad jūs tos uzlabosiet līmenī!", "highlightVocabTooltip": "Izceliet mērķa vārdu vārdnīcu zemāk, tos nosūtot vai praktizējot čatā.", @@ -11792,10 +9308,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11804,7 +9316,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nav atrasti DMs vai čati. Pārliecinieties, ka jūsu meklējums ir pareizi uzrakstīts.", + "activityAnalyticsTooltipBody": "Šīs ir jūsu saglabātās aktivitātes pārskatīšanai un praksei.", + "numSavedActivities": "Saglabāto aktivitāšu skaits", + "saveActivityTitle": "Saglabāt aktivitāti", + "saveActivityDesc": "Lielisks darbs! Saglabājiet šo aktivitāti turpmākai pārskatīšanai un praksei", + "levelInfoTooltip": "Šeit jūs varat redzēt visus punktus, ko esat nopelnījis, un kā!", + "alreadyInCourseWithID": "Jūs jau esat kursā ar šo plānu. Vai vēlaties izveidot kursu ar to pašu plānu vai doties uz esošo kursu?", + "goToExistingCourse": "Doties uz esošo kursu", + "emojiView": "Emodžiju skats", + "feedbackDialogDesc": "Es arī pieļauju kļūdas! Vai ir kaut kas, kas varētu man palīdzēt uzlaboties?", + "contactHasBeenInvitedToTheCourse": "Kontakts ir uzaicināts uz kursu", + "activityStatsButtonTooltip": "Aktivitātes informācija", + "allow": "Atļaut", + "deny": "Noraidīt", + "enabledRenewal": "Iespējot abonēšanas atjaunošanu", + "subscriptionEndsOn": "Abonēšana beidzas", + "subscriptionRenewsOn": "Abonēšana tiek atjaunota", + "waitForSubscriptionChanges": "Izmaiņas jūsu abonēšanā var aizņemt brīdi, lai atspoguļotos lietotnē.", + "subscribeReadingAssistance": "Abonēt, lai atbloķētu ziņojumu rīkus", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikāņu", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharu", + "arDisplayName": "Arābu", + "asDisplayName": "Asamu", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaidžāņu", + "baDisplayName": "Baškīru", + "banDisplayName": "Baliniešu", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Baltkrievu", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betavi", + "bgDisplayName": "Bulgāru", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikolu", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengāļu", + "bnBDDisplayName": "Bengāļu (Bangladeša)", + "bnINDisplayName": "Bengāļu (Indija)", + "brDisplayName": "Bretoņu", + "bsDisplayName": "Bosniešu", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Burjatu", + "caDisplayName": "Kataloniešu", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Čiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centrālā kurdu valoda", + "cnhDisplayName": "Hakha Čin", + "coDisplayName": "Korsikāņu valoda", + "crhDisplayName": "Krimas turku valoda", + "crsDisplayName": "Seselwa kreolu franču valoda", + "csDisplayName": "Čehs", + "cvDisplayName": "Čuvašu valoda", + "cyDisplayName": "Velsiešu valoda", + "daDisplayName": "Dāņu", + "deDisplayName": "Vācu", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Angļu", + "enAUDisplayName": "Angļu (Austrālija)", + "enGBDisplayName": "Angļu (Lielbritānija)", + "enINDisplayName": "Angļu (Indija)", + "enUSDisplayName": "Angļu (ASV)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spāņu", + "esESDisplayName": "Spāņu (Spānija)", + "esMXDisplayName": "Spāņu (Meksika)", + "euDisplayName": "Basku", + "faDisplayName": "Persiešu", + "ffDisplayName": "Fulah", + "fiDisplayName": "Somu", + "filDisplayName": "Filipīniešu", + "fjDisplayName": "Fidžiešu", + "foDisplayName": "Faroiešu", + "frDisplayName": "Franču", + "frCADisplayName": "Franču (Kanāda)", + "frFRDisplayName": "Franču (Francija)", + "fyDisplayName": "Rietumu frīzu", + "gaDisplayName": "Īru", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skotu gēlu", + "glDisplayName": "Galīciešu", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goanu Konkani", + "guDisplayName": "Gudžarati", + "haDisplayName": "Hauss", + "hawDisplayName": "Havajiešu", + "heDisplayName": "Ebreju", + "hiDisplayName": "Hindu", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Čhatisgarhi", + "hrDisplayName": "Horvātu", + "hrxDisplayName": "Hunsriks", + "htDisplayName": "Haitiešu kreolu", + "huDisplayName": "Ungāru", + "hyDisplayName": "Armēņu", + "idDisplayName": "Indoniešu", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islande", + "itDisplayName": "Itāļu", + "jaDisplayName": "Japāņu", + "jvDisplayName": "Javāņu", + "kaDisplayName": "Gruzīnu", + "kkDisplayName": "Kazahu", + "kmDisplayName": "Khmēru", + "knDisplayName": "Kannada", + "koDisplayName": "Korejiešu", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kašmīru", + "ktuDisplayName": "Kituba (Demokrātiskā Kongo Republika)", + "kuDisplayName": "Kurdisk", + "kyDisplayName": "Kirgīzu", + "laDisplayName": "Latīņu", + "lbDisplayName": "Luksemburgiešu", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgiešu", + "lijDisplayName": "Liguriešu", + "lmoDisplayName": "Lombardu", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lietuviešu", + "ltgDisplayName": "Latgaliešu", + "luoDisplayName": "Luo (Kenija un Tanzānija)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latviešu", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasu", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedoniešu", + "mlDisplayName": "Malajalu", + "mnDisplayName": "Mongolu", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malajiešu", + "msArabDisplayName": "Malajiešu (arābu)", + "msMYDisplayName": "Malajiešu (Malāzija)", + "mtDisplayName": "Maltiešu", + "mwrDisplayName": "Marvari", + "myDisplayName": "Birmiešu", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvēģu (Bokmål)", + "neDisplayName": "Nepāļu", + "newDisplayName": "Newari", + "nlDisplayName": "Nīderlandiešu", + "nlBEDisplayName": "Flandriešu", + "noDisplayName": "Norvēģu", + "nrDisplayName": "Dienvidu Ndebele", + "nsoDisplayName": "Ziemeļu Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitāņu", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Pandžabi", + "paArabDisplayName": "Pandžabi (Shahmukhi)", + "paINDisplayName": "Pandžabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poļu", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugāļu", + "ptBRDisplayName": "Portugāļu (Brazīlija)", + "ptPTDisplayName": "Portugāļu (Portugāle)", + "quDisplayName": "Kečua", + "rajDisplayName": "Radžastānas", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumāņu", + "roMDDisplayName": "Moldāvu", + "romDisplayName": "Romu", + "ruDisplayName": "Krievu", + "rwDisplayName": "Kinjaruanda", + "saDisplayName": "Sanskrits", + "satDisplayName": "Santāļu", + "scnDisplayName": "Siciliešu", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Šanu", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovāku", + "slDisplayName": "Slovēņu", + "smDisplayName": "Samoāņu", + "snDisplayName": "Šona", + "soDisplayName": "Somāļu", + "sqDisplayName": "Albāņu", + "srDisplayName": "Serbu", + "srMEDisplayName": "Melnkalniešu", + "ssDisplayName": "Svati", + "stDisplayName": "Dienvidsoto", + "suDisplayName": "Sundaniešu", + "svDisplayName": "Zviedru", + "swDisplayName": "Svahili", + "szlDisplayName": "Sileziešu", + "taDisplayName": "Tamiļu", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadžiku", + "thDisplayName": "Taju", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Turkmēņu", + "tlDisplayName": "Tagalu", + "tnDisplayName": "Cvāna", + "trDisplayName": "Turku", + "tsDisplayName": "Conga", + "ttDisplayName": "Tataru", + "ugDisplayName": "Ujguru", + "ukDisplayName": "Ukrainu", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indija)", + "urPKDisplayName": "Urdu (Pakistāna)", + "uzDisplayName": "Uzbeku", + "viDisplayName": "Vjetnamiešu", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukateko", + "yueDisplayName": "Kantoniešu", + "yueCNDisplayName": "Kantoniešu (Ķīna)", + "yueHKDisplayName": "Kantoniešu (Honkonga)", + "zhDisplayName": "Ķīniešu", + "zhCNDisplayName": "Ķīniešu (Vienkāršotā)", + "zhTWDisplayName": "Ķīniešu (Tradicionālā)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11871,6 +10569,7 @@ "notStartedActivitiesTitle": "Atvērtās sesijas ({num})", "inProgressActivitiesTitle": "Notiek tagad ({num})", "completedActivitiesTitle": "Pabeigts ({num})", + "pickDifferentActivity": "Izvēlieties citu aktivitāti", "inOngoingActivity": "Jums ir notiekoša aktivitāte!", "@notStartedActivitiesTitle": { "type": "String", @@ -11896,10 +10595,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Jūsu mērķa valoda nesakrīt ar šo ziņojumu. Vai vēlaties atjaunināt savu mērķa valodu?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Šeit ir visi šī kursa dalībnieki. Noklikšķiniet uz jebkura lietotāja avatāra un izvēlieties \"sākt sarunu\", lai nosūtītu DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Šis vārds tiks pastāvīgi noņemts no jūsu analīzes", + "woman": "Sieviete", + "man": "Vīrietis", + "otherGender": "Cits", + "unselectedGender": "Izvēlieties dzimuma opciju", + "gender": "Dzimums", + "chatParticipantTooltip": "Šeit ir visi šajā čatā. Noklikšķiniet uz jebkura lietotāja avatara un \"sākt sarunu\", lai nosūtītu DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Mācību rīki ir atslēgti ziņojumiem, kas nav jūsu mērķa valodā.", + "vocabEmoji": "Vārdu emocijzīme", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Pieprasīt regenerāciju", + "optionalRegenerateReason": "(Nepieciešams) Iemesls", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Jūs esat iestatījis emocijzīmi {lemma}! Mēs izmantosim šo emocijzīmi, lai pārstāvētu vārdu praktiskajās aktivitātēs turpmāk.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Gaidām, kamēr pieteikšanās tiks pabeigta", + "ssoDialogDesc": "Mēs atvērām jaunu cilni, lai jūs varētu droši pieteikties.", + "ssoDialogHelpText": "🤔 Ja neredzējāt jauno cilni, lūdzu, pārbaudiet savu uznirstošo logu bloķētāju.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Atspējot valodas rīkus", + "disableLanguageToolsDesc": "Vai vēlaties atspējot automātisko valodas palīdzību?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Atļauja noraidīta. Iespējot ieraksta atļaujas, lai ierakstītu audio ziņojumus.", + "genericWebRecordingError": "Kaut kas nogāja greizi. Mēs iesakām izmantot Chrome pārlūkprogrammu, ierakstot ziņojumus.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Lai iegūtu labāko pieredzi, lietojot šo lietotni, lūdzu, paplašiniet ekrāna izmēru.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivitātes, lai atbloķētu nākamo tēmu", "activitiesToUnlockTopicDesc": "Iestatiet aktivitāšu skaitu, lai atbloķētu nākamo kursa tēmu", "@activitiesToUnlockTopicTitle": { @@ -11909,5 +10726,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Pareiza vārdu definīciju prakse", + "constructUseIncLMDesc": "Nepareiza vārdu definīciju prakse", + "constructUseCorLADesc": "Pareiza vārdu audio prakse", + "constructUseIncLADesc": "Nepareiza vārdu audio prakse", + "constructUseBonus": "Bonuss vārdu praksē", + "practiceVocab": "Praktizēt vārdu krājumu", + "selectMeaning": "Izvēlieties nozīmi", + "selectAudio": "Izvēlieties atbilstošo audio", + "congratulations": "Apsveicam!", + "anotherRound": "Vēl viena kārta", + "noActivityRequest": "Nav pašreizējo aktivitāšu pieprasījumu.", + "quit": "Iziet", + "congratulationsYouveCompletedPractice": "Apsveicam! Jūs esat pabeidzis prakses sesiju.", + "mustHave10Words": "Jums jābūt vismaz 10 vārdiem, lai tos praktizētu. Mēģiniet parunāt ar draugu vai Pangea Bot, lai uzzinātu vairāk!", + "botSettings": "Bota iestatījumi", + "activitySettingsOverrideWarning": "Valoda un valodas līmenis, ko nosaka aktivitāšu plāns", + "voice": "Balss", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index a6723b0a4..8c947d498 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:49.200225", + "@@last_modified": "2026-01-07 14:26:11.727122", "about": "Om", "@about": { "type": "String", @@ -2293,26 +2293,14 @@ "commandHint_logoutall": "Logg ut av alle aktive enheter", "displayNavigationRail": "Vis navigasjonsstang på mobil", "customReaction": "Egendefinert reaksjon", - "accountInformation": "Kontoinformasjon", - "addGroupDescription": "Legg til en chatbeskrivelse", - "addNewFriend": "Legg til ny venn", - "alreadyHaveAnAccount": "Har du allerede en konto?", - "createNewGroup": "Opprett en ny chat", - "editChatPermissions": "Rediger chat-tillatelser", "writeAMessageLangCodes": "Skriv inn {l1} eller {l2}...", "requests": "Forespørsler", - "allCorrect": "Det er slik jeg ville sagt det! Flott!", - "newWayAllGood": "Det er ikke slik jeg ville sagt det, men det ser bra ut!", - "othersAreBetter": "Hm, det kan være en bedre måte å si det på.", "holdForInfo": "Klikk og hold for ordinformasjon.", "greenFeedback": "Det er det jeg ville ha skrevet!", "yellowFeedback": "Hm, du kan prøve det og se om det fungerer! For å bruke dette ordet, klikk bare igjen.", "redFeedback": "Jeg tror ikke det er riktig...", "itInstructionsTitle": "Jeg kan hjelpe deg med å oversette!", "itInstructionsBody": "Du kan klikke og holde på valgene for ordinformasjon.", - "oneday": "Siste 24 timer", - "oneweek": "Siste 7 dager", - "onemonth": "Siste måned", "gaTooltip": "L2 bruk med grammatikkhjelp", "taTooltip": "L2 bruk med oversettelseshjelp", "unTooltip": "Annet", @@ -2322,58 +2310,27 @@ "interactiveTranslatorAllowed": "Elevvalg", "interactiveTranslatorRequired": "Påkrevd", "notYetSet": "Ikke satt ennå", - "myLearning": "Mine analyser", "waTooltip": "L2 bruk uten hjelp", - "changeDateRange": "Endre datoperiode", - "classDescription": "Beskrivelse", - "addStudents": "Inviter brukere med lenke eller kode", - "copyClassLink": "Kopier invitasjonslenke", - "copyClassCode": "Kopier invitasjonskode", - "inviteStudentByUserName": "Inviter brukere med brukernavn", "languageSettings": "Språkinnstillinger", "interactiveTranslator": "Oversettelseshjelp", - "shareVideo": "Del video", - "shareVideoDesc": "Slå på dette for å la elever dele videoer i chatter.", - "shareFiles": "Del filer", - "selectLanguageLevel": "Velg språknivå", "noIdenticalLanguages": "Vennligst velg ulike grunn- og målspråk", - "iWantALanguagePartnerFrom": "Er fra:", - "worldWide": "Verden over", - "noResults": "Ingen resultater! Prøv å utvide søket ditt.", "searchBy": "Søk etter land og språk", - "iWantAConversationPartner": "Jeg vil ha en samtalepartner som", - "iWantALanguagePartnerWhoSpeaks": "Snakker:", - "iWantALanguagePartnerWhoIsLearning": "Lærer:", "joinWithClassCode": "Bli med i kurs", - "joinWithClassCodeHint": "Skriv inn invitasjonskode", - "languageLevelPreA1": "Reell nybegynner (Pre A1)", - "languageLevelA1": "Nybegynner (A1)", - "languageLevelA2": "Elementært (A2)", - "languageLevelB1": "Middels (B1)", - "languageLevelB2": "Øvre middels (B2)", - "languageLevelC1": "Avansert (C1)", - "languageLevelC2": "Mestring (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Nybegynner Høy (A2)", + "languageLevelB1": "Moderat Mid (B1)", + "languageLevelB2": "Avansert Lav (B2)", + "languageLevelC1": "Avansert Mid (C1)", + "languageLevelC2": "Overlegen (C2)", "changeTheNameOfTheClass": "Endre navnet", "changeTheNameOfTheChat": "Endre navnet på chatten", - "askPangeaBot": "Spør Pangea Bot om en kontekstuell definisjon.", "sorryNoResults": "Beklager, ingen resultater.", "ignoreInThisText": "Ignorer", - "helpMeTranslate": "Ja!", - "needsItShortMessage": "Ute av mål", "needsItMessage": "Vent, det er ikke {targetLanguage}! Trenger du hjelp med oversettelsen?", - "needsIgcMessage": "Denne meldingen har en grammatikkfeil.", - "tokenTranslationTitle": "Et ord er på ditt grunnspråk.", - "spanTranslationDesc": "Se mulige oversettelser nedenfor.", - "spanTranslationTitle": "Noen ord er på ditt grunnspråk.", - "l1SpanAndGrammarTitle": "Utenfor målspråket", - "l1SpanAndGrammarDesc": "Dette kan være på ditt grunnspråk eller det kan være en grammatikkfeil.", - "otherTitle": "Du har en feil.", - "otherDesc": "Se mulige korrigeringer nedenfor.", "countryInformation": "Mitt land", - "myLanguages": "Mine grunn- og målspråk", "targetLanguage": "Målspråk", "sourceLanguage": "Grunnspråk", - "languagesISpeak": "Språk jeg snakker", "updateLanguage": "Mine språk", "whatLanguageYouWantToLearn": "Hvilket språk vil du lære?", "whatIsYourBaseLanguage": "Hva er ditt hovedspråk?", @@ -2388,13 +2345,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klikk her for å oppdatere innstillingene for oversettelses- og grammatikkhjelp", "errorDisableITClassDesc": "Oversettelseshjelp er slått av for kurset som denne chatten er i.", "errorDisableIGCClassDesc": "Grammatikkhjelp er slått av for kurset som denne chatten er i.", - "itIsDisabled": "Interaktiv oversettelse er deaktivert", - "igcIsDisabled": "Interaktiv grammatikkkontroll er deaktivert", - "goToLearningSettings": "Gå til læringsinnstillinger", "error405Title": "Språk ikke satt", "error405Desc": "Vennligst sett språkene dine i Hovedmeny > Læringsinnstillinger.", - "loginOrSignup": "Logg inn med", - "iAgreeToThe": "Jeg godtar ", "termsAndConditions": "Vilkår og betingelser", "andCertifyIAmAtLeast13YearsOfAge": " og bekrefter at jeg er minst 16 år gammel.", "error502504Title": "Wow, det er mange elever pålogget!", @@ -2402,40 +2354,21 @@ "error404Title": "Oversettelsesfeil!", "error404Desc": "Pangea Bot er ikke sikker på hvordan den skal oversette det...", "errorPleaseRefresh": "Vi undersøker det! Vennligst last inn siden på nytt og prøv igjen.", - "toggleIT": "Interaktiv oversettelse", - "toggleIGC": "Interaktiv grammatikkontroll", - "toggleToolSettingsDescription": "Her kan du veksle mellom dine individuelle språkverktøyinnstillinger.", "connectedToStaging": "Tilkoblet til staging", "learningSettings": "Læringsinnstillinger", - "sendVoiceNotes": "Send talemeldinger", - "sendVoiceNotesDesc": "Veksle dette på for å tillate elever å sende talemeldinger i chatter.", - "chatTopic": "Chatt-tema", - "chatTopicDesc": "Sett et chatt-tema", - "inviteStudentByUserNameDesc": "Hvis eleven din allerede har en konto, kan du søke etter dem.", "participants": "Deltakere", - "almostPerfect": "Det virker riktig! Her er hva jeg ville ha sagt.", - "prettyGood": "Veldig bra! Her er hva jeg ville ha sagt.", - "letMeThink": "Hmm, la oss se hvordan du gjorde det!", "clickMessageTitle": "Trenger du hjelp?", "clickMessageBody": "Klikk på en melding for språkvåktøy som oversettelse, avspilling og mer!", - "understandingMessagesTitle": "Definisjoner og oversettelser!", - "understandingMessagesBody": "Klikk på understrekede ord for definisjoner. Oversett med meldingsalternativer (øverst til høyre).", "allDone": "Ferdig!", "vocab": "Ordforråd", "low": "Vi har bevis for at brukeren ikke forstår disse ordene.", "medium": "Disse ordene har blitt brukt. Det er uklart om ordene er fullt forstått eller ikke.", "high": "Vi har bevis for at brukeren forstår disse ordene.", - "unknownProficiency": "Disse ordene har ikke blitt brukt i Pangea Chat.", - "changeView": "Bytt visning.", - "clearAll": "Tøm alle ord?", - "generateVocabulary": "Generer ordforråd fra tittel og beskrivelse", - "generatePrompts": "Generer oppfordringer", "subscribe": "Abonner", "getAccess": "Abonner nå!", "subscriptionDesc": "Meldingsutveksling er gratis! Abonner for å låse opp interaktiv oversettelse, grammatikkontroll og læringsanalyse.", "subscriptionManagement": "Abonnementsadministrasjon", "currentSubscription": "Nåværende abonnement", - "changeSubscription": "Endre abonnementet ditt", "cancelSubscription": "Avbryt abonnementet ditt", "selectYourPlan": "Velg planen din", "subsciptionPlatformTooltip": "Vennligst logg inn på din opprinnelige enhet for å administrere abonnementet ditt", @@ -2444,9 +2377,6 @@ "paymentHistory": "Betalingshistorikk", "emptyChatDownloadWarning": "Kan ikke laste ned tom chat", "update": "Oppdater", - "updateDesc": "Du kan nå oppdatere denne appen fra {localVersion} til {storeVersion}", - "maybeLater": "Kanskje senere", - "mainMenu": "Hovedmeny", "toggleImmersionMode": "Nedsenkingsmodus", "toggleImmersionModeDesc": "Når den er aktivert, vises alle meldinger på målspråket ditt. Denne innstillingen er mest nyttig i språkutvekslinger.", "itToggleDescription": "Dette språklæringsverktøyet vil identifisere ord i ditt grunnleggende språk og hjelpe deg med å oversette dem til målspråket. Selv om det er sjeldent, kan AI gjøre oversettelsesfeil.", @@ -2461,212 +2391,13 @@ "definitionsToolDescription": "Når det er aktivert, kan ord understreket i blått klikkes for definisjoner. Klikk på meldinger for å få tilgang til definisjoner.", "translationsToolDescrption": "Når det er aktivert, klikk på en melding og oversettelsesikonet for å se en melding på ditt grunnleggende språk.", "welcomeBack": "Velkommen tilbake! Hvis du var en del av pilotprosjektet 2023-2024, kontakt oss for din spesielle pilotabonnement. Hvis du er lærer som har (eller institusjonen din har) kjøpt lisenser for klassen din, kontakt oss for ditt lærerabonnement.", - "kickAllStudents": "Kast alle elever", - "kickAllStudentsConfirmation": "Er du sikker på at du vil kaste alle elever?", - "inviteAllStudents": "Inviter alle elever", - "inviteAllStudentsConfirmation": "Er du sikker på at du vil invitere alle elever?", - "inviteUsersFromPangea": "Legg til administratorer", - "redeemPromoCode": "Innløs kampanjekode", - "enterPromoCode": "Skriv inn kampanjekode", "downloadTxtFile": "Last ned tekstfil", "downloadCSVFile": "Last ned CSV-fil", "promotionalSubscriptionDesc": "Du har for øyeblikket et livstids kampanjeabonnement. Send en melding til support@pangea.chat for hjelp med å endre abonnementet ditt.", "originalSubscriptionPlatform": "Abonnement kjøpt via {purchasePlatform}", "oneWeekTrial": "Én ukes prøveperiode", "downloadXLSXFile": "Last ned Excel-fil", - "abDisplayName": "Abkhasisk", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albansk", - "amDisplayName": "Amharisk", - "arDisplayName": "Arabisk", - "anDisplayName": "Aragonsk", - "hyDisplayName": "Armensk", - "asDisplayName": "Assamesisk", - "avDisplayName": "Avarisk", - "aeDisplayName": "Avestisk", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijansk", - "bmDisplayName": "Bambara", - "baDisplayName": "Basjkir", - "euDisplayName": "Baskisk", - "beDisplayName": "Hviterussisk", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnisk", - "brDisplayName": "Bretonsk", - "bgDisplayName": "Bulgarsk", - "myDisplayName": "Burmesisk", - "caDisplayName": "Katalansk, Valenciansk", - "chDisplayName": "Chamorro", - "ceDisplayName": "Tsjetsjensk", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kinesisk", - "cvDisplayName": "Tsjuvash", - "kwDisplayName": "Kornisk", - "coDisplayName": "Korsikansk", - "crDisplayName": "Cree", - "hrDisplayName": "Kroatisk", - "csDisplayName": "Tsjekkisk", - "daDisplayName": "Dansk", - "dvDisplayName": "Divehi; Dhivehi; Maldivisk;", - "nlDisplayName": "Nederlandsk", - "enDisplayName": "Engelsk", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estisk", - "eeDisplayName": "Ewe", - "foDisplayName": "Færøysk", - "fjDisplayName": "Fijiansk", - "fiDisplayName": "Finsk", - "frDisplayName": "Fransk", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicisk", - "kaDisplayName": "Georgisk", - "deDisplayName": "Tysk", - "elDisplayName": "Gresk, moderne", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitisk, haitisk kreol", - "haDisplayName": "Hausa", - "heDisplayName": "Hebraisk (moderne)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungarsk", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesisk", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irsk", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Isländsk", - "itDisplayName": "Italiensk", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japansk", - "jvDisplayName": "Javanesisk", - "klDisplayName": "Grønlandsk, Kalaallisut", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kasjmiri", - "kkDisplayName": "Kasakhisk", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgisisk, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreansk", - "kuDisplayName": "Kurdisk", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxembourgsk, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgsk, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laotisk", - "ltDisplayName": "Litauisk", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latvisk", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonsk", - "mgDisplayName": "Madagassisk", - "msDisplayName": "Malaysisk", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltesisk", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolsk", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norsk bokmål", - "ndDisplayName": "Nord Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norsk nynorsk", - "noDisplayName": "Norsk", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Sør Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Gammelkirkeslavisk, Kirkeslavisk, Gammelkirkeslavisk, Gammel bulgarsk, Gammel slavisk", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Ossetisk, Ossetisk", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persisk", - "plDisplayName": "Polsk", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugisisk", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumensk, moldovsk, moldovsk", - "ruDisplayName": "Russisk", - "saDisplayName": "Sanskrit (Sanskrit)", - "scDisplayName": "Sardisk", - "sdDisplayName": "Sindhi", - "seDisplayName": "Nord-Samisk", - "smDisplayName": "Samoansk", - "sgDisplayName": "Sango", - "srDisplayName": "Serbisk", - "gdDisplayName": "Skotsk gælisk, gælisk", - "snDisplayName": "Shona", - "siDisplayName": "Singalesisk, Singales", - "skDisplayName": "Slovakisk", - "slDisplayName": "Slovensk", - "soDisplayName": "Somalisk", - "stDisplayName": "Sør-Sotho", - "esDisplayName": "Spansk", - "suDisplayName": "Sundanesisk", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Svensk", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadsjikisk", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetansk Standard, Tibetansk, Sentral", - "tkDisplayName": "Turkmensk", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tongaøyene)", - "trDisplayName": "Tyrkisk", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitisk", - "ugDisplayName": "Uighur, Uighur", - "ukDisplayName": "Ukrainsk", - "urDisplayName": "Urdu", - "uzDisplayName": "Usbekisk", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamesisk", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Walisisk", - "woDisplayName": "Wolof", - "fyDisplayName": "Vestfrisisk", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Ukjent", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiisk", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Flere", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebraisk", - "jwDisplayName": "Javanesisk", - "moDisplayName": "Moldovisk", - "shDisplayName": "Serbo-kroatisk", "wwCountryDisplayName": "Verden", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Ålandøyene", @@ -2914,41 +2645,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Betal", - "allPrivateChats": "Direktmeldinger", - "unknownPrivateChat": "Ukjent privat samtale", + "pay": "Til betaling", "invitedToSpace": "{user} har invitert deg til å bli med på et kurs: {space}! Vil du akseptere?", - "declinedInvitation": "Avvist invitasjon", - "acceptedInvitation": "Akseptert invitasjon", "youreInvited": "📩 Du er invitert!", "invitedToChat": "{user} har invitert deg til å bli med i en samtale: {name}! Vil du akseptere?", "monthlySubscription": "Månedlig", "yearlySubscription": "Årlig", "defaultSubscription": "Pangea Chat-abonnement", "freeTrial": "Gratis prøveperiode", - "grammarAnalytics": "Feilrettingsanalyse", "total": "Totalt: ", "noDataFound": "Ingen data funnet", - "promoSubscriptionExpirationDesc": "Ditt nåværende abonnement er kampanjeprøve og utløper {expiration}. Send en melding til support@pangea.chat for hjelp med å endre abonnementet ditt.", - "emptyChatNameWarning": "Vennligst skriv inn et navn for denne samtalen", "blurMeansTranslateTitle": "Hvorfor er meldingen uskarp?", "blurMeansTranslateBody": "Mens Immersjonsmodus er aktivert, vil meldinger som sendes på ditt grunnspråk bli uskarpe mens Pangea Bot oversetter dem til ditt målspråk. Immersjonsmodus kan veksles i individuelle og kursinnstillinger.", - "someErrorTitle": "Hm, noe er galt", - "someErrorBody": "Det kan være en feil eller noe i ditt grunnspråk.", "bestCorrectionFeedback": "Det stemmer!", "distractorFeedback": "Det er ikke helt riktig.", "bestAnswerFeedback": "Det stemmer!", "definitionDefaultPrompt": "Hva betyr dette ordet?", "practiceDefaultPrompt": "Hva er det beste svaret?", "correctionDefaultPrompt": "Hva er den beste erstatningen?", - "itStartDefaultPrompt": "Vil du ha hjelp med oversettelse?", - "lockedChatWarning": "🔒 Denne chatten er låst", - "lockChat": "Lås chat", - "suggestToChat": "Foreslå denne chatten", - "suggestToChatDesc": "Foreslåtte chatter vil vises i chatlister", "acceptSelection": "Godta korrigering", - "acceptSelectionAnyway": "Bruk dette likevel", - "makingActivity": "Lager aktivitet", "why": "Hvorfor?", "definition": "Definisjon", "exampleSentence": "Eksempelsentence", @@ -2956,128 +2671,55 @@ "reportMessageTitle": "{reportingUserId} har rapportert en melding fra {reportedUserId} i chatten {roomName}", "reportMessageBody": "Melding: {reportedMessage}\nÅrsak: {reason}", "noTeachersFound": "Ingen lærere funnet å rapportere til", - "viewArchive": "Se arkiv", "trialExpiration": "Din gratis prøveperiode utløper den {expiration}", "freeTrialDesc": "Nye brukere får en ukes gratis prøveperiode av Pangea Chat", "activateTrial": "Gratis 7-dagers prøveperiode", "successfullySubscribed": "Du har abonnert vellykket!", "clickToManageSubscription": "Klikk her for å administrere abonnementet ditt.", - "errorGettingAudio": "Feil ved henting av lyd. Vennligst oppdater og prøv igjen.", "signUp": "Registrer deg", "pleaseChooseAtLeastChars": "Vennligst velg minst {min} tegn.", "noEmailWarning": "Vennligst skriv inn en gyldig e-postadresse. Ellers kan du ikke tilbakestille passordet ditt. Hvis du ikke vil, trykk igjen på knappen for å fortsette.", "pleaseEnterValidEmail": "Vennligst skriv inn en gyldig e-postadresse.", "pleaseChooseAUsername": "Vennligst velg et brukernavn", - "chooseAUsername": "Velg et brukernavn", "define": "Definer", "listen": "Lytt", - "addConversationBot": "Aktiver samtalebot", - "addConversationBotDesc": "Legg til en bot i denne chatten", - "convoBotSettingsDescription": "Rediger samtaleemne og vanskelighetsgrad", - "enterAConversationTopic": "Skriv inn et samtaleemne", - "conversationTopic": "Samtaleemne", - "enableModeration": "Aktiver moderering", - "enableModerationDesc": "Aktiver automatisk moderering for å gjennomgå meldinger før de sendes", - "conversationLanguageLevel": "Hva er språknivået for denne samtalen?", - "showDefinition": "Vis definisjon", - "subscriptionPopupTitle": "Denne setningen kan ha en grammatikkfeil...", - "subscriptionPopupDesc": "Abonner i dag for å låse opp oversettelse og grammatikkorreksjon!", - "seeOptions": "Se alternativer", - "continuedWithoutSubscription": "Fortsett uten abonnement", "trialPeriodExpired": "Prøveperioden din har utløpt", - "selectToDefine": "Klikk på et hvilket som helst ord for å se dets definisjon!", "translations": "oversettelser", "messageAudio": "meldingslyd", "definitions": "definisjoner", "subscribedToUnlockTools": "Abonner for å låse opp interaktiv oversettelse og grammatikkontroll, lydavspilling, tilpassede øvelsesaktiviteter og læringsanalyse!", "translationTooltip": "Oversett", - "audioTooltip": "Spill av lyd", "speechToTextTooltip": "Transkripsjon", - "certifyAge": "Jeg bekrefter at jeg er over {age} år gammel", "kickBotWarning": "Å sparke Pangea Bot vil fjerne samtale-boten fra denne chatten.", - "joinToView": "Bli med i dette rommet for å se detaljer", "refresh": "Oppdater", - "autoPlayTitle": "Automatisk avspilling av meldinger", - "autoPlayDesc": "Når den er aktivert, vil tekst-til-tale-lyden av meldinger spilles av automatisk når den er valgt.", "messageAnalytics": "Meldingsanalyse", "words": "Ord", "score": "Poeng", "accuracy": "Nøyaktighet", "points": "Poeng", "noPaymentInfo": "Ingen betalingsinformasjon nødvendig!", - "conversationBotModeSelectDescription": "Chataktivitet", - "conversationBotModeSelectOption_discussion": "Diskusjon", - "conversationBotModeSelectOption_custom": "Egendefinert", - "conversationBotModeSelectOption_conversation": "Samtale", - "conversationBotModeSelectOption_textAdventure": "Teksteventyr", - "conversationBotModeSelectOption_storyGame": "Historie Spill", - "conversationBotDiscussionZone_title": "Diskusjonsinnstillinger", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskusjonstema", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Sett diskusjonstema", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskusjonsnøkler", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Sett diskusjonsnøkler", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Komma-separert liste over nøkkelord for å veilede diskusjonen", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Send diskusjonsoppfordring etter en tidsplan", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Timer mellom diskusjonsoppfordringer", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Svar på ⏩ reaksjon", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaksjon for å sende diskusjonsoppfordring", - "conversationBotCustomZone_title": "Egendefinerte innstillinger", - "conversationBotCustomZone_customSystemPromptLabel": "Systemoppfordring", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Sett egendefinert systemoppfordring", - "conversationBotCustomZone_customSystemPromptEmptyError": "Mangler egendefinert systemoppfordring", - "botConfig": "Bot- og aktivitetsinnstillinger", - "botConfigNoPermissionTitle": "Ingen tillatelse", - "botConfigNoPermissionMessage": "Kontakt romadministrator for å endre bot-konfigurasjonen", - "addConversationBotDialogTitleInvite": "Bekreft invitasjon til samtalebot", - "addConversationBotButtonInvite": "Inviter", - "addConversationBotDialogInviteConfirmation": "Inviter", - "addConversationBotButtonTitleRemove": "Bekreft fjerning av samtalebot", - "addConversationBotButtonRemove": "Fjern", - "addConversationBotDialogRemoveConfirmation": "Fjern", - "conversationBotConfigConfirmChange": "Bekreft", - "conversationBotStatus": "Inviter bot", - "conversationBotTextAdventureZone_title": "Teksteventyr", - "conversationBotTextAdventureZone_instructionLabel": "Instruksjoner for Game Master", - "conversationBotTextAdventureZone_instructionPlaceholder": "Sett instruksjoner for game master", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Manglende instruksjoner for game master", - "studentAnalyticsNotAvailable": "Elevdata er for øyeblikket ikke tilgjengelig", - "roomDataMissing": "Noen data kan mangle fra rom du ikke er medlem av.", "updatePhoneOS": "Du kan trenge å oppdatere enhetens OS-versjon.", "wordsPerMinute": "Ord per minutt", "autoIGCToolName": "Kjør Pangea skrivehjelp automatisk", "autoIGCToolDescription": "Kjør automatisk Pangea Chat grammatikk- og oversettelsesstøtte før jeg sender meldingen min.", - "runGrammarCorrection": "Sjekk melding", - "grammarCorrectionFailed": "Problemer å løse", - "grammarCorrectionComplete": "Ser bra ut!", "tooltipInstructionsTitle": "Usikker på hva det gjør?", "tooltipInstructionsMobileBody": "Trykk og hold på elementer for å se verktøytips.", "tooltipInstructionsBrowserBody": "Hold musepekeren over elementer for å se verktøytips.", "chatCapacity": "Chatkapasitet", "roomFull": "Dette rommet er allerede fullt.", - "topicNotSet": "Emnet er ikke satt.", - "chatCapacityNotSet": "Denne chatten har ingen kapasitetbegrensning.", "chatCapacityHasBeenChanged": "Chattkapasiteten er endret", "chatCapacitySetTooLow": "Chattkapasiteten må være minst {count}.", "chatCapacityExplanation": "Chattkapasitet begrenser antall medlemmer som kan delta i en chat.", - "chatExceedsCapacity": "Denne chatten overskrider sin kapasitet.", "tooManyRequest": "For mange forespørsler, vennligst prøv igjen senere.", "enterNumber": "Vennligst skriv inn en heltallsverdi.", "buildTranslation": "Bygg oversettelsen din ut fra valgene ovenfor", - "nonexistentSelection": "Valget eksisterer ikke lenger.", - "changeAnalyticsLanguage": "Endre analysetale", "practice": "Øv", "noLanguagesSet": "Ingen språk satt", - "noActivitiesFound": "Det er nok for nå! Kom tilbake senere for mer.", - "hintTitle": "Tips:", "speechToTextBody": "For talebeskjeder kan du se en transkripsjon samt speakerens Words Per Minute-poengsum.", "versionNotFound": "Versjon ikke funnet", "fetchingVersion": "Henter versjon...", "versionFetchError": "Feil ved henting av versjon", "versionText": "Versjon: {version}+{buildNumber}", - "languageButtonLabel": "Språk: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatisk oversettelse", - "interactiveTranslatorAutoPlayDesc": "Starter den interaktive oversetteren uten å spørre.", - "changeAnalyticsView": "Endre analysevisning", "l1TranslationBody": "Meldinger på ditt grunnspråk vil ikke bli oversatt.", "deleteSubscriptionWarningTitle": "Du har et aktivt abonnement", "deleteSubscriptionWarningBody": "Sletting av kontoen din vil ikke automatisk kansellere abonnementet ditt.", @@ -3085,9 +2727,7 @@ "error520Title": "Vennligst prøv igjen.", "error520Desc": "Beklager, vi kunne ikke forstå meldingen din...", "wordsUsed": "Ord brukt", - "errorTypes": "Feiltyper", "level": "Nivå", - "canceledSend": "Avbrutt sending", "morphsUsed": "Morf brukt", "translationChoicesBody": "Klikk og hold et alternativ for en ledetråd.", "grammar": "Grammatikk", @@ -3097,7 +2737,6 @@ "reportContentIssueTitle": "Rapporter innholdsproblem", "feedback": "Valgfri tilbakemelding", "reportContentIssueDescription": "Oi! AI kan legge til rette for personlige læringsopplevelser, men... hallusinerer også. Vennligst gi oss tilbakemelding, så prøver vi igjen.", - "changeContent": "Oi! AI kan legge til rette for personlige læringsopplevelser, men... hallusinerer også. Hva skal det være?", "clickTheWordAgainToDeselect": "Klikk på det valgte ordet for å fjerne valget.", "l2SupportNa": "Ikke tilgjengelig", "l2SupportAlpha": "Alpha", @@ -3331,7 +2970,6 @@ "grammarCopySPC": "Spesifisitet", "grammarCopyPARTTYPE": "Partitiv Type", "grammarCopyINTREL": "Interrogativ-Relativ", - "grammarCopyNUMFORMpsor": "Eiers Tall", "grammarCopyUNKNOWN": "Ukjent", "grammarCopyNUMBERPSOR": "Eiers tall", "grammarCopyPOSS": "Besittende", @@ -3377,28 +3015,14 @@ "grammarCopyVOICEdir": "Direkte", "grammarCopyVOICEinv": "Invers", "grammarCopyVOICErcp": "Gjensidig", - "enterPrompt": "Vennligst skriv inn en systemoppfordring", - "selectBotLanguage": "Velg bot-språk", - "chooseVoice": "Velg en stemme", - "enterLanguageLevel": "Vennligst oppgi et språknivå", - "enterDiscussionTopic": "Vennligst oppgi et diskusjonstema", - "selectBotChatMode": "Velg chatmodus", - "messageNotInTargetLang": "Meldingen er ikke på målspråket", "other": "Annet", "levelShort": "NIVÅ {level}", - "botModeValidation": "Vennligst velg en chatmodus", "clickBestOption": "Velg de beste alternativene for å oversette meldingen din!", "completeActivitiesToUnlock": "Fullfør minst én aktivitet for å låse opp oversettelsen!", - "botSettingsSubtitle": "Inviter bot til å moderere chataktivitet", - "invitePeople": "Inviter brukere", "noCapacityLimit": "Ingen kapasitetbegrensning", "downloadGroupText": "Last ned gruppe tekst", "notificationsOn": "Varslinger på", "notificationsOff": "Varslinger av", - "chatCanBeFoundViaSearch": "Chat kan finnes via søk", - "requireCodeToJoin": "Krever kode for å bli med", - "canFindInSearch": "Kan finnes i søk", - "addChatToSpace": "Legg til chat", "createChatAndInviteUsers": "Opprett chat og inviter brukere", "updatedNewSpaceDescription": "Kurs lar deg konsolidere chattene dine og bygge private eller offentlige fellesskap.", "joinWithCode": "Bli med med kode", @@ -3434,39 +3058,19 @@ "constructUseCollected": "Innsamlet i chat", "constructUseNanDesc": "Ikke aktuelt", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Logg inn med brukernavn og passord", - "registrationEmailMessage": "Vennligst bekreft e-posten din med en lenke sendt dit. I noen tilfeller kan det ta opptil 5 minutter før e-posten ankommer. Sjekk også spam-mappen din.", "enableTTSToolName": "Aktivert tekst-til-tale", "enableTTSToolDescription": "Tillat appen å generere tekst-til-tale-uttak for deler av teksten på målspråket ditt.", - "couldNotFindTTS": "Vi kunne ikke finne en tekst-til-tale-motor for ditt nåværende målspråk.", - "ttsInstructionsHyperlink": "Klikk her for å se instruksjoner for å laste ned en ny stemme på enheten din.", - "createAnAccount": "Opprett en konto", - "signIn": "Logg inn", - "signUpWithEmail": "Registrer deg med e-post", - "signUpWithGoogle": "Registrer deg med Google", - "signUpWithApple": "Registrer deg med Apple", "yourUsername": "Ditt brukernavn", "yourEmail": "Din e-post", - "pleaseEnterAnEmail": "Vennligst skriv inn en e-postadresse", - "signInWithGoogle": "Logg inn med Google", - "signInWithApple": "Logg inn med Apple", - "chooseYourAvatar": "Velg din avatar", "iWantToLearn": "Jeg vil lære", - "letsStart": "La oss starte", - "pleaseAgreeToTOS": "Vennligst godkjenn vilkårene og betingelsene", "pleaseEnterEmail": "Vennligst skriv inn en gyldig e-postadresse.", - "pleaseSelectALanguage": "Vennligst velg et språk", "myBaseLanguage": "Mitt hovedspråk", - "clickWordsInstructions": "🧻 Klikk på et hvilket som helst ord for detaljer. 🤐", - "chooseBestDefinition": "Hva betyr dette ordet?", "meaningSectionHeader": "Betydning:", "formSectionHeader": "Former brukt i chatter:", - "noEmojiSelectedTooltip": "Ingen emoji valgt", "writingExercisesTooltip": "Skriving", "listeningExercisesTooltip": "Lytting", "readingExercisesTooltip": "Lesing", "meaningNotFound": "Betydning kunne ikke finnes.", - "formsNotFound": "Former kunne ikke finnes.", "chooseBaseForm": "Velg grunnformen", "notTheCodeError": "Beklager, det er ikke koden!", "totalXP": "Total XP", @@ -3506,9 +3110,6 @@ "pickAnEmoji": "Hva er din favorittemoji for '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Match betydninger med ordene i meldingen!", "doubleClickToEdit": "Dobbeltklikk for å redigere.", - "removeFeature": "Fjern {feature}", - "chooseCorrectLabel": "Velg riktig merkelapp.", - "levelPopupTitle": "Gratulerer med å ha nådd\nNivå {level}", "activityPlannerTitle": "Aktivitetsplanlegger", "topicLabel": "Tema", "topicPlaceholder": "Velg et tema...", @@ -3516,7 +3117,6 @@ "modePlaceholder": "Velg en modus...", "learningObjectiveLabel": "Læringsmål", "learningObjectivePlaceholder": "Velg et læringsmål...", - "mediaLabel": "Media elever bør dele", "languageOfInstructionsLabel": "Språk for aktivitetsinstruksjoner", "targetLanguageLabel": "Mål språk", "cefrLevelLabel": "CEFR-nivå", @@ -3531,20 +3131,15 @@ "instructions": "Instruksjoner", "numberOfLearners": "Antall elever", "mustBeInteger": "Må være et heltall, f.eks. 1, 2, 3, ...", - "noLemmasFound": "Det finnes ingen vokabular med mer enn {xp} XP. Fortsett å øve!", "constructUsePvmDesc": "Produsert i talemeldingsmodus", - "lockedMorphFeature": "Venter på å bli låst opp", "leaveSpaceDescription": "Ved å forlate kurset vil du forlate alle chattene innenfor det. Andre brukere vil se at du har forlatt kurset.", - "whatIsLemma": "Hva er lemmatet?", "constructUseCorMmDesc": "Korrekt meldingsbetydning", "constructUseIncMmDesc": "Feil meldingsbetydning", "constructUseIgnMmDesc": "Ignorert meldingsbetydning", "clickForMeaningActivity": "Klikk her for en meningsutfordring", "meaning": "Betydning", "chatWith": "Gruppe med {displayname}", - "slightlyOffensive": "Litt støtende", "clickOnEmailLink": "Vennligst klikk på lenken i e-posten og fortsett.\n\nSjekk spam-mappen hvis e-posten ikke har kommet frem.", - "whoIsAllowedToJoinThisChat": "Hvem har lov til å bli med i denne chatten", "dontForgetPassword": "Ikke glem passordet ditt!", "enableAutocorrectToolName": "Aktiver automatkorrigering på enheten", "enableAutocorrectDescription": "Hvis enheten din støtter språket du lærer, kan du aktivere automatkorrigering for å rette vanlige feil mens du skriver.", @@ -3572,48 +3167,26 @@ "autocorrectNotAvailable": "Dessverre er ikke plattformen din for tiden støttet for denne funksjonen. Følg med for videre utvikling!", "pleaseUpdateApp": "Vennligst oppdater appen for å fortsette.", "chooseEmojiInstructionsBody": "Match emojis med ordene de best representerer. Ikke bekymre deg! Ingen poeng fratrekk for uenighet. 😅", - "pickAnEmojiFor": "Velg en emoji for {lemma}", "analyticsVocabListBody": "Dette er all vokabularet ditt! Når du tjener XP for hvert ord, går de fra spire til full blomst. Klikk på hvilket som helst ord for å se mer detaljer.", "morphAnalyticsListBody": "Dette er alle grammatikkonseptene i språket du lærer! Du låser opp dem etter hvert som du møter dem mens du chatter. Klikk for detaljer.", "knockSpaceSuccess": "Du har bedt om å bli med i dette kurset! En administrator vil svare på forespørselen din når de mottar den 😀", - "joinByCode": "Bli med med kode", "chooseWordAudioInstructionsBody": "Lytt til hele meldingen. Deretter matcher du lydene med ordene.", "chooseMorphsInstructionsBody": "Klikk på puslespillbitene for grammatikkspørsmål!", - "inviteAndLaunch": "Inviter og start", - "createOwnChat": "Opprett din egen chat", "pleaseEnterInt": "Vennligst skriv inn et tall", "home": "Hjem", "join": "Bli med", "readingAssistanceOverviewBody": "Klikk på knappene nedenfor for minispill om å matche emojis, lyder, ords betydninger og grammatikkonsepter. Eller klikk på hvilket som helst ord for detaljer.", - "learnByTexting": "Lær ved å sende meldinger", - "levelSummaryTrigger": "Se sammendrag", "levelSummaryPopupTitle": "Sammendrag av nivå {level}", - "referFriends": "Anbefal venner", - "referFriendDialogTitle": "Inviter en venn til samtalen din", - "referFriendDialogDesc": "Har du en venn som er spent på å lære et nytt språk med deg? Kopier og send denne invitasjonslenken for å bli med og starte chatten med deg i dag.", - "youUnlocked": "Du har låst opp", "resetInstructionTooltipsTitle": "Tilbakestill instruksjonstips", "resetInstructionTooltipsDesc": "Klikk for å vise instruksjonstips som for en helt ny bruker.", "selectForGrammar": "Velg et grammatikkikon for aktiviteter og detaljer.", - "newChatActivityTitle": "Legg til en morsom aktivitet?", - "newChatActivityDesc": "Gjør hver gruppechat til et eventyr med Aktivitet Planlegger! Sett fengende temaer og mål for gruppen, og gjør samtalene levende med fantastiske bilder. Tennes fantasifulle diskusjoner og hold moroa i gang uten anstrengelse!", - "exploreMore": "Utforsk mer", "randomize": "Tilfeldiggjør", "clear": "Tøm", "makeYourOwnActivity": "Lag din egen aktivitet", "featuredActivities": "Utvalgte", - "goToChat": "Gå til chat", "save": "Lagre", - "selectActivity": "Velg aktivitet", - "wordFocusListeningMultipleChoice": "Hvilket lyd matcher ordet?", "startChat": "Start en chat", "translationProblem": "Oversettelsesproblem", - "perfectTranslation": "Perfekt oversettelse!", - "greatJobTranslation": "Flott jobb med denne oversettelsen!", - "goodJobTranslation": "Bra jobbet med denne oversettelsen.", - "makingProgress": "Du gjør fremskritt!", - "keepPracticing": "Fortsett å øve!", - "niceJob": "Bra jobbet!", "askToJoin": "Spør om å bli med", "emptyChatWarningTitle": "Chatten er tom", "emptyChatWarningDesc": "Du har ikke invitert noen til chatten din. Gå til Chat-innstillinger for å invitere kontaktene dine eller Bot. Du kan også gjøre dette senere.", @@ -3632,8 +3205,6 @@ "languageLevelC2Desc": "Jeg kan forstå nesten alt jeg hører eller leser og uttrykke meg flytende og presist.", "newVocab": "Nytt vokabular", "newGrammar": "Nye grammatikkonsepter", - "congratulationsOnReaching": "Du har nådd nivå {level}!", - "seeDetails": "Se detaljer", "choosePracticeMode": "Klikk på en av knappene ovenfor for å starte en øvelsesaktivitet", "ban": "Blokker", "unban": "Fjern blokkering", @@ -3647,8 +3218,6 @@ "timesUsedWithAssistance": "Antall ganger brukt med hjelp", "shareInviteCode": "Del invitasjonskode: {code}", "leaderboard": "Toppliste", - "welcomeUser": "Velkommen {user}", - "joinSpaceOnboardingDesc": "Har du en invitasjonskode eller lenke til et offentlig kurs?", "skipForNow": "Hopp over for nå", "permissions": "Tillatelser", "spaceChildPermission": "Hvem kan legge til nye chatter i dette kurset", @@ -3656,12 +3225,8 @@ "defaultOption": "Standard", "deleteChatDesc": "Er du sikker på at du vil slette denne samtalen? Den vil bli slettet for alle deltakere, og alle meldinger i samtalen vil ikke lenger være tilgjengelige for praksis eller læringsanalyse.", "deleteSpaceDesc": "Kurset og eventuelle valgte samtaler vil bli slettet for alle deltakere, og alle meldinger i samtalen vil ikke lenger være tilgjengelige for praksis eller læringsanalyse. Denne handlingen kan ikke angres.", - "chatWithActivities": "Chat med aktiviteter", "launch": "Start", - "launchActivityToChats": "Start aktivitet i samtaler", "searchChats": "Søk i samtaler", - "selectChats": "Velg samtaler", - "selectChatToStart": "Ferdig! Velg en samtale for å starte", "maxFifty": "Maks 50", "configureSpace": "Konfigurer kurs", "pinMessages": "Fest meldinger", @@ -3675,9 +3240,7 @@ "announcements": "Kunngjøringer", "activities": "Aktiviteter", "access": "Tilgang", - "botSettings": "Bot-innstillinger", "activitySuggestionTimeoutMessage": "Vi jobber hardt for å generere flere aktiviteter for deg, vennligst sjekk igjen om et minutt", - "accessSettingsWarning": "Oi! Det ser ut som du ikke har tillatelse til å sette tilgangsreglene for dette rommet. Du bør sjekke disse for å forsikre deg om at de er som du trenger, og snakke med en romadministrator hvis du må endre dem", "howSpaceCanBeFound": "Hvordan dette kurset kan finnes", "private": "Privat", "cannotBeFoundInSearch": "Kan ikke finnes i søk", @@ -3690,16 +3253,6 @@ "canBeFoundViaKnock": "• forespørsel om å bli med og administratorgodkjenning", "youHaveLeveledUp": "Du har nivå opp!", "sendActivities": "Send aktiviteter", - "getStarted": "Kom i gang", - "getStartedBotChatDesc": "Chat med AI er et flott sted å starte, og Pangea sine lese-, skrive-, lytte- og snakkeverktøy gjør det enkelt!", - "getStartedCommunitiesDesc": "Læring med et fellesskap er hvor Pangea Chat utmerker seg!\nDu kan bli med i klassen din, finne et kurs, eller til og med lage ditt eget!", - "getStartedFriendsDesc": "Har du en venn som vil lære sammen med deg?", - "getStartedBotChatComplete": "Bra jobbet! Du chatter med boten!", - "getStartedCommunitiesComplete": "Flott, du har blitt med i et kurs!", - "getStartedComplete": "Du har fullført denne delen!\nFortsett å utforske våre fantastiske funksjoner ved å chatte med venner!", - "getStartedFriendsComplete": "Woohoo! Du har venner! 😉", - "getStartedBotChatButton": "Begynn å chatte!", - "getStartedFriendsButton": "Chat med en venn", "groupChat": "Gruppchat", "directMessage": "Direktemelding", "newDirectMessage": "Ny direktemelding", @@ -3715,7 +3268,6 @@ "mySavedActivities": "Mine lagrede aktiviteter", "noSavedActivities": "Ingen lagrede aktiviteter", "saveActivity": "Lagre denne aktiviteten", - "yourSavedActivities": "Lagrede aktiviteter", "failedToPlayVideo": "Mislyktes i å spille av video", "done": "Ferdig", "inThisSpace": "I dette kurset", @@ -3754,37 +3306,27 @@ "maximumActivityParticipants": "Hver aktivitet kan ha maksimalt {count} deltaker(e).", "pending": "Venter", "inactive": "Inaktiv", - "unjoinedActivityMessage": "Ønsker du å delta? Velg en åpen rolle!\nEller heng med og se på showet!", - "fullActivityMessage": "Føl deg fri til å se på showet! Mens det ikke er noen åpne roller å delta i, kan du se chatten!", "confirmRole": "Bekreft rolle", "openRoleLabel": "ÅPEN", "joinedTheActivity": "👋 {username} ble med som {role}", "finishedTheActivity": "🎯 {username} avsluttet denne aktiviteten", - "endActivityTitle": "Jeg er ferdig", - "endActivityDesc": "Fullførte du målene?\nDette er din bekreftelse på at du går ut av chatten. Men ikke bekymre deg, moroa fortsetter i chatten! Heng med og nyt showet til alle klikker på 'Ferdig'.", "archiveToAnalytics": "Legg til i mine fullførte aktiviteter", "activitySummaryError": "Aktivitetsoppsummeringer er utilgjengelige", "requestSummaries": "Be om oppsummeringer", - "loadingActivitySummary": "Laster aktivitetsoppsummering...", "generatingNewActivities": "Du er den første brukeren av dette språkparet! Vennligst gi oss et minutt, vi forbereder aktiviteter spesielt for deg.", - "requestAccessTitle": "Ønsker du å be om tilgang til analysevisning?", + "requestAccessTitle": "Be om tilgang til analyser?", "requestAccessDesc": "Vil du be om tilgang til å se deltakeranalyser?\n\nHvis deltakerne godtar, vil administratorer av kurset kunne se deres:\n • total vokabular\n • totale grammatikkonsepter\n • fullførte aktivitetsøkter\n • de spesifikke grammatikkonseptene som er brukt, riktig og feil\n\nDe vil ikke kunne se deres:\n • meldinger i chatter utenfor kurset\n • vokabularlisten", "requestAccess": "Be om tilgang ({count})", "analyticsInactiveTitle": "Forespørsler til inaktive brukere kunne ikke sendes", "analyticsInactiveDesc": "Inaktive brukere som ikke har logget inn siden denne funksjonen ble introdusert, vil ikke se forespørselen din.\n\nForespørselsknappen vil vises når de kommer tilbake. Du kan sende forespørselen på nytt senere ved å klikke på Forespørselsknappen under navnet deres når den er tilgjengelig.", "accessRequestedTitle": "Forespørsel om tilgang til analyse", - "accessRequestedDesc": "Administratorene for «{space}» ber om å få se dine læringsanalyser.\n\nHvis du godtar, vil administratorene for dette kurset kunne se dine:\n • totale ordforråd\n • totale grammatikkonsepter\n • fullførte aktivitetsøkter\n • de spesifikke grammatikkonseptene som er brukt, riktig og feil\n\nDe vil ikke kunne se dine:\n • meldinger i chatter utenfor kurset\n • ordliste", - "allowAccess": "Tillat tilgang", - "denyAccess": "Nei, nekt tilgang", + "accessRequestedDesc": "Be om admin(er): {admin} \n\nAdministratorer fra “{space}” ber om å få se dine læringsanalyser.\n\nHvis du godtar, vil de kunne se din:\n • totale ordforråd\n • totale grammatikkonsepter\n • totale aktivitetssesjoner fullført\n • de spesifikke grammatikkonseptene brukt, korrekt og feil\n\nDe vil ikke kunne se din:\n • meldinger i chatter utenfor kurset\n • ordliste", "adminRequestedAccess": "Administratorer har bedt om å se dine analyser.", "lastUpdated": "Oppdatert\n{time}", "activityFinishedMessage": "Alt ferdig!", "endForAll": "Avslutt for alle", "newCourse": "Nytt kurs", - "newCourseSubtitle": "Hvilken kursplan vil du bruke?", - "failedToLoadCourses": "Kunne ikke laste kurs", "numModules": "{num} moduler", - "numActivityPlans": "{num} aktivitetsplaner", "coursePlan": "Kursplan", "editCourseLater": "Du kan redigere malens tittel, beskrivelser og kursbilde senere.", "newCourseAccess": "Som standard er kurs private og krever administratorgodkjenning for å bli med. Du kan endre disse innstillingene når som helst.", @@ -3798,17 +3340,11 @@ "accessDesc": "Du kan gjøre kurset ditt åpent for alle! Eller, gjør kurset ditt privat og sikkert.", "createGroupChatDesc": "Mens aktivitetsøkter starter og slutter, vil gruppechatter forbli åpne for rutinemessig kommunikasjon.", "deleteDesc": "Bare administratorer kan slette et kurs. Dette er en ødeleggende handling som fjerner alle brukere og sletter alle valgte chatter innen kurset. Vær forsiktig.", - "failedToLoadCourseInfo": "Kunne ikke laste inn kursinformasjon", "noCourseFound": "Åh, dette kurset trenger en plan!\n\nKursplaner er en sekvens av emner og samtaleaktiviteter.", "additionalParticipants": "+ {num} andre", - "activityNotFoundForCourse": "Denne aktiviteten ble ikke funnet i kurset", - "courseChats": "Kurschatter", - "myActivitySessions": "Mine aktivitetsøkter", "directMessages": "Direktemeldinger", "whatNow": "Hva nå?", "chooseNextActivity": "Velg din neste aktivitet!", - "seeInstructions": "Se instruksjoner", - "hideInstructions": "Skjul instruksjoner", "letsGo": "La oss dra", "chooseRole": "Velg en rolle!", "chooseRoleToParticipate": "Velg en rolle for å delta!", @@ -3818,23 +3354,15 @@ "inviteFriends": "Inviter venner", "waitNotDone": "Vent, jeg er ikke ferdig!", "waitingForOthersToFinish": "Venter på at de andre skal bli ferdige...", - "saveToCompletedActivities": "Lagre til fullførte aktiviteter", "generatingSummary": "Analyserer chat og genererer resultater", - "instructionsLanguage": "Instruksjonsspråk", "findCourse": "Finn et kurs", - "activityCompletedDesc": "Din fullførte aktivitet ble lagt til i analyser hvor du kan se gjennom og øve på språket du brukte.", "pingParticipantsNotification": "{user} ser etter brukere for å delta i aktivitetsøkten i {room}", "course": "Kurs", "courses": "Kurs", "courseName": "Kursnavn", "createNewCourse": "Nytt kurs", - "publicCourses": "Offentlige kurs", "goToCourse": "Gå til kurset: {course}", "activityComplete": "Denne aktiviteten er fullført. Oppsummeringen av aktiviteten skal være tilgjengelig nedenfor.", - "haventChattedMuch": "Det ser ut som du ikke har snakket så mye, prøv å bruke flere vokabularord! Hvis du føler at du har fullført målet ditt, kan du avslutte aktiviteten nedenfor.", - "haveChatted": "Det ser ut som du har snakket en stund! Hvis du føler at du har fullført målet ditt, avslutt for å fullføre aktiviteten, og vi vil generere en oppsummering i chatten!", - "userDoneAndWaiting": "{num1}/{num2} deltakere har fullført. Vent til alle er ferdige, så genererer vi en oppsummering i chatten! \n\nHvis du vil bli med i samtalen igjen, klikk på fortsett-knappen i chatten.", - "othersDoneAndWaiting": "{num1}/{num2} er ferdige. Har du fullført målet ditt?", "startNewSession": "Start ny økt", "joinOpenSession": "Bli med i åpen økt", "less": "mindre", @@ -3844,7 +3372,6 @@ "openToJoin": "Åpen for å bli med", "results": "Resultater", "activityDone": "Aktivitet fullført!", - "moreLabel": "mer", "promoCodeInfo": "Rabattkoder kan tastes inn på neste side", "editsComingSoon": "Muligheten til å redigere byer og aktiviteter kommer snart.", "editing": "Redigerer", @@ -3860,13 +3387,10 @@ "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", - "chooseLanguage": "Velg et språk.", + "chooseLanguage": "Velg et målspråk.", "planTrip": "Planlegg reisen din", "howAreYouTraveling": "Hvordan reiser du?", "unlockPrivateTrip": "Lås opp en privat reise", @@ -3879,25 +3403,20 @@ "courseCode": "Hva er den hemmelige passordet?", "courseCodeHint": "Reisekode eller lenke", "unlockMyTrip": "Lås opp min reise", - "anyLevel": "Alle nivåer", "signupOption": "Hvordan vil du registrere deg?", "withApple": "Med Apple", "withGoogle": "Med Google", "withEmail": "Med e-post", "createAccount": "Opprett konto", - "noCoursesFound": "Ingen kurs funnet", "loginWithEmail": "Logg inn med e-post", "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", - "allCefrLevels": "Alle CEFR-nivåer", "chatListTooltip": "Her finner du dine direktemeldinger! Klikk på en brukers avatar og «start samtale» for å sende en DM.", "directMessageBotTitle": "Direktemelding Pangea Bot", "feedbackTitle": "Tilbakemelding om aktivitet", - "feedbackDesc": "Hvordan kan aktiviteten forbedres? Hvis du kan gi noen detaljer, vil vi gjøre endringen!", "feedbackHint": "Din tilbakemelding", "feedbackButton": "Send tilbakemelding", "directMessageBotDesc": "Å snakke med mennesker er morsommere, men... AI er alltid klar!", @@ -6098,30 +5617,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6137,18 +5632,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6173,18 +5656,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6221,38 +5692,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6261,62 +5704,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6353,10 +5752,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6365,14 +5760,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6381,46 +5768,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6429,10 +5780,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6489,18 +5836,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6509,14 +5844,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6545,18 +5872,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6565,42 +5880,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6609,14 +5892,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6637,26 +5912,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6677,10 +5932,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6713,25 +5964,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6788,34 +6020,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6844,778 +6048,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8608,14 +7044,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8627,14 +7055,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8666,10 +7086,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8678,18 +7094,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8698,14 +7102,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8730,38 +7126,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8807,10 +7175,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8835,10 +7199,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8863,10 +7223,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8875,66 +7231,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8955,42 +7255,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9015,154 +7291,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9179,18 +7307,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9211,14 +7327,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9235,10 +7343,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9251,14 +7355,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9267,14 +7363,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9302,26 +7390,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9350,18 +7418,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9398,10 +7458,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10334,10 +8390,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10518,34 +8570,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10558,10 +8582,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10570,14 +8590,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10594,22 +8606,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10757,14 +8753,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10773,34 +8761,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10809,54 +8769,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10865,10 +8789,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10885,10 +8805,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11060,26 +8976,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11108,10 +9004,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11168,30 +9060,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11220,18 +9096,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11348,14 +9216,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11368,10 +9228,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11380,14 +9236,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11404,14 +9252,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11420,22 +9260,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11448,18 +9272,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11476,22 +9288,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11500,30 +9300,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11596,18 +9372,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11664,18 +9428,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11704,30 +9456,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11780,18 +9516,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11840,46 +9568,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11944,10 +9632,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12119,14 +9803,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12154,14 +9830,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12174,10 +9842,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12213,19 +9877,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12250,14 +9909,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12266,14 +9917,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12326,10 +9969,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12342,18 +9981,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12366,14 +9993,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12414,26 +10033,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12461,10 +10068,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12475,36 +10078,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12541,10 +10114,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12609,18 +10178,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12685,10 +10242,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12709,10 +10262,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12729,10 +10278,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12741,10 +10286,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12757,10 +10298,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12785,16 +10322,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Inviter venner til aktivitet", - "inviteFriendsToActivityCourse": "Inviter venner til aktivitet og kurs", "feedbackRespDesc": "Sjekk igjen i morgen for oppdateringer om aktiviteten.", "activityDropdownDesc": "Når du er ferdig med denne aktiviteten, klikk nedenfor", - "activityAnalyticsListBody": "Dette er dine fullførte aktiviteter! Etter å ha fullført aktiviteter, kan du se dem her.", "languageMismatchTitle": "Språkavvik", "languageMismatchDesc": "Mål språket ditt stemmer ikke overens med språket for denne aktiviteten. Vil du oppdatere målspråket?", "reportWordIssueTooltip": "Rapporter problem med ordinformasjon", "tokenInfoFeedbackDialogTitle": "Tilbakemelding om ordinformasjon", - "tokenInfoFeedbackDialogDesc": "AI gjør feil. Vennligst beskriv eventuelle problemer du har funnet med informasjonen ovenfor.", "noPublicCoursesFound": "Ingen offentlige kurs funnet. Vil du opprette et?", "noCourseTemplatesFound": "Vi kunne ikke finne noen kurs for ditt målspråk. Du kan chatte med Pangea Bot i mellomtiden, og komme tilbake senere for flere kurs.", "botActivityJoinFailMessage": "Pangea Bot tar litt tid å svare. Vennligst prøv igjen senere, eller inviter en venn.", @@ -12802,14 +10335,6 @@ "leaveDesc": "Forlat dette rommet og alle chatter i det", "selectAll": "Velg alle", "deselectAll": "Fjern valg av alle", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12818,10 +10343,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12838,10 +10359,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12875,7 +10392,6 @@ "newMessageInPangeaChat": "🗨️ Ny melding i Pangea Chat", "shareCourse": "Del kurs", "addCourse": "Legg til et kurs", - "joinCourseWithCode": "Bli med på kurs med kode", "joinPublicCourse": "Bli med på offentlig kurs", "vocabLevelsDesc": "Dette er hvor vokabularord vil komme når du har nivåert dem opp!", "highlightVocabTooltip": "Fremhev målordene nedenfor ved å sende dem eller øve med dem i chatten", @@ -12899,10 +10415,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12911,7 +10423,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Ingen direktemeldinger eller chatter funnet. Sørg for at søket ditt er stavet riktig.", + "activityAnalyticsTooltipBody": "Dette er dine lagrede aktiviteter for gjennomgang og øvelse.", + "numSavedActivities": "Antall lagrede aktiviteter", + "saveActivityTitle": "Lagre aktivitet", + "saveActivityDesc": "Bra jobba! Lagre denne aktiviteten for senere gjennomgang og øvelse", + "levelInfoTooltip": "Her kan du se alle poengene du har tjent og hvordan!", + "alreadyInCourseWithID": "Du er allerede i et kurs med denne planen. Vil du opprette et kurs med samme plan, eller gå til det eksisterende kurset?", + "goToExistingCourse": "Gå til eksisterende kurs", + "emojiView": "Emoji-visning", + "feedbackDialogDesc": "Jeg gjør også feil! Noe for å hjelpe meg å bli bedre?", + "contactHasBeenInvitedToTheCourse": "Kontakt har blitt invitert til kurset", + "activityStatsButtonTooltip": "Aktivitetsinfo", + "allow": "Tillat", + "deny": "Avvis", + "enabledRenewal": "Aktiver abonnementfornyelse", + "subscriptionEndsOn": "Abonnementet slutter den", + "subscriptionRenewsOn": "Abonnementet fornyes den", + "waitForSubscriptionChanges": "Endringer i abonnementet ditt kan ta et øyeblikk å gjenspeile i appen.", + "subscribeReadingAssistance": "Abonner for å låse opp meldingsverktøy", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharisk", + "arDisplayName": "Arabisk", + "asDisplayName": "Assamesisk", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Aserbajdsjansk", + "baDisplayName": "Bashkir", + "banDisplayName": "Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Hviterussisk", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgarsk", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (India)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnisk", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalansk", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Sentral-kurdisk", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsikansk", + "crhDisplayName": "Krimtyrkisk", + "crsDisplayName": "Seselwa kreolsk fransk", + "csDisplayName": "Tsjekkisk", + "cvDisplayName": "Tsjuvasj", + "cyDisplayName": "Walisisk", + "daDisplayName": "Dansk", + "deDisplayName": "Tysk", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Engelsk", + "enAUDisplayName": "Engelsk (Australia)", + "enGBDisplayName": "Engelsk (Storbritannia)", + "enINDisplayName": "Engelsk (India)", + "enUSDisplayName": "Engelsk (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spansk", + "esESDisplayName": "Spansk (Spania)", + "esMXDisplayName": "Spansk (Mexico)", + "euDisplayName": "Baskisk", + "faDisplayName": "Persisk", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finsk", + "filDisplayName": "Filippinsk", + "fjDisplayName": "Fijiansk", + "foDisplayName": "Færøysk", + "frDisplayName": "Fransk", + "frCADisplayName": "Fransk (Canada)", + "frFRDisplayName": "Fransk (Frankrike)", + "fyDisplayName": "Vestfrisisk", + "gaDisplayName": "Irsk", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skotsk gælisk", + "glDisplayName": "Galisisk", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiiansk", + "heDisplayName": "Hebraisk", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatisk", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitiansk kreol", + "huDisplayName": "Ungarsk", + "hyDisplayName": "Armensk", + "idDisplayName": "Indonesisk", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandsk", + "itDisplayName": "Italiensk", + "jaDisplayName": "Japansk", + "jvDisplayName": "Javanesisk", + "kaDisplayName": "Georgisk", + "kkDisplayName": "Kasakhisk", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreansk", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Den demokratiske republikken Kongo)", + "kuDisplayName": "Kurdisk", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgsk", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgsk", + "lijDisplayName": "Ligurisk", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litauisk", + "ltgDisplayName": "Latgalisk", + "luoDisplayName": "Luo (Kenya og Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvisk", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonsk", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolsk", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (arabisk)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltisk", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmesisk", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norsk (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Nederlandsk", + "nlBEDisplayName": "Flamsk", + "noDisplayName": "Norsk", + "nrDisplayName": "Sørafrikansk Ndebele", + "nsoDisplayName": "Nord-Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polsk", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugisisk", + "ptBRDisplayName": "Portugisisk (Brasil)", + "ptPTDisplayName": "Portugisisk (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumensk", + "roMDDisplayName": "Moldovisk", + "romDisplayName": "Romani", + "ruDisplayName": "Russisk", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliansk", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovakisk", + "slDisplayName": "Slovensk", + "smDisplayName": "Samoansk", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albansk", + "srDisplayName": "Serbisk", + "srMEDisplayName": "Montenegrinsk", + "ssDisplayName": "Swati", + "stDisplayName": "Sørafrikansk Sotho", + "suDisplayName": "Sundanesisk", + "svDisplayName": "Svensk", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesisk", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadsjikisk", + "thDisplayName": "Thai", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Turkmensk", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Tyrkisk", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uigursk", + "ukDisplayName": "Ukrainsk", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Usbekisk", + "viDisplayName": "Vietnamesisk", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddisch", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonesisk", + "yueCNDisplayName": "Kantonesisk (Kina)", + "yueHKDisplayName": "Kantonesisk (Hong Kong)", + "zhDisplayName": "Kinesisk", + "zhCNDisplayName": "Kinesisk (Forenklet)", + "zhTWDisplayName": "Kinesisk (Tradisjonell)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12978,6 +11676,7 @@ "notStartedActivitiesTitle": "Åpne økter ({num})", "inProgressActivitiesTitle": "Pågår nå ({num})", "completedActivitiesTitle": "Ferdig ({num})", + "pickDifferentActivity": "Velg en annen aktivitet", "inOngoingActivity": "Du har en pågående aktivitet!", "@notStartedActivitiesTitle": { "type": "String", @@ -13003,10 +11702,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Mål språket ditt samsvarer ikke med denne meldingen. Vil du oppdatere målspråket ditt?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Dette er alle i dette kurset. Klikk på hvilken som helst brukers avatar og \"start samtale\" for å sende en DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Dette ordet vil bli permanent fjernet fra analysene dine", + "woman": "Kvinne", + "man": "Mann", + "otherGender": "Annet", + "unselectedGender": "Velg et kjønnsalternativ", + "gender": "Kjønn", + "chatParticipantTooltip": "Dette er alle i denne chatten. Klikk på hvilken som helst brukers avatar og \"start samtale\" for å sende en DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Læringsverktøy er deaktivert for meldinger som ikke er på målspråket ditt.", + "vocabEmoji": "Vokabular emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Be om regenerering", + "optionalRegenerateReason": "(Valgfritt) Årsak", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Du har satt emoji for {lemma}! Vi vil bruke denne emojien for å representere ordet i praksisaktiviteter fremover.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Venter på at påloggingen skal fullføres", + "ssoDialogDesc": "Vi åpnet en ny fane slik at du kan logge inn sikkert.", + "ssoDialogHelpText": "🤔 Hvis du ikke så den nye fanen, vennligst sjekk popup-blokkeringen din.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Deaktiver språkværktøy", + "disableLanguageToolsDesc": "Ønsker du å deaktivere automatisk språkassistanse?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Tillatelse nektet. Aktiver opptakstillatelser for å ta opp lydmeldinger.", + "genericWebRecordingError": "Noe gikk galt. Vi anbefaler å bruke Chrome-nettleseren når du tar opp meldinger.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "For den beste opplevelsen med denne applikasjonen, vennligst utvid skjermstørrelsen din.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktiviteter for å låse opp neste emne", "activitiesToUnlockTopicDesc": "Sett antall aktiviteter for å låse opp neste kurs emne", "@activitiesToUnlockTopicTitle": { @@ -13016,5 +11833,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Korrekt orddefinisjonspraksis", + "constructUseIncLMDesc": "Feil orddefinisjonspraksis", + "constructUseCorLADesc": "Korrekt ordlyttpraksis", + "constructUseIncLADesc": "Feil ordlyttpraksis", + "constructUseBonus": "Bonus under ordpraksis", + "practiceVocab": "Øv på ordforråd", + "selectMeaning": "Velg betydningen", + "selectAudio": "Velg den matchende lyden", + "congratulations": "Gratulerer!", + "anotherRound": "En runde til", + "noActivityRequest": "Ingen nåværende aktivitetsforespørsel.", + "quit": "Avslutt", + "congratulationsYouveCompletedPractice": "Gratulerer! Du har fullført økt med øvelser.", + "mustHave10Words": "Du må ha minst 10 ordforråd for å øve på dem. Prøv å snakke med en venn eller Pangea Bot for å oppdage mer!", + "botSettings": "Bot-innstillinger", + "activitySettingsOverrideWarning": "Språk og språknivå bestemt av aktivitetsplan", + "voice": "Stemme", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 1ce44e6cf..e55bad11f 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:20.252502", + "@@last_modified": "2026-01-07 14:27:48.189369", "about": "Over ons", "@about": { "type": "String", @@ -3377,26 +3377,14 @@ "commandHint_logoutall": "Log uit van alle actieve apparaten", "displayNavigationRail": "Toon navigatiebalk op mobiel", "customReaction": "Aangepaste reactie", - "accountInformation": "Accountinformatie", - "addGroupDescription": "Voeg een chatbeschrijving toe", - "addNewFriend": "Voeg nieuwe vriend toe", - "alreadyHaveAnAccount": "Heb je al een account?", - "createNewGroup": "Maak een nieuwe chat", - "editChatPermissions": "Bewerk chatmachtigingen", "writeAMessageLangCodes": "Typ in {l1} of {l2}...", "requests": "Verzoeken", - "allCorrect": "Zo zou ik het zeggen! Leuk!", - "newWayAllGood": "Zo zou ik het niet gezegd hebben, maar het ziet er goed uit!", - "othersAreBetter": "Hm, er is misschien een betere manier om dat te zeggen.", "holdForInfo": "Klik en houd vast voor woordinformatie.", "greenFeedback": "Dat zou ik erin zetten!", "yellowFeedback": "Hm, je kunt dat proberen en kijken of het werkt! Om dit woord te gebruiken, klik er gewoon nog een keer op.", "redFeedback": "Ik denk niet dat dat klopt...", "itInstructionsTitle": "Ik kan je helpen met vertalen!", "itInstructionsBody": "U kunt keuzes vastpakken en vasthouden voor woordinformatie.", - "oneday": "Afgelopen 24 uur", - "oneweek": "Afgelopen 7 dagen", - "onemonth": "Afgelopen maand", "gaTooltip": "L2 gebruik met grammatica hulp", "taTooltip": "L2 gebruik met vertaalhulp", "unTooltip": "Overige", @@ -3406,58 +3394,27 @@ "interactiveTranslatorAllowed": "Keuze van de student", "interactiveTranslatorRequired": "Vereist", "notYetSet": "Nog niet ingesteld", - "myLearning": "Mijn Analytics", "waTooltip": "L2 gebruik zonder hulp", - "changeDateRange": "Wijzig datumbereik", - "classDescription": "Omschrijving", - "addStudents": "Nodig gebruikers uit via link of code", - "copyClassLink": "Kopieer uitnodigingslink", - "copyClassCode": "Kopieer uitnodigingscode", - "inviteStudentByUserName": "Nodig gebruikers uit op gebruikersnaam", "languageSettings": "Taalinstellingen", "interactiveTranslator": "Vertaalhulp", - "shareVideo": "Deel Video", - "shareVideoDesc": "Schakel dit in om studenten toe te staan video's te delen in chats.", - "shareFiles": "Deel Bestanden", - "selectLanguageLevel": "Selecteer taalniveau", "noIdenticalLanguages": "Kies alstublieft verschillende basis- en doeltalen", - "iWantALanguagePartnerFrom": "Is afkomstig van:", - "worldWide": "Wereldwijd", - "noResults": "Geen resultaten! Probeer je zoekopdracht te verbreden.", "searchBy": "Zoeken op land en talen", - "iWantAConversationPartner": "Ik wil een gesprekspartner die", - "iWantALanguagePartnerWhoSpeaks": "Spreekt:", - "iWantALanguagePartnerWhoIsLearning": "Leren:", "joinWithClassCode": "Deelname via cursuscode", - "joinWithClassCodeHint": "Voer uitnodigingscode in", - "languageLevelPreA1": "Echte Beginner (Pre A1)", - "languageLevelA1": "Beginner (A1)", - "languageLevelA2": "Elementair (A2)", - "languageLevelB1": "Intermediate (B1)", - "languageLevelB2": "Upper Intermediate (B2)", - "languageLevelC1": "Gevorderd (C1)", - "languageLevelC2": "Meesterschap (C2)", + "languageLevelPreA1": "Novice Laag (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Beginners Hoog (A2)", + "languageLevelB1": "Gemiddeld Midden (B1)", + "languageLevelB2": "Geavanceerd Laag (B2)", + "languageLevelC1": "Geavanceerd Midden (C1)", + "languageLevelC2": "Superieur (C2)", "changeTheNameOfTheClass": "Verander de naam", "changeTheNameOfTheChat": "Verander de naam van de chat", - "askPangeaBot": "Vraag Pangea Bot om een contextuele definitie.", "sorryNoResults": "Sorry, geen resultaten.", "ignoreInThisText": "Negeer", - "helpMeTranslate": "Ja!", - "needsItShortMessage": "Buiten doel", "needsItMessage": "Wacht, dat is niet {targetLanguage}! Heb je hulp nodig bij vertalen?", - "needsIgcMessage": "Dit bericht bevat een grammaticafout.", - "tokenTranslationTitle": "Een woord staat in je basistaal.", - "spanTranslationDesc": "Zie mogelijke vertalingen hieronder.", - "spanTranslationTitle": "Sommige woorden staan in je basistaal.", - "l1SpanAndGrammarTitle": "Buiten doeltaal", - "l1SpanAndGrammarDesc": "Dit kan in je basistaal zijn of het kan een grammaticafout zijn.", - "otherTitle": "Je hebt een fout.", - "otherDesc": "Zie mogelijke correcties hieronder.", "countryInformation": "Mijn land", - "myLanguages": "Mijn basis- en doeltalen", "targetLanguage": "Doeltaal", "sourceLanguage": "Brontaal", - "languagesISpeak": "Talen die ik spreek", "updateLanguage": "Mijn talen", "whatLanguageYouWantToLearn": "Welke taal wil je leren?", "whatIsYourBaseLanguage": "Wat is jouw brontaal?", @@ -3472,13 +3429,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klik hier om vertaalhulp en grammatica hulp-instellingen bij te werken", "errorDisableITClassDesc": "Vertaalhulp is uitgeschakeld voor de cursus waarin deze chat zich bevindt.", "errorDisableIGCClassDesc": "Grammatica hulp is uitgeschakeld voor de cursus waarin deze chat zich bevindt.", - "itIsDisabled": "Interactieve Vertaling is uitgeschakeld", - "igcIsDisabled": "Interactieve grammatica-controle is uitgeschakeld", - "goToLearningSettings": "Ga naar Leerinstellingen", "error405Title": "Talen niet ingesteld", "error405Desc": "Stel uw talen in in Hoofdmenu > Leerinstellingen.", - "loginOrSignup": "Inloggen met", - "iAgreeToThe": "Ik ga akkoord met de ", "termsAndConditions": "Algemene voorwaarden", "andCertifyIAmAtLeast13YearsOfAge": " en verklaar dat ik minstens 16 jaar oud ben.", "error502504Title": "Wow, er zijn veel studenten online!", @@ -3486,40 +3438,21 @@ "error404Title": "Vertaalfout!", "error404Desc": "Pangea Bot weet niet zeker hoe dit te vertalen...", "errorPleaseRefresh": "We zijn het aan het onderzoeken! Verversen en probeer het opnieuw.", - "toggleIT": "Interactieve Vertaling", - "toggleIGC": "Interactieve grammatica-controle", - "toggleToolSettingsDescription": "Hier kunt u uw individuele taalhulpmiddeleninstellingen aanpassen.", "connectedToStaging": "Verbonden met Staging", "learningSettings": "Leerinstellingen", - "sendVoiceNotes": "Stuur Voice Notes", - "sendVoiceNotesDesc": "Schakel dit in om studenten toe te staan voice notes te sturen in chats.", - "chatTopic": "Chatonderwerp", - "chatTopicDesc": "Stel een chatonderwerp in", - "inviteStudentByUserNameDesc": "Als je student al een account heeft, kun je naar hen zoeken.", "participants": "Deelnemers", - "almostPerfect": "Dat lijkt goed! Dit is wat ik zou hebben gezegd.", - "prettyGood": "Best goed! Dit is wat ik zou hebben gezegd.", - "letMeThink": "Hmm, laten we kijken hoe je het hebt gedaan!", "clickMessageTitle": "Hulp nodig?", "clickMessageBody": "Klik op een bericht voor taalhulpmiddelen zoals vertaling, afspelen en meer!", - "understandingMessagesTitle": "Definities en vertalingen!", - "understandingMessagesBody": "Klik op onderstreepte woorden voor definities. Vertaal met berichtopties (rechtsboven).", "allDone": "Alles gedaan!", "vocab": "Woordenschat", "low": "We hebben bewijs dat de gebruiker deze woorden niet begrijpt.", "medium": "Deze woorden zijn gebruikt. Het is onduidelijk of de woorden volledig worden begrepen of niet.", "high": "We hebben bewijs dat de gebruiker deze woorden begrijpt.", - "unknownProficiency": "Deze woorden zijn niet gebruikt in Pangea Chat.", - "changeView": "Schakel weergaven om.", - "clearAll": "Alle woorden wissen?", - "generateVocabulary": "Genereer vocabulaire uit titel en beschrijving", - "generatePrompts": "Genereer prompts", "subscribe": "Abonneren", "getAccess": "Abonneer nu!", "subscriptionDesc": "Berichten is gratis! Abonneer om interactieve vertalingen, grammatica-controle en leeranalyses te ontgrendelen.", "subscriptionManagement": "Abonnementsbeheer", "currentSubscription": "Huidig abonnement", - "changeSubscription": "Wijzig je abonnement", "cancelSubscription": "Annuleer je abonnement", "selectYourPlan": "Selecteer je plan", "subsciptionPlatformTooltip": "Log in op je originele apparaat om je abonnementsplan te beheren", @@ -3528,9 +3461,6 @@ "paymentHistory": "Betalingsgeschiedenis", "emptyChatDownloadWarning": "Kan lege chat niet downloaden", "update": "Bijwerken", - "updateDesc": "Je kunt deze app nu bijwerken van {localVersion} naar {storeVersion}", - "maybeLater": "Misschien later", - "mainMenu": "Hoofdmenu", "toggleImmersionMode": "Onderdompelingsmodus", "toggleImmersionModeDesc": "Wanneer ingeschakeld, worden alle berichten weergegeven in je doeltaal. Deze instelling is het nuttigst bij taaluitwisselingen.", "itToggleDescription": "Deze taalleerhulpmiddel identificeert woorden in je basis taal en helpt je ze naar je doeltaal te vertalen. Hoewel zeldzaam, kan de AI vertaalfouten maken.", @@ -3545,212 +3475,13 @@ "definitionsToolDescription": "Wanneer ingeschakeld, kunnen woorden onderstreept in blauw worden aangeklikt voor definities. Klik op berichten om definities te openen.", "translationsToolDescrption": "Wanneer ingeschakeld, klik op een bericht en op het vertaalpictogram om een bericht in je basis taal te zien.", "welcomeBack": "Welkom terug! Als je deel uitmaakte van de pilot 2023-2024, neem dan contact met ons op voor je speciale pilotabonnement. Als je een leraar bent die (of wiens instelling) licenties voor je klas heeft gekocht, neem dan contact met ons op voor je lerarenabonnement.", - "kickAllStudents": "Alle studenten verwijderen", - "kickAllStudentsConfirmation": "Weet je zeker dat je alle studenten wilt verwijderen?", - "inviteAllStudents": "Alle studenten uitnodigen", - "inviteAllStudentsConfirmation": "Weet je zeker dat je alle studenten wilt uitnodigen?", - "inviteUsersFromPangea": "Beheerders toevoegen", - "redeemPromoCode": "Promocode inwisselen", - "enterPromoCode": "Voer promocode in", "downloadTxtFile": "Download tekstbestand", "downloadCSVFile": "Download CSV-bestand", "promotionalSubscriptionDesc": "U hebt momenteel een levenslange promotie-abonnement. Stuur een bericht naar support@pangea.chat voor hulp bij het wijzigen van uw abonnement.", "originalSubscriptionPlatform": "Abonnement gekocht via {purchasePlatform}", "oneWeekTrial": "Proefweek", "downloadXLSXFile": "Download Excel-bestand", - "abDisplayName": "Abchazisch", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanees", - "amDisplayName": "Amhaars", - "arDisplayName": "Arabisch", - "anDisplayName": "Aragonees", - "hyDisplayName": "Armeens", - "asDisplayName": "Assamees", - "avDisplayName": "Avarisch", - "aeDisplayName": "Avestisch", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbeidzjaans", - "bmDisplayName": "Bambara", - "baDisplayName": "Basjkier", - "euDisplayName": "Baskisch", - "beDisplayName": "Wit-Russisch", - "bnDisplayName": "Bengalees", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosnisch", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgaars", - "myDisplayName": "Birmaans", - "caDisplayName": "Catalaans, Valenciaans", - "chDisplayName": "Chamorru", - "ceDisplayName": "Tsjetsjeens", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinees", - "cvDisplayName": "Tsjoevasj", - "kwDisplayName": "Kornisch", - "coDisplayName": "Corsicaans", - "crDisplayName": "Cree", - "hrDisplayName": "Kroatisch", - "csDisplayName": "Tsjechisch", - "daDisplayName": "Deens", - "dvDisplayName": "Divehi; Dhivehi; Maldivisch;", - "nlDisplayName": "Nederlands", - "enDisplayName": "Engels", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estisch", - "eeDisplayName": "Ewe", - "foDisplayName": "Faeröers", - "fjDisplayName": "Fiji", - "fiDisplayName": "Fins", - "frDisplayName": "Frans", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicisch", - "kaDisplayName": "Georgisch", - "deDisplayName": "Duits", - "elDisplayName": "Modern Grieks", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haïtiaans, Haïtiaanse Creools", - "haDisplayName": "Hausa", - "heDisplayName": "Hebreeuws (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Hongaars", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesisch", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Iers", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "IJslands", - "itDisplayName": "Italiaans", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japans", - "jvDisplayName": "Javaans", - "klDisplayName": "Kalaallisut, Groenlands", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kasjmiri", - "kkDisplayName": "Kazachs", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizisch, Kirgisië", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreaans", - "kuDisplayName": "Koerdisch", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latijn", - "lbDisplayName": "Luxemburgs, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgs, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laotiaans", - "ltDisplayName": "Litouws", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Lets", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedonisch", - "mgDisplayName": "Malagassisch", - "msDisplayName": "Maleis", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltees", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallees", - "mnDisplayName": "Mongools", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Noors Bokmål", - "ndDisplayName": "Noord-Ndebele", - "neDisplayName": "Nepalees", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Noors Nynorsk", - "noDisplayName": "Noors", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Zuid-Ndebele", - "ocDisplayName": "Occitaans", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Oudkerk-Slavisch, Kerk-Slavisch, Kerk-Slavisch, Oud-Bulgaarse, Oud-Slavisch", - "omDisplayName": "Oromo", - "orDisplayName": "Odia", - "osDisplayName": "Osetisch, Osetisch", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Perzisch", - "plDisplayName": "Pools", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugees", - "quDisplayName": "Quechua", - "rmDisplayName": "Reto-Romaans", - "rnDisplayName": "Kirundi", - "roDisplayName": "Roemeens, Moldavisch, Moldovaans", - "ruDisplayName": "Russisch", - "saDisplayName": "Sanskriet (Saṃskṛta)", - "scDisplayName": "Sardisch", - "sdDisplayName": "Sindhi", - "seDisplayName": "Noord-Samisch", - "smDisplayName": "Samoaans", - "sgDisplayName": "Sango", - "srDisplayName": "Servisch", - "gdDisplayName": "Schots-Gaelisch, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Singalees", - "skDisplayName": "Slowaaks", - "slDisplayName": "Sloveens", - "soDisplayName": "Somalisch", - "stDisplayName": "Zuid-Sotho", - "esDisplayName": "Spaans", - "suDisplayName": "Soendanees", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Zweeds", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadzjikisch", - "thDisplayName": "Thais", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetaanse Standaard, Tibetaans, Centraal", - "tkDisplayName": "Turkmeens", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga-eilanden)", - "trDisplayName": "Turks", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tataars", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiaans", - "ugDisplayName": "Oeigoers, Uyghur", - "ukDisplayName": "Oekraïens", - "urDisplayName": "Urdu", - "uzDisplayName": "Oezbeeks", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamees", - "voDisplayName": "Volapük", - "waDisplayName": "Waals", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "West-Fries", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Onbekend", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaïaans", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Meerdere", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebreeuws", - "jwDisplayName": "Javaans", - "moDisplayName": "Moldavisch", - "shDisplayName": "Servisch-Croatisch", "wwCountryDisplayName": "Wereldwijd", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Ålandeilanden", @@ -3998,41 +3729,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Betalen", - "allPrivateChats": "Directe gesprekken", - "unknownPrivateChat": "Onbekend privégesprek", + "pay": "Afrekenen", "invitedToSpace": "{user} heeft je uitgenodigd om deel te nemen aan een cursus: {space}! Wil je accepteren?", - "declinedInvitation": "Uitnodiging geweigerd", - "acceptedInvitation": "Uitnodiging geaccepteerd", "youreInvited": "📩 Je bent uitgenodigd!", "invitedToChat": "{user} heeft je uitgenodigd om deel te nemen aan een chat: {name}! Wil je accepteren?", "monthlySubscription": "Maandelijks", "yearlySubscription": "Jaarlijks", "defaultSubscription": "Pangea Chat Abonnement", "freeTrial": "Gratis proefperiode", - "grammarAnalytics": "Foutenanalyse", "total": "Totaal: ", "noDataFound": "Geen gegevens gevonden", - "promoSubscriptionExpirationDesc": "Uw huidige abonnement is promotioneel en verloopt op {expiration}. Neem contact op met support@pangea.chat voor hulp bij het wijzigen van uw abonnement.", - "emptyChatNameWarning": "Voer een naam in voor deze chat", "blurMeansTranslateTitle": "Waarom is het bericht wazig?", "blurMeansTranslateBody": "Wanneer de Immersiemodus is ingeschakeld, worden berichten die in uw basistaal worden verzonden wazig weergegeven terwijl Pangea Bot ze vertaalt naar uw doeltaal. Immersiemodus kan worden in- en uitgeschakeld in individuele en cursusinstellingen.", - "someErrorTitle": "Hm, er klopt iets niet", - "someErrorBody": "Het kan een fout zijn of iets in uw basistaal.", "bestCorrectionFeedback": "Dat klopt!", "distractorFeedback": "Dat is niet helemaal correct.", "bestAnswerFeedback": "Dat klopt!", "definitionDefaultPrompt": "Wat betekent dit woord?", "practiceDefaultPrompt": "Wat is het beste antwoord?", "correctionDefaultPrompt": "Wat is de beste vervanging?", - "itStartDefaultPrompt": "Wil je hulp bij vertalen?", - "lockedChatWarning": "🔒 Deze chat is vergrendeld", - "lockChat": "Chat Vergrendelen", - "suggestToChat": "Stel deze chat voor", - "suggestToChatDesc": "Voorgestelde chats verschijnen in chatlijsten", "acceptSelection": "Correctie Accepteren", - "acceptSelectionAnyway": "Toch gebruiken", - "makingActivity": "Activiteit maken", "why": "Waarom?", "definition": "Definitie", "exampleSentence": "Voorbeeldzin", @@ -4040,128 +3755,55 @@ "reportMessageTitle": "{reportingUserId} heeft een bericht gerapporteerd van {reportedUserId} in de chat {roomName}", "reportMessageBody": "Bericht: {reportedMessage}\nReden: {reason}", "noTeachersFound": "Geen leraren gevonden om te rapporteren", - "viewArchive": "Archief bekijken", "trialExpiration": "Uw gratis proefperiode verloopt op {expiration}", "freeTrialDesc": "Nieuwe gebruikers krijgen een gratis proefperiode van één week voor Pangea Chat", "activateTrial": "Gratis proefperiode van 7 dagen", "successfullySubscribed": "U bent succesvol geabonneerd!", "clickToManageSubscription": "Klik hier om uw abonnement te beheren.", - "errorGettingAudio": "Fout bij het verkrijgen van audio. Vernieuw de pagina en probeer het opnieuw.", "signUp": "Aanmelden", "pleaseChooseAtLeastChars": "Kies alstublieft minimaal {min} tekens.", "noEmailWarning": "Voer een geldig e-mailadres in. Anders kunt u uw wachtwoord niet resetten. Als u dat niet wilt, tik dan opnieuw op de knop om door te gaan.", "pleaseEnterValidEmail": "Voer een geldig e-mailadres in.", "pleaseChooseAUsername": "Kies een gebruikersnaam", - "chooseAUsername": "Kies een gebruikersnaam", "define": "Definieer", "listen": "Luister", - "addConversationBot": "Schakel Gespreksbot in", - "addConversationBotDesc": "Voeg een bot toe aan deze chat", - "convoBotSettingsDescription": "Bewerk gespreksonderwerp en moeilijkheidsgraad", - "enterAConversationTopic": "Voer een gespreksonderwerp in", - "conversationTopic": "Gespreksonderwerp", - "enableModeration": "Schakel moderatie in", - "enableModerationDesc": "Schakel automatische moderatie in om berichten te beoordelen voordat ze worden verzonden", - "conversationLanguageLevel": "Wat is het taalniveau van dit gesprek?", - "showDefinition": "Toon Definitie", - "subscriptionPopupTitle": "Deze zin kan een grammaticafout bevatten...", - "subscriptionPopupDesc": "Abonneer je vandaag nog om vertalingen en grammaticacorrecties te ontgrendelen!", - "seeOptions": "Bekijk opties", - "continuedWithoutSubscription": "Doorgaan zonder abonnement", "trialPeriodExpired": "Je proefperiode is verlopen", - "selectToDefine": "Klik op een woord om de definitie te zien!", "translations": "vertalingen", "messageAudio": "bericht audio", "definitions": "definities", "subscribedToUnlockTools": "Abonneer je om interactieve vertalingen en grammatica-controle, audioweergave, gepersonaliseerde oefenactiviteiten en leeranalyses te ontgrendelen!", "translationTooltip": "Vertalen", - "audioTooltip": "Speel audio af", "speechToTextTooltip": "Transcript", - "certifyAge": "Ik certificeer dat ik ouder ben dan {age} jaar", "kickBotWarning": "Het verwijderen van de Pangea Bot verwijdert de gesprekbot uit deze chat.", - "joinToView": "Doe mee aan deze kamer om details te bekijken", "refresh": "Verversen", - "autoPlayTitle": "Automatisch afspelen van berichten", - "autoPlayDesc": "Wanneer ingeschakeld, wordt de tekst-naar-spraak audio van berichten automatisch afgespeeld wanneer geselecteerd.", "messageAnalytics": "Berichtanalyse", "words": "Woorden", "score": "Score", "accuracy": "Nauwkeurigheid", "points": "Punten", "noPaymentInfo": "Geen betalingsinformatie nodig!", - "conversationBotModeSelectDescription": "Chatactiviteit", - "conversationBotModeSelectOption_discussion": "Discussie", - "conversationBotModeSelectOption_custom": "Aangepast", - "conversationBotModeSelectOption_conversation": "Gesprek", - "conversationBotModeSelectOption_textAdventure": "Tekstavontuur", - "conversationBotModeSelectOption_storyGame": "Verhaalspel", - "conversationBotDiscussionZone_title": "Discussie-instellingen", - "conversationBotDiscussionZone_discussionTopicLabel": "Discussieonderwerp", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Stel discussieonderwerp in", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Discussiezoekwoorden", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Stel discussiezoekwoorden in", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Door komma's gescheiden lijst van zoekwoorden om de discussie te begeleiden", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Stuur discussieprompt volgens schema", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Uren tussen discussieprompts", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reageert op ⚙️ reactie", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reactie om discussieprompt te sturen", - "conversationBotCustomZone_title": "Aangepaste instellingen", - "conversationBotCustomZone_customSystemPromptLabel": "Systeemprompt", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Stel aangepaste systeemprompt in", - "conversationBotCustomZone_customSystemPromptEmptyError": "Ontbreekt aangepaste systeemprompt", - "botConfig": "Bot- en activiteitsinstellingen", - "botConfigNoPermissionTitle": "Geen toestemming", - "botConfigNoPermissionMessage": "Neem contact op met de beheerders van de kamer om de botconfiguratie te wijzigen", - "addConversationBotDialogTitleInvite": "Bevestig het uitnodigen van de gespreksbot", - "addConversationBotButtonInvite": "Uitnodigen", - "addConversationBotDialogInviteConfirmation": "Uitnodigen", - "addConversationBotButtonTitleRemove": "Bevestig het verwijderen van de gesprekbot", - "addConversationBotButtonRemove": "Verwijderen", - "addConversationBotDialogRemoveConfirmation": "Verwijderen", - "conversationBotConfigConfirmChange": "Bevestigen", - "conversationBotStatus": "Uitnodigen bot", - "conversationBotTextAdventureZone_title": "Tekstavontuur", - "conversationBotTextAdventureZone_instructionLabel": "Instructies voor Game Master", - "conversationBotTextAdventureZone_instructionPlaceholder": "Stel instructies voor de game master in", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Ontbrekende instructies voor de game master", - "studentAnalyticsNotAvailable": "Studentgegevens zijn momenteel niet beschikbaar", - "roomDataMissing": "Sommige gegevens kunnen ontbreken in kamers waarvan u geen lid bent.", "updatePhoneOS": "U moet mogelijk de OS-versie van uw apparaat bijwerken.", "wordsPerMinute": "Woorden per minuut", "autoIGCToolName": "Voer Pangea schrijfhulp automatisch uit", "autoIGCToolDescription": "Voer automatisch Pangea Chat grammatica- en vertaalhulp uit voordat ik mijn bericht verstuur.", - "runGrammarCorrection": "Controleer bericht", - "grammarCorrectionFailed": "Problemen om aan te pakken", - "grammarCorrectionComplete": "Ziet er goed uit!", "tooltipInstructionsTitle": "Weet je niet wat dat doet?", "tooltipInstructionsMobileBody": "Houd items ingedrukt om tooltips te bekijken.", "tooltipInstructionsBrowserBody": "Houd de muisaanwijzer over items om tooltips te bekijken.", "chatCapacity": "Chatcapaciteit", "roomFull": "Deze kamer zit al vol.", - "topicNotSet": "Het onderwerp is niet ingesteld.", - "chatCapacityNotSet": "Deze chat heeft geen capaciteitslimiet.", "chatCapacityHasBeenChanged": "Chatcapaciteit gewijzigd", "chatCapacitySetTooLow": "De chatcapaciteit moet minimaal {count} zijn.", "chatCapacityExplanation": "Chatcapaciteit beperkt het aantal leden dat in een chat mag.", - "chatExceedsCapacity": "Deze chat overschrijdt de capaciteit.", "tooManyRequest": "Te veel verzoeken, probeer het later opnieuw.", "enterNumber": "Voer een geheel getal in.", "buildTranslation": "Bouw je vertaling op basis van de bovenstaande keuzes", - "nonexistentSelection": "Selectie bestaat niet meer.", - "changeAnalyticsLanguage": "Wijzig Analytics-taal", "practice": "Oefenen", "noLanguagesSet": "Geen talen ingesteld", - "noActivitiesFound": "Dat is voorlopig genoeg! Kom later terug voor meer.", - "hintTitle": "Tip:", "speechToTextBody": "Voor spraakberichten kunt u zowel een transcript als de woorden per minuut-score van de spreker zien.", "versionNotFound": "Versie niet gevonden", "fetchingVersion": "Versie ophalen...", "versionFetchError": "Fout bij ophalen van versie", "versionText": "Versie: {version}+{buildNumber}", - "languageButtonLabel": "Taal: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatisch vertalen", - "interactiveTranslatorAutoPlayDesc": "Start de interactieve vertaler zonder te vragen.", - "changeAnalyticsView": "Wijzig Analytics-weergave", "l1TranslationBody": "Berichten in je basistaal worden niet vertaald.", "deleteSubscriptionWarningTitle": "Je hebt een actief abonnement", "deleteSubscriptionWarningBody": "Het verwijderen van je account annuleert je abonnement niet automatisch.", @@ -4169,9 +3811,7 @@ "error520Title": "Probeer het opnieuw.", "error520Desc": "Sorry, we konden je bericht niet begrijpen...", "wordsUsed": "Gekende woorden", - "errorTypes": "Fouttypes", "level": "Niveau", - "canceledSend": "Verzending geannuleerd", "morphsUsed": "Gebruikte morfemen", "translationChoicesBody": "Klik en houd een optie ingedrukt voor een hint.", "grammar": "Grammatica", @@ -4181,7 +3821,6 @@ "reportContentIssueTitle": "Meld inhoudsprobleem", "feedback": "Optionele feedback", "reportContentIssueDescription": "Oei! AI kan gepersonaliseerde leerervaringen faciliteren maar... hallucineert ook. Geef alstublieft uw feedback en wij proberen het opnieuw.", - "changeContent": "Oei! AI kan gepersonaliseerde leerervaringen faciliteren maar... hallucineert ook. Wat moet het worden?", "clickTheWordAgainToDeselect": "Klik op het geselecteerde woord om het te deselecteren.", "l2SupportNa": "Niet beschikbaar", "l2SupportAlpha": "Alpha", @@ -4415,7 +4054,6 @@ "grammarCopySPC": "Specifiteit", "grammarCopyPARTTYPE": "Deeltype", "grammarCopyINTREL": "Vragend-Relatief", - "grammarCopyNUMFORMpsor": "Bezittende Nummer", "grammarCopyUNKNOWN": "Onbekend", "grammarCopyNUMBERPSOR": "Bezittende Nummer", "grammarCopyPOSS": "Bezittelijk", @@ -4461,28 +4099,14 @@ "grammarCopyVOICEdir": "Direct", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Reciproque", - "enterPrompt": "Voer een systeemprompt in", - "selectBotLanguage": "Selecteer de taal van de bot", - "chooseVoice": "Kies een stem", - "enterLanguageLevel": "Voer een taalniveau in", - "enterDiscussionTopic": "Voer een discussieonderwerp in", - "selectBotChatMode": "Selecteer chatmodus", - "messageNotInTargetLang": "Bericht niet in de doeltaal", "other": "Andere", "levelShort": "LVL {level}", - "botModeValidation": "Selecteer een chatmodus", "clickBestOption": "Kies de beste opties om je bericht te vertalen!", "completeActivitiesToUnlock": "Voltooi ten minste één activiteit om de vertaling te ontgrendelen!", - "botSettingsSubtitle": "Nodig bot uit om chatactiviteit te modereren", - "invitePeople": "Nodig gebruikers uit", "noCapacityLimit": "Geen capaciteitslimiet", "downloadGroupText": "Download groepsbericht", "notificationsOn": "Meldingen aan", "notificationsOff": "Meldingen uit", - "chatCanBeFoundViaSearch": "Chat kan via zoekopdracht worden gevonden", - "requireCodeToJoin": "Vereist code om deel te nemen", - "canFindInSearch": "Kan in zoekopdracht worden gevonden", - "addChatToSpace": "Voeg chat toe", "createChatAndInviteUsers": "Maak chat en nodig gebruikers uit", "updatedNewSpaceDescription": "Cursussen stellen je in staat om je chats te consolideren en privé- of openbare gemeenschappen op te bouwen.", "joinWithCode": "Deelname met code", @@ -4518,39 +4142,19 @@ "constructUseCollected": "Verzameld in chat", "constructUseNanDesc": "Niet van toepassing", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Inloggen met gebruikersnaam en wachtwoord", - "registrationEmailMessage": "Verifieer uw e-mail met een link die daar wordt verzonden. In sommige gevallen duurt het tot 5 minuten voordat de e-mail arriveert. Controleer ook uw spammap.", "enableTTSToolName": "Tekst-naar-spraak ingeschakeld", "enableTTSToolDescription": "Sta de app toe om tekst-naar-spraak-uitvoer te genereren voor delen van tekst in uw doeltaal.", - "couldNotFindTTS": "We konden geen tekst-naar-spraak-engine vinden voor uw huidige doeltaal.", - "ttsInstructionsHyperlink": "Klik hier om instructies te bekijken voor het downloaden van een nieuwe stem op uw apparaat.", - "createAnAccount": "Maak een account aan", - "signIn": "Inloggen", - "signUpWithEmail": "Aanmelden met e-mail", - "signUpWithGoogle": "Aanmelden met Google", - "signUpWithApple": "Aanmelden met Apple", "yourUsername": "Uw gebruikersnaam", "yourEmail": "Uw e-mail", - "pleaseEnterAnEmail": "Voer een e-mailadres in", - "signInWithGoogle": "Inloggen met Google", - "signInWithApple": "Inloggen met Apple", - "chooseYourAvatar": "Kies je avatar", "iWantToLearn": "Ik wil leren", - "letsStart": "Laten we beginnen", - "pleaseAgreeToTOS": "Ga akkoord met de Algemene Voorwaarden", "pleaseEnterEmail": "Voer een geldig e-mailadres in.", - "pleaseSelectALanguage": "Selecteer een taal", "myBaseLanguage": "Mijn basis taal", - "clickWordsInstructions": "🧻 Klik op een woord voor details. 🤐", - "chooseBestDefinition": "Wat betekent dit woord?", "meaningSectionHeader": "Betekenis:", "formSectionHeader": "Vormen gebruikt in chats:", - "noEmojiSelectedTooltip": "Geen emoji geselecteerd", "writingExercisesTooltip": "Schrijven", "listeningExercisesTooltip": "Luisteren", "readingExercisesTooltip": "Lezen", "meaningNotFound": "Betekenis kon niet worden gevonden.", - "formsNotFound": "Vormen konden niet worden gevonden.", "chooseBaseForm": "Kies de basisvorm", "notTheCodeError": "Sorry, dat is niet de code!", "totalXP": "Totaal XP", @@ -4590,9 +4194,6 @@ "pickAnEmoji": "Wat is je favoriete emoji voor '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Koppel betekenissen aan de woorden in het bericht!", "doubleClickToEdit": "Dubbelklik om te bewerken.", - "removeFeature": "Verwijder {feature}", - "chooseCorrectLabel": "Kies het juiste label.", - "levelPopupTitle": "Gefeliciteerd met het bereiken van\nLevel {level}", "activityPlannerTitle": "Activiteitenplanner", "topicLabel": "Onderwerp", "topicPlaceholder": "Kies een onderwerp...", @@ -4600,7 +4201,6 @@ "modePlaceholder": "Kies een modus...", "learningObjectiveLabel": "Leerdoel", "learningObjectivePlaceholder": "Kies een leerdoel...", - "mediaLabel": "Media die leerlingen moeten delen", "languageOfInstructionsLabel": "Taal van de instructies", "targetLanguageLabel": "Doeltaal", "cefrLevelLabel": "CEFR-niveau", @@ -4615,20 +4215,15 @@ "instructions": "Instructies", "numberOfLearners": "Aantal leerlingen", "mustBeInteger": "Moet een geheel getal zijn, bijv. 1, 2, 3, ...", - "noLemmasFound": "Er is geen vocabulaire met meer dan {xp} XP. Blijf oefenen!", "constructUsePvmDesc": "Gemaakt in spraakbericht", - "lockedMorphFeature": "Wacht op ontgrendeling", "leaveSpaceDescription": "Door de cursus te verlaten, verlaat je alle chats binnen die cursus. Andere gebruikers zien dat je de cursus hebt verlaten.", - "whatIsLemma": "Wat is het lemma?", "constructUseCorMmDesc": "Correct berichtbetekenis", "constructUseIncMmDesc": "Onjuiste berichtbetekenis", "constructUseIgnMmDesc": "Genegeerde berichtbetekenis", "clickForMeaningActivity": "Klik hier voor een Betekenis Uitdaging", "meaning": "Betekenis", "chatWith": "Groep met {displayname}", - "slightlyOffensive": "Licht offensief", "clickOnEmailLink": "Klik op de link in de e-mail en ga verder.\n\nControleer je spammap als de e-mail niet is aangekomen.", - "whoIsAllowedToJoinThisChat": "Wie mag deelnemen aan deze chat", "dontForgetPassword": "Vergeet je wachtwoord niet!", "enableAutocorrectToolName": "Schakel automatische correctie op apparaat in", "enableAutocorrectDescription": "Als je apparaat de taal ondersteunt die je leert, kun je automatische correctie inschakelen om veelvoorkomende fouten te corrigeren terwijl je typt.", @@ -4656,48 +4251,26 @@ "autocorrectNotAvailable": "Helaas wordt uw platform momenteel niet ondersteund voor deze functie. Blijf op de hoogte voor verdere ontwikkeling!", "pleaseUpdateApp": "Update de app om door te gaan.", "chooseEmojiInstructionsBody": "Match emoji's met de woorden die ze het beste vertegenwoordigen. Maak je geen zorgen! Geen punten aftrek voor het oneens zijn. 😅", - "pickAnEmojiFor": "Kies een emoji voor {lemma}", "analyticsVocabListBody": "Dit is al je vocabulaire! Terwijl je XP verdient voor elk woord, groeien ze van zaadje tot volle bloei. Klik op een woord voor meer details.", "morphAnalyticsListBody": "Dit zijn alle grammaticaconcepten in de taal die je leert! Je ontgrendelt ze terwijl je ze tegenkomt tijdens het chatten. Klik voor details.", "knockSpaceSuccess": "Je hebt verzocht om lid te worden van deze cursus! Een beheerder zal op je verzoek reageren zodra hij het ontvangt 😄", - "joinByCode": "Deelname via code", "chooseWordAudioInstructionsBody": "Luister naar het volledige bericht. Match daarna de audio's met de woorden.", "chooseMorphsInstructionsBody": "Klik op de puzzelstukjes voor grammaticavragen!", - "inviteAndLaunch": "Uitnodigen en starten", - "createOwnChat": "Maak je eigen chat", "pleaseEnterInt": "Voer een nummer in", "home": "Startpagina", "join": "Deelnemen", "readingAssistanceOverviewBody": "Klik op de knoppen hieronder voor mini-games over het matchen van emoji's, audio's, woordbetekenissen en grammaticaconcepten. Of klik op een woord voor meer details.", - "learnByTexting": "Leren door te sms'en", - "levelSummaryTrigger": "Bekijk samenvatting", "levelSummaryPopupTitle": "Samenvatting niveau {level}", - "referFriends": "Verwijs vrienden", - "referFriendDialogTitle": "Nodig een vriend uit voor je gesprek", - "referFriendDialogDesc": "Heb je een vriend die enthousiast is om een nieuwe taal met jou te leren? Kopieer dan deze uitnodigingslink en stuur deze om mee te doen en vandaag nog met je te chatten.", - "youUnlocked": "Je hebt ontgrendeld", "resetInstructionTooltipsTitle": "Reset instructiehulpmiddelen", "resetInstructionTooltipsDesc": "Klik om instructiehulpmiddelen te tonen, zoals voor een gloednieuwe gebruiker.", "selectForGrammar": "Selecteer een grammatica-icoon voor activiteiten en details.", - "newChatActivityTitle": "Wil je een leuke activiteit toevoegen?", - "newChatActivityDesc": "Maak van elke groepschat een avontuur met Activity Planner! Stel boeiende onderwerpen en doelen voor de groep in, en breng gesprekken tot leven met prachtige afbeeldingen. Ontsteek creatieve discussies en houd het plezier moeiteloos gaande!", - "exploreMore": "Ontdek meer", "randomize": "Willekeurig maken", "clear": "Wissen", "makeYourOwnActivity": "Maak je eigen activiteit", "featuredActivities": "Uitgelicht", - "goToChat": "Ga naar chat", "save": "Opslaan", - "selectActivity": "Selecteer activiteit", - "wordFocusListeningMultipleChoice": "Welke audio past bij het woord?", "startChat": "Begin een chat", "translationProblem": "Vertaalprobleem", - "perfectTranslation": "Perfecte vertaling!", - "greatJobTranslation": "Goed gedaan met deze vertaling!", - "goodJobTranslation": "Goed werk aan deze vertaling.", - "makingProgress": "Je maakt vooruitgang!", - "keepPracticing": "Blijf oefenen!", - "niceJob": "Goed gedaan!", "askToJoin": "Vraag om lid te worden", "emptyChatWarningTitle": "Chat is leeg", "emptyChatWarningDesc": "Je hebt niemand uitgenodigd voor je chat. Ga naar Chat-instellingen om je contacten of de Bot uit te nodigen. Je kunt dit later ook doen.", @@ -4716,8 +4289,6 @@ "languageLevelC2Desc": "Ik kan vrijwel alles begrijpen dat ik hoor of lees en mezelf vloeiend en precies uitdrukken.", "newVocab": "Nieuw vocabulaire", "newGrammar": "Nieuwe grammaticaconcepten", - "congratulationsOnReaching": "Je hebt niveau {level} bereikt!", - "seeDetails": "Bekijk details", "choosePracticeMode": "Klik op een van de bovenstaande knoppen om een oefenactiviteit te starten", "ban": "Ban", "unban": "Unban", @@ -4731,8 +4302,6 @@ "timesUsedWithAssistance": "Aantal keer met hulp gebruikt", "shareInviteCode": "Deel uitnodigingscode: {code}", "leaderboard": "Highscorelijst", - "welcomeUser": "Welkom {user}", - "joinSpaceOnboardingDesc": "Heb je een uitnodigingscode of link naar een openbare cursus?", "skipForNow": "Sla over", "permissions": "Toestemmingen", "spaceChildPermission": "Wie kan nieuwe chats toevoegen aan deze cursus", @@ -4740,12 +4309,8 @@ "defaultOption": "Standaard", "deleteChatDesc": "Weet je zeker dat je deze chat wilt verwijderen? Deze wordt verwijderd voor alle deelnemers en alle berichten binnen de chat zijn niet meer beschikbaar voor oefening of leeranalyses.", "deleteSpaceDesc": "De cursus en alle geselecteerde chats worden verwijderd voor alle deelnemers en alle berichten binnen de chat zijn niet meer beschikbaar voor oefening of leeranalyses. Deze actie kan niet ongedaan worden gemaakt.", - "chatWithActivities": "Chat met activiteiten", "launch": "Start", - "launchActivityToChats": "Start activiteit in chats", "searchChats": "Zoek chats", - "selectChats": "Selecteer chats", - "selectChatToStart": "Klaar! Selecteer een chat om te starten", "maxFifty": "Maximaal 50", "configureSpace": "Configureer cursus", "pinMessages": "Pin berichten", @@ -4759,9 +4324,7 @@ "announcements": "Aankondigingen", "activities": "Activiteiten", "access": "Toegang", - "botSettings": "Bot-instellingen", "activitySuggestionTimeoutMessage": "We werken hard om meer activiteiten voor je te genereren, controleer over een minuut opnieuw", - "accessSettingsWarning": "Oeps! Het lijkt erop dat je geen toestemming hebt om de toegangsregels van deze kamer in te stellen. Je moet deze controleren om zeker te zijn dat ze aan je wensen voldoen en neem contact op met een kamadmin als je ze wilt wijzigen", "howSpaceCanBeFound": "Hoe deze cursus gevonden kan worden", "private": "Privé", "cannotBeFoundInSearch": "Kan niet gevonden worden in zoekopdrachten", @@ -4774,16 +4337,6 @@ "canBeFoundViaKnock": "• verzoek om lid te worden en goedkeuring door beheerder", "youHaveLeveledUp": "Je bent een niveau omhoog gegaan!", "sendActivities": "Verzend activiteiten", - "getStarted": "Aan de slag", - "getStartedBotChatDesc": "Chatten met AI is een geweldige plek om te beginnen en Pangea lezen, schrijven, luisteren en spreken tools maken het gemakkelijk!", - "getStartedCommunitiesDesc": "Leren met een gemeenschap is waar Pangea Chat uitblinkt!\nJe kunt je klas joinen, een cursus vinden, of zelfs je eigen maken!", - "getStartedFriendsDesc": "Heb je een vriend die met je wil leren?", - "getStartedBotChatComplete": "Goed gedaan! Je bent aan het chatten met de bot!", - "getStartedCommunitiesComplete": "Geweldig, je hebt je bij een cursus aangesloten!", - "getStartedComplete": "Je hebt deze sectie voltooid!\nBlijf onze geweldige functies verkennen door met vrienden te chatten!", - "getStartedFriendsComplete": "Woohoo! Je hebt vrienden! 😙", - "getStartedBotChatButton": "Begin met chatten!", - "getStartedFriendsButton": "Chat met een vriend", "groupChat": "Groepschat", "directMessage": "Direct bericht", "newDirectMessage": "Nieuw direct bericht", @@ -4799,7 +4352,6 @@ "mySavedActivities": "Mijn opgeslagen activiteiten", "noSavedActivities": "Geen opgeslagen activiteiten", "saveActivity": "Deze activiteit opslaan", - "yourSavedActivities": "Opgeslagen activiteiten", "failedToPlayVideo": "Video afspelen is mislukt", "done": "Klaar", "inThisSpace": "In deze cursus", @@ -4838,37 +4390,27 @@ "maximumActivityParticipants": "Elke activiteit kan maximaal {count} deelnemer(s) hebben.", "pending": "In afwachting", "inactive": "Inactief", - "unjoinedActivityMessage": "Wil je deelnemen? Kies een open rol!\nOf hang rond en kijk naar de show!", - "fullActivityMessage": "Voel je vrij om naar de show te kijken! Terwijl er geen open rollen zijn om deel te nemen, kun je de chat bekijken!", "confirmRole": "Bevestig rol", "openRoleLabel": "OPEN", "joinedTheActivity": "👋 {username} heeft deelgenomen als {role}", "finishedTheActivity": "🎯 {username} heeft deze activiteit afgerond", - "endActivityTitle": "Ik ben klaar", - "endActivityDesc": "Heb je de doelstellingen voltooid?\nDit is je bevestiging dat je stopt met typen. Maar maak je geen zorgen, het plezier gaat door in de chat! Voel je vrij om rond te hangen en van de show te genieten totdat iedereen op 'Klaar' klikt.", "archiveToAnalytics": "Toevoegen aan mijn Voltooide Activiteiten", "activitySummaryError": "Samenvattingen van activiteiten niet beschikbaar", "requestSummaries": "Vraag samenvattingen aan", - "loadingActivitySummary": "Activiteitenoverzicht wordt geladen...", "generatingNewActivities": "Je bent de eerste gebruiker van dit taalpaar! Geef ons een minuutje, we bereiden activiteiten voor je voor.", - "requestAccessTitle": "Toegang tot analytics bekijken aanvragen?", + "requestAccessTitle": "Toegang tot analyses aanvragen?", "requestAccessDesc": "Wil je toegang aanvragen om deelnemeranalyses te bekijken?\n\nAls deelnemers akkoord gaan, kunnen beheerders van deze cursus hun bekijken:\n • totaal vocabulaire\n • totaal grammaticaconcepten\n • totaal voltooide activiteitensessies\n • de specifieke grammaticaconcepten die correct en incorrect worden gebruikt\n\nZe kunnen niet bekijken:\n • berichten in chats buiten de cursus\n • vocabulairelijst", "requestAccess": "Verzoek toegang ({count})", "analyticsInactiveTitle": "Verzoeken aan inactieve gebruikers konden niet worden verzonden", "analyticsInactiveDesc": "Inactieve gebruikers die zich sinds de introductie van deze functie niet hebben aangemeld, zien uw verzoek niet.\n\nDe knop Verzoek verschijnt zodra ze terugkeren. U kunt het verzoek later opnieuw verzenden door op de knop Verzoek onder hun naam te klikken wanneer deze beschikbaar is.", "accessRequestedTitle": "Verzoek om toegang tot analytics", - "accessRequestedDesc": "De beheerders van “{space}” vragen om uw leeranalyses te bekijken.\n\nAls u akkoord gaat, kunnen beheerders van deze cursus uw:\n • totale woordenschat\n • totale grammaticaconcepten\n • totale voltooide activiteitsessies\n • gebruikte grammaticaconcepten, correct en incorrect\n\nZij kunnen niet uw:\n • berichten in chats buiten de cursus\n • woordenlijst bekijken", - "allowAccess": "Toegang toestaan", - "denyAccess": "Toegang weigeren", + "accessRequestedDesc": "Aanvragende admin(s): {admin} \n\nAdmins van “{space}” vragen om uw leeranalyses te bekijken.\n\nAls u akkoord gaat, kunnen zij uw:\n • totale woordenschat\n • totale grammatica concepten\n • totale voltooide activiteitssessies\n • de specifieke grammatica concepten die correct en incorrect zijn gebruikt\n\nZij zullen uw niet kunnen bekijken:\n • berichten in chats buiten de cursus\n • woordenlijst", "adminRequestedAccess": "Beheerders hebben gevraagd om uw analytics te bekijken.", "lastUpdated": "Bijgewerkt\n{time}", "activityFinishedMessage": "Alles voltooid!", "endForAll": "Einde voor iedereen", "newCourse": "Nieuwe cursus", - "newCourseSubtitle": "Welke cursusplanning wilt u gebruiken?", - "failedToLoadCourses": "Laden van cursussen mislukt", "numModules": "{num} modules", - "numActivityPlans": "{num} activiteitsplannen", "coursePlan": "Cursusplan", "editCourseLater": "U kunt de titel, beschrijvingen en cursusafbeelding later bewerken.", "newCourseAccess": "Standaard zijn cursussen privé en vereist goedkeuring van een beheerder om deel te nemen. U kunt deze instellingen op elk moment aanpassen.", @@ -4882,17 +4424,11 @@ "accessDesc": "U kunt uw cursus openstellen voor de wereld! Of, maak uw cursus privé en veilig.", "createGroupChatDesc": "Aangezien activiteitensessies starten en eindigen, blijven groepschats open voor routinematige communicatie.", "deleteDesc": "Alleen beheerders kunnen een cursus verwijderen. Dit is een destructieve actie die alle gebruikers verwijdert en alle geselecteerde chats binnen de cursus verwijdert. Ga voorzichtig te werk.", - "failedToLoadCourseInfo": "Laden van cursusinformatie mislukt", "noCourseFound": "Oh, deze cursus heeft een plan nodig!\n\nCursusplannen zijn een reeks onderwerpen en gespreksactiviteiten.", "additionalParticipants": "+ {num} anderen", - "activityNotFoundForCourse": "Deze activiteit is niet gevonden binnen de cursus", - "courseChats": "Cursus Chats", - "myActivitySessions": "Mijn Activiteitensessies", "directMessages": "Directe Berichten", "whatNow": "Wat nu?", "chooseNextActivity": "Kies je volgende activiteit!", - "seeInstructions": "Bekijk Instructies", - "hideInstructions": "Verberg Instructies", "letsGo": "Laten we gaan", "chooseRole": "Kies een rol!", "chooseRoleToParticipate": "Kies een rol om deel te nemen!", @@ -4902,23 +4438,15 @@ "inviteFriends": "Nodig vrienden uit", "waitNotDone": "Wacht, ik ben nog niet klaar!", "waitingForOthersToFinish": "Wachten tot de rest klaar is...", - "saveToCompletedActivities": "Opslaan naar voltooide activiteiten", "generatingSummary": "Chat analyseren en resultaten genereren", - "instructionsLanguage": "Instructietaal", "findCourse": "Vind een cursus", - "activityCompletedDesc": "Je voltooide activiteit is toegevoegd aan analytics waar je de taal die je hebt gebruikt kunt bekijken en oefenen.", "pingParticipantsNotification": "{user} zoekt gebruikers om deel te nemen aan de activiteitensessie in {room}", "course": "Cursus", "courses": "Cursussen", "courseName": "Cursusnaam", "createNewCourse": "Nieuwe cursus", - "publicCourses": "Openbare cursussen", "goToCourse": "Ga naar cursus: {course}", "activityComplete": "Deze activiteit is voltooid. Het overzicht van de activiteit zou hieronder beschikbaar moeten zijn.", - "haventChattedMuch": "Het lijkt erop dat je nog niet veel hebt gechat, probeer wat meer vocabulaire woorden te gebruiken! Als je denkt dat je je doel hebt bereikt, kun je de activiteit hieronder beëindigen.", - "haveChatted": "Het lijkt erop dat je al een tijdje aan het chatten bent! Als je denkt dat je je doel hebt bereikt, rond dan af om de activiteit te voltooien en we genereren een samenvatting in de chat!", - "userDoneAndWaiting": "{num1}/{num2} deelnemers zijn klaar. Wacht tot iedereen klaar is, en we genereren een samenvatting in de chat! \n\nAls je de conversatie opnieuw wilt starten, klik dan op de knop 'Doorgaan' in de chat.", - "othersDoneAndWaiting": "{num1}/{num2} zijn klaar. Heb je je doel bereikt?", "startNewSession": "Nieuwe sessie starten", "joinOpenSession": "Deelname aan open sessie", "less": "minder", @@ -4928,7 +4456,6 @@ "openToJoin": "Open voor deelname", "results": "Resultaten", "activityDone": "Activiteit Voltooid!", - "moreLabel": "meer", "promoCodeInfo": "Promocodes kunnen worden ingevoerd op de volgende pagina", "editsComingSoon": "De mogelijkheid om steden en activiteiten te bewerken komt binnenkort.", "editing": "Bewerken", @@ -4944,13 +4471,10 @@ "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", - "chooseLanguage": "Kies een taal.", + "chooseLanguage": "Kies een doeltaal.", "planTrip": "Plan je reis", "howAreYouTraveling": "Hoe reis je?", "unlockPrivateTrip": "Ontgrendel een privéreis", @@ -4963,25 +4487,20 @@ "courseCode": "Wat is het geheime wachtwoord?", "courseCodeHint": "Reiscodenaam of link", "unlockMyTrip": "Ontgrendel mijn reis", - "anyLevel": "Elk niveau", "signupOption": "Hoe wil je je aanmelden?", "withApple": "Met Apple", "withGoogle": "Met Google", "withEmail": "Met e-mail", "createAccount": "Account aanmaken", - "noCoursesFound": "Geen cursussen gevonden", "loginWithEmail": "Inloggen met e-mail", "usernameOrEmail": "Gebruikersnaam of e-mail", "email": "E-mail", "forgotPassword": "Wachtwoord vergeten?", - "writingAnalyticsDesc": "Stuur berichten om schrijven te oefenen.", "endActivity": "Eind activiteit", "allLanguages": "Alle talen", - "allCefrLevels": "Alle CEFR-niveaus", "chatListTooltip": "Hier vind je je directe berichten! Klik op de avatar van een gebruiker en “start een gesprek” om een DM te sturen.", "directMessageBotTitle": "Direct bericht Pangea Bot", "feedbackTitle": "Activiteit Feedback", - "feedbackDesc": "Hoe kan de activiteit worden verbeterd? Als je wat details kunt geven, maken we de verandering!", "feedbackHint": "Je feedback", "feedbackButton": "Feedback indienen", "directMessageBotDesc": "Praten met mensen is leuker maar... AI staat altijd klaar!", @@ -5005,30 +4524,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5044,18 +4539,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5080,18 +4563,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5128,38 +4599,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5168,62 +4611,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5260,10 +4659,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5272,14 +4667,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5288,46 +4675,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5336,10 +4687,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5396,18 +4743,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5416,14 +4751,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5452,18 +4779,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5472,42 +4787,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5516,14 +4799,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5544,26 +4819,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5584,10 +4839,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5620,25 +4871,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5695,34 +4927,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5751,778 +4955,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7515,14 +5951,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7534,14 +5962,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7573,10 +5993,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7585,18 +6001,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7605,14 +6009,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7637,38 +6033,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7714,10 +6082,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7742,10 +6106,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7770,10 +6130,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7782,66 +6138,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7862,42 +6162,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7922,154 +6198,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8086,18 +6214,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8118,14 +6234,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8142,10 +6250,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8158,14 +6262,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8174,14 +6270,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8209,26 +6297,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8257,18 +6325,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8305,10 +6365,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9241,10 +7297,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9425,34 +7477,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9465,10 +7489,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9477,14 +7497,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9501,22 +7513,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9664,14 +7660,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9680,34 +7668,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9716,54 +7676,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9772,10 +7696,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9792,10 +7712,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9967,26 +7883,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10015,10 +7911,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10075,30 +7967,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10127,18 +8003,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10255,14 +8123,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10275,10 +8135,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10287,14 +8143,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10311,14 +8159,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10327,22 +8167,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10355,18 +8179,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10383,22 +8195,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10407,30 +8207,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10503,18 +8279,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10571,18 +8335,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10611,30 +8363,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10687,18 +8423,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10747,46 +8475,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10851,10 +8539,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11026,14 +8710,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11061,14 +8737,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11081,10 +8749,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11120,19 +8784,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11157,14 +8816,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11173,14 +8824,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11233,10 +8876,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11249,18 +8888,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11273,14 +8900,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11321,26 +8940,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11368,10 +8975,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11382,36 +8985,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11448,10 +9021,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11516,18 +9085,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11592,10 +9149,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11616,10 +9169,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11636,10 +9185,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11648,10 +9193,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11664,10 +9205,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11692,16 +9229,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Vrienden uitnodigen voor activiteit", - "inviteFriendsToActivityCourse": "Vrienden uitnodigen voor activiteit en cursus", "feedbackRespDesc": "Kom morgen terug voor updates over de activiteit.", "activityDropdownDesc": "Wanneer je klaar bent met deze activiteit, klik hieronder", - "activityAnalyticsListBody": "Dit zijn je voltooide activiteiten! Na het voltooien van activiteiten kun je ze hier bekijken.", "languageMismatchTitle": "Taal mismatch", "languageMismatchDesc": "Je doeltaal komt niet overeen met de taal van deze activiteit. Wil je je doeltaal bijwerken?", "reportWordIssueTooltip": "Meld probleem met woordinformatie", "tokenInfoFeedbackDialogTitle": "Feedback over Woordinformatie", - "tokenInfoFeedbackDialogDesc": "AI maakt fouten. Beschrijf alstublieft eventuele problemen die je hebt gevonden met de bovenstaande informatie.", "noPublicCoursesFound": "Geen openbare cursussen gevonden. Wil je er een maken?", "noCourseTemplatesFound": "We konden geen cursussen vinden voor je doeltaal. Je kunt in de tussentijd met Pangea Bot chatten en later terugkomen voor meer cursussen.", "botActivityJoinFailMessage": "Pangea Bot duurt even om te reageren. Probeer het later opnieuw, of nodig een vriend uit.", @@ -11709,14 +9242,6 @@ "leaveDesc": "Verlaat deze ruimte en alle chats daarin", "selectAll": "Alles selecteren", "deselectAll": "Alles deselecteren", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11725,10 +9250,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11745,10 +9266,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11782,7 +9299,6 @@ "newMessageInPangeaChat": "📩 Nieuw bericht in Pangea Chat", "shareCourse": "Deel cursus", "addCourse": "Voeg een cursus toe", - "joinCourseWithCode": "Deelname cursus met code", "joinPublicCourse": "Deelname openbare cursus", "vocabLevelsDesc": "Hier komen de vocabulaire woorden zodra je ze hebt opgewaardeerd!", "highlightVocabTooltip": "Markeer doelwoordenschat hieronder door ze te verzenden of ermee te oefenen in de chat", @@ -11806,10 +9322,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11818,7 +9330,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Geen DM's of chats gevonden. Zorg ervoor dat je zoekopdracht correct is gespeld.", + "activityAnalyticsTooltipBody": "Dit zijn je opgeslagen activiteiten voor beoordeling en oefening.", + "numSavedActivities": "Aantal opgeslagen activiteiten", + "saveActivityTitle": "Activiteit opslaan", + "saveActivityDesc": "Goed gedaan! Sla deze activiteit op voor latere beoordeling en oefening", + "levelInfoTooltip": "Hier kun je alle punten zien die je hebt verdiend en hoe!", + "alreadyInCourseWithID": "Je bent al in een cursus met dit plan. Wil je een cursus met hetzelfde plan maken, of naar de bestaande cursus gaan?", + "goToExistingCourse": "Ga naar bestaande cursus", + "emojiView": "Emoji-weergave", + "feedbackDialogDesc": "Ik maak ook fouten! Iets om me te helpen verbeteren?", + "contactHasBeenInvitedToTheCourse": "Contact is uitgenodigd voor de cursus", + "activityStatsButtonTooltip": "Activiteitsinformatie", + "allow": "Toestaan", + "deny": "Weigeren", + "enabledRenewal": "Abonnementsvernieuwing inschakelen", + "subscriptionEndsOn": "Abonnement eindigt op", + "subscriptionRenewsOn": "Abonnement vernieuwt op", + "waitForSubscriptionChanges": "Wijzigingen in uw abonnement kunnen even duren voordat ze in de app zichtbaar zijn.", + "subscribeReadingAssistance": "Abonneer om berichttools te ontgrendelen", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhaars", + "arDisplayName": "Arabisch", + "asDisplayName": "Assamees", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbeidzjaans", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinees", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Wit-Russisch", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgaars", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengaals", + "bnBDDisplayName": "Bengaals (Bangladesh)", + "bnINDisplayName": "Bengaals (India)", + "brDisplayName": "Bretons", + "bsDisplayName": "Bosnisch", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Boerjat", + "caDisplayName": "Catalaans", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centraal Koerdisch", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsicaans", + "crhDisplayName": "Krim-Turks", + "crsDisplayName": "Seselwa Creools Frans", + "csDisplayName": "Tsjechisch", + "cvDisplayName": "Tsjoevasj", + "cyDisplayName": "Welsh", + "daDisplayName": "Deens", + "deDisplayName": "Duits", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Engels", + "enAUDisplayName": "Engels (Australië)", + "enGBDisplayName": "Engels (VK)", + "enINDisplayName": "Engels (India)", + "enUSDisplayName": "Engels (VS)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spaans", + "esESDisplayName": "Spaans (Spanje)", + "esMXDisplayName": "Spaans (Mexico)", + "euDisplayName": "Baskisch", + "faDisplayName": "Perzisch", + "ffDisplayName": "Fulah", + "fiDisplayName": "Fins", + "filDisplayName": "Filipijns", + "fjDisplayName": "Fijisch", + "foDisplayName": "Faroëes", + "frDisplayName": "Frans", + "frCADisplayName": "Frans (Canada)", + "frFRDisplayName": "Frans (Frankrijk)", + "fyDisplayName": "West-Fries", + "gaDisplayName": "Iers", + "gaaDisplayName": "Ga", + "gdDisplayName": "Schots-Gaelisch", + "glDisplayName": "Galicisch", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaïaans", + "heDisplayName": "Hebreeuws", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatisch", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haïtiaans Creools", + "huDisplayName": "Hongaars", + "hyDisplayName": "Armeens", + "idDisplayName": "Indonesisch", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "IJslands", + "itDisplayName": "Italiaans", + "jaDisplayName": "Japans", + "jvDisplayName": "Javaans", + "kaDisplayName": "Georgisch", + "kkDisplayName": "Kazachs", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreaans", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Democratische Republiek Congo)", + "kuDisplayName": "Koerdisch", + "kyDisplayName": "Kirgizisch", + "laDisplayName": "Latijn", + "lbDisplayName": "Luxemburgs", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgs", + "lijDisplayName": "Ligurisch", + "lmoDisplayName": "Lombardisch", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litouws", + "ltgDisplayName": "Latgalisch", + "luoDisplayName": "Luo (Kenia en Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lets", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagassisch", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonisch", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongools", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Maleis", + "msArabDisplayName": "Maleis (Arabisch)", + "msMYDisplayName": "Maleis (Maleisië)", + "mtDisplayName": "Maltees", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmaans", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Noors (Bokmål)", + "neDisplayName": "Nepalees", + "newDisplayName": "Newari", + "nlDisplayName": "Nederlands", + "nlBEDisplayName": "Vlaams", + "noDisplayName": "Noors", + "nrDisplayName": "Zuid-Ndebele", + "nsoDisplayName": "Noord-Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitaans", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Pools", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugees", + "ptBRDisplayName": "Portugees (Brazilië)", + "ptPTDisplayName": "Portugees (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Roemeens", + "roMDDisplayName": "Moldavisch", + "romDisplayName": "Romani", + "ruDisplayName": "Russisch", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskriet", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliaans", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Singhales", + "skDisplayName": "Slowaaks", + "slDisplayName": "Sloveens", + "smDisplayName": "Samoaans", + "snDisplayName": "Shona", + "soDisplayName": "Somalisch", + "sqDisplayName": "Albanees", + "srDisplayName": "Servisch", + "srMEDisplayName": "Montenegrijns", + "ssDisplayName": "Swazi", + "stDisplayName": "Zuid-Sotho", + "suDisplayName": "Soendanees", + "svDisplayName": "Zweeds", + "swDisplayName": "Swahili", + "szlDisplayName": "Silezisch", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadzjieks", + "thDisplayName": "Thais", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmeens", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turks", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tataars", + "ugDisplayName": "Oeigoers", + "ukDisplayName": "Oekraïens", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Oezbeeks", + "viDisplayName": "Vietnamees", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddisch", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateeks", + "yueDisplayName": "Cantonees", + "yueCNDisplayName": "Cantonees (China)", + "yueHKDisplayName": "Cantonees (Hongkong)", + "zhDisplayName": "Chinees", + "zhCNDisplayName": "Chinees (Vereenvoudigd)", + "zhTWDisplayName": "Chinees (Traditioneel)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11885,6 +10583,7 @@ "notStartedActivitiesTitle": "Open sessies ({num})", "inProgressActivitiesTitle": "Bezig ({num})", "completedActivitiesTitle": "Klaar ({num})", + "pickDifferentActivity": "Kies een andere activiteit", "inOngoingActivity": "Je hebt een lopende activiteit!", "@notStartedActivitiesTitle": { "type": "String", @@ -11910,10 +10609,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Uw doeltaal komt niet overeen met dit bericht. Wilt u uw doeltaal bijwerken?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Dit zijn alle deelnemers aan deze cursus. Klik op het avatar van een gebruiker en \"start gesprek\" om een DM te sturen.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Dit vocabulairewoord wordt permanent verwijderd uit uw analyses", + "woman": "Vrouw", + "man": "Man", + "otherGender": "Anders", + "unselectedGender": "Selecteer een geslachtsoptie", + "gender": "Geslacht", + "chatParticipantTooltip": "Dit zijn alle deelnemers in deze chat. Klik op het avatar van een gebruiker en \"start gesprek\" om een DM te sturen.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Leermiddelen zijn uitgeschakeld voor berichten die niet in je doeltaal zijn.", + "vocabEmoji": "Vocab emoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Vraag regeneratie aan", + "optionalRegenerateReason": "(Optioneel) Reden", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Je hebt de emoji voor {lemma} ingesteld! We zullen deze emoji gebruiken om het woord in de praktijkactiviteiten voortaan weer te geven.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Wachten op het voltooien van de aanmelding", + "ssoDialogDesc": "We hebben een nieuw tabblad geopend zodat je veilig kunt inloggen.", + "ssoDialogHelpText": "🤔 Als je het nieuwe tabblad niet hebt gezien, controleer dan je pop-up blocker.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Schakel taalhulpmiddelen uit", + "disableLanguageToolsDesc": "Wilt u automatische taalsupport uitschakelen?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Toestemming geweigerd. Schakel opnamepermissies in om audioberichten op te nemen.", + "genericWebRecordingError": "Er is iets misgegaan. We raden aan de Chrome-browser te gebruiken bij het opnemen van berichten.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Voor de beste ervaring met deze applicatie, vergroot alstublieft uw schermgrootte.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Activiteiten om het Volgende Onderwerp te Ontgrendelen", "activitiesToUnlockTopicDesc": "Stel het aantal activiteiten in om het volgende cursusonderwerp te ontgrendelen", "@activitiesToUnlockTopicTitle": { @@ -11923,5 +10740,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Correcte vocabulaire definitie oefening", + "constructUseIncLMDesc": "Onjuiste vocabulaire definitie oefening", + "constructUseCorLADesc": "Correcte vocabulaire audio oefening", + "constructUseIncLADesc": "Onjuiste vocabulaire audio oefening", + "constructUseBonus": "Bonus tijdens vocabulaire oefening", + "practiceVocab": "Oefen vocabulaire", + "selectMeaning": "Selecteer de betekenis", + "selectAudio": "Selecteer de bijpassende audio", + "congratulations": "Gefeliciteerd!", + "anotherRound": "Nog een ronde", + "noActivityRequest": "Geen huidige activiteit aanvraag.", + "quit": "Afsluiten", + "congratulationsYouveCompletedPractice": "Gefeliciteerd! Je hebt de oefensessie voltooid.", + "mustHave10Words": "Je moet minstens 10 vocabulairewoorden hebben om ze te oefenen. Probeer met een vriend of Pangea Bot te praten om meer te ontdekken!", + "botSettings": "Botinstellingen", + "activitySettingsOverrideWarning": "Taal en taalniveau bepaald door het activiteitenplan", + "voice": "Stem", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index d73e3564d..75961bf4d 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1,6 +1,6 @@ { "@@locale": "pl", - "@@last_modified": "2026-01-06 13:02:32.127346", + "@@last_modified": "2026-01-07 14:28:18.089845", "about": "O aplikacji", "@about": { "type": "String", @@ -3378,26 +3378,14 @@ "commandHint_logoutall": "Wyloguj się ze wszystkich aktywnych urządzeń", "displayNavigationRail": "Pokaż pasek nawigacji na telefonie", "customReaction": "Niestandardowa reakcja", - "accountInformation": "Informacje o koncie", - "addGroupDescription": "Dodaj opis czatu", - "addNewFriend": "Dodaj nowego znajomego", - "alreadyHaveAnAccount": "Masz już konto?", - "createNewGroup": "Utwórz nowy czat", - "editChatPermissions": "Edytuj uprawnienia czatu", "writeAMessageLangCodes": "Piszesz w {l1} lub {l2}...", "requests": "Prośby", - "allCorrect": "Tak bym to powiedział! Super!", - "newWayAllGood": "Tak bym tego nie powiedział, ale wygląda dobrze!", - "othersAreBetter": "Hm, może jest lepszy sposób, aby to powiedzieć.", "holdForInfo": "Kliknij i przytrzymaj, aby uzyskać informacje o słowie.", "greenFeedback": "To jest to, co bym wpisał!", "yellowFeedback": "Hm, możesz spróbować i zobaczyć, czy to działa! Aby użyć tego słowa, po prostu kliknij je ponownie.", "redFeedback": "Nie sądzę, żeby to było poprawne...", "itInstructionsTitle": "Mogę pomóc Ci z tłumaczeniem!", "itInstructionsBody": "Możesz kliknąć i przytrzymać wybory, aby uzyskać informacje o słowach.", - "oneday": "Ostatnie 24 godziny", - "oneweek": "Ostatnie 7 dni", - "onemonth": "Ostatni miesiąc", "gaTooltip": "L2 użycie z pomocą gramatyczną", "taTooltip": "L2 użycie z pomocą tłumaczeniową", "unTooltip": "Inne", @@ -3407,58 +3395,27 @@ "interactiveTranslatorAllowed": "Wybór ucznia", "interactiveTranslatorRequired": "Wymagane", "notYetSet": "Jeszcze nie ustawione", - "myLearning": "Moja Analiza", "waTooltip": "L2 użycie bez pomocy", - "changeDateRange": "Zmień zakres dat", - "classDescription": "Opis", - "addStudents": "Zaproś użytkowników przez link lub kod", - "copyClassLink": "Skopiuj link zaproszenia", - "copyClassCode": "Skopiuj kod zaproszenia", - "inviteStudentByUserName": "Zaproś użytkowników za pomocą nazwy użytkownika", "languageSettings": "Ustawienia języka", "interactiveTranslator": "Wspomaganie tłumaczenia", - "shareVideo": "Udostępnij wideo", - "shareVideoDesc": "Włącz tę opcję, aby umożliwić uczniom udostępnianie filmów w czatach.", - "shareFiles": "Udostępnij pliki", - "selectLanguageLevel": "Wybierz poziom językowy", "noIdenticalLanguages": "Proszę wybrać różne języki bazowe i docelowe", - "iWantALanguagePartnerFrom": "Pochodzi z:", - "worldWide": "Na całym świecie", - "noResults": "Brak wyników! Spróbuj poszerzyć wyszukiwanie.", "searchBy": "Szukaj według kraju i języków", - "iWantAConversationPartner": "Chcę partnera do rozmowy, który", - "iWantALanguagePartnerWhoSpeaks": "Mówi:", - "iWantALanguagePartnerWhoIsLearning": "Uczy się:", "joinWithClassCode": "Dołącz do kursu", - "joinWithClassCodeHint": "Wprowadź kod zaproszenia", - "languageLevelPreA1": "Prawdziwy początkujący (Pre A1)", - "languageLevelA1": "Początkujący (A1)", - "languageLevelA2": "Podstawowy (A2)", - "languageLevelB1": "Średniozaawansowany (B1)", - "languageLevelB2": "Wyższy średniozaawansowany (B2)", - "languageLevelC1": "Zaawansowany (C1)", - "languageLevelC2": "Mistrzostwo (C2)", + "languageLevelPreA1": "Nowicjusz Niski (Pre A1)", + "languageLevelA1": "Nowicjusz Środkowy (A1)", + "languageLevelA2": "Nowicjusz Wysoki (A2)", + "languageLevelB1": "Średniozaawansowany Średni (B1)", + "languageLevelB2": "Zaawansowany Niski (B2)", + "languageLevelC1": "Zaawansowany Średni (C1)", + "languageLevelC2": "Wyższy (C2)", "changeTheNameOfTheClass": "Zmień nazwę", "changeTheNameOfTheChat": "Zmień nazwę czatu", - "askPangeaBot": "Zapytaj Pangea Bot o kontekstową definicję.", "sorryNoResults": "Przepraszamy, brak wyników.", "ignoreInThisText": "Zignoruj", - "helpMeTranslate": "Tak!", - "needsItShortMessage": "Poza celem", "needsItMessage": "Czekaj, to nie jest {targetLanguage}! Czy potrzebujesz pomocy w tłumaczeniu?", - "needsIgcMessage": "Ta wiadomość zawiera błąd gramatyczny.", - "tokenTranslationTitle": "Słowo jest w Twoim języku bazowym.", - "spanTranslationDesc": "Zobacz możliwe tłumaczenia poniżej.", - "spanTranslationTitle": "Niektóre słowa są w Twoim języku bazowym.", - "l1SpanAndGrammarTitle": "Poza językiem docelowym", - "l1SpanAndGrammarDesc": "To może być w Twoim języku bazowym lub może to być błąd gramatyczny.", - "otherTitle": "Masz błąd.", - "otherDesc": "Zobacz możliwe poprawki poniżej.", "countryInformation": "Moje państwo", - "myLanguages": "Moje języki podstawowe i docelowe", "targetLanguage": "Język docelowy", "sourceLanguage": "Język bazowy", - "languagesISpeak": "Języki, którymi mówię", "updateLanguage": "Moje języki", "whatLanguageYouWantToLearn": "Jakiego języka chcesz się nauczyć?", "whatIsYourBaseLanguage": "Jaki jest Twój język bazowy?", @@ -3473,13 +3430,8 @@ "errorDisableLanguageAssistanceUserDesc": "Kliknij tutaj, aby zaktualizować ustawienia pomocy w tłumaczeniu i pomocy gramatycznej", "errorDisableITClassDesc": "Pomoc w tłumaczeniu jest wyłączona dla kursu, w którym znajduje się ten czat.", "errorDisableIGCClassDesc": "Pomoc gramatyczna jest wyłączona dla kursu, w którym znajduje się ten czat.", - "itIsDisabled": "Interaktywne tłumaczenie jest wyłączone", - "igcIsDisabled": "Interaktywne sprawdzanie gramatyki jest wyłączone", - "goToLearningSettings": "Przejdź do ustawień nauki", "error405Title": "Języki nie ustawione", "error405Desc": "Ustaw swoje języki w menu głównym > Ustawienia nauki.", - "loginOrSignup": "Zaloguj się za pomocą", - "iAgreeToThe": "Zgadzam się na ", "termsAndConditions": "Warunki i zasady", "andCertifyIAmAtLeast13YearsOfAge": " oraz potwierdzam, że mam co najmniej 16 lat.", "error502504Title": "Wow, jest wielu uczniów online!", @@ -3487,40 +3439,21 @@ "error404Title": "Błąd tłumaczenia!", "error404Desc": "Bot Pangea nie jest pewien, jak to przetłumaczyć...", "errorPleaseRefresh": "Pracujemy nad tym! Odśwież stronę i spróbuj ponownie.", - "toggleIT": "Interaktywne tłumaczenie", - "toggleIGC": "Interaktywne sprawdzanie gramatyki", - "toggleToolSettingsDescription": "Tutaj możesz włączyć lub wyłączyć ustawienia narzędzi językowych.", "connectedToStaging": "Połączono z wersją testową", "learningSettings": "Ustawienia nauki", - "sendVoiceNotes": "Wyślij notatki głosowe", - "sendVoiceNotesDesc": "Włącz to, aby umożliwić uczniom wysyłanie notatek głosowych w czatach.", - "chatTopic": "Temat czatu", - "chatTopicDesc": "Ustaw temat czatu", - "inviteStudentByUserNameDesc": "Jeśli Twój uczeń ma już konto, możesz go wyszukać.", "participants": "Uczestnicy", - "almostPerfect": "To wygląda dobrze! Oto, co bym powiedział.", - "prettyGood": "Bardzo dobrze! Oto, co bym powiedział.", - "letMeThink": "Hmm, zobaczmy, jak ci poszło!", "clickMessageTitle": "Potrzebujesz pomocy?", "clickMessageBody": "Kliknij wiadomość, aby uzyskać narzędzia językowe, takie jak tłumaczenie, odtwarzanie i więcej!", - "understandingMessagesTitle": "Definicje i tłumaczenia!", - "understandingMessagesBody": "Kliknij podkreślone słowa, aby zobaczyć definicje. Tłumacz za pomocą opcji wiadomości (w prawym górnym rogu).", "allDone": "Wszystko gotowe!", "vocab": "Słownictwo", "low": "Mamy dowody na to, że użytkownik nie rozumie tych słów.", "medium": "Te słowa zostały użyte. Nie jest jasne, czy słowa są w pełni zrozumiane, czy nie.", "high": "Mamy dowody na to, że użytkownik rozumie te słowa.", - "unknownProficiency": "Te słowa nie były używane w Pangea Chat.", - "changeView": "Przełącz widoki.", - "clearAll": "Wyczyścić wszystkie słowa?", - "generateVocabulary": "Generuj słownictwo z tytułu i opisu", - "generatePrompts": "Generuj podpowiedzi", "subscribe": "Subskrybuj", "getAccess": "Subskrybuj teraz!", "subscriptionDesc": "Wiadomości są bezpłatne! Subskrybuj, aby odblokować interaktywny tłumaczenie, sprawdzanie gramatyki i analitykę nauki.", "subscriptionManagement": "Zarządzanie subskrypcją", "currentSubscription": "Obecna subskrypcja", - "changeSubscription": "Zmień subskrypcję", "cancelSubscription": "Anuluj subskrypcję", "selectYourPlan": "Wybierz swój plan", "subsciptionPlatformTooltip": "Zaloguj się na swoim oryginalnym urządzeniu, aby zarządzać planem subskrypcji", @@ -3529,9 +3462,6 @@ "paymentHistory": "Historia płatności", "emptyChatDownloadWarning": "Nie można pobrać pustego czatu", "update": "Aktualizuj", - "updateDesc": "Teraz możesz zaktualizować tę aplikację z {localVersion} do {storeVersion}", - "maybeLater": "Może później", - "mainMenu": "Menu główne", "toggleImmersionMode": "Tryb zanurzenia", "toggleImmersionModeDesc": "Po włączeniu wszystkie wiadomości będą wyświetlane w Twoim języku docelowym. To ustawienie jest najbardziej przydatne podczas wymiany językowej.", "itToggleDescription": "To narzędzie do nauki języków zidentyfikuje słowa w Twoim języku podstawowym i pomoże Ci je przetłumaczyć na język docelowy. Chociaż rzadko, AI może popełnić błędy w tłumaczeniu.", @@ -3546,212 +3476,13 @@ "definitionsToolDescription": "Po włączeniu słowa podkreślone na niebiesko można kliknąć, aby zobaczyć definicje. Kliknij wiadomości, aby uzyskać dostęp do definicji.", "translationsToolDescrption": "Po włączeniu kliknij wiadomość i ikonę tłumaczenia, aby zobaczyć wiadomość w Twoim języku podstawowym.", "welcomeBack": "Witamy ponownie! Jeśli brałeś udział w pilotażu 2023-2024, skontaktuj się z nami, aby uzyskać specjalną subskrypcję pilotażową. Jeśli jesteś nauczycielem, który (lub Twoja instytucja) zakupił licencje dla Twojej klasy, skontaktuj się z nami w sprawie subskrypcji nauczyciela.", - "kickAllStudents": "Wyrzuć wszystkich uczniów", - "kickAllStudentsConfirmation": "Czy na pewno chcesz wyrzucić wszystkich uczniów?", - "inviteAllStudents": "Zaproś wszystkich uczniów", - "inviteAllStudentsConfirmation": "Czy na pewno chcesz zaprosić wszystkich uczniów?", - "inviteUsersFromPangea": "Dodaj administratorów", - "redeemPromoCode": "Zrealizuj kod promocyjny", - "enterPromoCode": "Wprowadź kod promocyjny", "downloadTxtFile": "Pobierz plik tekstowy", "downloadCSVFile": "Pobierz plik CSV", "promotionalSubscriptionDesc": "Obecnie masz dożywotnią subskrypcję promocyjną. Skontaktuj się z support@pangea.chat, aby uzyskać pomoc w zmianie subskrypcji.", "originalSubscriptionPlatform": "Subskrypcja zakupiona przez {purchasePlatform}", "oneWeekTrial": "Tydzień próbny", "downloadXLSXFile": "Pobierz plik Excel", - "abDisplayName": "Abchaski", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albański", - "amDisplayName": "Amharski", - "arDisplayName": "Arabski", - "anDisplayName": "Aragoński", - "hyDisplayName": "Armeński", - "asDisplayName": "Assamski", - "avDisplayName": "Awaric", - "aeDisplayName": "Wisznuista", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbejdżański", - "bmDisplayName": "Bambara", - "baDisplayName": "Baszkirski", - "euDisplayName": "Baskijski", - "beDisplayName": "Białoruski", - "bnDisplayName": "Bengalski", - "bhDisplayName": "Biharski", - "biDisplayName": "Bislama", - "bsDisplayName": "Bośniacki", - "brDisplayName": "Bretoński", - "bgDisplayName": "Bułgarski", - "myDisplayName": "Birmański", - "caDisplayName": "Kataloński, Walencjański", - "chDisplayName": "Chamorro", - "ceDisplayName": "Czeczeński", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chiński", - "cvDisplayName": "Czerski", - "kwDisplayName": "Kornwalijski", - "coDisplayName": "Korsykański", - "crDisplayName": "Kree", - "hrDisplayName": "Chorwacki", - "csDisplayName": "Czeski", - "daDisplayName": "Duński", - "dvDisplayName": "Divehi; Dhivehi; Malediwski;", - "nlDisplayName": "Niderlandzki", - "enDisplayName": "Angielski", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estoński", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fidżi", - "fiDisplayName": "Fiński", - "frDisplayName": "Francuski", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicyjski", - "kaDisplayName": "Gruziński", - "deDisplayName": "Niemiecki", - "elDisplayName": "Grecki, Współczesny", - "gnDisplayName": "Gwarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitański, kreolski haitański", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrajski (współczesny)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Węgierski", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonezyjski", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandzki", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandzki", - "itDisplayName": "Włoski", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japoński", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, grenlandzki", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kaszmir", - "kkDisplayName": "Kazachski", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgiski, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreański", - "kuDisplayName": "Kurdyjski", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Łaciński", - "lbDisplayName": "Luksemburski, Lëtzebuergesch", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburgs, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laotański", - "ltDisplayName": "Litewski", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Łotewski", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedoński", - "mgDisplayName": "Malgaski", - "msDisplayName": "Malajski", - "mlDisplayName": "Malajalam", - "mtDisplayName": "Maltański", - "miDisplayName": "Maorys", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshalla", - "mnDisplayName": "Mongolski", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norweski Bokmål", - "ndDisplayName": "Północny Ndebele", - "neDisplayName": "Nepalski", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norweski Nynorsk", - "noDisplayName": "Norweski", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndébélé Południowe", - "ocDisplayName": "Okcytańskie", - "ojDisplayName": "Ojbwe, Ojibwa", - "cuDisplayName": "Starocerkiewnosłowiański, Cerkiewno-słowiański, Starobiałoruski, Staro-słowiański", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Osetyjski, Osetycki", - "paDisplayName": "Pendżabski, Pendżabski", - "piDisplayName": "Pāli", - "faDisplayName": "Perski", - "plDisplayName": "Polski", - "psDisplayName": "Paszto, Pusztu", - "ptDisplayName": "Portugalski", - "quDisplayName": "Keczua", - "rmDisplayName": "Romansz", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumuński, Mołdawski, Moldawski", - "ruDisplayName": "Rosyjski", - "saDisplayName": "Sanskryt (Saṃskṛta)", - "scDisplayName": "Sardyński", - "sdDisplayName": "Sindhi", - "seDisplayName": "Północny Sami", - "smDisplayName": "Samoański", - "sgDisplayName": "Sango", - "srDisplayName": "Serbski", - "gdDisplayName": "Szkocki gaelicki, gaelicki", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Słowacki", - "slDisplayName": "Słoweński", - "soDisplayName": "Somalijski", - "stDisplayName": "Południowy Sotho", - "esDisplayName": "Hiszpański", - "suDisplayName": "Sundajski", - "swDisplayName": "Suahili", - "ssDisplayName": "Swati", - "svDisplayName": "Szwedzki", - "taDisplayName": "Tamilski", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadżycki", - "thDisplayName": "Tajski", - "tiDisplayName": "Tigrinia", - "boDisplayName": "Tybetański standardowy, Tybetański, Centralny", - "tkDisplayName": "Turkmeński", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Wyspy Tonga)", - "trDisplayName": "Turecki", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahiński", - "ugDisplayName": "Ujgur, Ujgurowy", - "ukDisplayName": "Ukraiński", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbecki", - "veDisplayName": "Venda", - "viDisplayName": "Wietnamski", - "voDisplayName": "Volapük", - "waDisplayName": "Walonski", - "cyDisplayName": "Walijski", - "woDisplayName": "Wolof", - "fyDisplayName": "Frisian Zachodni", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidysz", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Nieznany", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawajski", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Wielokrotny", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrajski", - "jwDisplayName": "Japoński Jawa", - "moDisplayName": "Mołdawski", - "shDisplayName": "Serbo-Chorwacki", "wwCountryDisplayName": "Na całym świecie", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Wyspy Alandzkie", @@ -3999,41 +3730,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Zapłać", - "allPrivateChats": "Czaty prywatne", - "unknownPrivateChat": "Nieznany czat prywatny", + "pay": "Do kasy", "invitedToSpace": "{user} zaprosił Cię do dołączenia do kursu: {space}! Czy chcesz przyjąć zaproszenie?", - "declinedInvitation": "Odrzucono zaproszenie", - "acceptedInvitation": "Zaakceptowano zaproszenie", "youreInvited": "📩 Jesteś zaproszony!", "invitedToChat": "{user} zaprosił Cię do dołączenia do czatu: {name}! Czy chcesz przyjąć zaproszenie?", "monthlySubscription": "Miesięczna", "yearlySubscription": "Roczna", "defaultSubscription": "Subskrypcja Pangea Chat", "freeTrial": "Darmowa wersja próbna", - "grammarAnalytics": "Analiza błędów", "total": "Razem: ", "noDataFound": "Nie znaleziono danych", - "promoSubscriptionExpirationDesc": "Twoja obecna subskrypcja jest promocyjna i wygasa {expiration}. Skontaktuj się z support@pangea.chat, aby uzyskać pomoc w zmianie subskrypcji.", - "emptyChatNameWarning": "Proszę wprowadzić nazwę tego czatu", "blurMeansTranslateTitle": "Dlaczego wiadomość jest zamazana?", "blurMeansTranslateBody": "Podczas włączonego trybu immersji wiadomości wysłane w Twoim języku podstawowym będą zamazane, podczas gdy Pangea Bot będzie je tłumaczył na Twój język docelowy. Tryb immersji można włączać i wyłączać w ustawieniach indywidualnych i kursów.", - "someErrorTitle": "Hm, coś jest nie tak", - "someErrorBody": "Może to być błąd lub coś w Twoim języku podstawowym.", "bestCorrectionFeedback": "To jest poprawne!", "distractorFeedback": "To nie jest do końca poprawne.", "bestAnswerFeedback": "To jest poprawne!", "definitionDefaultPrompt": "Co oznacza to słowo?", "practiceDefaultPrompt": "Jaka jest najlepsza odpowiedź?", "correctionDefaultPrompt": "Jaka jest najlepsza zamiana?", - "itStartDefaultPrompt": "Czy chcesz pomocy w tłumaczeniu?", - "lockedChatWarning": "🔒 Ten czat został zablokowany", - "lockChat": "Zablokuj czat", - "suggestToChat": "Zaproponuj ten czat", - "suggestToChatDesc": "Zaproponowane czaty pojawią się na listach czatów", "acceptSelection": "Zaakceptuj poprawkę", - "acceptSelectionAnyway": "Użyj tego mimo wszystko", - "makingActivity": "Tworzenie aktywności", "why": "Dlaczego?", "definition": "Definicja", "exampleSentence": "Przykładowe zdanie", @@ -4041,128 +3756,55 @@ "reportMessageTitle": "{reportingUserId} zgłosił wiadomość od {reportedUserId} w czacie {roomName}", "reportMessageBody": "Wiadomość: {reportedMessage}\nPowód: {reason}", "noTeachersFound": "Nie znaleziono nauczycieli do zgłoszenia", - "viewArchive": "Zobacz archiwum", "trialExpiration": "Twój darmowy okres próbny wygasa {expiration}", "freeTrialDesc": "Nowi użytkownicy otrzymują tygodniowy darmowy okres próbny Pangea Chat", "activateTrial": "Darmowy 7-dniowy okres próbny", "successfullySubscribed": "Zostałeś pomyślnie subskrybowany!", "clickToManageSubscription": "Kliknij tutaj, aby zarządzać subskrypcją.", - "errorGettingAudio": "Błąd podczas pobierania dźwięku. Odśwież stronę i spróbuj ponownie.", "signUp": "Zarejestruj się", "pleaseChooseAtLeastChars": "Proszę wybierz co najmniej {min} znaków.", "noEmailWarning": "Proszę wprowadzić poprawny adres e-mail. W przeciwnym razie nie będziesz mógł zresetować hasła. Jeśli nie chcesz tego robić, dotknij ponownie przycisk, aby kontynuować.", "pleaseEnterValidEmail": "Proszę wprowadzić poprawny adres e-mail.", "pleaseChooseAUsername": "Proszę wybierz nazwę użytkownika", - "chooseAUsername": "Wybierz nazwę użytkownika", "define": "Zdefiniuj", "listen": "Słuchaj", - "addConversationBot": "Włącz bota konwersacji", - "addConversationBotDesc": "Dodaj bota do tej rozmowy", - "convoBotSettingsDescription": "Edytuj temat rozmowy i poziom trudności", - "enterAConversationTopic": "Wprowadź temat rozmowy", - "conversationTopic": "Temat rozmowy", - "enableModeration": "Włącz moderację", - "enableModerationDesc": "Włącz automatyczną moderację, aby przeglądać wiadomości przed ich wysłaniem", - "conversationLanguageLevel": "Jaki jest poziom językowy tej rozmowy?", - "showDefinition": "Pokaż definicję", - "subscriptionPopupTitle": "To zdanie może zawierać błąd gramatyczny...", - "subscriptionPopupDesc": "Zapisz się już dziś, aby odblokować tłumaczenia i korektę gramatyczną!", - "seeOptions": "Zobacz opcje", - "continuedWithoutSubscription": "Kontynuuj bez subskrypcji", "trialPeriodExpired": "Twój okres próbny wygasł", - "selectToDefine": "Kliknij dowolne słowo, aby zobaczyć jego definicję!", "translations": "tłumaczenia", "messageAudio": "dźwięk wiadomości", "definitions": "definicje", "subscribedToUnlockTools": "Subskrybuj, aby odblokować interaktywny tłumacz i sprawdzanie gramatyki, odtwarzanie dźwięku, spersonalizowane ćwiczenia oraz analitykę nauki!", "translationTooltip": "Tłumaczenie", - "audioTooltip": "Odtwórz dźwięk", "speechToTextTooltip": "Transkrypcja", - "certifyAge": "Oświadczam, że mam ponad {age} lat", "kickBotWarning": "Usunięcie Pangea Bota z tej rozmowy usunie bota konwersacyjnego z tego czatu.", - "joinToView": "Dołącz do tego pokoju, aby zobaczyć szczegóły", "refresh": "Odśwież", - "autoPlayTitle": "Automatyczne odtwarzanie wiadomości", - "autoPlayDesc": "Po włączeniu, odtwarzanie tekstu na mowę wiadomości będzie się odbywać automatycznie po wybraniu.", "messageAnalytics": "Analiza wiadomości", "words": "Słowa", "score": "Wynik", "accuracy": "Dokładność", "points": "Punkty", "noPaymentInfo": "Brak konieczności podawania informacji o płatności!", - "conversationBotModeSelectDescription": "Aktywność czatu", - "conversationBotModeSelectOption_discussion": "Dyskusja", - "conversationBotModeSelectOption_custom": "Niestandardowe", - "conversationBotModeSelectOption_conversation": "Rozmowa", - "conversationBotModeSelectOption_textAdventure": "Przygoda tekstowa", - "conversationBotModeSelectOption_storyGame": "Gra fabularna", - "conversationBotDiscussionZone_title": "Ustawienia dyskusji", - "conversationBotDiscussionZone_discussionTopicLabel": "Temat dyskusji", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Ustaw temat dyskusji", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Słowa kluczowe dyskusji", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Ustaw słowa kluczowe dyskusji", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista słów kluczowych oddzielonych przecinkami, aby kierować dyskusją", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Wysyłaj przypomnienie o dyskusji według harmonogramu", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Godziny między przypomnieniami o dyskusji", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Odpowiada na reakcję ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakcja do wysłania przypomnienia o dyskusji", - "conversationBotCustomZone_title": "Ustawienia niestandardowe", - "conversationBotCustomZone_customSystemPromptLabel": "Wiadomość systemowa", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Ustaw niestandardową wiadomość systemową", - "conversationBotCustomZone_customSystemPromptEmptyError": "Brak niestandardowej wiadomości systemowej", - "botConfig": "Ustawienia bota i aktywności", - "botConfigNoPermissionTitle": "Brak uprawnień", - "botConfigNoPermissionMessage": "Skontaktuj się z administratorem pokoju, aby zmienić konfigurację bota", - "addConversationBotDialogTitleInvite": "Potwierdź zaproszenie bota do rozmowy", - "addConversationBotButtonInvite": "Zaproś", - "addConversationBotDialogInviteConfirmation": "Zaproś", - "addConversationBotButtonTitleRemove": "Potwierdź usunięcie bota konwersacji", - "addConversationBotButtonRemove": "Usuń", - "addConversationBotDialogRemoveConfirmation": "Usuń", - "conversationBotConfigConfirmChange": "Potwierdź", - "conversationBotStatus": "Zaproś bota", - "conversationBotTextAdventureZone_title": "Przygoda tekstowa", - "conversationBotTextAdventureZone_instructionLabel": "Instrukcje Mistrza Gry", - "conversationBotTextAdventureZone_instructionPlaceholder": "Ustaw instrukcje mistrza gry", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Brak instrukcji mistrza gry", - "studentAnalyticsNotAvailable": "Dane ucznia są obecnie niedostępne", - "roomDataMissing": "Niektóre dane mogą brakować w pokojach, do których nie należysz.", "updatePhoneOS": "Możesz potrzebować zaktualizować wersję systemu operacyjnego swojego urządzenia.", "wordsPerMinute": "Słów na minutę", "autoIGCToolName": "Uruchom automatycznie pomoc w pisaniu Pangea", "autoIGCToolDescription": "Automatycznie uruchom pomoc w gramatyce i tłumaczeniu Pangea Chat przed wysłaniem mojej wiadomości.", - "runGrammarCorrection": "Sprawdź wiadomość", - "grammarCorrectionFailed": "Problemy do rozwiązania", - "grammarCorrectionComplete": "Wygląda dobrze!", "tooltipInstructionsTitle": "Nie jesteś pewien, co to robi?", "tooltipInstructionsMobileBody": "Przytrzymaj elementy, aby wyświetlić podpowiedzi.", "tooltipInstructionsBrowserBody": "Najedź kursorem na elementy, aby wyświetlić podpowiedzi.", "chatCapacity": "Pojemność czatu", "roomFull": "Ten pokój jest już pełny.", - "topicNotSet": "Temat nie został ustawiony.", - "chatCapacityNotSet": "Ten czat nie ma limitu pojemności.", "chatCapacityHasBeenChanged": "Pojemność czatu została zmieniona", "chatCapacitySetTooLow": "Pojemność czatu musi wynosić co najmniej {count}.", "chatCapacityExplanation": "Pojemność czatu ogranicza liczbę członków dozwolonych w czacie.", - "chatExceedsCapacity": "Ten czat przekracza swoją pojemność.", "tooManyRequest": "Zbyt wiele żądań, spróbuj ponownie później.", "enterNumber": "Wprowadź wartość liczby całkowitej.", "buildTranslation": "Zbuduj tłumaczenie z powyższych opcji", - "nonexistentSelection": "Wybór już nie istnieje.", - "changeAnalyticsLanguage": "Zmień język analityki", "practice": "Ćwiczenia", "noLanguagesSet": "Nie ustawiono języków", - "noActivitiesFound": "Na razie wystarczy! Wróć później po więcej.", - "hintTitle": "Wskazówka:", "speechToTextBody": "Dla wiadomości głosowych możesz zobaczyć transkrypt oraz wynik słów na minutę mówcy.", "versionNotFound": "Nie znaleziono wersji", "fetchingVersion": "Pobieranie wersji...", "versionFetchError": "Błąd podczas pobierania wersji", "versionText": "Wersja: {version}+{buildNumber}", - "languageButtonLabel": "Język: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatyczne odtwarzanie tłumaczenia", - "interactiveTranslatorAutoPlayDesc": "Uruchamia interaktywny tłumacz bez pytania.", - "changeAnalyticsView": "Zmień widok analityczny", "l1TranslationBody": "Wiadomości w Twoim podstawowym języku nie będą tłumaczone.", "deleteSubscriptionWarningTitle": "Masz aktywną subskrypcję", "deleteSubscriptionWarningBody": "Usunięcie konta nie spowoduje automatycznego anulowania subskrypcji.", @@ -4170,9 +3812,7 @@ "error520Title": "Spróbuj ponownie.", "error520Desc": "Przepraszamy, nie mogliśmy zrozumieć Twojej wiadomości...", "wordsUsed": "Użyte słowa", - "errorTypes": "Typy błędów", "level": "Poziom", - "canceledSend": "Wysyłanie anulowane", "morphsUsed": "Użyte morfemy", "translationChoicesBody": "Kliknij i przytrzymaj opcję, aby uzyskać podpowiedź.", "grammar": "Gramatyka", @@ -4182,7 +3822,6 @@ "reportContentIssueTitle": "Zgłoś problem z treścią", "feedback": "Opcjonalna opinia", "reportContentIssueDescription": "Ojej! AI może ułatwiać spersonalizowane doświadczenia edukacyjne, ale... również halucynuje. Prosimy o podanie wszelkich uwag, a spróbujemy ponownie.", - "changeContent": "Ojej! AI może ułatwiać spersonalizowane doświadczenia edukacyjne, ale... również halucynuje. Co to powinno być?", "clickTheWordAgainToDeselect": "Kliknij wybrane słowo, aby je odznaczyć.", "l2SupportNa": "Niedostępne", "l2SupportAlpha": "Alpha", @@ -4416,7 +4055,6 @@ "grammarCopySPC": "Specyficzność", "grammarCopyPARTTYPE": "Typ partytywny", "grammarCopyINTREL": "Pytanie-rzeczownik", - "grammarCopyNUMFORMpsor": "Liczba posiadacza", "grammarCopyUNKNOWN": "Nieznany", "grammarCopyNUMBERPSOR": "Liczba posiadacza", "grammarCopyPOSS": "Dzierżawczość", @@ -4462,28 +4100,14 @@ "grammarCopyVOICEdir": "Bezpośredni", "grammarCopyVOICEinv": "Odwrócony", "grammarCopyVOICErcp": "Wzajemny", - "enterPrompt": "Proszę wprowadzić prompt systemowy", - "selectBotLanguage": "Wybierz język bota", - "chooseVoice": "Wybierz głos", - "enterLanguageLevel": "Proszę wprowadzić poziom językowy", - "enterDiscussionTopic": "Proszę wprowadzić temat dyskusji", - "selectBotChatMode": "Wybierz tryb czatu", - "messageNotInTargetLang": "Wiadomość w języku docelowym nie jest", "other": "Inne", "levelShort": "LVL {level}", - "botModeValidation": "Proszę wybrać tryb czatu", "clickBestOption": "Wybierz najlepsze opcje, aby przetłumaczyć swoją wiadomość!", "completeActivitiesToUnlock": "Ukończ co najmniej jedną aktywność, aby odblokować tłumaczenie!", - "botSettingsSubtitle": "Zaproś bota do moderowania aktywności czatu", - "invitePeople": "Zaproś użytkowników", "noCapacityLimit": "Brak limitu pojemności", "downloadGroupText": "Pobierz tekst grupy", "notificationsOn": "Powiadomienia włączone", "notificationsOff": "Powiadomienia wyłączone", - "chatCanBeFoundViaSearch": "Czat można znaleźć przez wyszukiwanie", - "requireCodeToJoin": "Wymagaj kodu do dołączenia", - "canFindInSearch": "Można znaleźć w wyszukiwarce", - "addChatToSpace": "Dodaj czat", "createChatAndInviteUsers": "Utwórz czat i zaproś użytkowników", "updatedNewSpaceDescription": "Kursy pozwalają na konsolidację czatów i budowanie społeczności prywatnych lub publicznych.", "joinWithCode": "Dołącz z kodem", @@ -4519,39 +4143,19 @@ "constructUseCollected": "Zebrane w czacie", "constructUseNanDesc": "Nie dotyczy", "xpIntoLevel": "{currentXP} / {maxXP} punkty doświadczenia", - "signInWithUsername": "Zaloguj się za pomocą nazwy użytkownika i hasła", - "registrationEmailMessage": "Proszę zweryfikować swój email za pomocą linku wysłanego na ten adres. W niektórych przypadkach email może dotrzeć do 5 minut. Sprawdź również folder spam.", "enableTTSToolName": "Włączono syntezę mowy", "enableTTSToolDescription": "Pozwól aplikacji generować mowę z tekstu dla fragmentów tekstu w Twoim języku docelowym.", - "couldNotFindTTS": "Nie mogliśmy znaleźć silnika syntezy mowy dla Twojego aktualnego języka docelowego.", - "ttsInstructionsHyperlink": "Kliknij tutaj, aby zobaczyć instrukcje pobierania nowego głosu na swoim urządzeniu.", - "createAnAccount": "Załóż konto", - "signIn": "Zaloguj się", - "signUpWithEmail": "Zarejestruj się za pomocą email", - "signUpWithGoogle": "Zarejestruj się za pomocą Google", - "signUpWithApple": "Zarejestruj się za pomocą Apple", "yourUsername": "Twoja nazwa użytkownika", "yourEmail": "Twój email", - "pleaseEnterAnEmail": "Proszę wprowadzić adres email", - "signInWithGoogle": "Zaloguj się za pomocą Google", - "signInWithApple": "Zaloguj się za pomocą Apple", - "chooseYourAvatar": "Wybierz swój awatar", "iWantToLearn": "Chcę się uczyć", - "letsStart": "Zacznijmy", - "pleaseAgreeToTOS": "Proszę zaakceptować Warunki korzystania", "pleaseEnterEmail": "Proszę wprowadzić poprawny adres e-mail.", - "pleaseSelectALanguage": "Proszę wybrać język", "myBaseLanguage": "Mój język podstawowy", - "clickWordsInstructions": "🧻 Kliknij dowolne słowo, aby uzyskać szczegóły. 🤐", - "chooseBestDefinition": "Co oznacza to słowo?", "meaningSectionHeader": "Znaczenie:", "formSectionHeader": "Formy używane w czatach:", - "noEmojiSelectedTooltip": "Nie wybrano emotikony", "writingExercisesTooltip": "Pisanie", "listeningExercisesTooltip": "Słuchanie", "readingExercisesTooltip": "Czytanie", "meaningNotFound": "Nie można znaleźć znaczenia.", - "formsNotFound": "Nie można znaleźć form.", "chooseBaseForm": "Wybierz formę podstawową", "notTheCodeError": "Przepraszam, to nie jest kod!", "totalXP": "Łączna liczba punktów XP", @@ -4591,9 +4195,6 @@ "pickAnEmoji": "Jaki jest Twój ulubiony emoji dla '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Dopasuj znaczenia do słów w wiadomości!", "doubleClickToEdit": "Kliknij dwukrotnie, aby edytować.", - "removeFeature": "Usuń {feature}", - "chooseCorrectLabel": "Wybierz poprawną etykietę.", - "levelPopupTitle": "Gratulacje z osiągnięcia\nPoziomu {level}", "activityPlannerTitle": "Planer aktywności", "topicLabel": "Temat", "topicPlaceholder": "Wybierz temat...", @@ -4601,7 +4202,6 @@ "modePlaceholder": "Wybierz tryb...", "learningObjectiveLabel": "Cel nauki", "learningObjectivePlaceholder": "Wybierz cel nauki...", - "mediaLabel": "Media, które uczniowie powinni udostępnić", "languageOfInstructionsLabel": "Język instrukcji aktywności", "targetLanguageLabel": "Język docelowy", "cefrLevelLabel": "Poziom CEFR", @@ -4616,20 +4216,15 @@ "instructions": "Instrukcje", "numberOfLearners": "Liczba uczniów", "mustBeInteger": "Musi być liczbą całkowitą np. 1, 2, 3, ...", - "noLemmasFound": "Nie ma słownictwa z więcej niż {xp} punktów XP. Kontynuuj ćwiczenia!", "constructUsePvmDesc": "Wygenerowane w wiadomości głosowej", - "lockedMorphFeature": "Oczekuje na odblokowanie", "leaveSpaceDescription": "Opuszczając kurs, opuścisz wszystkie czaty w nim zawarte. Inni użytkownicy zobaczą, że opuściłeś kurs.", - "whatIsLemma": "Czym jest lemat?", "constructUseCorMmDesc": "Poprawne znaczenie wiadomości", "constructUseIncMmDesc": "Niepoprawne znaczenie wiadomości", "constructUseIgnMmDesc": "Zignorowane znaczenie wiadomości", "clickForMeaningActivity": "Kliknij tutaj, aby wziąć udział w wyzwaniu znaczenia", "meaning": "Znaczenie", "chatWith": "Grupa z {displayname}", - "slightlyOffensive": "Nieco obraźliwe", "clickOnEmailLink": "Kliknij w link w e-mailu, a następnie kontynuuj.\n\nSprawdź folder spam, jeśli e-mail nie dotarł.", - "whoIsAllowedToJoinThisChat": "Kto może dołączyć do tego czatu", "dontForgetPassword": "Nie zapomnij hasła!", "enableAutocorrectToolName": "Włącz automatyczną korektę urządzenia", "enableAutocorrectDescription": "Jeśli Twoje urządzenie obsługuje język, którego się uczysz, możesz włączyć automatyczną korektę, aby naprawiać typowe błędy podczas pisania.", @@ -4657,48 +4252,26 @@ "autocorrectNotAvailable": "Niestety, Twoja platforma nie jest obecnie obsługiwana dla tej funkcji. Bądź na bieżąco z dalszym rozwojem!", "pleaseUpdateApp": "Zaktualizuj aplikację, aby kontynuować.", "chooseEmojiInstructionsBody": "Dopasuj emotikony do słów, które najlepiej je reprezentują. Nie martw się! Brak punktów za niezgodę. 😅", - "pickAnEmojiFor": "Wybierz emotikonę dla {lemma}", "analyticsVocabListBody": "To jest cała Twoja słownictwo! Gdy zdobywasz punkty XP za każde słowo, będą one przechodzić od nasionka do pełnego rozkwitu. Kliknij dowolne słowo, aby zobaczyć więcej szczegółów.", "morphAnalyticsListBody": "To są wszystkie koncepcje gramatyczne w języku, którego się uczysz! Odblokujesz je, gdy napotkasz je podczas rozmowy. Kliknij, aby zobaczyć szczegóły.", "knockSpaceSuccess": "Poprosiłeś o dołączenie do tego kursu! Administrator odpowie na Twoją prośbę, gdy ją otrzyma 😊", - "joinByCode": "Dołącz kodem", "chooseWordAudioInstructionsBody": "Posłuchaj pełnej wiadomości. Następnie dopasuj dźwięki do słów.", "chooseMorphsInstructionsBody": "Kliknij kawałki układanki, aby odpowiedzieć na pytania gramatyczne!", - "inviteAndLaunch": "Zaproś i uruchom", - "createOwnChat": "Stwórz własny czat", "pleaseEnterInt": "Proszę wprowadzić liczbę", "home": "Strona główna", "join": "Dołącz", "readingAssistanceOverviewBody": "Kliknij przyciski poniżej, aby wziąć udział w mini-grach dopasowujących emotikony, dźwięki, znaczenia słów i koncepcje gramatyczne. Lub kliknij dowolne słowo, aby zobaczyć szczegóły.", - "learnByTexting": "Ucz się przez wiadomości", - "levelSummaryTrigger": "Zobacz podsumowanie", "levelSummaryPopupTitle": "Podsumowanie poziomu {level}", - "referFriends": "Poleć znajomym", - "referFriendDialogTitle": "Zaproś przyjaciela do rozmowy", - "referFriendDialogDesc": "Czy masz przyjaciela, który z entuzjazmem chce nauczyć się nowego języka z tobą? Skopiuj i wyślij ten link zaproszenia, aby dołączyć i zacząć rozmawiać z tobą już dziś.", - "youUnlocked": "Odblokowałeś", "resetInstructionTooltipsTitle": "Zresetuj podpowiedzi instrukcji", "resetInstructionTooltipsDesc": "Kliknij, aby wyświetlić podpowiedzi instrukcji, jak dla nowego użytkownika.", "selectForGrammar": "Wybierz ikonę gramatyki do aktywności i szczegółów.", - "newChatActivityTitle": "Dodać zabawną aktywność?", - "newChatActivityDesc": "Uczyń każdą grupową rozmowę przygodą z Planerem Aktywności! Ustaw fascynujące tematy i cele dla grupy, ożyw rozmowy za pomocą oszałamiających obrazów. Rozpal wyobraźnię i utrzymuj zabawę bez wysiłku!", - "exploreMore": "Odkryj więcej", "randomize": "Losuj", "clear": "Wyczyść", "makeYourOwnActivity": "Stwórz własną aktywność", "featuredActivities": "Polecane", - "goToChat": "Przejdź do rozmowy", "save": "Zapisz", - "selectActivity": "Wybierz aktywność", - "wordFocusListeningMultipleChoice": "Który dźwięk pasuje do słowa?", "startChat": "Rozpocznij rozmowę", "translationProblem": "Problem z tłumaczeniem", - "perfectTranslation": "Idealne tłumaczenie!", - "greatJobTranslation": "Świetna robota z tym tłumaczeniem!", - "goodJobTranslation": "Dobra robota przy tym tłumaczeniu.", - "makingProgress": "Robisz postępy!", - "keepPracticing": "Kontynuuj ćwiczenia!", - "niceJob": "Dobra robota!", "askToJoin": "Poproś o dołączenie", "emptyChatWarningTitle": "Czat jest pusty", "emptyChatWarningDesc": "Nie zaprosiłeś nikogo do swojego czatu. Przejdź do ustawień czatu, aby zaprosić kontakty lub bota. Możesz to zrobić również później.", @@ -4717,8 +4290,6 @@ "languageLevelC2Desc": "Potrafię zrozumieć praktycznie wszystko, co słyszę lub czytam, i wyrażać się płynnie i precyzyjnie.", "newVocab": "Nowe słownictwo", "newGrammar": "Nowe zagadnienia gramatyczne", - "congratulationsOnReaching": "Osiągnąłeś poziom {level}!", - "seeDetails": "Zobacz szczegóły", "choosePracticeMode": "Kliknij jeden z powyższych przycisków, aby rozpocząć ćwiczenie", "ban": "Zbanuj", "unban": "Odblokuj", @@ -4732,8 +4303,6 @@ "timesUsedWithAssistance": "Liczba użyć z pomocą", "shareInviteCode": "Udostępnij kod zaproszenia: {code}", "leaderboard": "Tablica wyników", - "welcomeUser": "Witamy {user}", - "joinSpaceOnboardingDesc": "Czy masz kod lub link zaproszenia do publicznego kursu?", "skipForNow": "Pomiń na razie", "permissions": "Uprawnienia", "spaceChildPermission": "Kto może dodawać nowe czaty do tego kursu", @@ -4741,12 +4310,8 @@ "defaultOption": "Domyślnie", "deleteChatDesc": "Czy na pewno chcesz usunąć ten czat? Zostanie on usunięty dla wszystkich uczestników, a wszystkie wiadomości w czacie nie będą już dostępne do ćwiczeń lub analityki nauki.", "deleteSpaceDesc": "Kurs i wybrane czaty zostaną usunięte dla wszystkich uczestników, a wszystkie wiadomości w czacie nie będą już dostępne do ćwiczeń lub analityki nauki. Ta operacja jest nieodwracalna.", - "chatWithActivities": "Czat z aktywnościami", "launch": "Uruchom", - "launchActivityToChats": "Uruchom aktywność w czatach", "searchChats": "Wyszukaj czaty", - "selectChats": "Wybierz czaty", - "selectChatToStart": "Gotowe! Wybierz czat, aby rozpocząć", "maxFifty": "Max 50", "configureSpace": "Konfiguruj kurs", "pinMessages": "Przypnij wiadomości", @@ -4760,9 +4325,7 @@ "announcements": "Ogłoszenia", "activities": "Aktywności", "access": "Dostęp", - "botSettings": "Ustawienia bota", "activitySuggestionTimeoutMessage": "Pracujemy ciężko, aby generować dla Ciebie więcej aktywności, sprawdź ponownie za minutę", - "accessSettingsWarning": "Ups! Wygląda na to, że nie masz uprawnień do ustawiania zasad dostępu do tego pokoju. Powinieneś sprawdzić te ustawienia, aby upewnić się, że są zgodne z Twoimi potrzebami, i skontaktować się z administratorem pokoju, jeśli chcesz je zmienić", "howSpaceCanBeFound": "Jak można znaleźć ten kurs", "private": "Prywatny", "cannotBeFoundInSearch": "Nie można znaleźć w wyszukiwarce", @@ -4775,16 +4338,6 @@ "canBeFoundViaKnock": "• prośba o dołączenie i zatwierdzenie przez administratora", "youHaveLeveledUp": "Awansowałeś!", "sendActivities": "Wyślij aktywności", - "getStarted": "Rozpocznij", - "getStartedBotChatDesc": "Rozmowa z AI to świetne miejsce na rozpoczęcie, a narzędzia do czytania, pisania, słuchania i mówienia w Pangea ułatwiają to!", - "getStartedCommunitiesDesc": "Nauka z społecznością to miejsce, w którym Pangea Chat błyszczy!\nMożesz dołączyć do swojej klasy, znaleźć kurs lub nawet stworzyć własny!", - "getStartedFriendsDesc": "Czy masz przyjaciela, który chce się uczyć z tobą?", - "getStartedBotChatComplete": "Dobra robota! Rozmawiasz z botem!", - "getStartedCommunitiesComplete": "Świetnie, dołączyłeś do kursu!", - "getStartedComplete": "Ukończyłeś tę sekcję!\nKontynuuj odkrywanie naszych niesamowitych funkcji, rozmawiając z przyjaciółmi!", - "getStartedFriendsComplete": "Hurra! Masz przyjaciół! 😉", - "getStartedBotChatButton": "Rozpocznij rozmowę!", - "getStartedFriendsButton": "Porozmawiaj z przyjacielem", "groupChat": "Czat grupowy", "directMessage": "Wiadomość prywatna", "newDirectMessage": "Nowa wiadomość prywatna", @@ -4800,7 +4353,6 @@ "mySavedActivities": "Moje zapisane aktywności", "noSavedActivities": "Brak zapisanych aktywności", "saveActivity": "Zapisz tę aktywność", - "yourSavedActivities": "Zapisane aktywności", "failedToPlayVideo": "Nie udało się odtworzyć filmu", "done": "Gotowe", "inThisSpace": "W tym kursie", @@ -4839,37 +4391,27 @@ "maximumActivityParticipants": "Każda aktywność może mieć maksymalnie {count} uczestnik(i).", "pending": "Oczekujące", "inactive": "Nieaktywne", - "unjoinedActivityMessage": "Czy chcesz wziąć udział? Wybierz otwartą rolę!\nLub po prostu spędź czas i obejrzyj pokaz!", - "fullActivityMessage": "Śmiało, obejrzyj pokaz! Jeśli nie ma dostępnych otwartych ról, możesz obejrzeć czat!", "confirmRole": "Potwierdź rolę", "openRoleLabel": "OTWARTA", "joinedTheActivity": "👋 {username} dołączył jako {role}", "finishedTheActivity": "🎯 {username} zakończył tę aktywność", - "endActivityTitle": "Skończyłem", - "endActivityDesc": "Czy ukończyłeś cele?\nTo jest Twoje potwierdzenie, że odchodzisz od pisania wiadomości. Ale nie martw się, zabawa trwa dalej na czacie! Czuj się swobodnie, spędzaj czas i ciesz się pokazem, aż wszyscy klikną 'Skończone'.", "archiveToAnalytics": "Dodaj do moich ukończonych aktywności", "activitySummaryError": "Podsumowania aktywności niedostępne", "requestSummaries": "Żądaj podsumowań", - "loadingActivitySummary": "Wczytywanie podsumowania aktywności...", "generatingNewActivities": "Jesteś pierwszym użytkownikiem tego zestawu językowego! Prosimy o chwilę, przygotowujemy dla Ciebie aktywności.", - "requestAccessTitle": "Chcesz poprosić o dostęp do analityki?", + "requestAccessTitle": "Czy chcesz poprosić o dostęp do analityki?", "requestAccessDesc": "Czy chcesz poprosić o dostęp do analityki uczestników?\n\nJeśli uczestnicy się zgodzą, administratorzy tego kursu będą mogli zobaczyć ich:\n • łączny słownik\n • łączną gramatykę\n • łączną liczbę ukończonych sesji aktywności\n • konkretne użyte, poprawne i niepoprawne koncepty gramatyczne\n\nNie będą mogli zobaczyć ich:\n • wiadomości w czatach spoza kursu\n • listy słówek", "requestAccess": "Poproś o dostęp ({count})", "analyticsInactiveTitle": "Wnioski do nieaktywnych użytkowników nie mogły zostać wysłane", "analyticsInactiveDesc": "Nieaktywni użytkownicy, którzy nie zalogowali się od momentu wprowadzenia tej funkcji, nie zobaczą Twojego wniosku.\n\nPrzycisk „Poproś” pojawi się, gdy wrócą. Możesz ponownie wysłać wniosek, klikając przycisk „Poproś” pod ich nazwiskiem, gdy będzie dostępny.", "accessRequestedTitle": "Wniosek o dostęp do analityki", - "accessRequestedDesc": "Administratorzy „{space}” proszą o dostęp do Twojej analityki nauki.\n\nJeśli się zgodzisz, administratorzy tego kursu będą mogli zobaczyć Twoją:\n • łączną liczbę słówek\n • łączną liczbę konceptów gramatycznych\n • łączną liczbę ukończonych sesji aktywności\n • konkretne użycie konceptów gramatycznych, poprawne i niepoprawne\n\nNie będą mogli zobaczyć Twoich:\n • wiadomości w czatach poza kursem\n • listy słówek", - "allowAccess": "Zezwól na dostęp", - "denyAccess": "Odmów dostępu", + "accessRequestedDesc": "Proszący admin(i): {admin} \n\nAdministratorzy z „{space}” proszą o dostęp do Twojej analityki uczenia się.\n\nJeśli się zgodzisz, będą mogli zobaczyć Twoje:\n • całkowite słownictwo\n • całkowite pojęcia gramatyczne\n • całkowitą liczbę zakończonych sesji aktywności\n • konkretne pojęcia gramatyczne używane, poprawnie i niepoprawnie\n\nNie będą mogli zobaczyć Twoich:\n • wiadomości w czatach poza kursem\n • listy słownictwa", "adminRequestedAccess": "Administratorzy poprosili o dostęp do Twojej analityki.", "lastUpdated": "Ostatnia aktualizacja\n{time}", "activityFinishedMessage": "Wszystko zakończone!", "endForAll": "Zakończ dla wszystkich", "newCourse": "Nowy kurs", - "newCourseSubtitle": "Który plan kursu chcesz wybrać?", - "failedToLoadCourses": "Nie udało się załadować kursów", "numModules": "{num} modułów", - "numActivityPlans": "{num} planów aktywności", "coursePlan": "Plan kursu", "editCourseLater": "Możesz edytować tytuł szablonu, opisy i obraz kursu później.", "newCourseAccess": "Domyślnie kursy są prywatne i wymagają zatwierdzenia administratora, aby do nich dołączyć. Możesz edytować te ustawienia w dowolnym momencie.", @@ -4883,17 +4425,11 @@ "accessDesc": "Możesz uczynić swój kurs otwartym dla świata! Lub, uczynić go prywatnym i bezpiecznym.", "createGroupChatDesc": "Podczas gdy sesje aktywności zaczynają się i kończą, czaty grupowe pozostaną otwarte do rutynowej komunikacji.", "deleteDesc": "Tylko administratorzy mogą usunąć kurs. To działanie destrukcyjne, które usuwa wszystkich użytkowników i kasuje wszystkie wybrane czaty w kursie. Postępuj ostrożnie.", - "failedToLoadCourseInfo": "Nie udało się załadować informacji o kursie", "noCourseFound": "O, ten kurs potrzebuje planu!\n\nPlany kursów to sekwencje tematów i aktywności konwersacyjnych.", "additionalParticipants": "+ {num} innych", - "activityNotFoundForCourse": "Ta aktywność nie została znaleziona w kursie", - "courseChats": "Czaty kursu", - "myActivitySessions": "Moje sesje aktywności", "directMessages": "Wiadomości bezpośrednie", "whatNow": "Co teraz?", "chooseNextActivity": "Wybierz swoją następną aktywność!", - "seeInstructions": "Zobacz instrukcje", - "hideInstructions": "Ukryj instrukcje", "letsGo": "Chodźmy", "chooseRole": "Wybierz rolę!", "chooseRoleToParticipate": "Wybierz rolę, aby uczestniczyć!", @@ -4903,23 +4439,15 @@ "inviteFriends": "Zaproś znajomych", "waitNotDone": "Czekaj, nie skończyłem!", "waitingForOthersToFinish": "Czekanie na resztę do ukończenia...", - "saveToCompletedActivities": "Zapisz do ukończonych aktywności", "generatingSummary": "Analiza czatu i generowanie wyników", - "instructionsLanguage": "Język instrukcji", "findCourse": "Znajdź kurs", - "activityCompletedDesc": "Twoja ukończona aktywność została dodana do analityki, gdzie możesz przejrzeć i ćwiczyć używany język.", "pingParticipantsNotification": "{user} szuka użytkowników do dołączenia do sesji aktywności w {room}", "course": "Kurs", "courses": "Kursy", "courseName": "Nazwa kursu", "createNewCourse": "Nowy kurs", - "publicCourses": "Kursy publiczne", "goToCourse": "Przejdź do kursu: {course}", "activityComplete": "Ta aktywność została ukończona. Podsumowanie aktywności powinno być dostępne poniżej.", - "haventChattedMuch": "Wygląda na to, że nie rozmawiałeś zbyt dużo, spróbuj używać więcej słów! Jeśli czujesz, że osiągnąłeś cel, możesz zakończyć aktywność poniżej.", - "haveChatted": "Wygląda na to, że rozmawiasz od jakiegoś czasu! Jeśli czujesz, że osiągnąłeś cel, zakończ, aby zakończyć aktywność, a my wygenerujemy podsumowanie w czacie!", - "userDoneAndWaiting": "{num1}/{num2} uczestników zakończyło. Poczekaj, aż wszyscy skończą, a my wygenerujemy podsumowanie w czacie! \n\nJeśli chcesz dołączyć ponownie do rozmowy, kliknij przycisk kontynuuj w czacie.", - "othersDoneAndWaiting": "{num1}/{num2} zakończyło. Czy ukończyłeś swój cel?", "startNewSession": "Rozpocznij nową sesję", "joinOpenSession": "Dołącz do otwartej sesji", "less": "mniej", @@ -4929,7 +4457,6 @@ "openToJoin": "Otwarte do dołączenia", "results": "Wyniki", "activityDone": "Aktywność zakończona!", - "moreLabel": "więcej", "promoCodeInfo": "Kody promocyjne można wprowadzić na następnej stronie", "editsComingSoon": "Wkrótce będzie dostępna możliwość edytowania miast i aktywności.", "editing": "Edycja", @@ -4945,13 +4472,10 @@ "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", - "chooseLanguage": "Wybierz język.", + "chooseLanguage": "Wybierz język docelowy.", "planTrip": "Zaplanować podróż", "howAreYouTraveling": "Jak zamierzasz podróżować?", "unlockPrivateTrip": "Odblokuj prywatną podróż", @@ -4964,25 +4488,20 @@ "courseCode": "Jakie jest tajne hasło?", "courseCodeHint": "Kod podróży lub link", "unlockMyTrip": "Odblokuj moją podróż", - "anyLevel": "Dowolny poziom", "signupOption": "Jak chcesz się zarejestrować?", "withApple": "Z Apple", "withGoogle": "Z Google", "withEmail": "Z e-mailem", "createAccount": "Załóż konto", - "noCoursesFound": "Nie znaleziono kursów", "loginWithEmail": "Zaloguj się e-mailem", "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", - "allCefrLevels": "Wszystkie poziomy CEFR", "chatListTooltip": "Tutaj znajdziesz swoje wiadomości bezpośrednie! Kliknij avatar dowolnego użytkownika i „rozpocznij rozmowę”, aby wysłać wiadomość prywatną.", "directMessageBotTitle": "Wiadomość bezpośrednia Pangea Bot", "feedbackTitle": "Opinia o aktywności", - "feedbackDesc": "Jak można poprawić tę aktywność? Jeśli możesz podać szczegóły, dokonamy zmiany!", "feedbackHint": "Twoja opinia", "feedbackButton": "Prześlij opinię", "directMessageBotDesc": "Rozmowa z ludźmi jest bardziej zabawna, ale... AI jest zawsze gotowe!", @@ -5005,30 +4524,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5044,18 +4539,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5080,18 +4563,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5128,38 +4599,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5168,62 +4611,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5260,10 +4659,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5272,14 +4667,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5288,46 +4675,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5336,10 +4687,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5396,18 +4743,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5416,14 +4751,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5452,18 +4779,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5472,42 +4787,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5516,14 +4799,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5544,26 +4819,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5584,10 +4839,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5620,25 +4871,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5695,34 +4927,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5751,778 +4955,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7515,14 +5951,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7534,14 +5962,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7573,10 +5993,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7585,18 +6001,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7605,14 +6009,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7637,38 +6033,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7714,10 +6082,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7742,10 +6106,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7770,10 +6130,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7782,66 +6138,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7862,42 +6162,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7922,154 +6198,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8086,18 +6214,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8118,14 +6234,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8142,10 +6250,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8158,14 +6262,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8174,14 +6270,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8209,26 +6297,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8257,18 +6325,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8305,10 +6365,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9241,10 +7297,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9425,34 +7477,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9465,10 +7489,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9477,14 +7497,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9501,22 +7513,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9664,14 +7660,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9680,34 +7668,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9716,54 +7676,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9772,10 +7696,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9792,10 +7712,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9967,26 +7883,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10015,10 +7911,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10075,30 +7967,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10127,18 +8003,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10255,14 +8123,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10275,10 +8135,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10287,14 +8143,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10311,14 +8159,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10327,22 +8167,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10355,18 +8179,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10383,22 +8195,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10407,30 +8207,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10503,18 +8279,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10571,18 +8335,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10611,30 +8363,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10687,18 +8423,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10747,46 +8475,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10851,10 +8539,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11026,14 +8710,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11061,14 +8737,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11081,10 +8749,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11120,19 +8784,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11157,14 +8816,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11173,14 +8824,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11233,10 +8876,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11249,18 +8888,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11273,14 +8900,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11321,26 +8940,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11368,10 +8975,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11382,36 +8985,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11448,10 +9021,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11516,18 +9085,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11592,10 +9149,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11616,10 +9169,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11636,10 +9185,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11648,10 +9193,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11664,10 +9205,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11692,16 +9229,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Zaproś znajomych do aktywności", - "inviteFriendsToActivityCourse": "Zaproś znajomych do aktywności i kursu", "feedbackRespDesc": "Sprawdź jutro aktualizacje aktywności.", "activityDropdownDesc": "Gdy skończysz z tą aktywnością, kliknij poniżej", - "activityAnalyticsListBody": "To są Twoje ukończone aktywności! Po zakończeniu aktywności możesz je tutaj zobaczyć.", "languageMismatchTitle": "Niezgodność języków", "languageMismatchDesc": "Twój język docelowy nie zgadza się z językiem tej aktywności. Chcesz zaktualizować swój język docelowy?", "reportWordIssueTooltip": "Zgłoś problem z informacją o słowie", "tokenInfoFeedbackDialogTitle": "Informacje zwrotne o słowie", - "tokenInfoFeedbackDialogDesc": "AI popełnia błędy. Proszę opisz wszelkie problemy, które znalazłeś z powyższymi informacjami.", "noPublicCoursesFound": "Nie znaleziono publicznych kursów. Chcesz utworzyć nowy?", "noCourseTemplatesFound": "Nie mogliśmy znaleźć żadnych kursów dla Twojego języka docelowego. W międzyczasie możesz rozmawiać z Pangea Botem i wrócić później po więcej kursów.", "botActivityJoinFailMessage": "Pangea Bot odpowiada z opóźnieniem. Spróbuj ponownie później lub zaproś znajomego.", @@ -11709,14 +9242,6 @@ "leaveDesc": "Opuść tę przestrzeń i wszystkie czaty w niej", "selectAll": "Zaznacz wszystko", "deselectAll": "Odznacz wszystko", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11725,10 +9250,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11745,10 +9266,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11782,10 +9299,8 @@ "newMessageInPangeaChat": "📝 Nowa wiadomość w Pangea Chat", "shareCourse": "Udostępnij kurs", "addCourse": "Dodaj kurs", - "joinCourseWithCode": "Dołącz do kursu za pomocą kodu", "joinPublicCourse": "Dołącz do kursu publicznego", "vocabLevelsDesc": "To tutaj pojawią się słowa słownictwa, gdy je podniesiesz na wyższy poziom!", - "highlightVocabTooltip": "Podświetl docelowe słowa słownictwa poniżej, wysyłając je lub ćwicząc z nimi na czacie", "@startOwn": { "type": "String", "placeholders": {} @@ -11806,10 +9321,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11818,7 +9329,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nie znaleziono wiadomości prywatnych ani czatów. Upewnij się, że Twoje wyszukiwanie jest poprawnie napisane.", + "activityAnalyticsTooltipBody": "To są Twoje zapisane aktywności do przeglądu i ćwiczeń.", + "numSavedActivities": "Liczba zapisanych aktywności", + "saveActivityTitle": "Zapisz aktywność", + "saveActivityDesc": "Dobra robota! Zapisz tę aktywność do późniejszego przeglądu i ćwiczeń", + "levelInfoTooltip": "Tutaj możesz zobaczyć wszystkie punkty, które zdobyłeś i jak!", + "alreadyInCourseWithID": "Już jesteś w kursie z tym planem. Czy chcesz stworzyć kurs z tym samym planem, czy przejść do istniejącego kursu?", + "goToExistingCourse": "Przejdź do istniejącego kursu", + "emojiView": "Widok emoji", + "feedbackDialogDesc": "Też popełniam błędy! Czy jest coś, co mogłoby mi pomóc się poprawić?", + "contactHasBeenInvitedToTheCourse": "Kontakt został zaproszony do kursu", + "activityStatsButtonTooltip": "Informacje o aktywności", + "allow": "Zezwól", + "deny": "Odmów", + "enabledRenewal": "Włącz odnowienie subskrypcji", + "subscriptionEndsOn": "Subskrypcja kończy się", + "subscriptionRenewsOn": "Subskrypcja odnawia się", + "waitForSubscriptionChanges": "Zmiany w subskrypcji mogą chwilę potrwać, zanim zostaną odzwierciedlone w aplikacji.", + "subscribeReadingAssistance": "Subskrybuj, aby odblokować narzędzia do wiadomości", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrykański", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharski", + "arDisplayName": "Arabski", + "asDisplayName": "Asamski", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Ajmara", + "azDisplayName": "Azerbejdżański", + "baDisplayName": "Baszkirski", + "banDisplayName": "Baliński", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Białoruski", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bułgarski", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalski", + "bnBDDisplayName": "Bengalski (Bangladesz)", + "bnINDisplayName": "Bengalski (Indie)", + "brDisplayName": "Bretoński", + "bsDisplayName": "Bośniacki", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriacki", + "caDisplayName": "Kataloński", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdowski Centralny", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsykański", + "crhDisplayName": "Turecki Krymski", + "crsDisplayName": "Seselwa Kreolski Francuski", + "csDisplayName": "Czeski", + "cvDisplayName": "Czuwaski", + "cyDisplayName": "Walijski", + "daDisplayName": "Duński", + "deDisplayName": "Niemiecki", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Angielski", + "enAUDisplayName": "Angielski (Australia)", + "enGBDisplayName": "Angielski (Wielka Brytania)", + "enINDisplayName": "Angielski (Indie)", + "enUSDisplayName": "Angielski (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Hiszpański", + "esESDisplayName": "Hiszpański (Hiszpania)", + "esMXDisplayName": "Hiszpański (Meksyk)", + "euDisplayName": "Baskijski", + "faDisplayName": "Perski", + "ffDisplayName": "Fulah", + "fiDisplayName": "Fiński", + "filDisplayName": "Filipiński", + "fjDisplayName": "Fidżański", + "foDisplayName": "Faroeski", + "frDisplayName": "Francuski", + "frCADisplayName": "Francuski (Kanada)", + "frFRDisplayName": "Francuski (Francja)", + "fyDisplayName": "Zachodni Fryzyjski", + "gaDisplayName": "Irlandzki", + "gaaDisplayName": "Ga", + "gdDisplayName": "Szkocki Gaelic", + "glDisplayName": "Galicyjski", + "gnDisplayName": "Gwarańi", + "gomDisplayName": "Goańska Konkani", + "guDisplayName": "Gujarat", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawajski", + "heDisplayName": "Hebrajski", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Chorwacki", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitański Kreolski", + "huDisplayName": "Węgierski", + "hyDisplayName": "Ormiański", + "idDisplayName": "Indonezyjski", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandzki", + "itDisplayName": "Włoski", + "jaDisplayName": "Japoński", + "jvDisplayName": "Jawajski", + "kaDisplayName": "Gruziński", + "kkDisplayName": "Kazachski", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreański", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kaszmir", + "ktuDisplayName": "Kituba (Demokratyczna Republika Konga)", + "kuDisplayName": "Kurdyjski", + "kyDisplayName": "Kirgizki", + "laDisplayName": "Łaciński", + "lbDisplayName": "Luksemburski", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburski", + "lijDisplayName": "Ligurijski", + "lmoDisplayName": "Lombardzki", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litewski", + "ltgDisplayName": "Łatgalski", + "luoDisplayName": "Luo (Kenia i Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Łotewski", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagasy", + "miDisplayName": "Maory", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedoński", + "mlDisplayName": "Malajalam", + "mnDisplayName": "Mongolski", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malajski", + "msArabDisplayName": "Malajski (arabski)", + "msMYDisplayName": "Malajski (Malezja)", + "mtDisplayName": "Maltański", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmański", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norweski (Bokmål)", + "neDisplayName": "Nepalski", + "newDisplayName": "Newarski", + "nlDisplayName": "Holenderski", + "nlBEDisplayName": "Flemisza", + "noDisplayName": "Norweski", + "nrDisplayName": "Południowy Ndebele", + "nsoDisplayName": "Północny Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitański", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Pendżabski", + "paArabDisplayName": "Pendżabski (Shahmukhi)", + "paINDisplayName": "Pendżabski (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polski", + "psDisplayName": "Paszto", + "ptDisplayName": "Portugalski", + "ptBRDisplayName": "Portugalski (Brazylia)", + "ptPTDisplayName": "Portugalski (Portugalia)", + "quDisplayName": "Keczua", + "rajDisplayName": "Radżasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumuński", + "roMDDisplayName": "Mołdawski", + "romDisplayName": "Romani", + "ruDisplayName": "Rosyjski", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskryt", + "satDisplayName": "Santali", + "scnDisplayName": "Sycylijski", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Słowacki", + "slDisplayName": "Słoweński", + "smDisplayName": "Samoański", + "snDisplayName": "Shona", + "soDisplayName": "Somalijski", + "sqDisplayName": "Albański", + "srDisplayName": "Serbski", + "srMEDisplayName": "Czarnogórski", + "ssDisplayName": "Swati", + "stDisplayName": "Południowy Sotho", + "suDisplayName": "Sundajski", + "svDisplayName": "Szwedzki", + "swDisplayName": "Suahili", + "szlDisplayName": "Śląski", + "taDisplayName": "Tamilski", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadżycki", + "thDisplayName": "Tajski", + "tiDisplayName": "Tigrinia", + "tkDisplayName": "Turecki", + "tlDisplayName": "Tagalski", + "tnDisplayName": "Tswana", + "trDisplayName": "Turecki", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Ujgur", + "ukDisplayName": "Ukraiński", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indie)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbecki", + "viDisplayName": "Wietnamski", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidysz", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukateko", + "yueDisplayName": "Kantoński", + "yueCNDisplayName": "Kantoński (Chiny)", + "yueHKDisplayName": "Kantoński (Hongkong)", + "zhDisplayName": "Chiński", + "zhCNDisplayName": "Chiński (Uproszczony)", + "zhTWDisplayName": "Chiński (Tradycyjny)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11910,10 +10607,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Twój docelowy język nie pasuje do tej wiadomości. Zaktualizować swój docelowy język?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "To są wszyscy uczestnicy tego kursu. Kliknij na avatar dowolnego użytkownika i wybierz „rozpocznij rozmowę”, aby wysłać wiadomość prywatną.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "To słowo w słownictwie zostanie trwale usunięte z twojej analizy", + "woman": "Kobieta", + "man": "Mężczyzna", + "otherGender": "Inna", + "unselectedGender": "Wybierz opcję płci", + "gender": "Płeć", + "chatParticipantTooltip": "To wszyscy w tym czacie. Kliknij na avatar dowolnego użytkownika i wybierz „rozpocznij rozmowę”, aby wysłać wiadomość prywatną.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Narzędzia do nauki są wyłączone dla wiadomości, które nie są w twoim docelowym języku.", + "vocabEmoji": "Emoji słownictwa", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Poproś o regenerację", + "optionalRegenerateReason": "(Opcjonalne) Powód", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Ustawiłeś emoji dla {lemma}! Będziemy używać tego emoji do reprezentowania słowa w nadchodzących aktywnościach praktycznych.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Czekam na zakończenie logowania", + "ssoDialogDesc": "Otworzyliśmy nową kartę, abyś mógł się zalogować bezpiecznie.", + "ssoDialogHelpText": "🤔 Jeśli nie widzisz nowej karty, sprawdź swój blokadę wyskakujących okienek.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Wyłącz narzędzia językowe", + "disableLanguageToolsDesc": "Czy chcesz wyłączyć automatyczną pomoc językową?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Odmowa dostępu. Włącz uprawnienia do nagrywania, aby nagrywać wiadomości audio.", + "genericWebRecordingError": "Coś poszło nie tak. Zalecamy korzystanie z przeglądarki Chrome podczas nagrywania wiadomości.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Aby uzyskać najlepsze wrażenia podczas korzystania z tej aplikacji, proszę powiększyć rozmiar ekranu.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktywności do odblokowania następnego tematu", "activitiesToUnlockTopicDesc": "Ustaw liczbę aktywności do odblokowania następnego tematu kursu", "@activitiesToUnlockTopicTitle": { @@ -11923,5 +10738,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Poprawna praktyka definicji słownictwa", + "constructUseIncLMDesc": "Niepoprawna praktyka definicji słownictwa", + "constructUseCorLADesc": "Poprawna praktyka audio słownictwa", + "constructUseIncLADesc": "Niepoprawna praktyka audio słownictwa", + "constructUseBonus": "Bonus podczas praktyki słownictwa", + "practiceVocab": "Ćwicz słownictwo", + "selectMeaning": "Wybierz znaczenie", + "selectAudio": "Wybierz pasujące audio", + "congratulations": "Gratulacje!", + "anotherRound": "Kolejna runda", + "noActivityRequest": "Brak bieżącego żądania aktywności.", + "quit": "Zakończ", + "congratulationsYouveCompletedPractice": "Gratulacje! Ukończyłeś sesję ćwiczeń.", + "mustHave10Words": "Musisz mieć co najmniej 10 słówek do ćwiczenia. Spróbuj porozmawiać z przyjacielem lub Pangea Bot, aby odkryć więcej!", + "botSettings": "Ustawienia bota", + "activitySettingsOverrideWarning": "Język i poziom językowy określone przez plan aktywności", + "voice": "Głos", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index dd8c82364..34e340d40 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:30.651964", + "@@last_modified": "2026-01-07 14:25:09.370204", "copiedToClipboard": "Copiada para a área de transferência", "@copiedToClipboard": { "type": "String", @@ -3366,28 +3366,16 @@ "commandHint_logoutall": "Sair de todos os dispositivos ativos", "displayNavigationRail": "Mostrar barra de navegação no celular", "customReaction": "Reação personalizada", - "accountInformation": "Informações da conta", - "addGroupDescription": "Adicionar uma descrição ao chat", - "addNewFriend": "Adicionar novo amigo", - "alreadyHaveAnAccount": "Já tem uma conta?", - "createNewGroup": "Criar um novo chat", - "editChatPermissions": "Editar permissões do chat", "ignore": "Bloquear", "ignoredUsers": "Usuários bloqueados", "writeAMessageLangCodes": "Digite em {l1} ou {l2}...", "requests": "Solicitações", - "allCorrect": "É assim que eu diria! Legal!", - "newWayAllGood": "Não é exatamente assim que eu diria, mas parece bom!", - "othersAreBetter": "Hm, pode haver uma maneira melhor de dizer isso.", "holdForInfo": "Clique e segure para informações da palavra.", "greenFeedback": "Isso é o que eu colocaria!", "yellowFeedback": "Hm, você pode tentar isso e ver se funciona! Para usar esta palavra, basta clicar nela novamente.", "redFeedback": "Acho que isso não está certo...", "itInstructionsTitle": "Posso ajudar você a traduzir!", "itInstructionsBody": "Você pode clicar e segurar opções para obter informações da palavra.", - "oneday": "Últimas 24 horas", - "oneweek": "Últimos 7 dias", - "onemonth": "Mês passado", "gaTooltip": "L2 usar com assistência gramatical", "taTooltip": "L2 com assistência de tradução", "unTooltip": "Outro", @@ -3397,58 +3385,27 @@ "interactiveTranslatorAllowed": "Escolha do Estudante", "interactiveTranslatorRequired": "Obrigatório", "notYetSet": "Ainda não definido", - "myLearning": "Meus Análises", "waTooltip": "L2 sem assistência", - "changeDateRange": "Alterar intervalo de datas", - "classDescription": "Descrição", - "addStudents": "Convidar usuários por link ou código", - "copyClassLink": "Copiar link de convite", - "copyClassCode": "Copiar código de convite", - "inviteStudentByUserName": "Convidar usuários por nome de usuário", "languageSettings": "Configurações de idioma", "interactiveTranslator": "Assistência de tradução", - "shareVideo": "Compartilhar vídeo", - "shareVideoDesc": "Ative esta opção para permitir que os estudantes compartilhem vídeos nos chats.", - "shareFiles": "Compartilhar Arquivos", - "selectLanguageLevel": "Selecionar nível de idioma", "noIdenticalLanguages": "Por favor, escolha idiomas base e alvo diferentes", - "iWantALanguagePartnerFrom": "É de:", - "worldWide": "Mundial", - "noResults": "Nenhum resultado! Tente ampliar sua busca.", "searchBy": "Pesquisar por país e idiomas", - "iWantAConversationPartner": "Quero um parceiro de conversa que", - "iWantALanguagePartnerWhoSpeaks": "Fala:", - "iWantALanguagePartnerWhoIsLearning": "Está aprendendo:", "joinWithClassCode": "Participar do curso", - "joinWithClassCodeHint": "Digite o código de convite", - "languageLevelPreA1": "Total Iniciante (Pré A1)", - "languageLevelA1": "Iniciante (A1)", - "languageLevelA2": "Elementar (A2)", - "languageLevelB1": "Intermediário (B1)", - "languageLevelB2": "Intermediário Superior (B2)", - "languageLevelC1": "Avançado (C1)", - "languageLevelC2": "Mestria (C2)", + "languageLevelPreA1": "Iniciante Baixo (Pré A1)", + "languageLevelA1": "Novato Mid (A1)", + "languageLevelA2": "Iniciante Alto (A2)", + "languageLevelB1": "Intermediário Médio (B1)", + "languageLevelB2": "Avançado Baixo (B2)", + "languageLevelC1": "Avançado Médio (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Alterar o nome", "changeTheNameOfTheChat": "Alterar o nome do chat", - "askPangeaBot": "Peça ao Pangea Bot uma definição contextual.", "sorryNoResults": "Desculpe, sem resultados.", "ignoreInThisText": "Ignorar", - "helpMeTranslate": "Sim!", - "needsItShortMessage": "Fora do alvo", "needsItMessage": "Espere, isso não é {targetLanguage}! Você precisa de ajuda para traduzir?", - "needsIgcMessage": "Esta mensagem contém um erro gramatical.", - "tokenTranslationTitle": "Uma palavra está na sua língua base.", - "spanTranslationDesc": "Veja as possíveis traduções abaixo.", - "spanTranslationTitle": "Algumas palavras estão na sua língua base.", - "l1SpanAndGrammarTitle": "Fora do idioma alvo", - "l1SpanAndGrammarDesc": "Isso pode estar na sua língua base ou pode ser um erro gramatical.", - "otherTitle": "Você cometeu um erro.", - "otherDesc": "Veja as possíveis correções abaixo.", "countryInformation": "Meu país", - "myLanguages": "Minhas línguas base e alvo", "targetLanguage": "Língua alvo", "sourceLanguage": "Língua base", - "languagesISpeak": "Línguas que falo", "updateLanguage": "Minhas línguas", "whatLanguageYouWantToLearn": "Qual idioma você quer aprender?", "whatIsYourBaseLanguage": "Qual é o seu idioma base?", @@ -3463,13 +3420,8 @@ "errorDisableLanguageAssistanceUserDesc": "Clique aqui para atualizar as configurações de assistência de tradução e gramática", "errorDisableITClassDesc": "Assistência de tradução está desativada para o curso em que esta conversa está.", "errorDisableIGCClassDesc": "Assistência de gramática está desativada para o curso em que esta conversa está.", - "itIsDisabled": "Tradução Interativa está desativada", - "igcIsDisabled": "Verificação Gramatical Interativa está desativada", - "goToLearningSettings": "Ir para Configurações de Aprendizado", "error405Title": "Idiomas não configurados", "error405Desc": "Por favor, configure seus idiomas em Menu Principal > Configurações de Aprendizado.", - "loginOrSignup": "Entrar com", - "iAgreeToThe": "Concordo com o ", "termsAndConditions": "Termos e Condições", "andCertifyIAmAtLeast13YearsOfAge": " e certifico que tenho pelo menos 16 anos de idade.", "error502504Title": "Uau, há muitos estudantes online!", @@ -3477,40 +3429,21 @@ "error404Title": "Erro de tradução!", "error404Desc": "O Pangea Bot não tem certeza de como traduzir isso...", "errorPleaseRefresh": "Estamos investigando! Por favor, recarregue e tente novamente.", - "toggleIT": "Tradução Interativa", - "toggleIGC": "Verificação Gramatical Interativa", - "toggleToolSettingsDescription": "Aqui você pode alternar as configurações do seu ferramenta de idioma individual.", "connectedToStaging": "Conectado ao Staging", "learningSettings": "Configurações de aprendizagem", - "sendVoiceNotes": "Enviar Notas de Voz", - "sendVoiceNotesDesc": "Ative isto para permitir que os estudantes enviem notas de voz nos chats.", - "chatTopic": "Tópico do chat", - "chatTopicDesc": "Defina um tópico de chat", - "inviteStudentByUserNameDesc": "Se seu estudante já tiver uma conta, você pode procurá-lo.", "participants": "Participantes", - "almostPerfect": "Parece certo! Aqui está o que eu teria dito.", - "prettyGood": "Muito bom! Aqui está o que eu teria dito.", - "letMeThink": "Hmm, vamos ver como você se saiu!", "clickMessageTitle": "Precisa de ajuda?", "clickMessageBody": "Clique em uma mensagem para ferramentas de idioma como tradução, reprodução e mais!", - "understandingMessagesTitle": "Definições e traduções!", - "understandingMessagesBody": "Clique nas palavras sublinhadas para obter definições. Traduza com as opções de mensagem (superior direito).", "allDone": "Tudo pronto!", "vocab": "Vocabulário", "low": "Temos evidências de que o usuário não entende essas palavras.", "medium": "Essas palavras foram usadas. Não está claro se as palavras são totalmente compreendidas ou não.", "high": "Temos evidências de que o usuário entende essas palavras.", - "unknownProficiency": "Essas palavras não foram usadas no Pangea Chat.", - "changeView": "Alterar visualizações.", - "clearAll": "Limpar todas as palavras?", - "generateVocabulary": "Gerar vocabulário a partir do título e descrição", - "generatePrompts": "Gerar prompts", "subscribe": "Inscrever-se", "getAccess": "Inscreva-se agora!", "subscriptionDesc": "Mensagens são gratuitas! Inscreva-se para desbloquear tradução interativa, verificação gramatical e análises de aprendizagem.", "subscriptionManagement": "Gerenciamento de assinatura", "currentSubscription": "Assinatura Atual", - "changeSubscription": "Alterar sua assinatura", "cancelSubscription": "Cancelar sua assinatura", "selectYourPlan": "Selecione seu Plano", "subsciptionPlatformTooltip": "Por favor, faça login no seu dispositivo original para gerenciar seu plano de assinatura", @@ -3519,9 +3452,6 @@ "paymentHistory": "Histórico de Pagamentos", "emptyChatDownloadWarning": "Não é possível baixar chat vazio", "update": "Atualizar", - "updateDesc": "Agora você pode atualizar este aplicativo de {localVersion} para {storeVersion}", - "maybeLater": "Talvez Mais Tarde", - "mainMenu": "Menu Principal", "toggleImmersionMode": "Modo de Imersão", "toggleImmersionModeDesc": "Quando ativado, todas as mensagens são exibidas no seu idioma de destino. Esta configuração é mais útil em trocas de idiomas.", "itToggleDescription": "Esta ferramenta de aprendizado de idiomas identificará palavras no seu idioma base e ajudará você a traduzi-las para o seu idioma de destino. Embora raro, a IA pode cometer erros de tradução.", @@ -3536,212 +3466,13 @@ "definitionsToolDescription": "Quando ativado, palavras sublinhadas em azul podem ser clicadas para obter definições. Clique nas mensagens para acessar definições.", "translationsToolDescrption": "Quando ativado, clique em uma mensagem e no ícone de tradução para ver uma mensagem na sua língua base.", "welcomeBack": "Bem-vindo de volta! Se você fez parte do piloto de 2023-2024, entre em contato conosco para sua assinatura piloto especial. Se você é um professor que possui (ou cuja instituição possui) licenças para sua turma, entre em contato conosco para sua assinatura de professor.", - "kickAllStudents": "Remover Todos os Estudantes", - "kickAllStudentsConfirmation": "Tem certeza de que deseja remover todos os estudantes?", - "inviteAllStudents": "Convidar Todos os Estudantes", - "inviteAllStudentsConfirmation": "Tem certeza de que deseja convidar todos os estudantes?", - "inviteUsersFromPangea": "Adicionar administradores", - "redeemPromoCode": "Resgatar Código Promocional", - "enterPromoCode": "Digite o Código Promocional", "downloadTxtFile": "Baixar Arquivo de Texto", "downloadCSVFile": "Baixar Arquivo CSV", "promotionalSubscriptionDesc": "Você atualmente possui uma assinatura promocional vitalícia. Envie uma mensagem para support@pangea.chat para ajuda na alteração da sua assinatura.", "originalSubscriptionPlatform": "Assinatura adquirida através de {purchasePlatform}", "oneWeekTrial": "Teste de Uma Semana", "downloadXLSXFile": "Baixar Arquivo Excel", - "abDisplayName": "Abecásio", - "aaDisplayName": "Afar", - "afDisplayName": "Africâner", - "akDisplayName": "Akan", - "sqDisplayName": "Albanês", - "amDisplayName": "Amárico", - "arDisplayName": "Árabe", - "anDisplayName": "Aragonês", - "hyDisplayName": "Armênio", - "asDisplayName": "Assamês", - "avDisplayName": "Avarico", - "aeDisplayName": "Avestano", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijano", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basco", - "beDisplayName": "Bielorrusso", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bósnio", - "brDisplayName": "Bretão", - "bgDisplayName": "Búlgaro", - "myDisplayName": "Birmanês", - "caDisplayName": "Catalão, Valenciano", - "chDisplayName": "Chamorro", - "ceDisplayName": "Checheno", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinês", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corso", - "crDisplayName": "Cree", - "hrDisplayName": "Croata", - "csDisplayName": "Tcheco", - "daDisplayName": "Dinamarquês", - "dvDisplayName": "Divehi; Dhivehi; Maldivo;", - "nlDisplayName": "Holandês", - "enDisplayName": "Inglês", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estoniano", - "eeDisplayName": "Ewe", - "foDisplayName": "Feroês", - "fjDisplayName": "Fijiano", - "fiDisplayName": "Finlandês", - "frDisplayName": "Francês", - "ffDisplayName": "Fula; Fula; Pulaar; Pular", - "glDisplayName": "Galego", - "kaDisplayName": "Georgiano", - "deDisplayName": "Alemão", - "elDisplayName": "Grego Moderno", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitiano, Crioulo Haitiano", - "haDisplayName": "Haúça", - "heDisplayName": "Hebraico (moderno)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Húngaro", - "iaDisplayName": "Interlíngua", - "idDisplayName": "Indonésio", - "ieDisplayName": "Interlíngua", - "gaDisplayName": "Irlandês", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandês", - "itDisplayName": "Italiano", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonês", - "jvDisplayName": "Javanês", - "klDisplayName": "Kalaallisut, Greenlandês", - "knDisplayName": "Canarês", - "krDisplayName": "Kanuri", - "ksDisplayName": "Cachemir", - "kkDisplayName": "Cazaque", - "kmDisplayName": " Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Quinuan", - "kyDisplayName": "Quirguiz, Kirguiz", - "kvDisplayName": "Comi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreano", - "kuDisplayName": "Curdo", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latim", - "lbDisplayName": "Luxemburguês, Letzeburguês", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburguês, Limburguês, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiano", - "ltDisplayName": "Lituano", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letão", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedônio", - "mgDisplayName": "Malgaxe", - "msDisplayName": "Malai", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltês", - "miDisplayName": "Maori", - "mrDisplayName": "Marata (Marāṭhī)", - "mhDisplayName": "Marshalês", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norueguês Bokmål", - "ndDisplayName": "Ndebele do Norte", - "neDisplayName": "Nepalês", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norueguês Nynorsk", - "noDisplayName": "Norueguês", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele do Sul", - "ocDisplayName": "Occitano", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Eclesiástico Antigo, Eclesiástico Eclesiástico, Eclesiástico Eclesiástico, Velho Búlgaro, Velho Eclesiástico", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetic, Osseto", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persa", - "plDisplayName": "Polonês", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Português", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romeno, Moldavo", - "ruDisplayName": "Russo", - "saDisplayName": "Sânscrito (Saṃskṛta)", - "scDisplayName": "Sardo", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami do Norte", - "smDisplayName": "Samoano", - "sgDisplayName": "Sango", - "srDisplayName": "Sérvio", - "gdDisplayName": "Gaélico escocês, gaélico", - "snDisplayName": "Shona", - "siDisplayName": "Cingalês, cingalês", - "skDisplayName": "Eslovaco", - "slDisplayName": "Esloveno", - "soDisplayName": "Somali", - "stDisplayName": "Sotho do Sul", - "esDisplayName": "Espanhol", - "suDisplayName": "Sundanês", - "swDisplayName": "Suaíli", - "ssDisplayName": "Swati", - "svDisplayName": "Sueco", - "taDisplayName": "Tâmil", - "teDisplayName": "Telugo", - "tgDisplayName": "Tajique", - "thDisplayName": "Tailandês", - "tiDisplayName": "Tigrínia", - "boDisplayName": "Tibetano padrão, tibetano, central", - "tkDisplayName": "Turcomeno", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Ilhas Tonga)", - "trDisplayName": "Turco", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tártaro", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiano", - "ugDisplayName": "Uigur, Uigur", - "ukDisplayName": "Ucraniano", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbeque", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamita", - "voDisplayName": "Volapük", - "waDisplayName": "Valão", - "cyDisplayName": "Galês", - "woDisplayName": "Wolof", - "fyDisplayName": "Frísio Ocidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Iídiche", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Desconhecido", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havaiano", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Múltiplo", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebraico", - "jwDisplayName": "Javanês", - "moDisplayName": "Moldávio", - "shDisplayName": "Servo-Croata", "wwCountryDisplayName": "Mundo", "afCountryDisplayName": "Afeganistão", "axCountryDisplayName": "Ilhas Aland", @@ -3989,41 +3720,25 @@ "yeCountryDisplayName": "Iêmen", "zmCountryDisplayName": "Zâmbia", "zwCountryDisplayName": "Zimbábue", - "pay": "Pagar", - "allPrivateChats": "Conversas privadas", - "unknownPrivateChat": "Conversa privada desconhecida", + "pay": "Finalizar compra", "invitedToSpace": "{user} convidou você para participar de um curso: {space}! Deseja aceitar?", - "declinedInvitation": "Convite recusado", - "acceptedInvitation": "Convite aceito", "youreInvited": "📩 Você foi convidado!", "invitedToChat": "{user} convidou você para participar de um chat: {name}! Deseja aceitar?", "monthlySubscription": "Mensal", "yearlySubscription": "Anual", "defaultSubscription": "Assinatura Pangea Chat", "freeTrial": "Período de teste gratuito", - "grammarAnalytics": "Análise de erros", "total": "Total: ", "noDataFound": "Dados não encontrados", - "promoSubscriptionExpirationDesc": "Sua assinatura atual é promocional e expira em {expiration}. Envie uma mensagem para support@pangea.chat para obter ajuda na alteração da sua assinatura.", - "emptyChatNameWarning": "Por favor, insira um nome para esta conversa", "blurMeansTranslateTitle": "Por que a mensagem está borrada?", "blurMeansTranslateBody": "Enquanto o Modo Imersão estiver ativado, mensagens enviadas no seu idioma base ficarão borradas enquanto o Pangea Bot as traduz para o seu idioma de destino. O Modo Imersão pode ser ativado ou desativado nas configurações individuais e do curso.", - "someErrorTitle": "Hm, algo não está certo", - "someErrorBody": "Pode ser um erro ou algo na sua língua base.", "bestCorrectionFeedback": "Isso mesmo!", "distractorFeedback": "Não está exatamente certo.", "bestAnswerFeedback": "Isso mesmo!", "definitionDefaultPrompt": "O que essa palavra significa?", "practiceDefaultPrompt": "Qual é a melhor resposta?", "correctionDefaultPrompt": "Qual é a melhor substituição?", - "itStartDefaultPrompt": "Você quer ajuda para traduzir?", - "lockedChatWarning": "🔒 Este chat foi bloqueado", - "lockChat": "Bloquear Chat", - "suggestToChat": "Sugerir este chat", - "suggestToChatDesc": "Chats sugeridos aparecerão nas listas de chat", "acceptSelection": "Aceitar Correção", - "acceptSelectionAnyway": "Usar isto mesmo assim", - "makingActivity": "Criando atividade", "why": "Por quê?", "definition": "Definição", "exampleSentence": "Exemplo de frase", @@ -4031,128 +3746,55 @@ "reportMessageTitle": "{reportingUserId} reportou uma mensagem de {reportedUserId} no chat {roomName}", "reportMessageBody": "Mensagem: {reportedMessage}\nRazão: {reason}", "noTeachersFound": "Nenhum professor encontrado para relatar", - "viewArchive": "Ver Arquivo", "trialExpiration": "Seu período de teste gratuito expira em {expiration}", "freeTrialDesc": "Novos usuários recebem uma semana de teste gratuito do Pangea Chat", "activateTrial": "Teste Gratuito de 7 Dias", "successfullySubscribed": "Você assinou com sucesso!", "clickToManageSubscription": "Clique aqui para gerenciar sua assinatura.", - "errorGettingAudio": "Erro ao obter áudio. Por favor, atualize e tente novamente.", "signUp": "Inscrever-se", "pleaseChooseAtLeastChars": "Por favor, escolha pelo menos {min} caracteres.", "noEmailWarning": "Por favor, insira um endereço de email válido. Caso contrário, você não poderá redefinir sua senha. Se não quiser, toque novamente no botão para continuar.", "pleaseEnterValidEmail": "Por favor, insira um endereço de email válido.", "pleaseChooseAUsername": "Por favor, escolha um nome de usuário", - "chooseAUsername": "Escolha um nome de usuário", "define": "Definir", "listen": "Ouvir", - "addConversationBot": "Ativar Bot de Conversa", - "addConversationBotDesc": "Adicione um bot a esta conversa", - "convoBotSettingsDescription": "Editar tópico de conversa e dificuldade", - "enterAConversationTopic": "Insira um tópico de conversa", - "conversationTopic": "Tópico de conversa", - "enableModeration": "Ativar moderação", - "enableModerationDesc": "Ative a moderação automática para revisar mensagens antes de serem enviadas", - "conversationLanguageLevel": "Qual é o nível de idioma desta conversa?", - "showDefinition": "Mostrar definição", - "subscriptionPopupTitle": "Esta frase pode conter um erro gramatical...", - "subscriptionPopupDesc": "Assine hoje para desbloquear tradução e correção gramatical!", - "seeOptions": "Ver opções", - "continuedWithoutSubscription": "Continuar sem assinatura", "trialPeriodExpired": "Seu período de teste expirou", - "selectToDefine": "Clique em qualquer palavra para ver sua definição!", "translations": "traduções", "messageAudio": "áudio da mensagem", "definitions": "definições", "subscribedToUnlockTools": "Assine para desbloquear tradução interativa, verificação gramatical, reprodução de áudio, atividades de prática personalizadas e análises de aprendizagem!", "translationTooltip": "Traduzir", - "audioTooltip": "Reproduzir Áudio", "speechToTextTooltip": "Transcrição", - "certifyAge": "Certifico que tenho mais de {age} anos de idade", "kickBotWarning": "Remover o Pangea Bot irá remover o bot de conversa deste chat.", - "joinToView": "Participe desta sala para ver detalhes", "refresh": "Atualizar", - "autoPlayTitle": "Reprodução Automática de Mensagens", - "autoPlayDesc": "Quando ativado, o áudio de texto para fala das mensagens será reproduzido automaticamente ao ser selecionado.", "messageAnalytics": "Análise de Mensagens", "words": "Palavras", "score": "Pontuação", "accuracy": "Precisão", "points": "Pontos", "noPaymentInfo": "Nenhuma informação de pagamento necessária!", - "conversationBotModeSelectDescription": "Atividade de chat", - "conversationBotModeSelectOption_discussion": "Discussão", - "conversationBotModeSelectOption_custom": "Personalizado", - "conversationBotModeSelectOption_conversation": "Conversa", - "conversationBotModeSelectOption_textAdventure": "Aventura de Texto", - "conversationBotModeSelectOption_storyGame": "Jogo de História", - "conversationBotDiscussionZone_title": "Configurações de Discussão", - "conversationBotDiscussionZone_discussionTopicLabel": "Tópico de Discussão", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Defina o tópico de discussão", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Palavras-chave de discussão", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Definir palavras-chave de discussão", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista separada por vírgulas de palavras-chave para orientar a discussão", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar aviso de discussão em uma programação", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre avisos de discussão", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responde à reação ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reação para enviar aviso de discussão", - "conversationBotCustomZone_title": "Configurações Personalizadas", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt do sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Definir prompt personalizado do sistema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Prompt personalizado do sistema ausente", - "botConfig": "Configurações do bot e atividade", - "botConfigNoPermissionTitle": "Sem permissão", - "botConfigNoPermissionMessage": "Contate o administrador da sala para alterar a configuração do bot", - "addConversationBotDialogTitleInvite": "Confirmar convite para o bot de conversa", - "addConversationBotButtonInvite": "Convidar", - "addConversationBotDialogInviteConfirmation": "Convidar", - "addConversationBotButtonTitleRemove": "Confirmar remoção do bot de conversa", - "addConversationBotButtonRemove": "Remover", - "addConversationBotDialogRemoveConfirmation": "Remover", - "conversationBotConfigConfirmChange": "Confirmar", - "conversationBotStatus": "Convidar bot", - "conversationBotTextAdventureZone_title": "Aventura de Texto", - "conversationBotTextAdventureZone_instructionLabel": "Instruções do Mestre do Jogo", - "conversationBotTextAdventureZone_instructionPlaceholder": "Defina as instruções do mestre do jogo", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Faltam instruções do mestre do jogo", - "studentAnalyticsNotAvailable": "Dados do estudante não disponíveis no momento", - "roomDataMissing": "Alguns dados podem estar ausentes em salas das quais você não é membro.", "updatePhoneOS": "Pode ser necessário atualizar a versão do sistema operacional do seu dispositivo.", "wordsPerMinute": "Palavras por minuto", "autoIGCToolName": "Executar assistência de escrita Pangea automaticamente", "autoIGCToolDescription": "Executar automaticamente a assistência de escrita de gramática e tradução do Pangea Chat antes de enviar minha mensagem.", - "runGrammarCorrection": "Verificar mensagem", - "grammarCorrectionFailed": "Problemas a resolver", - "grammarCorrectionComplete": "Parece bom!", "tooltipInstructionsTitle": "Não tem certeza do que isso faz?", "tooltipInstructionsMobileBody": "Pressione e segure itens para ver dicas de ferramenta.", "tooltipInstructionsBrowserBody": "Passe o mouse sobre os itens para ver dicas de ferramenta.", "chatCapacity": "Capacidade de chat", "roomFull": "Esta sala já está cheia.", - "topicNotSet": "O tópico não foi definido.", - "chatCapacityNotSet": "Este chat não tem limite de capacidade.", "chatCapacityHasBeenChanged": "Capacidade do chat alterada", "chatCapacitySetTooLow": "A capacidade do chat deve ser pelo menos {count}.", "chatCapacityExplanation": "A capacidade do chat limita o número de membros permitidos em um chat.", - "chatExceedsCapacity": "Este chat excede sua capacidade.", "tooManyRequest": "Muitas solicitações, por favor tente novamente mais tarde.", "enterNumber": "Por favor, insira um valor numérico inteiro.", "buildTranslation": "Construa sua tradução a partir das opções acima", - "nonexistentSelection": "A seleção não existe mais.", - "changeAnalyticsLanguage": "Alterar idioma de análise", "practice": "Praticar", "noLanguagesSet": "Nenhum idioma definido", - "noActivitiesFound": "Isso é suficiente por enquanto! Volte mais tarde para mais.", - "hintTitle": "Dica:", "speechToTextBody": "Para mensagens de voz, você pode ver uma transcrição, bem como a pontuação de Palavras Por Minuto do falante.", "versionNotFound": "Versão não encontrada", "fetchingVersion": "Buscando versão...", "versionFetchError": "Erro ao buscar a versão", "versionText": "Versão: {version}+{buildNumber}", - "languageButtonLabel": "Idioma: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Reprodução automática da tradução", - "interactiveTranslatorAutoPlayDesc": "Inicia o tradutor interativo sem pedir.", - "changeAnalyticsView": "Alterar visualização de análises", "l1TranslationBody": "Mensagens no seu idioma base não serão traduzidas.", "deleteSubscriptionWarningTitle": "Você tem uma assinatura ativa", "deleteSubscriptionWarningBody": "Excluir sua conta não cancelará automaticamente sua assinatura.", @@ -4160,9 +3802,7 @@ "error520Title": "Por favor, tente novamente.", "error520Desc": "Desculpe, não conseguimos entender sua mensagem...", "wordsUsed": "Palavras usadas", - "errorTypes": "Tipos de erro", "level": "Nível", - "canceledSend": "Envio cancelado", "morphsUsed": "Morfemas usados", "translationChoicesBody": "Clique e segure uma opção para obter uma dica.", "grammar": "Gramática", @@ -4172,7 +3812,6 @@ "reportContentIssueTitle": "Relatar problema de conteúdo", "feedback": "Feedback opcional", "reportContentIssueDescription": "Oh não! A IA pode facilitar experiências de aprendizagem personalizadas, mas... também tem alucinações. Por favor, forneça qualquer feedback que você tenha e tentaremos novamente.", - "changeContent": "Oh não! A IA pode facilitar experiências de aprendizagem personalizadas, mas... também tem alucinações. O que deve ser?", "clickTheWordAgainToDeselect": "Clique na palavra selecionada para desmarcá-la.", "l2SupportNa": "Indisponível", "l2SupportAlpha": "Alpha", @@ -4406,7 +4045,6 @@ "grammarCopySPC": "Especificidade", "grammarCopyPARTTYPE": "Tipo Partitivo", "grammarCopyINTREL": "Interrogativo-Relativo", - "grammarCopyNUMFORMpsor": "Número do Possuidor", "grammarCopyUNKNOWN": "Desconhecido", "grammarCopyNUMBERPSOR": "Número do Possuidor", "grammarCopyPOSS": "Possessivo", @@ -4452,28 +4090,14 @@ "grammarCopyVOICEdir": "Direto", "grammarCopyVOICEinv": "Inverso", "grammarCopyVOICErcp": "Recíproco", - "enterPrompt": "Por favor, insira um prompt do sistema", - "selectBotLanguage": "Selecionar idioma do bot", - "chooseVoice": "Escolha uma voz", - "enterLanguageLevel": "Por favor, insira um nível de idioma", - "enterDiscussionTopic": "Por favor, insira um tópico de discussão", - "selectBotChatMode": "Selecionar modo de chat", - "messageNotInTargetLang": "Mensagem não no idioma alvo", "other": "Outro", "levelShort": "NÍVEL {level}", - "botModeValidation": "Por favor, selecione um modo de chat", "clickBestOption": "Escolha as melhores opções para traduzir sua mensagem!", "completeActivitiesToUnlock": "Complete pelo menos uma atividade para desbloquear a tradução!", - "botSettingsSubtitle": "Convidar bot para moderar a atividade do chat", - "invitePeople": "Convidar usuários", "noCapacityLimit": "Sem limite de capacidade", "downloadGroupText": "Baixar texto do grupo", "notificationsOn": "Notificações ativadas", "notificationsOff": "Notificações desativadas", - "chatCanBeFoundViaSearch": "O chat pode ser encontrado via pesquisa", - "requireCodeToJoin": "Exigir código para entrar", - "canFindInSearch": "Pode ser encontrado na pesquisa", - "addChatToSpace": "Adicionar chat", "createChatAndInviteUsers": "Criar chat e convidar usuários", "updatedNewSpaceDescription": "Cursos permitem consolidar seus chats e construir comunidades privadas ou públicas.", "joinWithCode": "Entrar com código", @@ -4509,39 +4133,19 @@ "constructUseCollected": "Coletado no chat", "constructUseNanDesc": "Não aplicável", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Entrar com nome de usuário e senha", - "registrationEmailMessage": "Por favor, verifique seu e-mail com um link enviado lá. Em alguns casos, o e-mail leva até 5 minutos para chegar. Por favor, também verifique sua pasta de spam.", "enableTTSToolName": "Texto para fala ativado", "enableTTSToolDescription": "Permite que o aplicativo gere saída de texto para fala para trechos de texto no seu idioma de destino.", - "couldNotFindTTS": "Não conseguimos encontrar um mecanismo de texto para fala para o seu idioma de destino atual.", - "ttsInstructionsHyperlink": "Clique aqui para ver as instruções para baixar uma nova voz no seu dispositivo.", - "createAnAccount": "Criar uma conta", - "signIn": "Entrar", - "signUpWithEmail": "Inscreva-se com Email", - "signUpWithGoogle": "Inscreva-se com Google", - "signUpWithApple": "Inscreva-se com Apple", "yourUsername": "Seu nome de usuário", "yourEmail": "Seu e-mail", - "pleaseEnterAnEmail": "Por favor, insira um endereço de e-mail", - "signInWithGoogle": "Entrar com Google", - "signInWithApple": "Entrar com Apple", - "chooseYourAvatar": "Escolha seu avatar", "iWantToLearn": "Quero aprender", - "letsStart": "Vamos começar", - "pleaseAgreeToTOS": "Por favor, concorde com os Termos e Condições", "pleaseEnterEmail": "Por favor, insira um endereço de e-mail válido.", - "pleaseSelectALanguage": "Por favor, selecione um idioma", "myBaseLanguage": "Meu idioma base", - "clickWordsInstructions": "🧻 Clique em qualquer palavra para detalhes. 🤐", - "chooseBestDefinition": "O que essa palavra significa?", "meaningSectionHeader": "Significado:", "formSectionHeader": "Formas usadas em chats:", - "noEmojiSelectedTooltip": "Nenhum emoji selecionado", "writingExercisesTooltip": "Escrita", "listeningExercisesTooltip": "Audição", "readingExercisesTooltip": "Leitura", "meaningNotFound": "Significado não pôde ser encontrado.", - "formsNotFound": "Formas não puderam ser encontradas.", "chooseBaseForm": "Escolha a forma base", "notTheCodeError": "Desculpe, esse não é o código!", "totalXP": "XP Total", @@ -4581,9 +4185,6 @@ "pickAnEmoji": "Qual é seu emoji favorito para '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Combine os significados com as palavras na mensagem!", "doubleClickToEdit": "Clique duas vezes para editar.", - "removeFeature": "Remover {feature}", - "chooseCorrectLabel": "Escolha o rótulo correto.", - "levelPopupTitle": "Parabéns por alcançar\nNível {level}", "activityPlannerTitle": "Planejador de Atividades", "topicLabel": "Tópico", "topicPlaceholder": "Escolha um tópico...", @@ -4591,7 +4192,6 @@ "modePlaceholder": "Escolha um modo...", "learningObjectiveLabel": "Objetivo de aprendizagem", "learningObjectivePlaceholder": "Escolha um objetivo de aprendizagem...", - "mediaLabel": "Mídia que os aprendizes devem compartilhar", "languageOfInstructionsLabel": "Idioma das instruções da atividade", "targetLanguageLabel": "Idioma alvo", "cefrLevelLabel": "Nível CEFR", @@ -4606,20 +4206,15 @@ "instructions": "Instruções", "numberOfLearners": "Número de aprendizes", "mustBeInteger": "Deve ser um número inteiro, por exemplo, 1, 2, 3, ...", - "noLemmasFound": "Não há vocabulário com mais de {xp} XP. Continue praticando!", "constructUsePvmDesc": "Produzido em mensagem de voz", - "lockedMorphFeature": "Aguardando desbloqueio", "leaveSpaceDescription": "Ao sair do curso, você deixará todos os chats dentro dele. Outros usuários verão que você saiu do curso.", - "whatIsLemma": "O que é o lema?", "constructUseCorMmDesc": "Significado da mensagem correta", "constructUseIncMmDesc": "Significado da mensagem incorreta", "constructUseIgnMmDesc": "Significado da mensagem ignorada", "clickForMeaningActivity": "Clique aqui para um Desafio de Significado", "meaning": "Significado", "chatWith": "Grupo com {displayname}", - "slightlyOffensive": "Ligeiramente ofensivo", "clickOnEmailLink": "Por favor, clique no link do e-mail e prossiga.\n\nVerifique sua pasta de spam se o e-mail não tiver chegado.", - "whoIsAllowedToJoinThisChat": "Quem pode entrar neste chat", "dontForgetPassword": "Não esqueça sua senha!", "enableAutocorrectToolName": "Ativar autocorreção do dispositivo", "enableAutocorrectDescription": "Se seu dispositivo suportar o idioma que você está aprendendo, você pode ativar a autocorreção do dispositivo para corrigir erros comuns enquanto digita.", @@ -4647,48 +4242,26 @@ "autocorrectNotAvailable": "Infelizmente, sua plataforma não é suportada atualmente para esse recurso. Fique atento para mais desenvolvimentos!", "pleaseUpdateApp": "Por favor, atualize o aplicativo para continuar.", "chooseEmojiInstructionsBody": "Combine emojis com as palavras que eles representam melhor. Não se preocupe! Não há penalizações por discordar. 😅", - "pickAnEmojiFor": "Escolha um emoji para {lemma}", "analyticsVocabListBody": "Esta é toda a sua vocabulário! Conforme você ganha XP para cada palavra, elas passarão de broto a florada completa. Clique em qualquer palavra para ver mais detalhes.", "morphAnalyticsListBody": "Estes são todos os conceitos gramaticais na língua que você está aprendendo! Você os desbloqueará à medida que os encontrar ao conversar. Clique para detalhes.", "knockSpaceSuccess": "Você solicitou ingressar neste curso! Um administrador responderá à sua solicitação quando a receber 😊", - "joinByCode": "Entrar por código", "chooseWordAudioInstructionsBody": "Ouça a mensagem completa. Depois, associe os áudios às palavras.", "chooseMorphsInstructionsBody": "Clique nas peças do quebra-cabeça para perguntas de gramática!", - "inviteAndLaunch": "Lançar e convidar", - "createOwnChat": "Criar seu próprio chat", "pleaseEnterInt": "Por favor, insira um número", "home": "Início", "join": "Entrar", "readingAssistanceOverviewBody": "Clique nos botões abaixo para mini-jogos de combinação de emojis, áudios, significados de palavras e conceitos gramaticais. Ou clique em qualquer palavra para detalhes.", - "learnByTexting": "Aprenda enviando mensagens", - "levelSummaryTrigger": "Ver resumo", "levelSummaryPopupTitle": "Resumo do Nível {level}", - "referFriends": "Indique amigos", - "referFriendDialogTitle": "Convide um amigo para sua conversa", - "referFriendDialogDesc": "Você tem um amigo animado para aprender um novo idioma com você? Então copie e envie este link de convite para participar e começar a conversar com você hoje.", - "youUnlocked": "Você desbloqueou", "resetInstructionTooltipsTitle": "Redefinir dicas de instruções", "resetInstructionTooltipsDesc": "Clique para mostrar dicas de instruções como para um usuário totalmente novo.", "selectForGrammar": "Selecione um ícone de gramática para atividades e detalhes.", - "newChatActivityTitle": "Adicionar uma atividade divertida?", - "newChatActivityDesc": "Transforme cada conversa em grupo em uma aventura com o Planejador de Atividades! Defina tópicos e objetivos cativantes para o grupo e traga as conversas à vida com imagens impressionantes. Estimule discussões imaginativas e mantenha a diversão fluindo sem esforço!", - "exploreMore": "Explorar mais", "randomize": "Embaralhar", "clear": "Limpar", "makeYourOwnActivity": "Crie sua própria atividade", "featuredActivities": "Destaques", - "goToChat": "Ir para o chat", "save": "Salvar", - "selectActivity": "Selecionar atividade", - "wordFocusListeningMultipleChoice": "Qual áudio corresponde à palavra?", "startChat": "Iniciar um chat", "translationProblem": "Problema de tradução", - "perfectTranslation": "Tradução perfeita!", - "greatJobTranslation": "Ótimo trabalho com esta tradução!", - "goodJobTranslation": "Bom trabalho nesta tradução.", - "makingProgress": "Você está progredindo!", - "keepPracticing": "Continue praticando!", - "niceJob": "Bom trabalho!", "askToJoin": "Solicitar para participar", "emptyChatWarningTitle": "Chat vazio", "emptyChatWarningDesc": "Você não convidou ninguém para o seu chat. Vá para Configurações de Chat para convidar seus contatos ou o Bot. Você também pode fazer isso mais tarde.", @@ -4707,8 +4280,6 @@ "languageLevelC2Desc": "Posso entender praticamente tudo que ouço ou leio e me expressar fluentemente e com precisão.", "newVocab": "Novo vocabulário", "newGrammar": "Novos conceitos gramaticais", - "congratulationsOnReaching": "Você atingiu o Nível {level}!", - "seeDetails": "Ver detalhes", "choosePracticeMode": "Clique em um dos botões acima para iniciar uma atividade de prática", "ban": "Banir", "unban": "Desbanir", @@ -4722,8 +4293,6 @@ "timesUsedWithAssistance": "Vezes usadas com assistência", "shareInviteCode": "Compartilhar código de convite: {code}", "leaderboard": "Classificação", - "welcomeUser": "Bem-vindo {user}", - "joinSpaceOnboardingDesc": "Você tem um código ou link de convite para um curso público?", "skipForNow": "Pular por enquanto", "permissions": "Permissões", "spaceChildPermission": "Quem pode adicionar novas conversas a este curso", @@ -4731,12 +4300,8 @@ "defaultOption": "Padrão", "deleteChatDesc": "Tem certeza de que deseja excluir esta conversa? Ela será excluída para todos os participantes e todas as mensagens dentro da conversa não estarão mais disponíveis para prática ou análises de aprendizagem.", "deleteSpaceDesc": "O curso e quaisquer conversas selecionadas serão excluídos para todos os participantes e todas as mensagens dentro da conversa não estarão mais disponíveis para prática ou análises de aprendizagem. Esta ação não pode ser desfeita.", - "chatWithActivities": "Conversa com atividades", "launch": "Iniciar", - "launchActivityToChats": "Iniciar atividade nas conversas", "searchChats": "Pesquisar conversas", - "selectChats": "Selecionar conversas", - "selectChatToStart": "Concluído! Selecione uma conversa para começar", "maxFifty": "Máximo 50", "configureSpace": "Configurar curso", "pinMessages": "Fixar mensagens", @@ -4750,9 +4315,7 @@ "announcements": "Anúncios", "activities": "Atividades", "access": "Acesso", - "botSettings": "Configurações do bot", "activitySuggestionTimeoutMessage": "Estamos trabalhando duro para gerar mais atividades para você, por favor, volte em um minuto", - "accessSettingsWarning": "Ops! Parece que você não tem permissão para definir as regras de Acesso desta sala. Você deve verificar essas configurações para garantir que atendam às suas necessidades e falar com um administrador da sala se precisar alterá-las", "howSpaceCanBeFound": "Como este curso pode ser encontrado", "private": "Privado", "cannotBeFoundInSearch": "Não pode ser encontrado na pesquisa", @@ -4765,16 +4328,6 @@ "canBeFoundViaKnock": "• solicitação para entrar e aprovação do administrador", "youHaveLeveledUp": "Você subiu de nível!", "sendActivities": "Enviar atividades", - "getStarted": "Começar", - "getStartedBotChatDesc": "Conversar com IA é um ótimo lugar para começar, e as ferramentas de leitura, escrita, audição e fala do Pangea tornam isso fácil!", - "getStartedCommunitiesDesc": "Aprender com uma comunidade é onde o Pangea Chat brilha!\nVocê pode ingressar na sua turma, encontrar um curso ou até criar o seu próprio!", - "getStartedFriendsDesc": "Você tem um amigo que quer aprender com você?", - "getStartedBotChatComplete": "Muito bem! Você está conversando com o bot!", - "getStartedCommunitiesComplete": "Ótimo, você entrou em um curso!", - "getStartedComplete": "Você concluiu esta seção!\nContinue explorando nossos recursos incríveis conversando com amigos!", - "getStartedFriendsComplete": "Uhul! Você tem amigos! 😉", - "getStartedBotChatButton": "Começar a conversar!", - "getStartedFriendsButton": "Conversar com um amigo", "groupChat": "Chat em Grupo", "directMessage": "Mensagem Direta", "newDirectMessage": "Nova mensagem direta", @@ -4790,7 +4343,6 @@ "mySavedActivities": "Minhas Atividades Salvas", "noSavedActivities": "Nenhuma atividade salva", "saveActivity": "Salvar esta atividade", - "yourSavedActivities": "Atividades salvas", "failedToPlayVideo": "Falha ao reproduzir o vídeo", "done": "Concluído", "inThisSpace": "Neste espaço", @@ -4829,37 +4381,27 @@ "maximumActivityParticipants": "Cada Atividade pode ter no máximo {count} participante(s).", "pending": "Pendente", "inactive": "Inativo", - "unjoinedActivityMessage": "Quer participar? Escolha um papel aberto!\nOu apenas assista ao show!", - "fullActivityMessage": "Sinta-se à vontade para assistir ao show! Enquanto não houver papéis abertos para participar, você pode visualizar o chat!", "confirmRole": "Confirmar papel", "openRoleLabel": "ABERTO", "joinedTheActivity": "👋 {username} entrou como {role}", "finishedTheActivity": "🎯 {username} concluiu esta atividade", - "endActivityTitle": "Terminei", - "endActivityDesc": "Você completou os objetivos?\nEsta é sua confirmação de que está se afastando do chat. Mas não se preocupe, a diversão continua no chat! Sinta-se à vontade para ficar e aproveitar o show até que todos cliquem em 'Concluído'.", "archiveToAnalytics": "Adicionar às minhas Atividades Completadas", "activitySummaryError": "Resumos de atividades indisponíveis", "requestSummaries": "Solicitar resumos", - "loadingActivitySummary": "Carregando resumo da atividade...", "generatingNewActivities": "Você é o primeiro usuário deste par de idiomas! Por favor, aguarde um minuto, estamos preparando atividades especialmente para você.", - "requestAccessTitle": "Solicitar acesso à visualização de análises?", + "requestAccessTitle": "Solicitar acesso à análise?", "requestAccessDesc": "Gostaria de solicitar acesso para visualizar as análises dos participantes?\n\nSe os participantes concordarem, os administradores deste curso poderão ver:\n • vocabulário total\n • conceitos gramaticais totais\n • sessões de atividade concluídas\n • os conceitos gramaticais específicos usados, corretamente e incorretamente\n\nEles não poderão ver:\n • mensagens em chats fora do curso\n • lista de vocabulário", "requestAccess": "Solicitar acesso ({count})", "analyticsInactiveTitle": "Solicitações para usuários inativos não puderam ser enviadas", "analyticsInactiveDesc": "Usuários inativos que não fizeram login desde a introdução deste recurso não verão sua solicitação.\n\nO botão Solicitar aparecerá assim que eles retornarem. Você pode reenviar a solicitação mais tarde clicando no botão Solicitar sob o nome deles quando estiver disponível.", "accessRequestedTitle": "Solicitação de acesso às análises", - "accessRequestedDesc": "Os administradores de “{space}” estão solicitando acesso para visualizar suas análises de aprendizagem.\n\nSe você concordar, os administradores deste curso poderão ver:\n • vocabulário total\n • conceitos gramaticais totais\n • sessões de atividade concluídas\n • os conceitos gramaticais específicos usados, corretamente e incorretamente\n\nEles não poderão ver:\n • mensagens em chats fora do curso\n • lista de vocabulário", - "allowAccess": "Permitir Acesso", - "denyAccess": "Negar Acesso", + "accessRequestedDesc": "Solicitando admin(s): {admin} \n\nOs administradores de “{space}” estão solicitando visualizar suas análises de aprendizado.\n\nSe você concordar, eles poderão visualizar seu:\n • vocabulário total\n • total de conceitos gramaticais\n • total de sessões de atividade concluídas\n • os conceitos gramaticais específicos usados, corretamente e incorretamente\n\nEles não poderão visualizar seu:\n • mensagens em chats fora do curso\n • lista de vocabulário", "adminRequestedAccess": "Administradores solicitaram acesso às suas análises.", "lastUpdated": "Atualizado\n{time}", "activityFinishedMessage": "Tudo Concluído!", "endForAll": "Encerrar para todos", "newCourse": "Novo curso", - "newCourseSubtitle": "Qual plano de curso você gostaria de usar?", - "failedToLoadCourses": "Falha ao carregar cursos", "numModules": "{num} módulos", - "numActivityPlans": "{num} planos de atividade", "coursePlan": "Plano do Curso", "editCourseLater": "Você pode editar o título do modelo, descrições e imagem do curso posteriormente.", "newCourseAccess": "Por padrão, os cursos são privados e requerem aprovação do administrador para participar. Você pode editar essas configurações a qualquer momento.", @@ -4873,17 +4415,11 @@ "accessDesc": "Você pode tornar seu curso aberto ao mundo! Ou, tornar seu curso privado e seguro.", "createGroupChatDesc": "Enquanto sessões de atividade começam e terminam, os chats em grupo permanecerão abertos para comunicação rotineira.", "deleteDesc": "Somente administradores podem excluir um curso. Esta é uma ação destrutiva que remove todos os usuários e exclui todos os chats selecionados dentro do curso. Proceda com cautela.", - "failedToLoadCourseInfo": "Falha ao carregar informações do curso", "noCourseFound": "Oh, este curso precisa de um plano!\n\nPlanos de curso são uma sequência de tópicos e atividades de conversa.", "additionalParticipants": "+ {num} outros", - "activityNotFoundForCourse": "Esta atividade não foi encontrada dentro do curso", - "courseChats": "Chats do Curso", - "myActivitySessions": "Minhas Sessões de Atividade", "directMessages": "Mensagens Diretas", "whatNow": "E agora?", "chooseNextActivity": "Escolha sua próxima atividade!", - "seeInstructions": "Ver Instruções", - "hideInstructions": "Esconder Instruções", "letsGo": "Vamos lá", "chooseRole": "Escolha um papel!", "chooseRoleToParticipate": "Escolha um papel para participar!", @@ -4893,23 +4429,15 @@ "inviteFriends": "Convidar amigos", "waitNotDone": "Espere, ainda não terminei!", "waitingForOthersToFinish": "Aguardando os demais terminarem...", - "saveToCompletedActivities": "Salvar em atividades concluídas", "generatingSummary": "Analisando o chat e gerando resultados", - "instructionsLanguage": "Idioma das instruções", "findCourse": "Encontrar um curso", - "activityCompletedDesc": "Sua atividade concluída foi adicionada à análise onde você pode revisar e praticar o idioma que usou.", "pingParticipantsNotification": "{user} está procurando usuários para participar da sessão de atividade em {room}", "course": "Curso", "courses": "Cursos", "courseName": "Nome do curso", "createNewCourse": "Novo curso", - "publicCourses": "Cursos públicos", "goToCourse": "Ir para o curso: {course}", "activityComplete": "Esta atividade foi concluída. O resumo da atividade deve estar disponível abaixo.", - "haventChattedMuch": "Parece que você não conversou muito, tente usar mais palavras de vocabulário! Se sentir que completou seu objetivo, pode encerrar a atividade abaixo.", - "haveChatted": "Parece que você tem conversado por um tempo! Se sentir que completou seu objetivo, finalize para concluir a atividade e geraremos um resumo para você no chat!", - "userDoneAndWaiting": "{num1}/{num2} participantes terminaram. Aguarde todos terminarem, e geraremos um resumo para você no chat! \n\nSe desejar reentrar na conversa, clique no botão de continuar no chat.", - "othersDoneAndWaiting": "{num1}/{num2} concluídos. Você completou seu objetivo?", "startNewSession": "Iniciar nova sessão", "joinOpenSession": "Participar de sessão aberta", "less": "menos", @@ -4919,7 +4447,6 @@ "openToJoin": "Aberto para participar", "results": "Resultados", "activityDone": "Atividade Concluída!", - "moreLabel": "mais", "promoCodeInfo": "Códigos promocionais podem ser inseridos na próxima página", "editsComingSoon": "A capacidade de editar cidades e atividades estará disponível em breve.", "editing": "Editando", @@ -4935,13 +4462,10 @@ "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", - "chooseLanguage": "Escolha um idioma.", + "chooseLanguage": "Escolha um idioma de destino.", "planTrip": "Planeje sua viagem", "howAreYouTraveling": "Como você está viajando?", "unlockPrivateTrip": "Desbloqueie uma viagem privada", @@ -4954,25 +4478,20 @@ "courseCode": "Qual é a senha secreta?", "courseCodeHint": "Código ou link da viagem", "unlockMyTrip": "Desbloquear minha viagem", - "anyLevel": "Qualquer nível", "signupOption": "Como você deseja se inscrever?", "withApple": "Com Apple", "withGoogle": "Com Google", "withEmail": "Com Email", "createAccount": "Criar conta", - "noCoursesFound": "Nenhum curso encontrado", "loginWithEmail": "Entrar com email", "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", - "allCefrLevels": "Todos os níveis CEFR", "chatListTooltip": "Aqui você encontrará suas mensagens diretas! Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", "directMessageBotTitle": "Mensagem direta Pangea Bot", "feedbackTitle": "Feedback de Atividade", - "feedbackDesc": "Como a atividade pode ser melhorada? Se puder fornecer alguns detalhes, faremos a alteração!", "feedbackHint": "Seu feedback", "feedbackButton": "Enviar feedback", "directMessageBotDesc": "Conversar com humanos é mais divertido, mas... a IA está sempre pronta!", @@ -6105,30 +5624,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6144,18 +5639,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6180,18 +5663,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6228,38 +5699,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6268,62 +5711,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6360,10 +5759,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6372,14 +5767,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6388,46 +5775,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6436,10 +5787,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6496,18 +5843,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6516,14 +5851,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6552,18 +5879,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6572,42 +5887,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6616,14 +5899,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6644,26 +5919,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6684,10 +5939,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6720,25 +5971,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6795,34 +6027,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6851,778 +6055,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8615,14 +7051,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8634,14 +7062,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8673,10 +7093,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8685,18 +7101,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8705,14 +7109,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8737,38 +7133,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8814,10 +7182,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8842,10 +7206,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8870,10 +7230,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8882,66 +7238,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8962,42 +7262,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9022,154 +7298,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9186,18 +7314,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9218,14 +7334,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9242,10 +7350,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9258,14 +7362,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9274,14 +7370,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9309,26 +7397,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9357,18 +7425,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9405,10 +7465,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10341,10 +8397,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10525,34 +8577,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10565,10 +8589,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10577,14 +8597,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10601,22 +8613,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10764,14 +8760,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10780,34 +8768,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10816,54 +8776,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10872,10 +8796,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10892,10 +8812,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11067,26 +8983,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11115,10 +9011,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11175,30 +9067,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11227,18 +9103,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11355,14 +9223,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11375,10 +9235,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11387,14 +9243,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11411,14 +9259,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11427,22 +9267,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11455,18 +9279,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11483,22 +9295,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11507,30 +9307,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11603,18 +9379,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11671,18 +9435,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11711,30 +9463,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11787,18 +9523,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11847,46 +9575,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11951,10 +9639,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12126,14 +9810,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12161,14 +9837,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12181,10 +9849,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12220,19 +9884,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12257,14 +9916,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12273,14 +9924,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12333,10 +9976,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12349,18 +9988,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12373,14 +10000,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12421,26 +10040,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12468,10 +10075,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12482,36 +10085,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12548,10 +10121,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12616,18 +10185,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12692,10 +10249,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12716,10 +10269,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12736,10 +10285,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12748,10 +10293,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12764,10 +10305,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12792,16 +10329,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Convidar amigos para a atividade", - "inviteFriendsToActivityCourse": "Convidar amigos para a atividade e o curso", "feedbackRespDesc": "Verifique novamente amanhã para atualizações da atividade.", "activityDropdownDesc": "Quando terminar esta atividade, clique abaixo", - "activityAnalyticsListBody": "Estas são suas atividades concluídas! Após terminar as atividades, você pode visualizá-las aqui.", "languageMismatchTitle": "Incompatibilidade de idioma", "languageMismatchDesc": "O idioma de destino não corresponde ao idioma desta atividade. Deseja atualizar seu idioma de destino?", "reportWordIssueTooltip": "Relatar problema na informação da palavra", "tokenInfoFeedbackDialogTitle": "Feedback sobre Informação da Palavra", - "tokenInfoFeedbackDialogDesc": "A IA comete erros. Por favor, descreva quaisquer problemas que você encontrou com as informações acima.", "noPublicCoursesFound": "Nenhum curso público encontrado. Gostaria de criar um?", "noCourseTemplatesFound": "Não conseguimos encontrar cursos para seu idioma de destino. Você pode conversar com o Pangea Bot enquanto isso, e voltar mais tarde para mais cursos.", "botActivityJoinFailMessage": "O Pangea Bot está demorando para responder. Por favor, tente novamente mais tarde, ou convide um amigo.", @@ -12809,14 +10342,6 @@ "leaveDesc": "Sair deste espaço e de todas as conversas nele", "selectAll": "Selecionar tudo", "deselectAll": "Desmarcar tudo", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12825,10 +10350,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12845,10 +10366,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12882,7 +10399,6 @@ "newMessageInPangeaChat": "📩 Nova mensagem no Pangea Chat", "shareCourse": "Compartilhar curso", "addCourse": "Adicionar um curso", - "joinCourseWithCode": "Entrar no curso com código", "joinPublicCourse": "Entrar no curso público", "vocabLevelsDesc": "É aqui que as palavras de vocabulário irão aparecer assim que você as evoluir!", "highlightVocabTooltip": "Destaque as palavras de vocabulário-alvo abaixo enviando-as ou praticando com elas no chat", @@ -12906,10 +10422,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12918,7 +10430,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nenhum DM ou chat encontrado. Certifique-se de que sua busca está escrita corretamente.", + "activityAnalyticsTooltipBody": "Estas são suas atividades salvas para revisão e prática.", + "numSavedActivities": "Número de atividades salvas", + "saveActivityTitle": "Salvar atividade", + "saveActivityDesc": "Bom trabalho! Salve esta atividade para revisão e prática posterior", + "levelInfoTooltip": "Aqui você pode ver todos os pontos que você ganhou e como!", + "alreadyInCourseWithID": "Você já está em um curso com este plano. Você quer criar um curso com o mesmo plano ou ir para o curso existente?", + "goToExistingCourse": "Ir para o curso existente", + "emojiView": "Visualização de emoji", + "feedbackDialogDesc": "Eu também cometo erros! Algo para me ajudar a melhorar?", + "contactHasBeenInvitedToTheCourse": "O contato foi convidado para o curso", + "activityStatsButtonTooltip": "Informações da atividade", + "allow": "Permitir", + "deny": "Negar", + "enabledRenewal": "Ativar Renovação de Assinatura", + "subscriptionEndsOn": "A Assinatura Termina Em", + "subscriptionRenewsOn": "A Assinatura Renova Em", + "waitForSubscriptionChanges": "As alterações na sua assinatura podem levar um momento para refletir no aplicativo.", + "subscribeReadingAssistance": "Assine para desbloquear ferramentas de mensagem", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Africâner", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amárico", + "arDisplayName": "Árabe", + "asDisplayName": "Assamês", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijano", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinês", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorrusso", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Búlgaro", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Índia)", + "brDisplayName": "Bretão", + "bsDisplayName": "Bósnio", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriate", + "caDisplayName": "Catalão", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Curdo Central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corso", + "crhDisplayName": "Turco da Crimeia", + "crsDisplayName": "Francês Crioulo Seselwa", + "csDisplayName": "Tcheco", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Galês", + "daDisplayName": "Dinamarquês", + "deDisplayName": "Alemão", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglês", + "enAUDisplayName": "Inglês (Austrália)", + "enGBDisplayName": "Inglês (Reino Unido)", + "enINDisplayName": "Inglês (Índia)", + "enUSDisplayName": "Inglês (EUA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espanhol", + "esESDisplayName": "Espanhol (Espanha)", + "esMXDisplayName": "Espanhol (México)", + "euDisplayName": "Basco", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandês", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijiano", + "foDisplayName": "Faroês", + "frDisplayName": "Francês", + "frCADisplayName": "Francês (Canadá)", + "frFRDisplayName": "Francês (França)", + "fyDisplayName": "Frísio Ocidental", + "gaDisplayName": "Irlandês", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaélico Escocês", + "glDisplayName": "Galego", + "gnDisplayName": "Guarani", + "gomDisplayName": "Konkani Goês", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havaiano", + "heDisplayName": "Hebraico", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croata", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Crioulo Haitiano", + "huDisplayName": "Húngaro", + "hyDisplayName": "Armênio", + "idDisplayName": "Indonésio", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandês", + "itDisplayName": "Italiano", + "jaDisplayName": "Japonês", + "jvDisplayName": "Javanês", + "kaDisplayName": "Georgiano", + "kkDisplayName": "Cazaque", + "kmDisplayName": "Khmer", + "knDisplayName": "Canarim", + "koDisplayName": "Coreano", + "kokDisplayName": "Concanim", + "kriDisplayName": "Krio", + "ksDisplayName": "Caxemira", + "ktuDisplayName": "Kituba (República Democrática do Congo)", + "kuDisplayName": "Curdo", + "kyDisplayName": "Quirguiz", + "laDisplayName": "Latim", + "lbDisplayName": "Luxemburguês", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburguês", + "lijDisplayName": "Liguriano", + "lmoDisplayName": "Lombardo", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituano", + "ltgDisplayName": "Latgaliano", + "luoDisplayName": "Luo (Quênia e Tanzânia)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letão", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaxe", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedônio", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaio", + "msArabDisplayName": "Malaio (Árabe)", + "msMYDisplayName": "Malaio (Malásia)", + "mtDisplayName": "Maltês", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmanês", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norueguês (Bokmål)", + "neDisplayName": "Nepalês", + "newDisplayName": "Newari", + "nlDisplayName": "Holandês", + "nlBEDisplayName": "Flamengo", + "noDisplayName": "Norueguês", + "nrDisplayName": "Ndebele do Sul", + "nsoDisplayName": "Sotho do Norte", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitano", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polonês", + "psDisplayName": "Pashto", + "ptDisplayName": "Português", + "ptBRDisplayName": "Português (Brasil)", + "ptPTDisplayName": "Português (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romeno", + "roMDDisplayName": "Moldavo", + "romDisplayName": "Romani", + "ruDisplayName": "Russo", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sânscrito", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliano", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Cingalês", + "skDisplayName": "Eslovaco", + "slDisplayName": "Esloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanês", + "srDisplayName": "Sérvio", + "srMEDisplayName": "Montenegrino", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho do Sul", + "suDisplayName": "Sundanês", + "svDisplayName": "Sueco", + "swDisplayName": "Suaíli", + "szlDisplayName": "Silesiano", + "taDisplayName": "Tâmil", + "teDisplayName": "Telugo", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajique", + "thDisplayName": "Tailandês", + "tiDisplayName": "Tigrínia", + "tkDisplayName": "Turcomano", + "tlDisplayName": "Tagalo", + "tnDisplayName": "Tswana", + "trDisplayName": "Turco", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tártaro", + "ugDisplayName": "Uigure", + "ukDisplayName": "Ucraniano", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Índia)", + "urPKDisplayName": "Urdu (Paquistão)", + "uzDisplayName": "Uzbeque", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Iorubá", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonês", + "yueCNDisplayName": "Cantonês (China)", + "yueHKDisplayName": "Cantonês (Hong Kong)", + "zhDisplayName": "Chinês", + "zhCNDisplayName": "Chinês (Simplificado)", + "zhTWDisplayName": "Chinês (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12985,6 +11683,7 @@ "notStartedActivitiesTitle": "Sessões abertas ({num})", "inProgressActivitiesTitle": "Acontecendo agora ({num})", "completedActivitiesTitle": "Concluído ({num})", + "pickDifferentActivity": "Escolha uma atividade diferente", "inOngoingActivity": "Você tem uma atividade em andamento!", "@notStartedActivitiesTitle": { "type": "String", @@ -13010,10 +11709,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "O seu idioma de destino não corresponde a esta mensagem. Atualizar o seu idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Este é todo mundo neste curso. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Esta palavra de vocabulário será removida permanentemente da sua análise", + "woman": "Mulher", + "man": "Homem", + "otherGender": "Outro", + "unselectedGender": "Selecione uma opção de gênero", + "gender": "Gênero", + "chatParticipantTooltip": "Estas são todas as pessoas neste chat. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "As ferramentas de aprendizado estão desativadas para mensagens que não estão no seu idioma-alvo.", + "vocabEmoji": "Emoji de vocabulário", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Solicitar regeneração", + "optionalRegenerateReason": "(Opcional) Motivo", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Você definiu o emoji para {lemma}! Usaremos este emoji para representar a palavra nas atividades práticas daqui para frente.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Aguardando a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desativar ferramentas de idioma", + "disableLanguageToolsDesc": "Você gostaria de desativar a assistência automática de idioma?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permissão negada. Ative as permissões de gravação para gravar mensagens de áudio.", + "genericWebRecordingError": "Algo deu errado. Recomendamos usar o navegador Chrome ao gravar mensagens.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Para a melhor experiência ao usar este aplicativo, por favor, amplie o tamanho da sua tela.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Atividades para Desbloquear o Próximo Tópico", "activitiesToUnlockTopicDesc": "Defina o número de atividades para desbloquear o próximo tópico do curso", "@activitiesToUnlockTopicTitle": { @@ -13023,5 +11840,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Prática correta de definição de vocabulário", + "constructUseIncLMDesc": "Prática incorreta de definição de vocabulário", + "constructUseCorLADesc": "Prática correta de áudio de vocabulário", + "constructUseIncLADesc": "Prática incorreta de áudio de vocabulário", + "constructUseBonus": "Bônus durante a prática de vocabulário", + "practiceVocab": "Praticar vocabulário", + "selectMeaning": "Selecione o significado", + "selectAudio": "Selecione o áudio correspondente", + "congratulations": "Parabéns!", + "anotherRound": "Outra rodada", + "noActivityRequest": "Nenhum pedido de atividade atual.", + "quit": "Sair", + "congratulationsYouveCompletedPractice": "Parabéns! Você completou a sessão de prática.", + "mustHave10Words": "Você deve ter pelo menos 10 palavras de vocabulário para praticá-las. Tente conversar com um amigo ou com o Pangea Bot para descobrir mais!", + "botSettings": "Configurações do Bot", + "activitySettingsOverrideWarning": "Idioma e nível de idioma determinados pelo plano de atividade", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index 18d971fe6..a2fdf12cf 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:26.266378", + "@@last_modified": "2026-01-07 14:24:55.031821", "about": "Sobre", "@about": { "type": "String", @@ -3125,26 +3125,14 @@ "commandHint_logoutall": "Fazer logout de todos os dispositivos ativos", "displayNavigationRail": "Mostrar trilho de navegação no celular", "customReaction": "Reação personalizada", - "accountInformation": "Informações da conta", - "addGroupDescription": "Adicionar uma descrição ao chat", - "addNewFriend": "Adicionar novo amigo", - "alreadyHaveAnAccount": "Já possui uma conta?", - "createNewGroup": "Criar um novo chat", - "editChatPermissions": "Editar permissões do chat", "writeAMessageLangCodes": "Digite em {l1} ou {l2}...", "requests": "Solicitações", - "allCorrect": "É assim que eu diria! Legal!", - "newWayAllGood": "Não foi assim que eu diria, mas parece bom!", - "othersAreBetter": "Hm, pode haver uma maneira melhor de dizer isso.", "holdForInfo": "Clique e segure para informações da palavra.", "greenFeedback": "Isso é o que eu colocaria!", "yellowFeedback": "Hm, você pode tentar isso e ver se funciona! Para usar esta palavra, basta clicar nela novamente.", "redFeedback": "Não acho que esteja certo...", "itInstructionsTitle": "Posso te ajudar a traduzir!", "itInstructionsBody": "Você pode clicar e segurar as opções para obter informações da palavra.", - "oneday": "Últimas 24 horas", - "oneweek": "Últimos 7 dias", - "onemonth": "Mês passado", "gaTooltip": "L2 usar com assistência de gramática", "taTooltip": "L2 usar com assistência de tradução", "unTooltip": "Outro", @@ -3154,58 +3142,27 @@ "interactiveTranslatorAllowed": "Escolha do Estudante", "interactiveTranslatorRequired": "Obrigatório", "notYetSet": "Ainda não definido", - "myLearning": "Minhas Análises", "waTooltip": "L2 usar sem assistência", - "changeDateRange": "Alterar intervalo de datas", - "classDescription": "Descrição", - "addStudents": "Convidar usuários por link ou código", - "copyClassLink": "Copiar link de convite", - "copyClassCode": "Copiar código de convite", - "inviteStudentByUserName": "Convidar usuários pelo nome de usuário", "languageSettings": "Configurações de idioma", "interactiveTranslator": "Assistência de tradução", - "shareVideo": "Compartilhar vídeo", - "shareVideoDesc": "Ative esta opção para permitir que os estudantes compartilhem vídeos nos chats.", - "shareFiles": "Compartilhar Arquivos", - "selectLanguageLevel": "Selecionar nível de idioma", "noIdenticalLanguages": "Por favor, escolha idiomas base e alvo diferentes", - "iWantALanguagePartnerFrom": "É de:", - "worldWide": "Mundialmente", - "noResults": "Nenhum resultado! Tente ampliar sua busca.", "searchBy": "Pesquisar por país e idiomas", - "iWantAConversationPartner": "Quero um parceiro de conversa que", - "iWantALanguagePartnerWhoSpeaks": "Fala:", - "iWantALanguagePartnerWhoIsLearning": "Está aprendendo:", "joinWithClassCode": "Participar do curso", - "joinWithClassCodeHint": "Digite o código de convite", - "languageLevelPreA1": "Total Iniciante (Pré A1)", - "languageLevelA1": "Iniciante (A1)", - "languageLevelA2": "Elementar (A2)", - "languageLevelB1": "Intermediário (B1)", - "languageLevelB2": "Intermediário Avançado (B2)", - "languageLevelC1": "Avançado (C1)", - "languageLevelC2": "Mestria (C2)", + "languageLevelPreA1": "Novato Baixo (Pré A1)", + "languageLevelA1": "Novato Médio (A1)", + "languageLevelA2": "Iniciante Alto (A2)", + "languageLevelB1": "Intermediário Médio (B1)", + "languageLevelB2": "Avançado Baixo (B2)", + "languageLevelC1": "Avançado Médio (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Alterar o nome", "changeTheNameOfTheChat": "Alterar o nome do chat", - "askPangeaBot": "Pergunte ao Pangea Bot por uma definição contextual.", "sorryNoResults": "Desculpe, nenhum resultado.", "ignoreInThisText": "Ignorar", - "helpMeTranslate": "Sim!", - "needsItShortMessage": "Fora do alvo", "needsItMessage": "Espere, isso não é {targetLanguage}! Você precisa de ajuda para traduzir?", - "needsIgcMessage": "Esta mensagem contém um erro gramatical.", - "tokenTranslationTitle": "Uma palavra está na sua língua base.", - "spanTranslationDesc": "Veja as possíveis traduções abaixo.", - "spanTranslationTitle": "Algumas palavras estão na sua língua base.", - "l1SpanAndGrammarTitle": "Fora do idioma alvo", - "l1SpanAndGrammarDesc": "Isso pode estar na sua língua base ou pode ser um erro gramatical.", - "otherTitle": "Você tem um erro.", - "otherDesc": "Veja as possíveis correções abaixo.", "countryInformation": "Meu país", - "myLanguages": "Minhas línguas base e alvo", "targetLanguage": "Língua alvo", "sourceLanguage": "Língua base", - "languagesISpeak": "Idiomas que eu falo", "updateLanguage": "Meus idiomas", "whatLanguageYouWantToLearn": "Qual idioma você quer aprender?", "whatIsYourBaseLanguage": "Qual é o seu idioma base?", @@ -3220,13 +3177,8 @@ "errorDisableLanguageAssistanceUserDesc": "Clique aqui para atualizar as configurações de assistência de tradução e gramática", "errorDisableITClassDesc": "Assistência de tradução está desativada para o curso em que esta conversa está.", "errorDisableIGCClassDesc": "Assistência de gramática está desativada para o curso em que esta conversa está.", - "itIsDisabled": "Tradução Interativa está desativada", - "igcIsDisabled": "Verificação Gramatical Interativa está desativada", - "goToLearningSettings": "Ir para Configurações de Aprendizado", "error405Title": "Idiomas não configurados", "error405Desc": "Por favor, configure seus idiomas no Menu Principal > Configurações de Aprendizado.", - "loginOrSignup": "Entrar ou cadastrar-se", - "iAgreeToThe": "Concordo com os ", "termsAndConditions": "Termos e Condições", "andCertifyIAmAtLeast13YearsOfAge": " e certifico que tenho pelo menos 16 anos de idade.", "error502504Title": "Uau, há muitos estudantes online!", @@ -3234,40 +3186,21 @@ "error404Title": "Erro de tradução!", "error404Desc": "O Pangea Bot não tem certeza de como traduzir isso...", "errorPleaseRefresh": "Estamos investigando! Por favor, recarregue e tente novamente.", - "toggleIT": "Tradução Interativa", - "toggleIGC": "Verificação Gramatical Interativa", - "toggleToolSettingsDescription": "Aqui você pode ativar ou desativar as configurações do seu ferramenta de idioma individual.", "connectedToStaging": "Conectado ao Ambiente de Teste", "learningSettings": "Configurações de aprendizagem", - "sendVoiceNotes": "Enviar Notas de Voz", - "sendVoiceNotesDesc": "Ative esta opção para permitir que os estudantes enviem notas de voz nos chats.", - "chatTopic": "Tópico do chat", - "chatTopicDesc": "Defina um tópico para o chat", - "inviteStudentByUserNameDesc": "Se seu estudante já possui uma conta, você pode procurá-lo.", "participants": "Participantes", - "almostPerfect": "Parece certo! Aqui está o que eu teria dito.", - "prettyGood": "Muito bom! Aqui está o que eu teria dito.", - "letMeThink": "Hmm, vamos ver como você se saiu!", "clickMessageTitle": "Precisa de ajuda?", "clickMessageBody": "Clique em uma mensagem para ferramentas de idioma como tradução, reprodução e mais!", - "understandingMessagesTitle": "Definições e traduções!", - "understandingMessagesBody": "Clique nas palavras sublinhadas para obter definições. Traduza com as opções de mensagem (superior direito).", "allDone": "Tudo pronto!", "vocab": "Vocabulário", "low": "Temos evidências de que o usuário não entende essas palavras.", "medium": "Essas palavras foram usadas. Não está claro se as palavras são totalmente compreendidas ou não.", "high": "Temos evidências de que o usuário entende essas palavras.", - "unknownProficiency": "Essas palavras não foram usadas no Pangea Chat.", - "changeView": "Alterar visualizações.", - "clearAll": "Limpar todas as palavras?", - "generateVocabulary": "Gerar vocabulário a partir do título e descrição", - "generatePrompts": "Gerar prompts", "subscribe": "Inscrever-se", "getAccess": "Inscreva-se agora!", "subscriptionDesc": "Mensagens são gratuitas! Inscreva-se para desbloquear tradução interativa, verificação gramatical e análises de aprendizagem.", "subscriptionManagement": "Gerenciamento de Assinatura", "currentSubscription": "Assinatura Atual", - "changeSubscription": "Alterar sua assinatura", "cancelSubscription": "Cancelar sua assinatura", "selectYourPlan": "Selecione seu Plano", "subsciptionPlatformTooltip": "Por favor, faça login no seu dispositivo original para gerenciar seu plano de assinatura", @@ -3276,9 +3209,6 @@ "paymentHistory": "Histórico de Pagamentos", "emptyChatDownloadWarning": "Não é possível baixar uma conversa vazia", "update": "Atualizar", - "updateDesc": "Agora você pode atualizar este aplicativo de {localVersion} para {storeVersion}", - "maybeLater": "Talvez mais tarde", - "mainMenu": "Menu Principal", "toggleImmersionMode": "Modo Imersão", "toggleImmersionModeDesc": "Quando ativado, todas as mensagens são exibidas no seu idioma de destino. Essa configuração é mais útil em intercâmbios de idiomas.", "itToggleDescription": "Esta ferramenta de aprendizado de idiomas identificará palavras no seu idioma base e ajudará você a traduzi-las para o seu idioma de destino. Embora raro, a IA pode cometer erros de tradução.", @@ -3293,212 +3223,13 @@ "definitionsToolDescription": "Quando ativado, palavras sublinhadas em azul podem ser clicadas para obter definições. Clique nas mensagens para acessar definições.", "translationsToolDescrption": "Quando ativado, clique em uma mensagem e no ícone de tradução para ver a mensagem no seu idioma base.", "welcomeBack": "Bem-vindo de volta! Se você fez parte do piloto de 2023-2024, entre em contato conosco para sua assinatura piloto especial. Se você é um professor que comprou licenças para sua turma, entre em contato conosco para sua assinatura de professor.", - "kickAllStudents": "Remover Todos os Estudantes", - "kickAllStudentsConfirmation": "Tem certeza de que deseja remover todos os estudantes?", - "inviteAllStudents": "Convidar Todos os Estudantes", - "inviteAllStudentsConfirmation": "Tem certeza de que deseja convidar todos os estudantes?", - "inviteUsersFromPangea": "Adicionar administradores", - "redeemPromoCode": "Resgatar Código Promocional", - "enterPromoCode": "Digite o Código Promocional", "downloadTxtFile": "Baixar Arquivo de Texto", "downloadCSVFile": "Baixar Arquivo CSV", "promotionalSubscriptionDesc": "Você atualmente possui uma assinatura promocional vitalícia. Envie uma mensagem para support@pangea.chat para ajuda na alteração da sua assinatura.", "originalSubscriptionPlatform": "Assinatura adquirida através de {purchasePlatform}", "oneWeekTrial": "Teste de Uma Semana", "downloadXLSXFile": "Baixar arquivo Excel", - "abDisplayName": "Abecásio", - "aaDisplayName": "Afar", - "afDisplayName": "Africâner", - "akDisplayName": "Akan", - "sqDisplayName": "Albanês", - "amDisplayName": "Amárico", - "arDisplayName": "Árabe", - "anDisplayName": "Aragonês", - "hyDisplayName": "Armênio", - "asDisplayName": "Assamês", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestano", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijano", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basco", - "beDisplayName": "Bielorrusso", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bósnio", - "brDisplayName": "Bretão", - "bgDisplayName": "Búlgaro", - "myDisplayName": "Birmanês", - "caDisplayName": "Catalão, Valenciano", - "chDisplayName": "Chamorro", - "ceDisplayName": "Checheno", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinês", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corso", - "crDisplayName": "Cree", - "hrDisplayName": "Croata", - "csDisplayName": "Tcheco", - "daDisplayName": "Dinamarquês", - "dvDisplayName": "Divehi; Dhivehi; Maldivo;", - "nlDisplayName": "Holandês", - "enDisplayName": "Inglês", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estoniano", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroês", - "fjDisplayName": "Fijiano", - "fiDisplayName": "Finlandês", - "frDisplayName": "Francês", - "ffDisplayName": "Fula; Fula; Pulaar; Pular", - "glDisplayName": "Galego", - "kaDisplayName": "Georgiano", - "deDisplayName": "Alemão", - "elDisplayName": "Grego Moderno", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitiano, Crioulo Haitiano", - "haDisplayName": "Haúça", - "heDisplayName": "Hebraico (moderno)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Húngaro", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonésio", - "ieDisplayName": "Interlíngua", - "gaDisplayName": "Irlandês", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandês", - "itDisplayName": "Italiano", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonês", - "jvDisplayName": "Javanês", - "klDisplayName": "Kalaallisut, groenlandês", - "knDisplayName": "Canarês", - "krDisplayName": "Kanuri", - "ksDisplayName": "Cachemir", - "kkDisplayName": "Cazaque", - "kmDisplayName": " Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirguiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreano", - "kuDisplayName": "Curdo", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latim", - "lbDisplayName": "Luxemburguês, Letzeburges", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburguês, Limburguês, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiano", - "ltDisplayName": "Lituano", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letão", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedônio", - "mgDisplayName": "Malgaxe", - "msDisplayName": "Malaio", - "mlDisplayName": "Malaialam", - "mtDisplayName": "Maltês", - "miDisplayName": "Maori", - "mrDisplayName": "Marata (Marāṭhī)", - "mhDisplayName": "Marshalês", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norueguês Bokmål", - "ndDisplayName": "Ndebele do Norte", - "neDisplayName": "Nepalês", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norueguês Nynorsk", - "noDisplayName": "Norueguês", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele do Sul", - "ocDisplayName": "Occitano", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Eslavo Eclesiástico Antigo, Eslavo da Igreja, Eslavo Eclesiástico, Búlgaro Antigo, Eslavo Antigo", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Ossetian, Ossetic", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persa", - "plDisplayName": "Polonês", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Português", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romeno, Moldavo", - "ruDisplayName": "Russo", - "saDisplayName": "Sânscrito (Saṃskṛta)", - "scDisplayName": "Sardo", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami do Norte", - "smDisplayName": "Samoano", - "sgDisplayName": "Sango", - "srDisplayName": "Servo", - "gdDisplayName": "Gaélico escocês, gaélico", - "snDisplayName": "Shona", - "siDisplayName": "Cingalês, Singhalesa", - "skDisplayName": "Eslovaco", - "slDisplayName": "Esloveno", - "soDisplayName": "Somali", - "stDisplayName": "Sotho do Sul", - "esDisplayName": "Espanhol", - "suDisplayName": "Sundanês", - "swDisplayName": "Suaíli", - "ssDisplayName": "Swati", - "svDisplayName": "Sueco", - "taDisplayName": "Tâmil", - "teDisplayName": "Telugo", - "tgDisplayName": "Tajique", - "thDisplayName": "Tailandês", - "tiDisplayName": "Tigrínia", - "boDisplayName": "Tibetano Padrão, Tibetano, Central", - "tkDisplayName": "Turcomeno", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Ilhas Tonga)", - "trDisplayName": "Turco", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tártaro", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiano", - "ugDisplayName": "Uigur, Uigur", - "ukDisplayName": "Ucraniano", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbeque", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamita", - "voDisplayName": "Volapük", - "waDisplayName": "Valão", - "cyDisplayName": "Galês", - "woDisplayName": "Wolof", - "fyDisplayName": "Frísio Ocidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Iídiche", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Desconhecido", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havaiano", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Múltiplo", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebraico", - "jwDisplayName": "Javanês", - "moDisplayName": "Moldávia", - "shDisplayName": "Servo-Croata", "wwCountryDisplayName": "Mundo", "afCountryDisplayName": "Afeganistão", "axCountryDisplayName": "Ilhas Aland", @@ -3746,41 +3477,25 @@ "yeCountryDisplayName": "Iêmen", "zmCountryDisplayName": "Zâmbia", "zwCountryDisplayName": "Zimbábue", - "pay": "Pagar", - "allPrivateChats": "Conversas diretas", - "unknownPrivateChat": "Conversa privada desconhecida", + "pay": "Finalizar compra", "invitedToSpace": "{user} convidou você para participar de um curso: {space}! Deseja aceitar?", - "declinedInvitation": "Convite recusado", - "acceptedInvitation": "Convite aceito", "youreInvited": "📩 Você foi convidado!", "invitedToChat": "{user} convidou você para participar de uma conversa: {name}! Deseja aceitar?", "monthlySubscription": "Mensal", "yearlySubscription": "Anual", "defaultSubscription": "Assinatura Pangea Chat", "freeTrial": "Período de teste gratuito", - "grammarAnalytics": "Análise de erros", "total": "Total: ", "noDataFound": "Dados não encontrados", - "promoSubscriptionExpirationDesc": "Sua assinatura atual é promocional e expira em {expiration}. Envie uma mensagem para support@pangea.chat para obter ajuda na alteração da sua assinatura.", - "emptyChatNameWarning": "Por favor, insira um nome para esta conversa", "blurMeansTranslateTitle": "Por que a mensagem está borrada?", "blurMeansTranslateBody": "Enquanto o Modo Imersão estiver ativado, mensagens enviadas no seu idioma base ficarão borradas enquanto o Pangea Bot as traduz para o seu idioma de destino. O Modo Imersão pode ser ativado ou desativado nas configurações individuais e do curso.", - "someErrorTitle": "Hm, algo não está certo", - "someErrorBody": "Pode ser um erro ou algo na sua língua base.", "bestCorrectionFeedback": "Isso mesmo!", "distractorFeedback": "Não está exatamente certo.", "bestAnswerFeedback": "Isso mesmo!", "definitionDefaultPrompt": "O que essa palavra significa?", "practiceDefaultPrompt": "Qual é a melhor resposta?", "correctionDefaultPrompt": "Qual é a melhor substituição?", - "itStartDefaultPrompt": "Você quer ajuda para traduzir?", - "lockedChatWarning": "🔒 Este chat foi bloqueado", - "lockChat": "Bloquear Chat", - "suggestToChat": "Sugerir este chat", - "suggestToChatDesc": "Chats sugeridos aparecerão nas listas de chat", "acceptSelection": "Aceitar Correção", - "acceptSelectionAnyway": "Usar isto mesmo assim", - "makingActivity": "Criando atividade", "why": "Por quê?", "definition": "Definição", "exampleSentence": "Exemplo de frase", @@ -3788,128 +3503,55 @@ "reportMessageTitle": "{reportingUserId} relatou uma mensagem de {reportedUserId} no chat {roomName}", "reportMessageBody": "Mensagem: {reportedMessage}\nRazão: {reason}", "noTeachersFound": "Nenhum professor encontrado para relatar", - "viewArchive": "Ver Arquivo", "trialExpiration": "Seu período de teste gratuito expira em {expiration}", "freeTrialDesc": "Novos usuários recebem uma semana de teste gratuito do Pangea Chat", "activateTrial": "Teste Gratuito de 7 Dias", "successfullySubscribed": "Você assinou com sucesso!", "clickToManageSubscription": "Clique aqui para gerenciar sua assinatura.", - "errorGettingAudio": "Erro ao obter áudio. Por favor, atualize e tente novamente.", "signUp": "Inscrever-se", "pleaseChooseAtLeastChars": "Por favor, escolha pelo menos {min} caracteres.", "noEmailWarning": "Por favor, insira um endereço de email válido. Caso contrário, você não poderá redefinir sua senha. Se não quiser, toque novamente no botão para continuar.", "pleaseEnterValidEmail": "Por favor, insira um endereço de email válido.", "pleaseChooseAUsername": "Por favor, escolha um nome de usuário", - "chooseAUsername": "Escolha um nome de usuário", "define": "Definir", "listen": "Ouvir", - "addConversationBot": "Ativar Bot de Conversa", - "addConversationBotDesc": "Adicione um bot a este chat", - "convoBotSettingsDescription": "Editar o tópico da conversa e a dificuldade", - "enterAConversationTopic": "Digite um tópico de conversa", - "conversationTopic": "Tópico de conversa", - "enableModeration": "Ativar moderação", - "enableModerationDesc": "Ative a moderação automática para revisar mensagens antes de enviá-las", - "conversationLanguageLevel": "Qual é o nível de idioma desta conversa?", - "showDefinition": "Mostrar definição", - "subscriptionPopupTitle": "Esta frase pode ter um erro de gramática...", - "subscriptionPopupDesc": "Assine hoje para desbloquear tradução e correção gramatical!", - "seeOptions": "Ver opções", - "continuedWithoutSubscription": "Continuar sem assinatura", "trialPeriodExpired": "Seu período de teste expirou", - "selectToDefine": "Clique em qualquer palavra para ver sua definição!", "translations": "traduções", "messageAudio": "áudio da mensagem", "definitions": "definições", "subscribedToUnlockTools": "Assine para desbloquear tradução interativa, verificação gramatical, reprodução de áudio, atividades de prática personalizadas e análises de aprendizado!", "translationTooltip": "Traduzir", - "audioTooltip": "Reproduzir Áudio", "speechToTextTooltip": "Transcrição", - "certifyAge": "Certifico que tenho mais de {age} anos de idade", "kickBotWarning": "Remover o Pangea Bot irá remover o bot de conversa deste chat.", - "joinToView": "Participe desta sala para ver detalhes", "refresh": "Atualizar", - "autoPlayTitle": "Reproduzir mensagens automaticamente", - "autoPlayDesc": "Quando ativado, o áudio de texto para fala das mensagens será reproduzido automaticamente ao serem selecionadas.", "messageAnalytics": "Análise de mensagens", "words": "Palavras", "score": "Pontuação", "accuracy": "Precisão", "points": "Pontos", "noPaymentInfo": "Nenhuma informação de pagamento necessária!", - "conversationBotModeSelectDescription": "Atividade de chat", - "conversationBotModeSelectOption_discussion": "Discussão", - "conversationBotModeSelectOption_custom": "Personalizado", - "conversationBotModeSelectOption_conversation": "Conversa", - "conversationBotModeSelectOption_textAdventure": "Aventura de Texto", - "conversationBotModeSelectOption_storyGame": "Jogo de História", - "conversationBotDiscussionZone_title": "Configurações de Discussão", - "conversationBotDiscussionZone_discussionTopicLabel": "Tópico de Discussão", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Definir tópico de discussão", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Palavras-chave de discussão", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Definir palavras-chave de discussão", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista separada por vírgulas de palavras-chave para orientar a discussão", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar aviso de discussão em uma programação", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre avisos de discussão", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responder à reação ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reação para enviar aviso de discussão", - "conversationBotCustomZone_title": "Configurações Personalizadas", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt do sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Definir prompt personalizado do sistema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Prompt personalizado do sistema ausente", - "botConfig": "Configurações do bot e atividade", - "botConfigNoPermissionTitle": "Sem permissão", - "botConfigNoPermissionMessage": "Contate o administrador da sala para alterar a configuração do bot", - "addConversationBotDialogTitleInvite": "Confirmar convite do bot de conversa", - "addConversationBotButtonInvite": "Convidar", - "addConversationBotDialogInviteConfirmation": "Convidar", - "addConversationBotButtonTitleRemove": "Confirmar remoção do bot de conversa", - "addConversationBotButtonRemove": "Remover", - "addConversationBotDialogRemoveConfirmation": "Remover", - "conversationBotConfigConfirmChange": "Confirmar", - "conversationBotStatus": "Convidar bot", - "conversationBotTextAdventureZone_title": "Aventura de Texto", - "conversationBotTextAdventureZone_instructionLabel": "Instruções do Mestre do Jogo", - "conversationBotTextAdventureZone_instructionPlaceholder": "Defina as instruções do mestre do jogo", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Faltam instruções do mestre do jogo", - "studentAnalyticsNotAvailable": "Dados do estudante não disponíveis no momento", - "roomDataMissing": "Alguns dados podem estar ausentes das salas das quais você não é membro.", "updatePhoneOS": "Você pode precisar atualizar a versão do sistema operacional do seu dispositivo.", "wordsPerMinute": "Palavras por minuto", "autoIGCToolName": "Executar assistência de escrita Pangea automaticamente", "autoIGCToolDescription": "Executar automaticamente a assistência de gramática e tradução do Pangea Chat antes de enviar minha mensagem.", - "runGrammarCorrection": "Verificar mensagem", - "grammarCorrectionFailed": "Problemas a resolver", - "grammarCorrectionComplete": "Parece bom!", "tooltipInstructionsTitle": "Não tem certeza do que isso faz?", "tooltipInstructionsMobileBody": "Pressione e segure os itens para ver dicas de ferramenta.", "tooltipInstructionsBrowserBody": "Passe o mouse sobre os itens para ver dicas de ferramenta.", "chatCapacity": "Capacidade de chat", "roomFull": "Esta sala já está cheia.", - "topicNotSet": "O tópico não foi definido.", - "chatCapacityNotSet": "Este chat não tem limite de capacidade.", "chatCapacityHasBeenChanged": "Capacidade do chat alterada", "chatCapacitySetTooLow": "A capacidade do chat deve ser pelo menos {count}.", "chatCapacityExplanation": "A capacidade do chat limita o número de membros permitidos em um chat.", - "chatExceedsCapacity": "Este chat excede sua capacidade.", "tooManyRequest": "Muitas solicitações, por favor tente novamente mais tarde.", "enterNumber": "Por favor, insira um valor numérico inteiro.", "buildTranslation": "Construa sua tradução a partir das opções acima", - "nonexistentSelection": "Seleção não existe mais.", - "changeAnalyticsLanguage": "Alterar idioma de análise", "practice": "Praticar", "noLanguagesSet": "Nenhum idioma definido", - "noActivitiesFound": "Isso é suficiente por enquanto! Volte mais tarde para mais.", - "hintTitle": "Dica:", "speechToTextBody": "Para mensagens de voz, você pode ver uma transcrição, bem como a pontuação de Palavras Por Minuto do falante.", "versionNotFound": "Versão não encontrada", "fetchingVersion": "Buscando versão...", "versionFetchError": "Erro ao buscar a versão", "versionText": "Versão: {version}+{buildNumber}", - "languageButtonLabel": "Idioma: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Tradução automática", - "interactiveTranslatorAutoPlayDesc": "Inicia o tradutor interativo sem perguntar.", - "changeAnalyticsView": "Alterar visualização de análises", "l1TranslationBody": "Mensagens no seu idioma base não serão traduzidas.", "deleteSubscriptionWarningTitle": "Você tem uma assinatura ativa", "deleteSubscriptionWarningBody": "Excluir sua conta não cancelará automaticamente sua assinatura.", @@ -3917,9 +3559,7 @@ "error520Title": "Por favor, tente novamente.", "error520Desc": "Desculpe, não conseguimos entender sua mensagem...", "wordsUsed": "Palavras usadas", - "errorTypes": "Tipos de erro", "level": "Nível", - "canceledSend": "Envio cancelado", "morphsUsed": "Morfemas usados", "translationChoicesBody": "Clique e segure uma opção para obter uma dica.", "grammar": "Gramática", @@ -3929,7 +3569,6 @@ "reportContentIssueTitle": "Relatar problema de conteúdo", "feedback": "Feedback opcional", "reportContentIssueDescription": "Oh não! A IA pode facilitar experiências de aprendizagem personalizadas, mas... também tem alucinações. Por favor, forneça qualquer feedback que você tenha e tentaremos novamente.", - "changeContent": "Oh não! A IA pode facilitar experiências de aprendizagem personalizadas, mas... também tem alucinações. O que deve ser?", "clickTheWordAgainToDeselect": "Clique na palavra selecionada para desmarcá-la.", "l2SupportNa": "Indisponível", "l2SupportAlpha": "Alpha", @@ -4163,7 +3802,6 @@ "grammarCopySPC": "Especificidade", "grammarCopyPARTTYPE": "Tipo Partitivo", "grammarCopyINTREL": "Interrogativo-Relativo", - "grammarCopyNUMFORMpsor": "Número do Possuidor", "grammarCopyUNKNOWN": "Desconhecido", "grammarCopyNUMBERPSOR": "Número do Possuidor", "grammarCopyPOSS": "Possessivo", @@ -4209,28 +3847,14 @@ "grammarCopyVOICEdir": "Direto", "grammarCopyVOICEinv": "Inverso", "grammarCopyVOICErcp": "Recíproco", - "enterPrompt": "Por favor, insira um prompt do sistema", - "selectBotLanguage": "Selecionar idioma do bot", - "chooseVoice": "Escolha uma voz", - "enterLanguageLevel": "Por favor, insira um nível de idioma", - "enterDiscussionTopic": "Por favor, insira um tópico de discussão", - "selectBotChatMode": "Selecionar modo de chat", - "messageNotInTargetLang": "Mensagem não no idioma alvo", "other": "Outro", "levelShort": "NÍVEL {level}", - "botModeValidation": "Por favor, selecione um modo de chat", "clickBestOption": "Escolha as melhores opções para traduzir sua mensagem!", "completeActivitiesToUnlock": "Complete pelo menos uma atividade para desbloquear a tradução!", - "botSettingsSubtitle": "Convidar o bot para moderar a atividade do chat", - "invitePeople": "Convidar usuários", "noCapacityLimit": "Sem limite de capacidade", "downloadGroupText": "Baixar texto do grupo", "notificationsOn": "Notificações ativadas", "notificationsOff": "Notificações desativadas", - "chatCanBeFoundViaSearch": "O chat pode ser encontrado via pesquisa", - "requireCodeToJoin": "Exigir código para entrar", - "canFindInSearch": "Pode ser encontrado na pesquisa", - "addChatToSpace": "Adicionar chat", "createChatAndInviteUsers": "Criar chat e convidar usuários", "updatedNewSpaceDescription": "Cursos permitem consolidar seus chats e construir comunidades privadas ou públicas.", "joinWithCode": "Entrar com código", @@ -4266,39 +3890,19 @@ "constructUseCollected": "Coletado no chat", "constructUseNanDesc": "Não aplicável", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Entrar com nome de usuário e senha", - "registrationEmailMessage": "Por favor, verifique seu e-mail com o link enviado lá. Em alguns casos, o e-mail leva até 5 minutos para chegar. Por favor, também verifique sua pasta de spam.", "enableTTSToolName": "Ativado texto para fala", "enableTTSToolDescription": "Permite que o aplicativo gere saída de texto para fala para trechos de texto no seu idioma de destino.", - "couldNotFindTTS": "Não conseguimos encontrar um mecanismo de texto para fala para o seu idioma de destino atual.", - "ttsInstructionsHyperlink": "Clique aqui para ver as instruções para baixar uma nova voz no seu dispositivo.", - "createAnAccount": "Criar uma conta", - "signIn": "Entrar", - "signUpWithEmail": "Inscreva-se com Email", - "signUpWithGoogle": "Inscreva-se com Google", - "signUpWithApple": "Inscreva-se com Apple", "yourUsername": "Seu nome de usuário", "yourEmail": "Seu e-mail", - "pleaseEnterAnEmail": "Por favor, insira um endereço de e-mail", - "signInWithGoogle": "Entrar com Google", - "signInWithApple": "Entrar com Apple", - "chooseYourAvatar": "Escolha seu avatar", "iWantToLearn": "Quero aprender", - "letsStart": "Vamos começar", - "pleaseAgreeToTOS": "Por favor, concorde com os Termos e Condições", "pleaseEnterEmail": "Por favor, insira um endereço de e-mail válido.", - "pleaseSelectALanguage": "Por favor, selecione um idioma", "myBaseLanguage": "Meu idioma base", - "clickWordsInstructions": "🕵️ Clique em qualquer palavra para detalhes. 🧐", - "chooseBestDefinition": "O que essa palavra significa?", "meaningSectionHeader": "Significado:", "formSectionHeader": "Formas usadas em chats:", - "noEmojiSelectedTooltip": "Nenhum emoji selecionado", "writingExercisesTooltip": "Escrita", "listeningExercisesTooltip": "Audição", "readingExercisesTooltip": "Leitura", "meaningNotFound": "Significado não pôde ser encontrado.", - "formsNotFound": "Formas não puderam ser encontradas.", "chooseBaseForm": "Escolha a forma base", "notTheCodeError": "Desculpe, esse não é o código!", "totalXP": "XP Total", @@ -4338,9 +3942,6 @@ "pickAnEmoji": "Qual é seu emoji favorito para '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Combine os significados com as palavras na mensagem!", "doubleClickToEdit": "Clique duas vezes para editar.", - "removeFeature": "Remover {feature}", - "chooseCorrectLabel": "Escolha o rótulo correto.", - "levelPopupTitle": "Parabéns por alcançar\nNível {level}", "activityPlannerTitle": "Planejador de Atividades", "topicLabel": "Tópico", "topicPlaceholder": "Escolha um tópico...", @@ -4348,7 +3949,6 @@ "modePlaceholder": "Escolha um modo...", "learningObjectiveLabel": "Objetivo de aprendizagem", "learningObjectivePlaceholder": "Escolha um objetivo de aprendizagem...", - "mediaLabel": "Mídia que os aprendizes devem compartilhar", "languageOfInstructionsLabel": "Idioma das instruções da atividade", "targetLanguageLabel": "Idioma alvo", "cefrLevelLabel": "Nível CEFR", @@ -4363,20 +3963,15 @@ "instructions": "Instruções", "numberOfLearners": "Número de aprendizes", "mustBeInteger": "Deve ser um número inteiro, ex: 1, 2, 3, ...", - "noLemmasFound": "Não há vocabulário com mais de {xp} XP. Continue praticando!", "constructUsePvmDesc": "Produzido em mensagem de voz", - "lockedMorphFeature": "Aguardando desbloqueio", "leaveSpaceDescription": "Ao sair do curso, você deixará todos os chats dentro dele. Outros usuários verão que você saiu do curso.", - "whatIsLemma": "O que é a lemma?", "constructUseCorMmDesc": "Significado correto da mensagem", "constructUseIncMmDesc": "Significado incorreto da mensagem", "constructUseIgnMmDesc": "Significado da mensagem ignorada", "clickForMeaningActivity": "Clique aqui para um Desafio de Significado", "meaning": "Significado", "chatWith": "Grupo com {displayname}", - "slightlyOffensive": "Ligeiramente ofensivo", "clickOnEmailLink": "Por favor, clique no link do email e prossiga.\n\nVerifique sua pasta de spam se o email não tiver chegado.", - "whoIsAllowedToJoinThisChat": "Quem pode participar deste chat", "dontForgetPassword": "Não esqueça sua senha!", "enableAutocorrectToolName": "Ativar autocorreção do dispositivo", "enableAutocorrectDescription": "Se seu dispositivo suportar o idioma que você está aprendendo, você pode ativar a autocorreção do dispositivo para corrigir erros comuns enquanto digita.", @@ -4404,48 +3999,26 @@ "autocorrectNotAvailable": "Infelizmente, sua plataforma não é suportada atualmente para esse recurso. Fique atento para novos desenvolvimentos!", "pleaseUpdateApp": "Por favor, atualize o aplicativo para continuar.", "chooseEmojiInstructionsBody": "Combine emojis com as palavras que eles representam melhor. Não se preocupe! Não há penalizações por discordar. 😅", - "pickAnEmojiFor": "Escolha um emoji para {lemma}", "analyticsVocabListBody": "Esta é toda a sua vocabulário! À medida que você ganha XP por cada palavra, elas passarão de broto a flor completa. Clique em qualquer palavra para ver mais detalhes.", "morphAnalyticsListBody": "Estes são todos os conceitos gramaticais do idioma que você está aprendendo! Você os desbloqueará à medida que os encontrar ao conversar. Clique para detalhes.", "knockSpaceSuccess": "Você solicitou ingressar neste curso! Um administrador responderá à sua solicitação quando a receber 😀", - "joinByCode": "Entrar por código", "chooseWordAudioInstructionsBody": "Ouça a mensagem completa. Depois, combine os áudios com as palavras.", "chooseMorphsInstructionsBody": "Clique nas peças do quebra-cabeça para perguntas de gramática!", - "inviteAndLaunch": "Lançar e convidar", - "createOwnChat": "Crie seu próprio chat", "pleaseEnterInt": "Por favor, insira um número", "home": "Início", "join": "Entrar", "readingAssistanceOverviewBody": "Clique nos botões abaixo para mini-jogos de combinação de emojis, áudios, significados de palavras e conceitos gramaticais. Ou clique em qualquer palavra para detalhes.", - "learnByTexting": "Aprenda enviando mensagens", - "levelSummaryTrigger": "Ver resumo", "levelSummaryPopupTitle": "Resumo do Nível {level}", - "referFriends": "Indique amigos", - "referFriendDialogTitle": "Convide um amigo para sua conversa", - "referFriendDialogDesc": "Você tem um amigo que está animado para aprender um novo idioma com você? Então copie e envie este link de convite para ingressar e começar a conversar com você hoje.", - "youUnlocked": "Você desbloqueou", "resetInstructionTooltipsTitle": "Redefinir dicas de instruções", "resetInstructionTooltipsDesc": "Clique para mostrar dicas de instruções, como para um usuário novo.", "selectForGrammar": "Selecione um ícone de gramática para atividades e detalhes.", - "newChatActivityTitle": "Adicionar uma atividade divertida?", - "newChatActivityDesc": "Transforme cada conversa em grupo em uma aventura com o Planejador de Atividades! Defina tópicos e objetivos cativantes para o grupo e traga as conversas à vida com imagens impressionantes. Estimule discussões criativas e mantenha a diversão fluindo sem esforço!", - "exploreMore": "Explorar mais", "randomize": "Embaralhar", "clear": "Limpar", "makeYourOwnActivity": "Crie sua própria atividade", "featuredActivities": "Destaques", - "goToChat": "Ir para o chat", "save": "Salvar", - "selectActivity": "Selecionar atividade", - "wordFocusListeningMultipleChoice": "Qual áudio corresponde à palavra?", "startChat": "Iniciar um chat", "translationProblem": "Problema de tradução", - "perfectTranslation": "Tradução perfeita!", - "greatJobTranslation": "Ótimo trabalho com esta tradução!", - "goodJobTranslation": "Bom trabalho nesta tradução.", - "makingProgress": "Você está progredindo!", - "keepPracticing": "Continue praticando!", - "niceJob": "Bom trabalho!", "askToJoin": "Solicitar entrada", "emptyChatWarningTitle": "Chat vazio", "emptyChatWarningDesc": "Você não convidou ninguém para o seu chat. Vá para Configurações de Chat para convidar seus contatos ou o Bot. Você também pode fazer isso mais tarde.", @@ -4464,8 +4037,6 @@ "languageLevelC2Desc": "Posso entender praticamente tudo o que ouço ou leio e me expressar fluentemente e com precisão.", "newVocab": "Novo vocabulário", "newGrammar": "Novos conceitos gramaticais", - "congratulationsOnReaching": "Você atingiu o Nível {level}!", - "seeDetails": "Ver detalhes", "choosePracticeMode": "Clique em um dos botões acima para iniciar uma atividade de prática", "ban": "Banir", "unban": "Desbanir", @@ -4479,8 +4050,6 @@ "timesUsedWithAssistance": "Vezes usadas com assistência", "shareInviteCode": "Compartilhar código de convite: {code}", "leaderboard": "Classificação", - "welcomeUser": "Bem-vindo {user}", - "joinSpaceOnboardingDesc": "Você tem um código ou link de convite para um curso público?", "skipForNow": "Pular por enquanto", "permissions": "Permissões", "spaceChildPermission": "Quem pode adicionar novas conversas a este curso", @@ -4488,12 +4057,8 @@ "defaultOption": "Padrão", "deleteChatDesc": "Tem certeza de que deseja excluir esta conversa? Ela será excluída para todos os participantes e todas as mensagens dentro da conversa não estarão mais disponíveis para prática ou análises de aprendizado.", "deleteSpaceDesc": "O curso e quaisquer conversas selecionadas serão excluídos para todos os participantes e todas as mensagens dentro da conversa não estarão mais disponíveis para prática ou análises de aprendizado. Esta ação não pode ser desfeita.", - "chatWithActivities": "Conversar com atividades", "launch": "Iniciar", - "launchActivityToChats": "Iniciar atividade nas conversas", "searchChats": "Pesquisar conversas", - "selectChats": "Selecionar conversas", - "selectChatToStart": "Concluído! Selecione uma conversa para começar", "maxFifty": "Máximo 50", "configureSpace": "Configurar curso", "pinMessages": "Fixar mensagens", @@ -4507,9 +4072,7 @@ "announcements": "Anúncios", "activities": "Atividades", "access": "Acesso", - "botSettings": "Configurações do bot", "activitySuggestionTimeoutMessage": "Estamos trabalhando duro para gerar mais atividades para você, por favor, volte em um minuto", - "accessSettingsWarning": "Ops! Parece que você não tem permissão para definir as regras de Acesso desta sala. Você deve verificar essas configurações para garantir que atendam às suas necessidades e falar com um administrador da sala se precisar alterá-las", "howSpaceCanBeFound": "Como este curso pode ser encontrado", "private": "Privado", "cannotBeFoundInSearch": "Não pode ser encontrado na pesquisa", @@ -4522,16 +4085,6 @@ "canBeFoundViaKnock": "• solicitação para entrar e aprovação do administrador", "youHaveLeveledUp": "Você subiu de nível!", "sendActivities": "Enviar atividades", - "getStarted": "Começar", - "getStartedBotChatDesc": "Conversar com IA é um ótimo lugar para começar, e as ferramentas de leitura, escrita, audição e fala do Pangea tornam isso fácil!", - "getStartedCommunitiesDesc": "Aprender com uma comunidade é onde o Pangea Chat brilha!\nVocê pode ingressar na sua turma, encontrar um curso ou até criar o seu próprio!", - "getStartedFriendsDesc": "Você tem um amigo que quer aprender com você?", - "getStartedBotChatComplete": "Muito bem! Você está conversando com o bot!", - "getStartedCommunitiesComplete": "Ótimo, você entrou em um curso!", - "getStartedComplete": "Você concluiu esta seção!\nContinue explorando nossos recursos incríveis conversando com amigos!", - "getStartedFriendsComplete": "Uhul! Você tem amigos! 😉", - "getStartedBotChatButton": "Começar a conversar!", - "getStartedFriendsButton": "Conversar com um amigo", "groupChat": "Chat em grupo", "directMessage": "Mensagem direta", "newDirectMessage": "Nova mensagem direta", @@ -4547,7 +4100,6 @@ "mySavedActivities": "Minhas atividades salvas", "noSavedActivities": "Nenhuma atividade salva", "saveActivity": "Salvar esta atividade", - "yourSavedActivities": "Atividades salvas", "failedToPlayVideo": "Falha ao reproduzir o vídeo", "done": "Concluído", "inThisSpace": "Neste espaço", @@ -4586,37 +4138,27 @@ "maximumActivityParticipants": "Cada Atividade pode ter no máximo {count} participante(s).", "pending": "Pendente", "inactive": "Inativo", - "unjoinedActivityMessage": "Quer participar? Escolha um papel aberto!\nOu apenas assista ao show!", - "fullActivityMessage": "Sinta-se à vontade para assistir ao show! Enquanto não há papéis abertos para participar, você pode ver o chat!", "confirmRole": "Confirmar papel", "openRoleLabel": "ABERTO", "joinedTheActivity": "👋 {username} entrou como {role}", "finishedTheActivity": "🎯 {username} encerrou esta atividade", - "endActivityTitle": "Terminei", - "endActivityDesc": "Você completou os objetivos?\nEsta é a sua confirmação de que está se afastando da conversa. Mas não se preocupe, a diversão continua no chat! Sinta-se à vontade para ficar e aproveitar o show até que todos cliquem em 'Concluído'.", "archiveToAnalytics": "Adicionar às minhas Atividades Completadas", "activitySummaryError": "Resumos de atividades indisponíveis", "requestSummaries": "Solicitar resumos", - "loadingActivitySummary": "Carregando resumo da atividade...", "generatingNewActivities": "Você é o primeiro usuário deste par de idiomas! Por favor, aguarde um momento, estamos preparando atividades especialmente para você.", - "requestAccessTitle": "Solicitar acesso à visualização de análises?", + "requestAccessTitle": "Solicitar acesso à análise?", "requestAccessDesc": "Gostaria de solicitar acesso para visualizar as análises dos participantes?\n\nSe os participantes concordarem, os administradores deste curso poderão ver:\n • vocabulário total\n • conceitos gramaticais totais\n • sessões de atividade concluídas\n • os conceitos gramaticais específicos usados, corretamente e incorretamente\n\nEles não poderão ver:\n • mensagens em chats fora do curso\n • lista de vocabulário", "requestAccess": "Solicitar acesso ({count})", "analyticsInactiveTitle": "Solicitações para usuários inativos não puderam ser enviadas", "analyticsInactiveDesc": "Usuários inativos que não fizeram login desde a introdução desta funcionalidade não verão sua solicitação.\n\nO botão Solicitar aparecerá assim que eles retornarem. Você pode reenviar a solicitação mais tarde clicando no botão Solicitar sob o nome deles quando estiver disponível.", "accessRequestedTitle": "Solicitação de acesso às análises", - "accessRequestedDesc": "Os administradores de “{space}” estão solicitando acesso para visualizar suas análises de aprendizagem.\n\nSe você concordar, os administradores deste curso poderão visualizar:\n • total de vocabulário\n • total de conceitos gramaticais\n • total de sessões de atividade concluídas\n • os conceitos gramaticais específicos utilizados, corretamente e incorretamente\n\nEles não poderão visualizar:\n • mensagens em chats fora do curso\n • lista de vocabulário", - "allowAccess": "Permitir acesso", - "denyAccess": "Negar acesso", + "accessRequestedDesc": "Solicitando admin(s): {admin} \n\nOs administradores de “{space}” estão solicitando visualizar suas análises de aprendizado.\n\nSe você concordar, eles poderão visualizar seu:\n • vocabulário total\n • total de conceitos gramaticais\n • total de sessões de atividade concluídas\n • os conceitos gramaticais específicos usados, corretamente e incorretamente\n\nEles não poderão visualizar seu:\n • mensagens em chats fora do curso\n • lista de vocabulário", "adminRequestedAccess": "Os administradores solicitaram acesso para visualizar suas análises.", "lastUpdated": "Atualizado\n{time}", "activityFinishedMessage": "Tudo concluído!", "endForAll": "Encerrar para todos", "newCourse": "Novo curso", - "newCourseSubtitle": "Qual plano de curso você gostaria de usar?", - "failedToLoadCourses": "Falha ao carregar cursos", "numModules": "{num} módulos", - "numActivityPlans": "{num} planos de atividade", "coursePlan": "Plano do curso", "editCourseLater": "Você pode editar o título do modelo, descrições e a imagem do curso posteriormente.", "newCourseAccess": "Por padrão, os cursos são privados e requerem aprovação do administrador para ingressar. Você pode editar essas configurações a qualquer momento.", @@ -4630,44 +4172,28 @@ "accessDesc": "Você pode tornar seu curso aberto ao mundo! Ou, tornar seu curso privado e seguro.", "createGroupChatDesc": "Enquanto as sessões de atividade começam e terminam, os chats em grupo permanecerão abertos para comunicação rotineira.", "deleteDesc": "Somente administradores podem excluir um curso. Esta é uma ação destrutiva que remove todos os usuários e exclui todos os chats selecionados dentro do curso. Proceda com cautela.", - "failedToLoadCourseInfo": "Falha ao carregar informações do curso", "noCourseFound": "Oh, este curso precisa de um plano!\n\nPlanos de curso são uma sequência de tópicos e atividades de conversa.", "additionalParticipants": "+ {num} outros", - "activityNotFoundForCourse": "Esta atividade não foi encontrada dentro do curso", - "courseChats": "Chats do Curso", - "myActivitySessions": "Minhas Sessões de Atividade", "directMessages": "Mensagens Diretas", "whatNow": "E agora?", "chooseNextActivity": "Escolha sua próxima atividade!", - "seeInstructions": "Ver Instruções", - "hideInstructions": "Esconder Instruções", "letsGo": "Vamos lá", "chooseRole": "Escolha um papel!", "chooseRoleToParticipate": "Escolha um papel para participar!", "waitingToFillRole": "Aguardando preencher {num} papéis...", "pingParticipants": "Avisar participantes do curso", "playWithBot": "Jogar com o Pangea Bot", - "inviteFriendsToActivity": "Convidar amigos para a atividade", - "inviteFriendsToActivityCourse": "Convidar amigos para a atividade e o curso", "waitNotDone": "Espere, ainda não terminei!", "waitingForOthersToFinish": "Aguardando os demais terminarem...", - "saveToCompletedActivities": "Salvar em atividades concluídas", "generatingSummary": "Analisando o chat e gerando resultados", - "instructionsLanguage": "Idioma das instruções", "findCourse": "Encontrar um curso", - "activityCompletedDesc": "Sua atividade concluída foi adicionada à análise, onde você pode revisar e praticar o idioma que usou.", "pingParticipantsNotification": "{user} está procurando usuários para participar da sessão de atividade em {room}", "course": "Curso", "courses": "Cursos", "courseName": "Nome do curso", "createNewCourse": "Novo curso", - "publicCourses": "Cursos públicos", "goToCourse": "Ir para o curso: {course}", "activityComplete": "Esta atividade foi concluída. O resumo da atividade deve estar disponível abaixo.", - "haventChattedMuch": "Parece que você não conversou muito, tente usar mais palavras de vocabulário! Se você sentir que completou seu objetivo, pode encerrar a atividade abaixo.", - "haveChatted": "Parece que você está conversando há um tempo! Se você sente que concluiu seu objetivo, finalize para encerrar a atividade e nós geraremos um resumo para você no chat!", - "userDoneAndWaiting": "{num1}/{num2} participantes encerraram. Aguarde todos terminarem, e nós geraremos um resumo para você no chat! \n\nSe desejar reentrar na conversa, clique no botão continuar no chat.", - "othersDoneAndWaiting": "{num1}/{num2} terminaram. Você concluiu seu objetivo?", "startNewSession": "Iniciar nova sessão", "joinOpenSession": "Participar de sessão aberta", "less": "menos", @@ -4677,7 +4203,6 @@ "openToJoin": "Aberto para participar", "results": "Resultados", "activityDone": "Atividade Concluída!", - "moreLabel": "mais", "promoCodeInfo": "Códigos promocionais podem ser inseridos na próxima página", "editsComingSoon": "A capacidade de editar cidades e atividades estará disponível em breve.", "editing": "Editando", @@ -4693,13 +4218,10 @@ "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", - "chooseLanguage": "Escolha um idioma.", + "chooseLanguage": "Escolha um idioma de destino.", "planTrip": "Planeje sua viagem", "howAreYouTraveling": "Como você está viajando?", "unlockPrivateTrip": "Desbloqueie uma viagem privada", @@ -4712,25 +4234,20 @@ "courseCode": "Qual é a senha secreta?", "courseCodeHint": "Código ou link da viagem", "unlockMyTrip": "Desbloquear minha viagem", - "anyLevel": "Qualquer nível", "signupOption": "Como você deseja se inscrever?", "withApple": "Com Apple", "withGoogle": "Com Google", "withEmail": "Com Email", "createAccount": "Criar conta", - "noCoursesFound": "Nenhum curso encontrado", "loginWithEmail": "Entrar com email", "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", - "allCefrLevels": "Todos os níveis CEFR", "chatListTooltip": "Aqui você encontrará suas mensagens diretas! Clique na foto de perfil de qualquer usuário e \"comece uma conversa\" para enviar uma DM.", "directMessageBotTitle": "Mensagem direta do Pangea Bot", "feedbackTitle": "Feedback sobre a atividade", - "feedbackDesc": "Como a atividade pode ser melhorada? Se puder fornecer alguns detalhes, faremos a alteração!", "feedbackRespDesc": "Volte amanhã para atualizações da atividade.", "feedbackHint": "Seu feedback", "feedbackButton": "Enviar feedback", @@ -4739,12 +4256,10 @@ "playWithAI": "Jogue com IA por enquanto", "courseStartDesc": "O Pangea Bot está pronto para começar a qualquer momento!\n\n...mas aprender é melhor com amigos!", "activityDropdownDesc": "Quando terminar esta atividade, clique abaixo", - "activityAnalyticsListBody": "Estas são suas atividades concluídas! Após terminar as atividades, você pode visualizá-las aqui.", "languageMismatchTitle": "Incompatibilidade de idioma", "languageMismatchDesc": "O idioma de destino não corresponde ao idioma desta atividade. Deseja atualizar seu idioma de destino?", "reportWordIssueTooltip": "Reportar problema na informação da palavra", "tokenInfoFeedbackDialogTitle": "Feedback sobre Informação da Palavra", - "tokenInfoFeedbackDialogDesc": "A IA comete erros. Por favor, descreva quaisquer problemas que você encontrou com as informações acima.", "noPublicCoursesFound": "Nenhum curso público encontrado. Gostaria de criar um?", "noCourseTemplatesFound": "Não conseguimos encontrar cursos para o seu idioma-alvo. Você pode conversar com o Pangea Bot enquanto isso e verificar novamente mais tarde por mais cursos.", "botActivityJoinFailMessage": "O Pangea Bot está demorando para responder. Por favor, tente novamente mais tarde ou convide um amigo.", @@ -5384,30 +4899,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5423,18 +4914,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5459,18 +4938,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5507,38 +4974,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5547,62 +4986,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5639,10 +5034,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5651,14 +5042,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5667,46 +5050,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5715,10 +5062,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5775,18 +5118,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5795,14 +5126,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5831,18 +5154,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5851,42 +5162,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5895,14 +5174,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5923,26 +5194,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5963,10 +5214,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5999,25 +5246,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6074,34 +5302,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6130,778 +5330,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7894,14 +6326,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7913,14 +6337,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7952,10 +6368,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7964,18 +6376,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7984,14 +6384,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8016,38 +6408,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8093,10 +6457,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8121,10 +6481,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8149,10 +6505,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8161,66 +6513,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8241,42 +6537,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8301,154 +6573,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8465,18 +6589,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8497,14 +6609,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8521,10 +6625,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8537,14 +6637,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8553,14 +6645,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8588,26 +6672,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8636,18 +6700,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8684,10 +6740,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9620,10 +7672,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9804,34 +7852,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9844,10 +7864,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9856,14 +7872,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9880,22 +7888,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10043,14 +8035,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10059,34 +8043,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10095,54 +8051,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10151,10 +8071,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10171,10 +8087,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10346,26 +8258,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10394,10 +8286,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10454,30 +8342,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10506,18 +8378,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10634,14 +8498,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10654,10 +8510,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10666,14 +8518,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10690,14 +8534,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10706,22 +8542,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10734,18 +8554,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10762,22 +8570,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10786,30 +8582,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10882,18 +8654,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10950,18 +8710,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10990,30 +8738,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11066,18 +8798,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11126,46 +8850,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11230,10 +8914,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11405,14 +9085,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11440,14 +9112,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11460,10 +9124,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11499,19 +9159,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11536,14 +9191,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11552,14 +9199,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11612,10 +9251,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11628,18 +9263,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11652,14 +9275,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11688,14 +9303,6 @@ "type": "String", "placeholders": {} }, - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@waitNotDone": { "type": "String", "placeholders": {} @@ -11704,26 +9311,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11751,10 +9346,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11765,36 +9356,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11831,10 +9392,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11899,18 +9456,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11975,10 +9520,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11999,10 +9540,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12019,10 +9556,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12031,10 +9564,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12047,10 +9576,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12083,10 +9608,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12103,10 +9624,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12140,7 +9657,6 @@ "newMessageInPangeaChat": "💬 Nova mensagem no Pangea Chat", "shareCourse": "Compartilhar curso", "addCourse": "Adicionar um curso", - "joinCourseWithCode": "Entrar no curso com código", "joinPublicCourse": "Entrar em curso público", "vocabLevelsDesc": "É aqui que as palavras de vocabulário irão aparecer assim que você as evoluir!", "highlightVocabTooltip": "Destaque as palavras de vocabulário-alvo abaixo enviando-as ou praticando com elas no chat", @@ -12164,10 +9680,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12176,7 +9688,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nenhum DM ou chat encontrado. Certifique-se de que sua busca está escrita corretamente.", + "activityAnalyticsTooltipBody": "Estas são suas atividades salvas para revisão e prática.", + "numSavedActivities": "Número de atividades salvas", + "saveActivityTitle": "Salvar atividade", + "saveActivityDesc": "Bom trabalho! Salve esta atividade para revisão e prática posterior", + "levelInfoTooltip": "Aqui você pode ver todos os pontos que você ganhou e como!", + "alreadyInCourseWithID": "Você já está em um curso com este plano. Você quer criar um curso com o mesmo plano ou ir para o curso existente?", + "goToExistingCourse": "Ir para o curso existente", + "emojiView": "Visualização de emoji", + "feedbackDialogDesc": "Eu também cometo erros! Algo para me ajudar a melhorar?", + "contactHasBeenInvitedToTheCourse": "O contato foi convidado para o curso", + "activityStatsButtonTooltip": "Informações da atividade", + "allow": "Permitir", + "deny": "Negar", + "enabledRenewal": "Ativar Renovação de Assinatura", + "subscriptionEndsOn": "A assinatura termina em", + "subscriptionRenewsOn": "A assinatura renova em", + "waitForSubscriptionChanges": "As alterações na sua assinatura podem levar um momento para refletir no aplicativo.", + "subscribeReadingAssistance": "Assine para desbloquear ferramentas de mensagem", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Africâner", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amárico", + "arDisplayName": "Árabe", + "asDisplayName": "Assamês", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijano", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinês", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorrusso", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Búlgaro", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Índia)", + "brDisplayName": "Bretão", + "bsDisplayName": "Bósnio", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriate", + "caDisplayName": "Catalão", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Curdo Central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corso", + "crhDisplayName": "Turco da Crimeia", + "crsDisplayName": "Crioulo Seselwa Francês", + "csDisplayName": "Tcheco", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Galês", + "daDisplayName": "Dinamarquês", + "deDisplayName": "Alemão", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglês", + "enAUDisplayName": "Inglês (Austrália)", + "enGBDisplayName": "Inglês (Reino Unido)", + "enINDisplayName": "Inglês (Índia)", + "enUSDisplayName": "Inglês (EUA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espanhol", + "esESDisplayName": "Espanhol (Espanha)", + "esMXDisplayName": "Espanhol (México)", + "euDisplayName": "Basco", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandês", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijiano", + "foDisplayName": "Faroês", + "frDisplayName": "Francês", + "frCADisplayName": "Francês (Canadá)", + "frFRDisplayName": "Francês (França)", + "fyDisplayName": "Frísio Ocidental", + "gaDisplayName": "Irlandês", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaélico Escocês", + "glDisplayName": "Galego", + "gnDisplayName": "Guarani", + "gomDisplayName": "Konkani Goano", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havaiano", + "heDisplayName": "Hebraico", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croata", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Crioulo Haitiano", + "huDisplayName": "Húngaro", + "hyDisplayName": "Armênio", + "idDisplayName": "Indonésio", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandês", + "itDisplayName": "Italiano", + "jaDisplayName": "Japonês", + "jvDisplayName": "Javanês", + "kaDisplayName": "Georgiano", + "kkDisplayName": "Cazaque", + "kmDisplayName": "Khmer", + "knDisplayName": "Canarim", + "koDisplayName": "Coreano", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Caxemira", + "ktuDisplayName": "Kituba (República Democrática do Congo)", + "kuDisplayName": "Curdo", + "kyDisplayName": "Quirguiz", + "laDisplayName": "Latim", + "lbDisplayName": "Luxemburguês", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburguês", + "lijDisplayName": "Liguriano", + "lmoDisplayName": "Lombardo", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituano", + "ltgDisplayName": "Latgaliano", + "luoDisplayName": "Luo (Quênia e Tanzânia)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letão", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaxe", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedônio", + "mlDisplayName": "Malaiala", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaio", + "msArabDisplayName": "Malaio (Árabe)", + "msMYDisplayName": "Malaio (Malásia)", + "mtDisplayName": "Maltês", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmanês", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norueguês (Bokmål)", + "neDisplayName": "Nepalês", + "newDisplayName": "Newari", + "nlDisplayName": "Holandês", + "nlBEDisplayName": "Flamengo", + "noDisplayName": "Norueguês", + "nrDisplayName": "Ndebele do Sul", + "nsoDisplayName": "Sotho do Norte", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitano", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polonês", + "psDisplayName": "Pashto", + "ptDisplayName": "Português", + "ptBRDisplayName": "Português (Brasil)", + "ptPTDisplayName": "Português (Portugal)", + "quDisplayName": "Quíchua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romeno", + "roMDDisplayName": "Moldavo", + "romDisplayName": "Romani", + "ruDisplayName": "Russo", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sânscrito", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliano", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Cingalês", + "skDisplayName": "Eslovaco", + "slDisplayName": "Esloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanês", + "srDisplayName": "Sérvio", + "srMEDisplayName": "Montenegrino", + "ssDisplayName": "Swati", + "stDisplayName": "Soto do Sul", + "suDisplayName": "Sundanês", + "svDisplayName": "Sueco", + "swDisplayName": "Suaíli", + "szlDisplayName": "Silesiano", + "taDisplayName": "Tâmil", + "teDisplayName": "Telugo", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajique", + "thDisplayName": "Tailandês", + "tiDisplayName": "Tigrínia", + "tkDisplayName": "Turcomano", + "tlDisplayName": "Tagalo", + "tnDisplayName": "Tswana", + "trDisplayName": "Turco", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tártaro", + "ugDisplayName": "Uigure", + "ukDisplayName": "Ucraniano", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Índia)", + "urPKDisplayName": "Urdu (Paquistão)", + "uzDisplayName": "Uzbeque", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Iorubá", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonês", + "yueCNDisplayName": "Cantonês (China)", + "yueHKDisplayName": "Cantonês (Hong Kong)", + "zhDisplayName": "Chinês", + "zhCNDisplayName": "Chinês (Simplificado)", + "zhTWDisplayName": "Chinês (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12243,6 +10941,7 @@ "notStartedActivitiesTitle": "Sessões abertas ({num})", "inProgressActivitiesTitle": "Acontecendo agora ({num})", "completedActivitiesTitle": "Concluído ({num})", + "pickDifferentActivity": "Escolha uma atividade diferente", "inOngoingActivity": "Você tem uma atividade em andamento!", "@notStartedActivitiesTitle": { "type": "String", @@ -12268,10 +10967,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Seu idioma de destino não corresponde a esta mensagem. Atualizar seu idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Este é todo mundo neste curso. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Esta palavra de vocabulário será removida permanentemente da sua análise", + "woman": "Mulher", + "man": "Homem", + "otherGender": "Outro", + "unselectedGender": "Selecione uma opção de gênero", + "gender": "Gênero", + "chatParticipantTooltip": "Estas são todas as pessoas neste chat. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "As ferramentas de aprendizado estão desativadas para mensagens que não estão no seu idioma-alvo.", + "vocabEmoji": "Emoji de vocabulário", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Solicitar regeneração", + "optionalRegenerateReason": "(Opcional) Motivo", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Você definiu o emoji para {lemma}! Usaremos este emoji para representar a palavra nas atividades práticas daqui para frente.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Aguardando a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desativar ferramentas de idioma", + "disableLanguageToolsDesc": "Você gostaria de desativar a assistência automática de idioma?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permissão negada. Ative as permissões de gravação para gravar mensagens de áudio.", + "genericWebRecordingError": "Algo deu errado. Recomendamos usar o navegador Chrome ao gravar mensagens.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Para a melhor experiência ao usar este aplicativo, por favor, amplie o tamanho da sua tela.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Atividades para Desbloquear o Próximo Tópico", "activitiesToUnlockTopicDesc": "Defina o número de atividades para desbloquear o próximo tópico do curso", "@activitiesToUnlockTopicTitle": { @@ -12281,5 +11098,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Prática de definição de vocabulário correta", + "constructUseIncLMDesc": "Prática de definição de vocabulário incorreta", + "constructUseCorLADesc": "Prática de áudio de vocabulário correta", + "constructUseIncLADesc": "Prática de áudio de vocabulário incorreta", + "constructUseBonus": "Bônus durante a prática de vocabulário", + "practiceVocab": "Praticar vocabulário", + "selectMeaning": "Selecione o significado", + "selectAudio": "Selecione o áudio correspondente", + "congratulations": "Parabéns!", + "anotherRound": "Outra rodada", + "noActivityRequest": "Nenhum pedido de atividade atual.", + "quit": "Sair", + "congratulationsYouveCompletedPractice": "Parabéns! Você completou a sessão de prática.", + "mustHave10Words": "Você deve ter pelo menos 10 palavras de vocabulário para praticá-las. Tente conversar com um amigo ou com o Pangea Bot para descobrir mais!", + "botSettings": "Configurações do Bot", + "activitySettingsOverrideWarning": "Idioma e nível de idioma determinados pelo plano de atividade", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_PT.arb b/lib/l10n/intl_pt_PT.arb index b0b769606..3af737159 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -2188,26 +2188,14 @@ "commandHint_logoutall": "Sair de todos os dispositivos ativos", "displayNavigationRail": "Mostrar barra de navegação no telemóvel", "customReaction": "Reação personalizada", - "accountInformation": "Informações da conta", - "addGroupDescription": "Adicionar uma descrição ao chat", - "addNewFriend": "Adicionar novo amigo", - "alreadyHaveAnAccount": "Já tem uma conta?", - "createNewGroup": "Criar um novo chat", - "editChatPermissions": "Editar permissões do chat", "writeAMessageLangCodes": "Digite em {l1} ou {l2}...", "requests": "Pedidos", - "allCorrect": "É assim que eu diria! Bom!", - "newWayAllGood": "Não foi assim que eu teria dito, mas parece bom!", - "othersAreBetter": "Hm, pode haver uma maneira melhor de dizer isso.", "holdForInfo": "Clique e segure para informações da palavra.", "greenFeedback": "Isso é o que eu colocaria!", "yellowFeedback": "Hm, você pode tentar isso e ver se funciona! Para usar esta palavra, basta clicar nela novamente.", "redFeedback": "Não acho que esteja certo...", "itInstructionsTitle": "Posso ajudar você a traduzir!", "itInstructionsBody": "Você pode clicar e segurar opções para obter informações da palavra.", - "oneday": "Últimas 24 horas", - "oneweek": "Últimos 7 dias", - "onemonth": "Mês passado", "gaTooltip": "L2 usar com assistência gramatical", "taTooltip": "L2 usar com assistência de tradução", "unTooltip": "Outro", @@ -2217,58 +2205,27 @@ "interactiveTranslatorAllowed": "Escolha do Estudante", "interactiveTranslatorRequired": "Necessário", "notYetSet": "Ainda não definido", - "myLearning": "Minhas Análises", "waTooltip": "L2 usar sem assistência", - "changeDateRange": "Alterar intervalo de datas", - "classDescription": "Descrição", - "addStudents": "Convidar utilizadores por link ou código", - "copyClassLink": "Copiar link de convite", - "copyClassCode": "Copiar código de convite", - "inviteStudentByUserName": "Convidar utilizadores por nome de utilizador", "languageSettings": "Configurações de idioma", "interactiveTranslator": "Assistência de tradução", - "shareVideo": "Partilhar Vídeo", - "shareVideoDesc": "Ative esta opção para permitir que os estudantes partilhem vídeos nos chats.", - "shareFiles": "Partilhar Ficheiros", - "selectLanguageLevel": "Selecionar nível de idioma", "noIdenticalLanguages": "Por favor, escolha línguas base e alvo diferentes", - "iWantALanguagePartnerFrom": "É de:", - "worldWide": "Em todo o mundo", - "noResults": "Sem resultados! Tente ampliar a sua pesquisa.", "searchBy": "Pesquisar por país e línguas", - "iWantAConversationPartner": "Quero um parceiro de conversa que", - "iWantALanguagePartnerWhoSpeaks": "Fala:", - "iWantALanguagePartnerWhoIsLearning": "Está a aprender:", "joinWithClassCode": "Juntar-se ao curso", - "joinWithClassCodeHint": "Inserir código de convite", - "languageLevelPreA1": "Iniciante Verdadeiro (Pré A1)", - "languageLevelA1": "Principiante (A1)", - "languageLevelA2": "Elementar (A2)", - "languageLevelB1": "Intermediário (B1)", - "languageLevelB2": "Intermediário Superior (B2)", - "languageLevelC1": "Avançado (C1)", - "languageLevelC2": "Domínio (C2)", + "languageLevelPreA1": "Iniciante Baixo (Pré A1)", + "languageLevelA1": "Novato Mid (A1)", + "languageLevelA2": "Iniciante Alto (A2)", + "languageLevelB1": "Intermediário Médio (B1)", + "languageLevelB2": "Avançado Baixo (B2)", + "languageLevelC1": "Avançado Médio (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Alterar o nome", "changeTheNameOfTheChat": "Alterar o nome do chat", - "askPangeaBot": "Peça ao Pangea Bot uma definição contextual.", "sorryNoResults": "Desculpe, sem resultados.", "ignoreInThisText": "Ignorar", - "helpMeTranslate": "Sim!", - "needsItShortMessage": "Fora do alvo", "needsItMessage": "Espera, isso não é {targetLanguage}! Precisas de ajuda para traduzir?", - "needsIgcMessage": "Esta mensagem contém um erro gramatical.", - "tokenTranslationTitle": "Uma palavra está na tua língua base.", - "spanTranslationDesc": "Vê as possíveis traduções abaixo.", - "spanTranslationTitle": "Algumas palavras estão na tua língua base.", - "l1SpanAndGrammarTitle": "Fora do idioma alvo", - "l1SpanAndGrammarDesc": "Isto pode estar na tua língua base ou pode ser um erro gramatical.", - "otherTitle": "Tens um erro.", - "otherDesc": "Vê as possíveis correções abaixo.", "countryInformation": "O meu país", - "myLanguages": "As minhas línguas base e alvo", "targetLanguage": "Língua alvo", "sourceLanguage": "Língua base", - "languagesISpeak": "Línguas que falo", "updateLanguage": "As minhas línguas", "whatLanguageYouWantToLearn": "Que língua quer aprender?", "whatIsYourBaseLanguage": "Qual é a sua língua base?", @@ -2283,13 +2240,8 @@ "errorDisableLanguageAssistanceUserDesc": "Clique aqui para atualizar as definições de assistência de tradução e gramática", "errorDisableITClassDesc": "Assistência de tradução está desativada para o curso em que esta conversa está.", "errorDisableIGCClassDesc": "Assistência de gramática está desativada para o curso em que esta conversa está.", - "itIsDisabled": "Tradução Interativa está desativada", - "igcIsDisabled": "Verificação Gramatical Interativa está desativada", - "goToLearningSettings": "Ir para Configurações de Aprendizagem", "error405Title": "Línguas não configuradas", "error405Desc": "Por favor, configure os seus idiomas no Menu Principal > Configurações de Aprendizagem.", - "loginOrSignup": "Iniciar sessão com", - "iAgreeToThe": " Concordo com os ", "termsAndConditions": "Termos e Condições", "andCertifyIAmAtLeast13YearsOfAge": " e certifico que tenho pelo menos 16 anos de idade.", "error502504Title": "Uau, há muitos estudantes online!", @@ -2297,40 +2249,21 @@ "error404Title": "Erro de tradução!", "error404Desc": "O Bot Pangea não tem certeza de como traduzir isso...", "errorPleaseRefresh": "Estamos a resolver o problema! Por favor, recarregue e tente novamente.", - "toggleIT": "Tradução Interativa", - "toggleIGC": "Verificação Gramatical Interativa", - "toggleToolSettingsDescription": "Aqui pode ativar ou desativar as configurações do seu instrumento de idioma individual.", "connectedToStaging": "Conectado ao Ambiente de Teste", "learningSettings": "Configurações de aprendizagem", - "sendVoiceNotes": "Enviar Notas de Voz", - "sendVoiceNotesDesc": "Ative esta opção para permitir que os estudantes enviem notas de voz nos chats.", - "chatTopic": "Tópico do chat", - "chatTopicDesc": "Defina um tópico para o chat", - "inviteStudentByUserNameDesc": "Se o seu estudante já tiver uma conta, pode procurá-lo.", "participants": "Participantes", - "almostPerfect": "Parece certo! Aqui está o que eu teria dito.", - "prettyGood": "Muito bom! Aqui está o que eu teria dito.", - "letMeThink": "Hmm, vamos ver como você se saiu!", "clickMessageTitle": "Precisa de ajuda?", "clickMessageBody": "Clique numa mensagem para ferramentas de idioma como tradução, reprodução e mais!", - "understandingMessagesTitle": "Definições e traduções!", - "understandingMessagesBody": "Clique nas palavras sublinhadas para definições. Traduza com as opções de mensagem (superior direito).", "allDone": "Tudo pronto!", "vocab": "Vocabulário", "low": "Temos evidências de que o usuário não entende essas palavras.", "medium": "Estas palavras foram usadas. Não está claro se as palavras são totalmente compreendidas ou não.", "high": "Temos evidências de que o usuário entende essas palavras.", - "unknownProficiency": "Estas palavras não foram usadas no Pangea Chat.", - "changeView": "Alterar visualizações.", - "clearAll": "Limpar todas as palavras?", - "generateVocabulary": "Gerar vocabulário a partir do título e descrição", - "generatePrompts": "Gerar prompts", "subscribe": "Subscrever", "getAccess": "Subscreva agora!", "subscriptionDesc": "A comunicação é gratuita! Subscreva para desbloquear tradução interativa, verificação gramatical e análises de aprendizagem.", "subscriptionManagement": "Gestão de Subscrições", "currentSubscription": "Subscrição Atual", - "changeSubscription": "Alterar a sua subscrição", "cancelSubscription": "Cancelar a sua subscrição", "selectYourPlan": "Selecione o seu Plano", "subsciptionPlatformTooltip": "Por favor, faça login no seu dispositivo original para gerir o seu plano de subscrição", @@ -2339,9 +2272,6 @@ "paymentHistory": "Histórico de Pagamentos", "emptyChatDownloadWarning": "Impossível fazer download de chat vazio", "update": "Atualizar", - "updateDesc": "Agora pode atualizar esta aplicação de {localVersion} para {storeVersion}", - "maybeLater": "Talvez mais tarde", - "mainMenu": "Menu Principal", "toggleImmersionMode": "Modo Imersão", "toggleImmersionModeDesc": "Quando ativado, todas as mensagens são exibidas na sua língua alvo. Esta configuração é mais útil em trocas linguísticas.", "itToggleDescription": "Esta ferramenta de aprendizagem de línguas identificará palavras na sua língua base e ajudará a traduzi-las para a sua língua alvo. Embora raro, a IA pode cometer erros de tradução.", @@ -2356,212 +2286,13 @@ "definitionsToolDescription": "Quando ativado, palavras sublinhadas em azul podem ser clicadas para obter definições. Clique nas mensagens para aceder às definições.", "translationsToolDescrption": "Quando ativado, clique numa mensagem e no ícone de tradução para ver uma mensagem na sua língua base.", "welcomeBack": "Bem-vindo de volta! Se fez parte do piloto de 2023-2024, entre em contacto connosco para a sua assinatura piloto especial. Se é professor e adquiriu (ou a sua instituição adquiriu) licenças para a sua turma, entre em contacto connosco para a sua assinatura de professor.", - "kickAllStudents": "Expulsar Todos os Estudantes", - "kickAllStudentsConfirmation": "Tem a certeza de que deseja expulsar todos os estudantes?", - "inviteAllStudents": "Convidar Todos os Estudantes", - "inviteAllStudentsConfirmation": "Tem a certeza de que deseja convidar todos os estudantes?", - "inviteUsersFromPangea": "Adicionar administradores", - "redeemPromoCode": "Resgatar Código Promocional", - "enterPromoCode": "Inserir Código Promocional", "downloadTxtFile": "Descarregar Ficheiro de Texto", "downloadCSVFile": "Descarregar Ficheiro CSV", "promotionalSubscriptionDesc": "Atualmente possui uma assinatura promocional vitalícia. Envie uma mensagem para support@pangea.chat para obter ajuda na alteração da sua assinatura.", "originalSubscriptionPlatform": "Assinatura adquirida através de {purchasePlatform}", "oneWeekTrial": "Período de teste de uma semana", "downloadXLSXFile": "Descarregar ficheiro Excel", - "abDisplayName": "Abecásio", - "aaDisplayName": "Afar", - "afDisplayName": "Africânder", - "akDisplayName": "Akan", - "sqDisplayName": "Albanês", - "amDisplayName": "Amárico", - "arDisplayName": "Árabe", - "anDisplayName": "Aragonês", - "hyDisplayName": "Arménio", - "asDisplayName": "Assamês", - "avDisplayName": "Avaric", - "aeDisplayName": "Vésteo", - "ayDisplayName": "Aimará", - "azDisplayName": "Azerbaijano", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Basco", - "beDisplayName": "Bielorrusso", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bósnio", - "brDisplayName": "Bretão", - "bgDisplayName": "Búlgaro", - "myDisplayName": "Birmanês", - "caDisplayName": "Catalão, Valenciano", - "chDisplayName": "Chamorro", - "ceDisplayName": "Checheno", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chinês", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornual", - "coDisplayName": "Corso", - "crDisplayName": "Cree", - "hrDisplayName": "Croata", - "csDisplayName": "Tcheco", - "daDisplayName": "Dinamarquês", - "dvDisplayName": "Divehi; Dhivehi; Maldivo;", - "nlDisplayName": "Holandês", - "enDisplayName": "Inglês", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estoniano", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroês", - "fjDisplayName": "Fijiano", - "fiDisplayName": "Finlandês", - "frDisplayName": "Francês", - "ffDisplayName": "Fula; Fula; Pulaar; Pular", - "glDisplayName": "Galego", - "kaDisplayName": "Georgiano", - "deDisplayName": "Alemão", - "elDisplayName": "Grego Moderno", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Crioulo Haitiano", - "haDisplayName": "Haúça", - "heDisplayName": "Hebraico (moderno)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Húngaro", - "iaDisplayName": "Interlíngua", - "idDisplayName": "Indonésio", - "ieDisplayName": "Interlíngua", - "gaDisplayName": "Irlandês", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandês", - "itDisplayName": "Italiano", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonês", - "jvDisplayName": "Javanês", - "klDisplayName": "Kalaallisut, groenlandês", - "knDisplayName": "Canarês", - "krDisplayName": "Kanuri", - "ksDisplayName": "Cachemir", - "kkDisplayName": "Cazaque", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirguiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreano", - "kuDisplayName": "Curdo", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latim", - "lbDisplayName": "Luxemburguês, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburguês, Limburguês, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosiano", - "ltDisplayName": "Lituano", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letão", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedónio", - "mgDisplayName": "Malgaxe", - "msDisplayName": "Malaio", - "mlDisplayName": "Malaiala", - "mtDisplayName": "Maltês", - "miDisplayName": "Maori", - "mrDisplayName": "Marata (Marāṭhī)", - "mhDisplayName": "Marshalês", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauruano", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norueguês Bokmål", - "ndDisplayName": "Ndebele do Norte", - "neDisplayName": "Nepalês", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norueguês Nynorsk", - "noDisplayName": "Norueguês", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele do Sul", - "ocDisplayName": "Occitano", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Eslavo Eclesiástico, Eslavo Antigo, Eslavo Eclesiástico, Velho Búlgaro, Velho Eslavo", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Ossetic, Ossetiano", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persa", - "plDisplayName": "Polaco", - "psDisplayName": "Pastó, Pushto", - "ptDisplayName": "Português", - "quDisplayName": "Quíchua", - "rmDisplayName": "Retorromano", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romeno, Moldavo", - "ruDisplayName": "Russo", - "saDisplayName": "Sânscrito (Saṃskṛta)", - "scDisplayName": "Sardo", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami do Norte", - "smDisplayName": "Samoano", - "sgDisplayName": "Sango", - "srDisplayName": "Servo", - "gdDisplayName": "Gaélico escocês, gaélico", - "snDisplayName": "Shona", - "siDisplayName": "Cingalês, Singalês", - "skDisplayName": "Eslovaco", - "slDisplayName": "Esloveno", - "soDisplayName": "Somali", - "stDisplayName": "Sotho do Sul", - "esDisplayName": "Espanhol", - "suDisplayName": "Sundanês", - "swDisplayName": "Suaíli", - "ssDisplayName": "Swati", - "svDisplayName": "Sueco", - "taDisplayName": "Tâmil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tajique", - "thDisplayName": "Tailandês", - "tiDisplayName": "Tigrínia", - "boDisplayName": "Tibetano padrão, Tibetano, Central", - "tkDisplayName": "Turcomeno", - "tlDisplayName": "Tagalo", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Ilhas Tonga)", - "trDisplayName": "Turco", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tártaro", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiano", - "ugDisplayName": "Uigur, Uigur", - "ukDisplayName": "Ucraniano", - "urDisplayName": "Urdu", - "uzDisplayName": "Usbeque", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamita", - "voDisplayName": "Volapük", - "waDisplayName": "Valão", - "cyDisplayName": "Galês", - "woDisplayName": "Wolof", - "fyDisplayName": "Frísio Ocidental", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Iídiche", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Desconhecido", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havaiano", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multilíngue", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebraico", - "jwDisplayName": "Javanês", - "moDisplayName": "Moldávio", - "shDisplayName": "Servo-Croata", "wwCountryDisplayName": "Mundo", "afCountryDisplayName": "Afeganistão", "axCountryDisplayName": "Ilhas Aland", @@ -2809,41 +2540,25 @@ "yeCountryDisplayName": "Iémen", "zmCountryDisplayName": "Zâmbia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Pagar", - "allPrivateChats": "Conversas privadas", - "unknownPrivateChat": "Conversa privada desconhecida", + "pay": "Finalizar compra", "invitedToSpace": "{user} convidou-o a participar num curso: {space}! Deseja aceitar?", - "declinedInvitation": "Convite recusado", - "acceptedInvitation": "Convite aceite", "youreInvited": "📩 Está convidado!", "invitedToChat": "{user} convidou-o a participar numa conversa: {name}! Deseja aceitar?", "monthlySubscription": "Mensal", "yearlySubscription": "Anual", "defaultSubscription": "Assinatura Pangea Chat", "freeTrial": "Período de teste gratuito", - "grammarAnalytics": "Análise de erros", "total": "Total: ", "noDataFound": "Dados não encontrados", - "promoSubscriptionExpirationDesc": "A sua assinatura atual é promocional e expira em {expiration}. Envie uma mensagem para support@pangea.chat para obter ajuda na alteração da sua assinatura.", - "emptyChatNameWarning": "Por favor, insira um nome para esta conversa", "blurMeansTranslateTitle": "Por que a mensagem está desfocada?", "blurMeansTranslateBody": "Enquanto o Modo Imersão estiver ativado, as mensagens enviadas na sua língua base serão borradas enquanto o Pangea Bot as traduz para o seu idioma de destino. O Modo Imersão pode ser ativado ou desativado nas configurações individuais e do curso.", - "someErrorTitle": "Hm, algo não está certo", - "someErrorBody": "Pode ser um erro ou algo na sua língua base.", "bestCorrectionFeedback": "Isso mesmo!", "distractorFeedback": "Não é bem assim.", "bestAnswerFeedback": "Isso mesmo!", "definitionDefaultPrompt": "O que essa palavra significa?", "practiceDefaultPrompt": "Qual é a melhor resposta?", "correctionDefaultPrompt": "Qual é a melhor substituição?", - "itStartDefaultPrompt": "Quer ajuda para traduzir?", - "lockedChatWarning": "🔒 Este chat foi bloqueado", - "lockChat": "Bloquear Chat", - "suggestToChat": "Sugerir este chat", - "suggestToChatDesc": "Chats sugeridos aparecerão nas listas de chat", "acceptSelection": "Aceitar Correção", - "acceptSelectionAnyway": "Usar isto mesmo assim", - "makingActivity": "Criando atividade", "why": "Por quê?", "definition": "Definição", "exampleSentence": "Exemplo de frase", @@ -2851,128 +2566,55 @@ "reportMessageTitle": "{reportingUserId} relatou uma mensagem de {reportedUserId} no chat {roomName}", "reportMessageBody": "Mensagem: {reportedMessage}\nRazão: {reason}", "noTeachersFound": "Nenhum professor encontrado para relatar", - "viewArchive": "Ver Arquivo", "trialExpiration": "Seu período de teste gratuito expira em {expiration}", "freeTrialDesc": "Novos utilizadores recebem uma semana de teste gratuito do Pangea Chat", "activateTrial": "Teste Gratuito de 7 Dias", "successfullySubscribed": "Subscreveu com sucesso!", "clickToManageSubscription": "Clique aqui para gerir a sua assinatura.", - "errorGettingAudio": "Erro ao obter áudio. Por favor, atualize e tente novamente.", "signUp": "Registar-se", "pleaseChooseAtLeastChars": "Por favor, escolha pelo menos {min} caracteres.", "noEmailWarning": "Por favor, insira um endereço de email válido. Caso contrário, não poderá redefinir a sua palavra-passe. Se não desejar, toque novamente no botão para continuar.", "pleaseEnterValidEmail": "Por favor, insira um endereço de email válido.", "pleaseChooseAUsername": "Por favor, escolha um nome de utilizador", - "chooseAUsername": "Escolha um nome de utilizador", "define": "Definir", "listen": "Ouvir", - "addConversationBot": "Ativar Bot de Conversa", - "addConversationBotDesc": "Adicionar um bot a esta conversa", - "convoBotSettingsDescription": "Editar tópico de conversa e dificuldade", - "enterAConversationTopic": "Insira um tópico de conversa", - "conversationTopic": "Tópico de conversa", - "enableModeration": "Ativar moderação", - "enableModerationDesc": "Ativar moderação automática para revisar mensagens antes de serem enviadas", - "conversationLanguageLevel": "Qual é o nível de idioma desta conversa?", - "showDefinition": "Mostrar definição", - "subscriptionPopupTitle": "Esta frase pode ter um erro gramatical...", - "subscriptionPopupDesc": "Subscreva hoje para desbloquear tradução e correção gramatical!", - "seeOptions": "Ver opções", - "continuedWithoutSubscription": "Continuar sem subscrição", "trialPeriodExpired": "O seu período de teste expirou", - "selectToDefine": "Clique em qualquer palavra para ver a sua definição!", "translations": "traduções", "messageAudio": "áudio da mensagem", "definitions": "definições", "subscribedToUnlockTools": "Subscreva para desbloquear tradução interativa, verificação gramatical, reprodução de áudio, atividades de prática personalizadas e análises de aprendizagem!", "translationTooltip": "Traduzir", - "audioTooltip": "Reproduzir Áudio", "speechToTextTooltip": "Transcrição", - "certifyAge": "Certifico que tenho mais de {age} anos de idade", "kickBotWarning": "Remover o Pangea Bot irá eliminar o bot de conversa desta conversa.", - "joinToView": "Junte-se a esta sala para ver detalhes", "refresh": "Atualizar", - "autoPlayTitle": "Reprodução Automática de Mensagens", - "autoPlayDesc": "Quando ativado, o áudio de texto para fala das mensagens será reproduzido automaticamente ao serem selecionadas.", "messageAnalytics": "Análise de Mensagens", "words": "Palavras", "score": "Pontuação", "accuracy": "Precisão", "points": "Pontos", "noPaymentInfo": "Nenhuma informação de pagamento necessária!", - "conversationBotModeSelectDescription": "Atividade de chat", - "conversationBotModeSelectOption_discussion": "Discussão", - "conversationBotModeSelectOption_custom": "Personalizado", - "conversationBotModeSelectOption_conversation": "Conversa", - "conversationBotModeSelectOption_textAdventure": "Aventura de Texto", - "conversationBotModeSelectOption_storyGame": "Jogo de História", - "conversationBotDiscussionZone_title": "Configurações de Discussão", - "conversationBotDiscussionZone_discussionTopicLabel": "Tópico de Discussão", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Definir tópico de discussão", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Palavras-chave de Discussão", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Definir palavras-chave de discussão", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Lista separada por vírgulas de palavras-chave para orientar a discussão", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Enviar aviso de discussão numa programação", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Horas entre avisos de discussão", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Responder a reação ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reação para enviar aviso de discussão", - "conversationBotCustomZone_title": "Configurações Personalizadas", - "conversationBotCustomZone_customSystemPromptLabel": "Prompt do sistema", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Definir prompt personalizado do sistema", - "conversationBotCustomZone_customSystemPromptEmptyError": "Falta o prompt personalizado do sistema", - "botConfig": "Configurações do bot e atividades", - "botConfigNoPermissionTitle": "Sem permissão", - "botConfigNoPermissionMessage": "Contacte o administrador da sala para alterar a configuração do bot", - "addConversationBotDialogTitleInvite": "Confirmar convite do bot de conversa", - "addConversationBotButtonInvite": "Convidar", - "addConversationBotDialogInviteConfirmation": "Convidar", - "addConversationBotButtonTitleRemove": "Confirmar remoção do bot de conversa", - "addConversationBotButtonRemove": "Remover", - "addConversationBotDialogRemoveConfirmation": "Remover", - "conversationBotConfigConfirmChange": "Confirmar", - "conversationBotStatus": "Convidar bot", - "conversationBotTextAdventureZone_title": "Aventura de Texto", - "conversationBotTextAdventureZone_instructionLabel": "Instruções do Mestre do Jogo", - "conversationBotTextAdventureZone_instructionPlaceholder": "Definir instruções do mestre do jogo", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Faltam instruções do mestre do jogo", - "studentAnalyticsNotAvailable": "Dados do estudante atualmente indisponíveis", - "roomDataMissing": "Alguns dados podem estar ausentes das salas das quais você não é membro.", "updatePhoneOS": "Pode ser necessário atualizar a versão do sistema operacional do seu dispositivo.", "wordsPerMinute": "Palavras por minuto", "autoIGCToolName": "Executar assistência de escrita Pangea automaticamente", "autoIGCToolDescription": "Executar automaticamente a assistência de escrita de gramática e tradução do Pangea Chat antes de enviar minha mensagem.", - "runGrammarCorrection": "Verificar mensagem", - "grammarCorrectionFailed": "Questões a resolver", - "grammarCorrectionComplete": "Parece bom!", "tooltipInstructionsTitle": "Não tem certeza do que isso faz?", "tooltipInstructionsMobileBody": "Pressione e segure itens para visualizar dicas de ferramenta.", "tooltipInstructionsBrowserBody": "Passe o mouse sobre os itens para visualizar dicas de ferramenta.", "chatCapacity": "Capacidade de chat", "roomFull": "Esta sala já está cheia.", - "topicNotSet": "O tópico não foi definido.", - "chatCapacityNotSet": "Este chat não tem limite de capacidade.", "chatCapacityHasBeenChanged": "Capacidade de chat alterada", "chatCapacitySetTooLow": "A capacidade de chat deve ser pelo menos {count}.", "chatCapacityExplanation": "A capacidade de chat limita o número de membros permitidos em um chat.", - "chatExceedsCapacity": "Este chat excede a sua capacidade.", "tooManyRequest": "Muitas solicitações, por favor tente novamente mais tarde.", "enterNumber": "Por favor, insira um valor numérico inteiro.", "buildTranslation": "Construa a sua tradução a partir das opções acima", - "nonexistentSelection": "A seleção já não existe.", - "changeAnalyticsLanguage": "Alterar idioma de análise", "practice": "Praticar", "noLanguagesSet": "Nenhum idioma definido", - "noActivitiesFound": "Já chega por hoje! Volte mais tarde para mais.", - "hintTitle": "Dica:", "speechToTextBody": "Para mensagens de voz, pode ver uma transcrição assim como a pontuação de Palavras por Minuto do orador.", "versionNotFound": "Versão não encontrada", "fetchingVersion": "A obter a versão...", "versionFetchError": "Erro ao buscar a versão", "versionText": "Versão: {version}+{buildNumber}", - "languageButtonLabel": "Idioma: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Reprodução automática da tradução", - "interactiveTranslatorAutoPlayDesc": "Lança o tradutor interativo sem perguntar.", - "changeAnalyticsView": "Alterar Visualização de Análises", "l1TranslationBody": "Mensagens no seu idioma base não serão traduzidas.", "deleteSubscriptionWarningTitle": "Você tem uma assinatura ativa", "deleteSubscriptionWarningBody": "Excluir sua conta não cancelará automaticamente sua assinatura.", @@ -2980,9 +2622,7 @@ "error520Title": "Por favor, tente novamente.", "error520Desc": "Desculpe, não conseguimos entender sua mensagem...", "wordsUsed": "Palavras Usadas", - "errorTypes": "Tipos de Erros", "level": "Nível", - "canceledSend": "Envio cancelado", "morphsUsed": "Morfemas Usados", "translationChoicesBody": "Clique e segure uma opção para uma dica.", "grammar": "Gramática", @@ -2992,7 +2632,6 @@ "reportContentIssueTitle": "Relatar problema de conteúdo", "feedback": "Feedback opcional", "reportContentIssueDescription": "Oh não! A IA pode facilitar experiências de aprendizagem personalizadas, mas... também tem alucinações. Por favor, forneça qualquer feedback que tenha e tentaremos novamente.", - "changeContent": "Oh não! A IA pode facilitar experiências de aprendizagem personalizadas, mas... também tem alucinações. O que deve ser?", "clickTheWordAgainToDeselect": "Clique na palavra selecionada para desmarcá-la.", "l2SupportNa": "Indisponível", "l2SupportAlpha": "Alpha", @@ -3226,7 +2865,6 @@ "grammarCopySPC": "Especificidade", "grammarCopyPARTTYPE": "Tipo Partitivo", "grammarCopyINTREL": "Interrogativo-Relativo", - "grammarCopyNUMFORMpsor": "Número do Possuidor", "grammarCopyUNKNOWN": "Desconhecido", "grammarCopyNUMBERPSOR": "Número do Possuidor", "grammarCopyPOSS": "Possessivo", @@ -3272,28 +2910,14 @@ "grammarCopyVOICEdir": "Direto", "grammarCopyVOICEinv": "Inverso", "grammarCopyVOICErcp": "Recíproco", - "enterPrompt": "Por favor, insira um prompt do sistema", - "selectBotLanguage": "Selecionar idioma do bot", - "chooseVoice": "Escolha uma voz", - "enterLanguageLevel": "Por favor, insira um nível de idioma", - "enterDiscussionTopic": "Por favor, insira um tópico de discussão", - "selectBotChatMode": "Selecionar modo de chat", - "messageNotInTargetLang": "Mensagem não no idioma alvo", "other": "Outro", "levelShort": "NÍVEL {level}", - "botModeValidation": "Por favor, selecione um modo de chat", "clickBestOption": "Escolha as melhores opções para traduzir sua mensagem!", "completeActivitiesToUnlock": "Complete pelo menos uma atividade para desbloquear a tradução!", - "botSettingsSubtitle": "Convidar o bot para moderar a atividade do chat", - "invitePeople": "Convidar usuários", "noCapacityLimit": "Sem limite de capacidade", "downloadGroupText": "Descarregar texto do grupo", "notificationsOn": "Notificações ativadas", "notificationsOff": "Notificações desativadas", - "chatCanBeFoundViaSearch": "O chat pode ser encontrado via pesquisa", - "requireCodeToJoin": "Exigir código para entrar", - "canFindInSearch": "Pode ser encontrado na pesquisa", - "addChatToSpace": "Adicionar chat", "createChatAndInviteUsers": "Criar chat e convidar utilizadores", "updatedNewSpaceDescription": "Os cursos permitem consolidar os seus chats e construir comunidades privadas ou públicas.", "joinWithCode": "Entrar com código", @@ -3329,39 +2953,19 @@ "constructUseCollected": "Coletado no chat", "constructUseNanDesc": "Não aplicável", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Iniciar sessão com nome de utilizador e palavra-passe", - "registrationEmailMessage": "Por favor, verifique o seu email com um link enviado para lá. Em alguns casos, o email demora até 5 minutos a chegar. Por favor, verifique também a pasta de spam.", "enableTTSToolName": "TTS ativado", "enableTTSToolDescription": "Permite que a aplicação gere saída de texto para fala para partes do texto no seu idioma de destino.", - "couldNotFindTTS": "Não conseguimos encontrar um motor de texto para fala para o seu idioma de destino atual.", - "ttsInstructionsHyperlink": "Clique aqui para ver as instruções para descarregar uma nova voz no seu dispositivo.", - "createAnAccount": "Criar uma conta", - "signIn": "Iniciar sessão", - "signUpWithEmail": "Registar com email", - "signUpWithGoogle": "Registar com Google", - "signUpWithApple": "Registar com Apple", "yourUsername": "O seu nome de utilizador", "yourEmail": "O seu email", - "pleaseEnterAnEmail": "Por favor, insira um endereço de email", - "signInWithGoogle": "Iniciar sessão com Google", - "signInWithApple": "Iniciar sessão com Apple", - "chooseYourAvatar": "Escolha o seu avatar", "iWantToLearn": "Quero aprender", - "letsStart": "Vamos começar", - "pleaseAgreeToTOS": "Por favor, concorde com os Termos e Condições", "pleaseEnterEmail": "Por favor, insira um endereço de email válido.", - "pleaseSelectALanguage": "Por favor, selecione um idioma", "myBaseLanguage": "O meu idioma base", - "clickWordsInstructions": "🧻 Clique em qualquer palavra para detalhes. 🤐", - "chooseBestDefinition": "O que significa esta palavra?", "meaningSectionHeader": "Significado:", "formSectionHeader": "Formas usadas em chats:", - "noEmojiSelectedTooltip": "Nenhum emoji selecionado", "writingExercisesTooltip": "Escrita", "listeningExercisesTooltip": "Audição", "readingExercisesTooltip": "Leitura", "meaningNotFound": "Significado não pôde ser encontrado.", - "formsNotFound": "Formas não puderam ser encontradas.", "chooseBaseForm": "Escolha a forma base", "notTheCodeError": "Desculpe, esse não é o código!", "totalXP": "XP Total", @@ -3401,9 +3005,6 @@ "pickAnEmoji": "Qual é o teu emoji favorito para '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Combine os significados com as palavras na mensagem!", "doubleClickToEdit": "Duplo clique para editar.", - "removeFeature": "Remover {feature}", - "chooseCorrectLabel": "Escolha o rótulo correto.", - "levelPopupTitle": "Parabéns por alcançar\nNível {level}", "activityPlannerTitle": "Planeador de Atividades", "topicLabel": "Tópico", "topicPlaceholder": "Escolha um tópico...", @@ -3411,7 +3012,6 @@ "modePlaceholder": "Escolha um modo...", "learningObjectiveLabel": "Objetivo de aprendizagem", "learningObjectivePlaceholder": "Escolha um objetivo de aprendizagem...", - "mediaLabel": "Mídia que os aprendizes devem compartilhar", "languageOfInstructionsLabel": "Idioma das instruções da atividade", "targetLanguageLabel": "Idioma alvo", "cefrLevelLabel": "Nível CEFR", @@ -3426,20 +3026,15 @@ "instructions": "Instruções", "numberOfLearners": "Número de aprendizes", "mustBeInteger": "Deve ser um número inteiro, por exemplo, 1, 2, 3, ...", - "noLemmasFound": "Não há vocabulário com mais de {xp} XP. Continue praticando!", "constructUsePvmDesc": "Produzido em mensagem de voz", - "lockedMorphFeature": "Aguardando desbloqueio", "leaveSpaceDescription": "Ao sair do curso, deixará todas as conversas dentro dele. Outros utilizadores verão que saiu do curso.", - "whatIsLemma": "O que é o lema?", "constructUseCorMmDesc": "Significado correto da mensagem", "constructUseIncMmDesc": "Significado incorreto da mensagem", "constructUseIgnMmDesc": "Significado da mensagem ignorada", "clickForMeaningActivity": "Clique aqui para um Desafio de Significado", "meaning": "Significado", "chatWith": "Grupo com {displayname}", - "slightlyOffensive": "Ligeiramente ofensivo", "clickOnEmailLink": "Por favor, clique no link no email e prossiga.\n\nVerifique a pasta de spam se o email não tiver chegado.", - "whoIsAllowedToJoinThisChat": "Quem pode entrar nesta conversa", "dontForgetPassword": "Não se esqueça da sua palavra-passe!", "enableAutocorrectToolName": "Ativar autocorreção do dispositivo", "enableAutocorrectDescription": "Se o seu dispositivo suportar o idioma que está a aprender, pode ativar a autocorreção do dispositivo para corrigir erros comuns enquanto escreve.", @@ -3467,48 +3062,26 @@ "autocorrectNotAvailable": "Infelizmente, a sua plataforma não é atualmente suportada para este recurso. Fique atento a novos desenvolvimentos!", "pleaseUpdateApp": "Por favor, atualize o aplicativo para continuar.", "chooseEmojiInstructionsBody": "Combine emojis com as palavras que melhor os representam. Não se preocupe! Não há penalizações por discordar. 😅", - "pickAnEmojiFor": "Escolha um emoji para {lemma}", "analyticsVocabListBody": "Isto é todo o seu vocabulário! À medida que ganha XP por cada palavra, elas passam de semente a flor. Clique em qualquer palavra para ver mais detalhes.", "morphAnalyticsListBody": "Estes são todos os conceitos gramaticais na língua que está a aprender! Vai desbloqueá-los à medida que os encontrar enquanto conversa. Clique para detalhes.", "knockSpaceSuccess": "Solicitou juntar-se a este curso! Um administrador responderá ao seu pedido quando o receber 😀", - "joinByCode": "Juntar pelo código", "chooseWordAudioInstructionsBody": "Ouça a mensagem completa. Depois, associe os áudios às palavras.", "chooseMorphsInstructionsBody": "Clique nas peças do puzzle para perguntas de gramática!", - "inviteAndLaunch": "Lançar e convidar", - "createOwnChat": "Criar o seu próprio chat", "pleaseEnterInt": "Por favor, insira um número", "home": "Início", "join": "Juntar", "readingAssistanceOverviewBody": "Clique nos botões abaixo para mini-jogos de correspondência de emojis, áudios, significados de palavras e conceitos gramaticais. Ou clique em qualquer palavra para detalhes.", - "learnByTexting": "Aprender por mensagem", - "levelSummaryTrigger": "Ver resumo", "levelSummaryPopupTitle": "Resumo do Nível {level}", - "referFriends": "Indicar amigos", - "referFriendDialogTitle": "Convide um amigo para a sua conversa", - "referFriendDialogDesc": "Tem um amigo entusiasmado para aprender uma nova língua consigo? Então copie e envie este link de convite para juntar-se e começar a conversar consigo hoje.", - "youUnlocked": "Desbloqueou", "resetInstructionTooltipsTitle": "Redefinir dicas de instruções", "resetInstructionTooltipsDesc": "Clique para mostrar dicas de instruções como para um utilizador novo.", "selectForGrammar": "Selecione um ícone de gramática para atividades e detalhes.", - "newChatActivityTitle": "Adicionar uma atividade divertida?", - "newChatActivityDesc": "Transforme cada grupo de chat numa aventura com o Planeador de Atividades! Defina tópicos e objetivos cativantes para o grupo, e traga as conversas à vida com imagens impressionantes. Desperte discussões imaginativas e mantenha a diversão a fluir sem esforço!", - "exploreMore": "Explorar mais", "randomize": "Aleatorizar", "clear": "Limpar", "makeYourOwnActivity": "Crie a sua própria atividade", "featuredActivities": "Destaques", - "goToChat": "Ir para o chat", "save": "Guardar", - "selectActivity": "Selecionar atividade", - "wordFocusListeningMultipleChoice": "Qual áudio corresponde à palavra?", "startChat": "Iniciar um chat", "translationProblem": "Problema de tradução", - "perfectTranslation": "Tradução perfeita!", - "greatJobTranslation": "Ótimo trabalho com esta tradução!", - "goodJobTranslation": "Bom trabalho nesta tradução.", - "makingProgress": "Estás a progredir!", - "keepPracticing": "Continua a praticar!", - "niceJob": "Bom trabalho!", "askToJoin": "Pedir para participar", "emptyChatWarningTitle": "Chat vazio", "emptyChatWarningDesc": "Não convidaste ninguém para o teu chat. Vai às definições do chat para convidar os teus contactos ou o Bot. Também podes fazer isto mais tarde.", @@ -3527,8 +3100,6 @@ "languageLevelC2Desc": "Consigo entender praticamente tudo o que ouço ou leio e expressar-me fluentemente e com precisão.", "newVocab": "Vocabulário novo", "newGrammar": "Novos conceitos gramaticais", - "congratulationsOnReaching": "Parabéns! Você atingiu o nível {level}!", - "seeDetails": "Ver detalhes", "choosePracticeMode": "Clique num dos botões acima para iniciar uma atividade de prática", "ban": "Banir", "unban": "Desbanir", @@ -3542,8 +3113,6 @@ "timesUsedWithAssistance": "Vezes usadas com assistência", "shareInviteCode": "Compartilhar código de convite: {code}", "leaderboard": "Classificação", - "welcomeUser": "Bem-vindo {user}", - "joinSpaceOnboardingDesc": "Tem um código ou link de convite para um curso público?", "skipForNow": "Pular por agora", "permissions": "Permissões", "spaceChildPermission": "Quem pode adicionar novos chats a este curso", @@ -3551,12 +3120,8 @@ "defaultOption": "Padrão", "deleteChatDesc": "Tem certeza de que deseja excluir esta conversa? Ela será excluída para todos os participantes e todas as mensagens dentro da conversa não estarão mais disponíveis para prática ou análises de aprendizagem.", "deleteSpaceDesc": "O curso e quaisquer conversas selecionadas serão excluídos para todos os participantes e todas as mensagens dentro da conversa não estarão mais disponíveis para prática ou análises de aprendizagem. Esta ação não pode ser desfeita.", - "chatWithActivities": "Conversa com atividades", "launch": "Lançar", - "launchActivityToChats": "Lançar atividade para conversas", "searchChats": "Pesquisar conversas", - "selectChats": "Selecionar conversas", - "selectChatToStart": "Concluído! Selecione uma conversa para começar", "maxFifty": "Máximo 50", "configureSpace": "Configurar curso", "pinMessages": "Fixar mensagens", @@ -3570,9 +3135,7 @@ "announcements": "Anúncios", "activities": "Atividades", "access": "Acesso", - "botSettings": "Configurações do bot", "activitySuggestionTimeoutMessage": "Estamos a trabalhar arduamente para gerar mais atividades para si, por favor, volte a verificar dentro de um minuto", - "accessSettingsWarning": "Ups! Parece que não tem permissão para definir as regras de Acesso desta sala. Deve verificar estas regras para garantir que são o que precisa e falar com um administrador da sala se precisar de as alterar", "howSpaceCanBeFound": "Como este curso pode ser encontrado", "private": "Privado", "cannotBeFoundInSearch": "Não pode ser encontrado na pesquisa", @@ -3585,16 +3148,6 @@ "canBeFoundViaKnock": "• pedido para entrar e aprovação do administrador", "youHaveLeveledUp": "Subiu de nível!", "sendActivities": "Enviar atividades", - "getStarted": "Começar", - "getStartedBotChatDesc": "Conversar com IA é um ótimo lugar para começar e as ferramentas de leitura, escrita, audição e fala do Pangea tornam tudo mais fácil!", - "getStartedCommunitiesDesc": "Aprender com uma comunidade é onde o Pangea Chat brilha!\nPodes juntar-te à tua turma, encontrar um curso ou até criar o teu próprio!", - "getStartedFriendsDesc": "Tens um amigo que quer aprender contigo?", - "getStartedBotChatComplete": "Bem feito! Estás a conversar com o bot!", - "getStartedCommunitiesComplete": "Ótimo, juntaste-te a um curso!", - "getStartedComplete": "Concluíste esta seção!\nContinua a explorar as nossas funcionalidades incríveis conversando com amigos!", - "getStartedFriendsComplete": "Uhul! Tens amigos! 😎", - "getStartedBotChatButton": "Começar a conversar!", - "getStartedFriendsButton": "Conversar com um amigo", "groupChat": "Chat de Grupo", "directMessage": "Mensagem Direta", "newDirectMessage": "Nova mensagem direta", @@ -3610,7 +3163,6 @@ "mySavedActivities": "As minhas atividades guardadas", "noSavedActivities": "Sem atividades guardadas", "saveActivity": "Guardar esta atividade", - "yourSavedActivities": "Atividades guardadas", "failedToPlayVideo": "Falha ao reproduzir o vídeo", "done": "Concluído", "inThisSpace": "Neste espaço", @@ -3649,37 +3201,27 @@ "maximumActivityParticipants": "Cada Atividade pode ter no máximo {count} participante(s).", "pending": "Pendente", "inactive": "Inativo", - "unjoinedActivityMessage": "Quer participar? Escolha um papel aberto!\nOu socialize e assista ao show!", - "fullActivityMessage": "Sinta-se à vontade para assistir ao show! Enquanto não houver papéis abertos para participar, você pode visualizar o chat!", "confirmRole": "Confirmar papel", "openRoleLabel": "ABERTO", "joinedTheActivity": "👋 {username} entrou como {role}", "finishedTheActivity": "🎯 {username} concluiu esta atividade", - "endActivityTitle": "Terminei", - "endActivityDesc": "Você completou os objetivos?\nEsta é sua confirmação de que está se afastando do chat. Mas não se preocupe, a diversão continua no chat! Sinta-se à vontade para socializar e aproveitar o show até que todos cliquem em 'Concluído'.", "archiveToAnalytics": "Adicionar às minhas Atividades Completadas", "activitySummaryError": "Resumos de atividades indisponíveis", "requestSummaries": "Solicitar resumos", - "loadingActivitySummary": "Carregando resumo da atividade...", "generatingNewActivities": "Você é o primeiro usuário deste par de idiomas! Por favor, aguarde um momento, estamos preparando atividades especialmente para você.", - "requestAccessTitle": "Solicitar acesso à visualização de análises?", + "requestAccessTitle": "Solicitar acesso à análise?", "requestAccessDesc": "Gostaria de solicitar acesso para visualizar análises dos participantes?\n\nSe os participantes concordarem, os administradores deste curso poderão visualizar:\n • vocabulário total\n • conceitos gramaticais totais\n • sessões de atividade concluídas\n • os conceitos gramaticais específicos utilizados, corretamente e incorretamente\n\nEles não poderão visualizar:\n • mensagens em chats fora do curso\n • lista de vocabulário", "requestAccess": "Solicitar acesso ({count})", "analyticsInactiveTitle": "Solicitações a usuários inativos não puderam ser enviadas", "analyticsInactiveDesc": "Usuários inativos que não fizeram login desde a introdução deste recurso não verão sua solicitação.\n\nO botão Solicitar aparecerá assim que eles retornarem. Você pode reenviar a solicitação mais tarde clicando no botão Solicitar sob o nome deles quando estiver disponível.", "accessRequestedTitle": "Pedido de Acesso à Análise", - "accessRequestedDesc": "Os administradores de \"{space}\" estão a solicitar para ver as suas análises de aprendizagem.\n\nSe concordar, os administradores deste curso poderão ver o seu:\n • vocabulário total\n • conceitos gramaticais totais\n • sessões de atividade concluídas\n • conceitos gramaticais específicos utilizados, corretamente e incorretamente\n\nNão poderão ver o seu:\n • mensagens em chats fora do curso\n • lista de vocabulário", - "allowAccess": "Permitir Acesso", - "denyAccess": "Negar Acesso", + "accessRequestedDesc": "Solicitando admin(s): {admin} \n\nOs administradores de “{space}” estão solicitando visualizar suas análises de aprendizado.\n\nSe você concordar, eles poderão visualizar seu:\n • vocabulário total\n • total de conceitos gramaticais\n • total de sessões de atividade concluídas\n • os conceitos gramaticais específicos usados, corretamente e incorretamente\n\nEles não poderão visualizar seu:\n • mensagens em chats fora do curso\n • lista de vocabulário", "adminRequestedAccess": "Os administradores solicitaram para ver as suas análises.", "lastUpdated": "Atualizado\n{time}", "activityFinishedMessage": "Tudo Concluído!", "endForAll": "Terminar para todos", "newCourse": "Novo curso", - "newCourseSubtitle": "Qual plano de curso gostaria de usar?", - "failedToLoadCourses": "Falha ao carregar os cursos", "numModules": "{num} módulos", - "numActivityPlans": "{num} planos de atividade", "coursePlan": "Plano do Curso", "editCourseLater": "Pode editar o título do modelo, descrições e imagem do curso mais tarde.", "newCourseAccess": "Por padrão, os cursos são privados e requerem aprovação do administrador para participar. Pode editar estas configurações a qualquer momento.", @@ -3693,44 +3235,28 @@ "accessDesc": "Pode tornar o seu curso aberto ao mundo! Ou, tornar o seu curso privado e seguro.", "createGroupChatDesc": "Enquanto as sessões de atividade começam e terminam, os chats de grupo permanecerão abertos para comunicação de rotina.", "deleteDesc": "Apenas administradores podem eliminar um curso. Esta é uma ação destrutiva que remove todos os utilizadores e elimina todos os chats selecionados dentro do curso. Proceda com cautela.", - "failedToLoadCourseInfo": "Falha ao carregar informações do curso", "noCourseFound": "Oh, este curso precisa de um plano!\n\nOs planos de curso são uma sequência de tópicos e atividades de conversa.", "additionalParticipants": "+ {num} outros", - "activityNotFoundForCourse": "Esta atividade não foi encontrada dentro do curso", - "courseChats": "Chats do Curso", - "myActivitySessions": "As Minhas Sessões de Atividade", "directMessages": "Mensagens Diretas", "whatNow": "E agora?", "chooseNextActivity": "Escolha a sua próxima atividade!", - "seeInstructions": "Ver Instruções", - "hideInstructions": "Esconder Instruções", "letsGo": "Vamos lá", "chooseRole": "Escolha um papel!", "chooseRoleToParticipate": "Escolha um papel para participar!", "waitingToFillRole": "Aguardando preencher {num} funções...", "pingParticipants": "Avisar participantes do curso", "playWithBot": "Jogar com o Pangea Bot", - "inviteFriendsToActivity": "Convidar amigos para a atividade", - "inviteFriendsToActivityCourse": "Convidar amigos para atividade e curso", "waitNotDone": "Espera, ainda não terminei!", "waitingForOthersToFinish": "Aguardando os restantes terminarem...", - "saveToCompletedActivities": "Salvar em atividades concluídas", "generatingSummary": "Analisando o chat e gerando resultados", - "instructionsLanguage": "Idioma das instruções", "findCourse": "Encontrar um curso", - "activityCompletedDesc": "A sua atividade concluída foi adicionada à análise onde pode rever e praticar a língua que utilizou.", "pingParticipantsNotification": "{user} está a procurar utilizadores para participar na sessão de atividade em {room}", "course": "Curso", "courses": "Cursos", "courseName": "Nome do curso", "createNewCourse": "Novo curso", - "publicCourses": "Cursos públicos", "goToCourse": "Ir para o curso: {course}", "activityComplete": "Esta atividade foi concluída. O resumo da atividade deve estar disponível abaixo.", - "haventChattedMuch": "Parece que não conversaste muito, tenta usar algumas palavras de vocabulário! Se sentires que completaste o teu objetivo, podes terminar a atividade abaixo.", - "haveChatted": "Parece que estiveste a conversar há algum tempo! Se sentires que completaste o teu objetivo, termina para concluir a atividade e vamos gerar um resumo na conversa!", - "userDoneAndWaiting": "{num1}/{num2} participantes terminaram. Espera que todos terminem, e vamos gerar um resumo na conversa! \n\nSe quiseres voltar a juntar-te à conversa, clica no botão de continuar na conversa.", - "othersDoneAndWaiting": "{num1}/{num2} terminaram. Completaste o teu objetivo?", "startNewSession": "Iniciar nova sessão", "joinOpenSession": "Juntar-se à sessão aberta", "less": "menos", @@ -3740,7 +3266,6 @@ "openToJoin": "Aberto para participar", "results": "Resultados", "activityDone": "Atividade Concluída!", - "moreLabel": "mais", "promoCodeInfo": "Os códigos promocionais podem ser inseridos na próxima página", "editsComingSoon": "A capacidade de editar cidades e atividades estará disponível em breve.", "editing": "A editar", @@ -3756,13 +3281,10 @@ "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", - "chooseLanguage": "Escolha uma língua.", + "chooseLanguage": "Escolha um idioma de destino.", "planTrip": "Planear a sua viagem", "howAreYouTraveling": "Como está a viajar?", "unlockPrivateTrip": "Desbloquear uma viagem privada", @@ -3775,25 +3297,20 @@ "courseCode": "Qual é a senha secreta?", "courseCodeHint": "Código ou link da viagem", "unlockMyTrip": "Desbloquear a minha viagem", - "anyLevel": "Qualquer nível", "signupOption": "Como deseja inscrever-se?", "withApple": "Com a Apple", "withGoogle": "Com o Google", "withEmail": "Com email", "createAccount": "Criar conta", - "noCoursesFound": "Não foram encontrados cursos", "loginWithEmail": "Entrar com email", "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", - "allCefrLevels": "Todos os níveis CEFR", "chatListTooltip": "Aqui você encontrará as suas mensagens diretas! Clique no avatar de qualquer utilizador e “comece uma conversa” para enviar uma DM.", "directMessageBotTitle": "Mensagem direta Pangea Bot", "feedbackTitle": "Feedback da atividade", - "feedbackDesc": "Como deve ser melhorada a atividade? Se puder fornecer alguns detalhes, faremos a alteração!", "feedbackRespDesc": "Volte amanhã para atualizações da atividade.", "feedbackHint": "Seu feedback", "feedbackButton": "Enviar feedback", @@ -3802,12 +3319,10 @@ "playWithAI": "Jogue com IA por agora", "courseStartDesc": "O Pangea Bot está pronto para começar a qualquer momento!\n\n...mas aprender é melhor com amigos!", "activityDropdownDesc": "Quando terminar esta atividade, clique abaixo", - "activityAnalyticsListBody": "Estas são as suas atividades concluídas! Após terminar as atividades, pode visualizá-las aqui.", "languageMismatchTitle": "Incompatibilidade de idioma", "languageMismatchDesc": "O seu idioma alvo não corresponde ao idioma desta atividade. Deseja atualizar o seu idioma alvo?", "reportWordIssueTooltip": "Reportar problema na informação da palavra", "tokenInfoFeedbackDialogTitle": "Feedback sobre Informação da Palavra", - "tokenInfoFeedbackDialogDesc": "A IA comete erros. Por favor, descreva quaisquer problemas que tenha encontrado com as informações acima.", "noPublicCoursesFound": "Não foram encontrados cursos públicos. Gostaria de criar um?", "noCourseTemplatesFound": "Não conseguimos encontrar cursos para o seu idioma-alvo. Pode conversar com o Pangea Bot entretanto, e verificar novamente mais tarde por mais cursos.", "botActivityJoinFailMessage": "O Pangea Bot está a demorar a responder. Por favor, tente novamente mais tarde, ou convide um amigo.", @@ -3816,7 +3331,7 @@ "selectAll": "Selecionar tudo", "deselectAll": "Desmarcar tudo", "@@locale": "pt_PT", - "@@last_modified": "2026-01-06 13:01:59.189375", + "@@last_modified": "2026-01-07 14:26:44.705293", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6055,30 +5570,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6094,18 +5585,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6130,18 +5609,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6178,38 +5645,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6218,62 +5657,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6310,10 +5705,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6322,14 +5713,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6338,46 +5721,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6386,10 +5733,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6446,18 +5789,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6466,14 +5797,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6502,18 +5825,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6522,42 +5833,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6566,14 +5845,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6594,26 +5865,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6634,10 +5885,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6670,25 +5917,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6745,34 +5973,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6801,778 +6001,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8565,14 +6997,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8584,14 +7008,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8623,10 +7039,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8635,18 +7047,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8655,14 +7055,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8687,38 +7079,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8764,10 +7128,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8792,10 +7152,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8820,10 +7176,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8832,66 +7184,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8912,42 +7208,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8972,154 +7244,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9136,18 +7260,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9168,14 +7280,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9192,10 +7296,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9208,14 +7308,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9224,14 +7316,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9259,26 +7343,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9307,18 +7371,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9355,10 +7411,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10291,10 +8343,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10475,34 +8523,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10515,10 +8535,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10527,14 +8543,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10551,22 +8559,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10714,14 +8706,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10730,34 +8714,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10766,54 +8722,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10822,10 +8742,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10842,10 +8758,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11017,26 +8929,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11065,10 +8957,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11125,30 +9013,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11177,18 +9049,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11305,14 +9169,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11325,10 +9181,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11337,14 +9189,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11361,14 +9205,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11377,22 +9213,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11405,18 +9225,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11433,22 +9241,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11457,30 +9253,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11553,18 +9325,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11621,18 +9381,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11661,30 +9409,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11737,18 +9469,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11797,46 +9521,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11901,10 +9585,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12076,14 +9756,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12111,14 +9783,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12131,10 +9795,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12170,19 +9830,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12207,14 +9862,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12223,14 +9870,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12283,10 +9922,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12299,18 +9934,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12323,14 +9946,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12359,14 +9974,6 @@ "type": "String", "placeholders": {} }, - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@waitNotDone": { "type": "String", "placeholders": {} @@ -12375,26 +9982,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12422,10 +10017,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12436,36 +10027,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12502,10 +10063,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12570,18 +10127,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12646,10 +10191,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12670,10 +10211,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12690,10 +10227,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12702,10 +10235,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12718,10 +10247,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12754,10 +10279,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12774,10 +10295,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12811,7 +10328,6 @@ "newMessageInPangeaChat": "📩 Nova mensagem no Pangea Chat", "shareCourse": "Partilhar curso", "addCourse": "Adicionar um curso", - "joinCourseWithCode": "Entrar no curso com código", "joinPublicCourse": "Entrar no curso público", "vocabLevelsDesc": "É aqui que as palavras de vocabulário irão aparecer assim que as tiveres evoluído!", "highlightVocabTooltip": "Destaque as palavras de vocabulário-alvo abaixo enviando-as ou praticando com elas no chat", @@ -12835,10 +10351,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12847,7 +10359,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nenhum DM ou chat encontrado. Certifique-se de que sua busca está escrita corretamente.", + "activityAnalyticsTooltipBody": "Estas são suas atividades salvas para revisão e prática.", + "numSavedActivities": "Número de atividades salvas", + "saveActivityTitle": "Salvar atividade", + "saveActivityDesc": "Bom trabalho! Salve esta atividade para revisão e prática posterior", + "levelInfoTooltip": "Aqui você pode ver todos os pontos que você ganhou e como!", + "alreadyInCourseWithID": "Você já está em um curso com este plano. Você quer criar um curso com o mesmo plano ou ir para o curso existente?", + "goToExistingCourse": "Ir para o curso existente", + "emojiView": "Visualização de emoji", + "feedbackDialogDesc": "Eu também cometo erros! Algo para me ajudar a melhorar?", + "contactHasBeenInvitedToTheCourse": "O contato foi convidado para o curso", + "activityStatsButtonTooltip": "Informações da atividade", + "allow": "Permitir", + "deny": "Negar", + "enabledRenewal": "Ativar Renovação de Assinatura", + "subscriptionEndsOn": "A Assinatura Termina Em", + "subscriptionRenewsOn": "A Assinatura Renova Em", + "waitForSubscriptionChanges": "As alterações na sua assinatura podem levar um momento para refletir no aplicativo.", + "subscribeReadingAssistance": "Assine para desbloquear ferramentas de mensagem", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Africâner", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amárico", + "arDisplayName": "Árabe", + "asDisplayName": "Assamês", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijano", + "baDisplayName": "Bashkir", + "banDisplayName": "Balinês", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorrusso", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Búlgaro", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Índia)", + "brDisplayName": "Bretão", + "bsDisplayName": "Bósnio", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriate", + "caDisplayName": "Catalão", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Curdo Central", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corso", + "crhDisplayName": "Turco da Crimeia", + "crsDisplayName": "Francês Crioulo Seselwa", + "csDisplayName": "Tcheco", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Galês", + "daDisplayName": "Dinamarquês", + "deDisplayName": "Alemão", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Inglês", + "enAUDisplayName": "Inglês (Austrália)", + "enGBDisplayName": "Inglês (Reino Unido)", + "enINDisplayName": "Inglês (Índia)", + "enUSDisplayName": "Inglês (EUA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Espanhol", + "esESDisplayName": "Espanhol (Espanha)", + "esMXDisplayName": "Espanhol (México)", + "euDisplayName": "Basco", + "faDisplayName": "Persa", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandês", + "filDisplayName": "Filipino", + "fjDisplayName": "Fijiano", + "foDisplayName": "Faroês", + "frDisplayName": "Francês", + "frCADisplayName": "Francês (Canadá)", + "frFRDisplayName": "Francês (França)", + "fyDisplayName": "Frísio Ocidental", + "gaDisplayName": "Irlandês", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaélico Escocês", + "glDisplayName": "Galego", + "gnDisplayName": "Guarani", + "gomDisplayName": "Konkani Goês", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havaiano", + "heDisplayName": "Hebraico", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croata", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Crioulo Haitiano", + "huDisplayName": "Húngaro", + "hyDisplayName": "Armênio", + "idDisplayName": "Indonésio", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandês", + "itDisplayName": "Italiano", + "jaDisplayName": "Japonês", + "jvDisplayName": "Javanês", + "kaDisplayName": "Georgiano", + "kkDisplayName": "Cazaque", + "kmDisplayName": "Khmer", + "knDisplayName": "Canarim", + "koDisplayName": "Coreano", + "kokDisplayName": "Concanim", + "kriDisplayName": "Kriô", + "ksDisplayName": "Caxemira", + "ktuDisplayName": "Kituba (República Democrática do Congo)", + "kuDisplayName": "Curdo", + "kyDisplayName": "Quirguiz", + "laDisplayName": "Latim", + "lbDisplayName": "Luxemburguês", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburguês", + "lijDisplayName": "Liguriano", + "lmoDisplayName": "Lombardo", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituano", + "ltgDisplayName": "Latgaliano", + "luoDisplayName": "Luo (Quênia e Tanzânia)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letão", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaxe", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedônio", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongol", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaio", + "msArabDisplayName": "Malaio (Árabe)", + "msMYDisplayName": "Malaio (Malásia)", + "mtDisplayName": "Maltês", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmanês", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norueguês (Bokmål)", + "neDisplayName": "Nepalês", + "newDisplayName": "Newari", + "nlDisplayName": "Holandês", + "nlBEDisplayName": "Flamengo", + "noDisplayName": "Norueguês", + "nrDisplayName": "Ndebele do Sul", + "nsoDisplayName": "Sotho do Norte", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitano", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polonês", + "psDisplayName": "Pashto", + "ptDisplayName": "Português", + "ptBRDisplayName": "Português (Brasil)", + "ptPTDisplayName": "Português (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romeno", + "roMDDisplayName": "Moldavo", + "romDisplayName": "Romani", + "ruDisplayName": "Russo", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sânscrito", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliano", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Cingalês", + "skDisplayName": "Eslovaco", + "slDisplayName": "Esloveno", + "smDisplayName": "Samoano", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanês", + "srDisplayName": "Sérvio", + "srMEDisplayName": "Montenegrino", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho do Sul", + "suDisplayName": "Sundanês", + "svDisplayName": "Sueco", + "swDisplayName": "Suaíli", + "szlDisplayName": "Silesiano", + "taDisplayName": "Tâmil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajique", + "thDisplayName": "Tailandês", + "tiDisplayName": "Tigrínia", + "tkDisplayName": "Turcomano", + "tlDisplayName": "Tagalo", + "tnDisplayName": "Tswana", + "trDisplayName": "Turco", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tártaro", + "ugDisplayName": "Uigure", + "ukDisplayName": "Ucraniano", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Índia)", + "urPKDisplayName": "Urdu (Paquistão)", + "uzDisplayName": "Uzbeque", + "viDisplayName": "Vietnamita", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Iorubá", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Cantonês", + "yueCNDisplayName": "Cantonês (China)", + "yueHKDisplayName": "Cantonês (Hong Kong)", + "zhDisplayName": "Chinês", + "zhCNDisplayName": "Chinês (Simplificado)", + "zhTWDisplayName": "Chinês (Tradicional)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12914,6 +11612,7 @@ "notStartedActivitiesTitle": "Sessões abertas ({num})", "inProgressActivitiesTitle": "Acontecendo agora ({num})", "completedActivitiesTitle": "Concluído ({num})", + "pickDifferentActivity": "Escolha uma atividade diferente", "inOngoingActivity": "Você tem uma atividade em andamento!", "@notStartedActivitiesTitle": { "type": "String", @@ -12939,10 +11638,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "O seu idioma de destino não corresponde a esta mensagem. Atualizar o seu idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Estes são todos os participantes deste curso. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Esta palavra de vocabulário será removida permanentemente de suas análises", + "woman": "Mulher", + "man": "Homem", + "otherGender": "Outro", + "unselectedGender": "Selecione uma opção de gênero", + "gender": "Gênero", + "chatParticipantTooltip": "Estas são todas as pessoas neste chat. Clique no avatar de qualquer usuário e \"iniciar conversa\" para enviar uma DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "As ferramentas de aprendizado estão desativadas para mensagens que não estão no seu idioma-alvo.", + "vocabEmoji": "Emoji de vocabulário", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Solicitar regeneração", + "optionalRegenerateReason": "(Opcional) Motivo", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Você definiu o emoji para {lemma}! Usaremos este emoji para representar a palavra nas atividades práticas daqui para frente.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Aguardando a conclusão do login", + "ssoDialogDesc": "Abrimos uma nova aba para que você possa fazer login com segurança.", + "ssoDialogHelpText": "🤔 Se você não viu a nova aba, verifique seu bloqueador de pop-ups.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Desativar ferramentas de idioma", + "disableLanguageToolsDesc": "Você gostaria de desativar a assistência automática de idioma?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permissão negada. Ative as permissões de gravação para gravar mensagens de áudio.", + "genericWebRecordingError": "Algo deu errado. Recomendamos usar o navegador Chrome ao gravar mensagens.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Para a melhor experiência ao usar este aplicativo, por favor, amplie o tamanho da sua tela.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Atividades para Desbloquear o Próximo Tópico", "activitiesToUnlockTopicDesc": "Defina o número de atividades para desbloquear o próximo tópico do curso", "@activitiesToUnlockTopicTitle": { @@ -12952,5 +11769,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Prática correta de definição de vocabulário", + "constructUseIncLMDesc": "Prática incorreta de definição de vocabulário", + "constructUseCorLADesc": "Prática correta de áudio de vocabulário", + "constructUseIncLADesc": "Prática incorreta de áudio de vocabulário", + "constructUseBonus": "Bônus durante a prática de vocabulário", + "practiceVocab": "Praticar vocabulário", + "selectMeaning": "Selecione o significado", + "selectAudio": "Selecione o áudio correspondente", + "congratulations": "Parabéns!", + "anotherRound": "Outra rodada", + "noActivityRequest": "Nenhum pedido de atividade atual.", + "quit": "Sair", + "congratulationsYouveCompletedPractice": "Parabéns! Você completou a sessão de prática.", + "mustHave10Words": "Você deve ter pelo menos 10 palavras de vocabulário para praticar. Tente conversar com um amigo ou com o Pangea Bot para descobrir mais!", + "botSettings": "Configurações do Bot", + "activitySettingsOverrideWarning": "Idioma e nível de idioma determinados pelo plano de atividade", + "voice": "Voz", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 51df3e3d0..7ab1f3c39 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:01:12.939720", + "@@last_modified": "2026-01-07 14:24:11.005786", "about": "Despre", "@about": { "type": "String", @@ -2797,26 +2797,14 @@ "commandHint_logoutall": "Deconectați toate dispozitivele active", "displayNavigationRail": "Afișează bara de navigare pe mobil", "customReaction": "Reacție personalizată", - "accountInformation": "Informații despre cont", - "addGroupDescription": "Adaugă o descriere a conversației", - "addNewFriend": "Adaugă un prieten nou", - "alreadyHaveAnAccount": "Ai deja un cont?", - "createNewGroup": "Creează o conversație nouă", - "editChatPermissions": "Editează permisiunile conversației", "writeAMessageLangCodes": "Tastează în {l1} sau {l2}...", "requests": "Cereri", - "allCorrect": "Așa aș spune! Frumos!", - "newWayAllGood": "Nu aș fi spus așa, dar arată bine!", - "othersAreBetter": "Hm, s-ar putea să existe o modalitate mai bună de a spune asta.", "holdForInfo": "Ține apăsat pentru informații despre cuvânt.", "greenFeedback": "Asta aș pune!", "yellowFeedback": "Hmmm, poți încerca asta și vezi dacă funcționează! Pentru a folosi acest cuvânt, doar fă clic din nou.", "redFeedback": "Nu cred că este corect...", "itInstructionsTitle": "Pot să te ajut cu traducerea!", "itInstructionsBody": "Poți face clic și menține apăsat pentru informații despre cuvânt.", - "oneday": "Ultimele 24 de ore", - "oneweek": "Ultimele 7 zile", - "onemonth": "Luna trecută", "gaTooltip": "L2 utilizare cu asistență gramaticală", "taTooltip": "L2 utilizare cu asistență de traducere", "unTooltip": "Altele", @@ -2826,58 +2814,27 @@ "interactiveTranslatorAllowed": "Alegerea Studentului", "interactiveTranslatorRequired": "Obligatoriu", "notYetSet": "Încă nu a fost setat", - "myLearning": "Analiticele Mele", "waTooltip": "L2 utilizare fără asistență", - "changeDateRange": "Schimbă intervalul de date", - "classDescription": "Descriere", - "addStudents": "Invită utilizatori prin link sau cod", - "copyClassLink": "Copiază linkul de invitație", - "copyClassCode": "Copiază codul de invitație", - "inviteStudentByUserName": "Invită utilizatori după numele de utilizator", "languageSettings": "Setări de limbă", "interactiveTranslator": "Asistență pentru traducere", - "shareVideo": "Partajează Video", - "shareVideoDesc": "Activează această opțiune pentru a permite elevilor să partajeze videoclipuri în chat-uri.", - "shareFiles": "Partajează Fișiere", - "selectLanguageLevel": "Selectează nivelul de limbă", "noIdenticalLanguages": "Te rog să alegi limbi de bază și țintă diferite", - "iWantALanguagePartnerFrom": "Este din:", - "worldWide": "La nivel mondial", - "noResults": "Niciun rezultat! Încearcă să-ți extinzi căutarea.", "searchBy": "Caută după țară și limbi", - "iWantAConversationPartner": "Vreau un partener de conversație care", - "iWantALanguagePartnerWhoSpeaks": "Vorbește:", - "iWantALanguagePartnerWhoIsLearning": "Învățând:", "joinWithClassCode": "Participă la curs", - "joinWithClassCodeHint": "Introduceți codul de invitație", - "languageLevelPreA1": "Începător adevărat (Pre A1)", - "languageLevelA1": "Începător (A1)", - "languageLevelA2": "Elementar (A2)", - "languageLevelB1": "Intermediar (B1)", - "languageLevelB2": "Upper Intermediate (B2)", - "languageLevelC1": "Avansat (C1)", - "languageLevelC2": "Maestru (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Novice Înalt (A2)", + "languageLevelB1": "Intermediar Mediu (B1)", + "languageLevelB2": "Avansat Scăzut (B2)", + "languageLevelC1": "Avansat Mediu (C1)", + "languageLevelC2": "Superior (C2)", "changeTheNameOfTheClass": "Schimbă numele", "changeTheNameOfTheChat": "Schimbă numele chat-ului", - "askPangeaBot": "Întreabă Pangea Bot pentru o definiție contextuală.", "sorryNoResults": "Ne pare rău, nu există rezultate.", "ignoreInThisText": "Ignoră", - "helpMeTranslate": "Da!", - "needsItShortMessage": "Fără țintă", "needsItMessage": "Așteaptă, nu este {targetLanguage}! Ai nevoie de ajutor pentru traducere?", - "needsIgcMessage": "Acest mesaj conține o eroare gramaticală.", - "tokenTranslationTitle": "Un cuvânt este în limba ta de bază.", - "spanTranslationDesc": "Vezi traducerile posibile mai jos.", - "spanTranslationTitle": "Unele cuvinte sunt în limba ta de bază.", - "l1SpanAndGrammarTitle": "Dincolo de limba țintă", - "l1SpanAndGrammarDesc": "Aceasta poate fi în limba ta de bază sau poate fi o eroare gramaticală.", - "otherTitle": "Ai o eroare.", - "otherDesc": "Vezi corecțiile posibile mai jos.", "countryInformation": "Țara mea", - "myLanguages": "Limbi de bază și țintă", "targetLanguage": "Limba țintă", "sourceLanguage": "Limba de bază", - "languagesISpeak": "Limbi pe care le vorbesc", "updateLanguage": "Limbi ale mele", "whatLanguageYouWantToLearn": "Ce limbă vrei să înveți?", "whatIsYourBaseLanguage": "Care este limba ta de bază?", @@ -2892,13 +2849,8 @@ "errorDisableLanguageAssistanceUserDesc": "Faceți clic aici pentru a actualiza setările de asistență pentru traducere și gramatică", "errorDisableITClassDesc": "Asistența de traducere este dezactivată pentru cursul în care se află această conversație.", "errorDisableIGCClassDesc": "Asistența de gramatică este dezactivată pentru cursul în care se află această conversație.", - "itIsDisabled": "Traducerea Interactivă este dezactivată", - "igcIsDisabled": "Verificarea Gramaticii Interactivă este dezactivată", - "goToLearningSettings": "Accesează Setările de Învățare", "error405Title": "Limbi neconfigurate", "error405Desc": "Vă rugăm să setați limbile în Meniu Principal > Setări de Învățare.", - "loginOrSignup": "Autentificare cu", - "iAgreeToThe": " Sunt de acord cu ", "termsAndConditions": "Termenii și Condițiile", "andCertifyIAmAtLeast13YearsOfAge": " și certific că am cel puțin 16 ani.", "error502504Title": "Wow, sunt mulți elevi online!", @@ -2906,40 +2858,21 @@ "error404Title": "Eroare de traducere!", "error404Desc": "Botul Pangea nu este sigur cum să traducă asta...", "errorPleaseRefresh": "Ne uităm la problemă! Vă rugăm să reîncărcați și să încercați din nou.", - "toggleIT": "Traducere Interactivă", - "toggleIGC": "Verificare Gramatică Interactivă", - "toggleToolSettingsDescription": "Aici puteți comuta setările instrumentului de limbă individual.", "connectedToStaging": "Conectat la Staging", "learningSettings": "Setări de învățare", - "sendVoiceNotes": "Trimite note vocale", - "sendVoiceNotesDesc": "Activează această opțiune pentru a permite elevilor să trimită note vocale în chat-uri.", - "chatTopic": "Subiectul chat-ului", - "chatTopicDesc": "Setează un subiect pentru chat", - "inviteStudentByUserNameDesc": "Dacă elevul tău are deja un cont, îl poți căuta după nume de utilizator.", "participants": "Participanți", - "almostPerfect": "Asta pare corect! Iată ce aș fi spus.", - "prettyGood": "Destul de bine! Iată ce aș fi spus.", - "letMeThink": "Hmm, să vedem cum te-ai descurcat!", "clickMessageTitle": "Ai nevoie de ajutor?", "clickMessageBody": "Fă clic pe un mesaj pentru instrumente de limbaj precum traducere, redare și altele!", - "understandingMessagesTitle": "Definiții și traduceri!", - "understandingMessagesBody": "Fă clic pe cuvintele subliniate pentru definiții. Tradu cu opțiunile mesajului (dreapta sus).", "allDone": "Totul este gata!", "vocab": "Vocabular", "low": "Avem dovezi că utilizatorul nu înțelege aceste cuvinte.", "medium": "Aceste cuvinte au fost folosite. Nu este clar dacă sunt pe deplin înțelese sau nu.", "high": "Avem dovezi că utilizatorul înțelege aceste cuvinte.", - "unknownProficiency": "Aceste cuvinte nu au fost folosite în Pangea Chat.", - "changeView": "Schimbă vizualizarea.", - "clearAll": "Șterge toate cuvintele?", - "generateVocabulary": "Generează vocabular din titlu și descriere", - "generatePrompts": "Generează sugestii", "subscribe": "Abonează-te", "getAccess": "Abonează-te acum!", "subscriptionDesc": "Mesajele sunt gratuite! Abonează-te pentru a debloca traducerea interactivă, verificarea gramaticii și analizele de învățare.", "subscriptionManagement": "Gestionare abonament", "currentSubscription": "Abonament curent", - "changeSubscription": "Schimbă abonamentul tău", "cancelSubscription": "Anulează abonamentul tău", "selectYourPlan": "Selectează-ți planul", "subsciptionPlatformTooltip": "Te rugăm să te conectezi la dispozitivul tău original pentru a gestiona planul de abonament", @@ -2948,9 +2881,6 @@ "paymentHistory": "Istoricul plăților", "emptyChatDownloadWarning": "Nu se poate descărca chat gol", "update": "Actualizează", - "updateDesc": "Poți acum să actualizezi această aplicație de la {localVersion} la {storeVersion}", - "maybeLater": "Poate mai târziu", - "mainMenu": "Meniu Principal", "toggleImmersionMode": "Comutare Mod Imersiune", "toggleImmersionModeDesc": "Când este activat, toate mesajele sunt afișate în limba țintă. Această setare este cel mai util în schimburile de limbi.", "itToggleDescription": "Acest instrument de învățare a limbilor va identifica cuvintele în limba de bază și vă va ajuta să le traduceți în limba țintă. Deși rar, AI poate face greșeli de traducere.", @@ -2965,212 +2895,13 @@ "definitionsToolDescription": "Când este activat, cuvintele subliniate în albastru pot fi făcute clic pentru definiții. Faceți clic pe mesaje pentru a accesa definițiile.", "translationsToolDescrption": "Când este activat, faceți clic pe un mesaj și pe pictograma de traducere pentru a vedea un mesaj în limba de bază.", "welcomeBack": "Bine ai revenit! Dacă ai fost parte din pilotul 2023-2024, te rugăm să ne contactezi pentru abonamentul tău special de pilot. Dacă ești profesor care a achiziționat (sau instituția ta a achiziționat) licențe pentru clasa ta, contactează-ne pentru abonamentul tău de profesor.", - "kickAllStudents": "Excludere Toți Elevii", - "kickAllStudentsConfirmation": "Ești sigur că vrei să excluzi toți elevii?", - "inviteAllStudents": "Invită Toți Elevii", - "inviteAllStudentsConfirmation": "Ești sigur că vrei să inviți toți elevii?", - "inviteUsersFromPangea": "Adaugă administratori", - "redeemPromoCode": "Răscumpără Cod Promoțional", - "enterPromoCode": "Introdu Codul Promoțional", "downloadTxtFile": "Descarcă Fișier Text", "downloadCSVFile": "Descarcă Fișier CSV", "promotionalSubscriptionDesc": "În prezent ai un abonament promoțional pe viață. Trimite un mesaj la support@pangea.chat pentru ajutor în schimbarea abonamentului tău.", "originalSubscriptionPlatform": "Abonament achiziționat prin {purchasePlatform}", "oneWeekTrial": "Perioadă de încercare de o săptămână", "downloadXLSXFile": "Descarcă Fișier Excel", - "abDisplayName": "Abhaz", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanez", - "amDisplayName": "Amharic", - "arDisplayName": "Arabă", - "anDisplayName": "Aragonés", - "hyDisplayName": "Armeană", - "asDisplayName": "Assamese", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbaijani", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Bască", - "beDisplayName": "Belarusian", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniac", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgară", - "myDisplayName": "Birmană", - "caDisplayName": "Catalan, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": " Cecen", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Chineză", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Cornish", - "coDisplayName": "Corsican", - "crDisplayName": "Cree", - "hrDisplayName": "Croatian", - "csDisplayName": "Czech", - "daDisplayName": "Danish", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Dutch", - "enDisplayName": "English", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonian", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroese", - "fjDisplayName": "Fijian", - "fiDisplayName": "Finnish", - "frDisplayName": "French", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galician", - "kaDisplayName": "Georgian", - "deDisplayName": "German", - "elDisplayName": "Greacă, Modernă", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitian, Creolă haitiană", - "haDisplayName": "Hausa", - "heDisplayName": "Ebraică (modernă)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Maghiară", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indoneziană", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irlandeză", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandeză", - "itDisplayName": "Italiană", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japoneză", - "jvDisplayName": "Javaaneză", - "klDisplayName": "Kalaallisut, groenlandeză", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazahă", - "kmDisplayName": "Khmeră", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgiză, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Coreeană", - "kuDisplayName": "Kurdă", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latină", - "lbDisplayName": "Luxemburgheză, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgheză, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laos", - "ltDisplayName": "Lituanian", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letonă", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedonean", - "mgDisplayName": "Madagascar", - "msDisplayName": "Malaezian", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltez", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongol", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norvegian Bokmål", - "ndDisplayName": "Ndebele de Nord", - "neDisplayName": "Nepalez", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norvegiană Nynorsk", - "noDisplayName": "Norvegiană", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Ndebele de Sud", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Slavonă Bisericească Veche, Slavonă Bisericească, Slavonă Bisericească, Bulgară Veche, Slavonă Veche", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Osetiană, Osetică", - "paDisplayName": "Panjabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persană", - "plDisplayName": "Poloneză", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugheză", - "quDisplayName": "Quechua", - "rmDisplayName": "Retoromană", - "rnDisplayName": "Kirundi", - "roDisplayName": "Română, Moldovenească, Moldovenească", - "ruDisplayName": "Rusă", - "saDisplayName": "Sanskrit (Saṃskṛta)", - "scDisplayName": "Sardinian", - "sdDisplayName": "Sindhi", - "seDisplayName": "Sami de Nord", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Sârbă", - "gdDisplayName": "Gaelic scoțian, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovacă", - "slDisplayName": "Slovenă", - "soDisplayName": "Somaleză", - "stDisplayName": "Sotho de Sud", - "esDisplayName": " Spaniolă", - "suDisplayName": "Sundaneză", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Suedeză", - "taDisplayName": "Tamilă", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadjikă", - "thDisplayName": "Thailandeză", - "tiDisplayName": "Tigrină", - "boDisplayName": "Tibetan Standard, Tibetan, Central", - "tkDisplayName": "Turkmenă", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Insulele Tonga)", - "trDisplayName": "Turcă", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tătară", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitiană", - "ugDisplayName": "Uighur, Uighur", - "ukDisplayName": "Ucraineană", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbekă", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamese", - "voDisplayName": "Volapük", - "waDisplayName": "Walloon", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "Frizon de Vest", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Idiş", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Necunoscut", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Multiplu", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Ebraică", - "jwDisplayName": "Javanez", - "moDisplayName": "Moldovenească", - "shDisplayName": "Sârbocroată", "wwCountryDisplayName": "Lumea întreagă", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Insulele Aland", @@ -3418,41 +3149,25 @@ "yeCountryDisplayName": "Iordania", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Plătește", - "allPrivateChats": "Chat-uri private", - "unknownPrivateChat": "Chat privat necunoscut", + "pay": "Checkout", "invitedToSpace": "{user} te-a invitat să te alături unui curs: {space}! Vrei să accepți?", - "declinedInvitation": "Invitație refuzată", - "acceptedInvitation": "Invitație acceptată", "youreInvited": "📩 Ești invitat!", "invitedToChat": "{user} te-a invitat să te alături unui chat: {name}! Vrei să accepți?", "monthlySubscription": "Lunar", "yearlySubscription": "Anual", "defaultSubscription": "Abonament Pangea Chat", "freeTrial": "Perioadă de probă gratuită", - "grammarAnalytics": "Analiza erorilor", "total": "Total: ", "noDataFound": "Nu s-au găsit date", - "promoSubscriptionExpirationDesc": "Abonamentul dvs. curent este promoțional și expiră la {expiration}. Trimiteți un mesaj la support@pangea.chat pentru ajutor în schimbarea abonamentului.", - "emptyChatNameWarning": "Vă rugăm să introduceți un nume pentru acest chat", "blurMeansTranslateTitle": "De ce este mesajul estompat?", "blurMeansTranslateBody": "În timp ce Modul Imersiune este activat, mesajele trimise în limba dvs. de bază vor fi estompate în timp ce Pangea Bot le traduce în limba țintă. Modul Imersiune poate fi activat sau dezactivat în setările individuale și de curs.", - "someErrorTitle": "Hm, ceva nu este în regulă", - "someErrorBody": "Poate fi o eroare sau ceva în limba dvs. de bază.", "bestCorrectionFeedback": "Corect!", "distractorFeedback": "Nu este chiar corect.", "bestAnswerFeedback": "Corect!", "definitionDefaultPrompt": "Ce înseamnă acest cuvânt?", "practiceDefaultPrompt": "Care este cel mai bun răspuns?", "correctionDefaultPrompt": "Care este cea mai bună înlocuire?", - "itStartDefaultPrompt": "Doriți ajutor pentru traducere?", - "lockedChatWarning": "🔒 Acest chat a fost blocat", - "lockChat": "Blochează chat-ul", - "suggestToChat": "Sugerează acest chat", - "suggestToChatDesc": "Conversațiile sugerate vor apărea în listele de conversații", "acceptSelection": "Acceptă corectarea", - "acceptSelectionAnyway": "Folosește asta oricum", - "makingActivity": "Realizând activitate", "why": "De ce?", "definition": "Definiție", "exampleSentence": "Exemplu de propoziție", @@ -3460,128 +3175,55 @@ "reportMessageTitle": "{reportingUserId} a raportat un mesaj de la {reportedUserId} în chat-ul {roomName}", "reportMessageBody": "Mesaj: {reportedMessage}\nMotiv: {reason}", "noTeachersFound": "Nu au fost găsiți profesori pentru raportare", - "viewArchive": "Vezi arhiva", "trialExpiration": "Perioada de probă gratuită expiră la {expiration}", "freeTrialDesc": "Utilizatorii noi primesc o perioadă de probă gratuită de o săptămână pentru Pangea Chat", "activateTrial": "Perioadă de probă gratuită de 7 zile", "successfullySubscribed": "Te-ai abonat cu succes!", "clickToManageSubscription": "Click aici pentru a-ți gestiona abonamentul.", - "errorGettingAudio": "Eroare la preluarea audio. Te rugăm să reîmprospătezi și să încerci din nou.", "signUp": "Înscrie-te", "pleaseChooseAtLeastChars": "Te rugăm să alegi cel puțin {min} caractere.", "noEmailWarning": "Vă rugăm să introduceți o adresă de email validă. Altfel, nu veți putea reseta parola. Dacă nu doriți, atingeți din nou butonul pentru a continua.", "pleaseEnterValidEmail": "Vă rugăm să introduceți o adresă de email validă.", "pleaseChooseAUsername": "Vă rugăm să alegeți un nume de utilizator", - "chooseAUsername": "Alegeți un nume de utilizator", "define": "Definire", "listen": "Ascultă", - "addConversationBot": "Activează Botul de conversație", - "addConversationBotDesc": "Adaugă un bot în această conversație", - "convoBotSettingsDescription": "Editează subiectul și dificultatea conversației", - "enterAConversationTopic": "Introduceți un subiect de conversație", - "conversationTopic": "Subiectul conversației", - "enableModeration": "Activează moderarea", - "enableModerationDesc": "Activează moderarea automată pentru a revizui mesajele înainte de a fi trimise", - "conversationLanguageLevel": "Care este nivelul de limbaj al acestei conversații?", - "showDefinition": "Afișează definiția", - "subscriptionPopupTitle": "Această propoziție ar putea avea o greșeală gramaticală...", - "subscriptionPopupDesc": "Abonați-vă astăzi pentru a debloca traducerea și corectarea gramaticală!", - "seeOptions": "Vezi opțiuni", - "continuedWithoutSubscription": "Continuă fără abonare", "trialPeriodExpired": "Perioada de încercare a expirat", - "selectToDefine": "Faceți clic pe orice cuvânt pentru a vedea definiția sa!", "translations": "traduceri", "messageAudio": "audio mesaj", "definitions": "definiții", "subscribedToUnlockTools": "Abonați-vă pentru a debloca traducerea interactivă și verificarea gramaticii, redarea audio, activități de practică personalizate și analize de învățare!", "translationTooltip": "Traducere", - "audioTooltip": "Redare audio", "speechToTextTooltip": "Transcriere", - "certifyAge": "Certific că am peste {age} ani", "kickBotWarning": "Îndepărtarea Pangea Bot va elimina botul de conversație din acest chat.", - "joinToView": "Alăturați-vă acestei camere pentru a vizualiza detalii", "refresh": "Reîmprospătează", - "autoPlayTitle": "Redare automată a mesajelor", - "autoPlayDesc": "Când este activat, redarea audio a mesajelor va fi automată atunci când sunt selectate.", "messageAnalytics": "Analiza mesajelor", "words": "Cuvinte", "score": "Scor", "accuracy": "Acuratețe", "points": "Puncte", "noPaymentInfo": "Nicio informație de plată necesară!", - "conversationBotModeSelectDescription": "Activitate de chat", - "conversationBotModeSelectOption_discussion": "Discuție", - "conversationBotModeSelectOption_custom": "Personalizat", - "conversationBotModeSelectOption_conversation": "Conversație", - "conversationBotModeSelectOption_textAdventure": "Aventură text", - "conversationBotModeSelectOption_storyGame": "Joc de poveste", - "conversationBotDiscussionZone_title": "Setări de discuție", - "conversationBotDiscussionZone_discussionTopicLabel": "Subiectul discuției", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Setați subiectul discuției", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Cuvinte cheie pentru discuție", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Setați cuvintele cheie pentru discuție", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Listă separată prin virgulă de cuvinte cheie pentru ghidarea discuției", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Trimiteți un mesaj de discuție conform unui program", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Ore între mesajele de discuție", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": " Răspundeți la reacție ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reacție pentru a trimite mesajul de discuție", - "conversationBotCustomZone_title": "Setări personalizate", - "conversationBotCustomZone_customSystemPromptLabel": "Mesaj de sistem", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Setați mesajul de sistem personalizat", - "conversationBotCustomZone_customSystemPromptEmptyError": "Lipsește mesajul de sistem personalizat", - "botConfig": "Setări pentru bot și activitate", - "botConfigNoPermissionTitle": "Fără permisiune", - "botConfigNoPermissionMessage": "Contactați administratorul camerei pentru a modifica configurația botului", - "addConversationBotDialogTitleInvite": "Confirmare invitație pentru botul de conversație", - "addConversationBotButtonInvite": "Invită", - "addConversationBotDialogInviteConfirmation": "Invită", - "addConversationBotButtonTitleRemove": "Confirmare eliminare bot de conversație", - "addConversationBotButtonRemove": "Elimină", - "addConversationBotDialogRemoveConfirmation": "Elimină", - "conversationBotConfigConfirmChange": "Confirmă", - "conversationBotStatus": "Invită bot", - "conversationBotTextAdventureZone_title": "Aventură Text", - "conversationBotTextAdventureZone_instructionLabel": "Instrucțiuni pentru Maestrul de Joc", - "conversationBotTextAdventureZone_instructionPlaceholder": "Setează instrucțiuni pentru maestrul de joc", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Lipsesc instrucțiuni pentru maestrul de joc", - "studentAnalyticsNotAvailable": "Datele despre elevi nu sunt disponibile în prezent", - "roomDataMissing": "Unele date pot lipsi din camere în care nu ești membru.", "updatePhoneOS": "Poate fi necesar să actualizați versiunea sistemului de operare al dispozitivului dvs.", "wordsPerMinute": "Cuvinte pe minut", "autoIGCToolName": "Rulează automat asistența de scriere Pangea", "autoIGCToolDescription": "Porniți automat asistența pentru scrierea gramaticii și traducerii în Pangea Chat înainte de a trimite mesajul meu.", - "runGrammarCorrection": "Verifică mesajul", - "grammarCorrectionFailed": "Probleme de rezolvat", - "grammarCorrectionComplete": "Arată bine!", "tooltipInstructionsTitle": "Nu ești sigur ce face asta?", "tooltipInstructionsMobileBody": "Ține apăsat pe elemente pentru a vizualiza sfaturi.", "tooltipInstructionsBrowserBody": "Poziționează cursorul peste elemente pentru a vizualiza sfaturi.", "chatCapacity": "Capacitatea chat-ului", "roomFull": "Această cameră este deja plină.", - "topicNotSet": "Subiectul nu a fost setat.", - "chatCapacityNotSet": "Acest chat nu are o limită de capacitate.", "chatCapacityHasBeenChanged": "Capacitatea chat-ului a fost schimbată", "chatCapacitySetTooLow": "Capacitatea chat-ului trebuie să fie cel puțin {count}.", "chatCapacityExplanation": "Capacitatea chat-ului limitează numărul de membri permis într-un chat.", - "chatExceedsCapacity": "Acest chat depășește capacitatea sa.", "tooManyRequest": "Prea multe solicitări, vă rugăm să încercați din nou mai târziu.", "enterNumber": "Vă rugăm să introduceți o valoare întreagă.", "buildTranslation": "Construiește traducerea ta din opțiunile de mai sus", - "nonexistentSelection": "Selecția nu mai există.", - "changeAnalyticsLanguage": "Schimbă limba de analiză", "practice": "Exersează", "noLanguagesSet": "Niciun limbaj configurat", - "noActivitiesFound": "Este suficient pentru acum! Revin-o mai târziu pentru mai mult.", - "hintTitle": "Sugestie:", "speechToTextBody": "Pentru mesajele vocale, poți vedea o transcriere precum și scorul de Cuvinte pe Minut al vorbitorului.", "versionNotFound": "Versiune Negăsită", "fetchingVersion": "Se preia versiunea...", "versionFetchError": "Eroare la preluarea versiunii", "versionText": "Versiune: {version}+{buildNumber}", - "languageButtonLabel": "Limbaj: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Redare automată traducere", - "interactiveTranslatorAutoPlayDesc": "Lansează translatorul interactiv fără a întreba.", - "changeAnalyticsView": "Schimbă Vizualizarea Analiticelor", "l1TranslationBody": "Mesajele în limba ta de bază nu vor fi traduse.", "deleteSubscriptionWarningTitle": "Ai o abonare activă", "deleteSubscriptionWarningBody": "Ștergerea contului tău nu va anula automat abonamentul.", @@ -3589,9 +3231,7 @@ "error520Title": "Te rugăm să încerci din nou.", "error520Desc": "Ne pare rău, nu am putut înțelege mesajul tău...", "wordsUsed": "Cuvinte Folosite", - "errorTypes": "Tipuri de erori", "level": "Nivel", - "canceledSend": "Trimitere anulată", "morphsUsed": "Morfeme utilizate", "translationChoicesBody": "Faceți clic și țineți apăsat pe o opțiune pentru o sugestie.", "grammar": "Gramatică", @@ -3601,7 +3241,6 @@ "reportContentIssueTitle": "Raportează problemă de conținut", "feedback": "Feedback opțional", "reportContentIssueDescription": "Oups! AI poate facilita experiențe de învățare personalizate, dar... hallucinează și ea. Vă rugăm să oferiți orice feedback aveți și vom încerca din nou.", - "changeContent": "Oups! AI poate facilita experiențe de învățare personalizate, dar... hallucinează și ea. Ce ar trebui să fie?", "clickTheWordAgainToDeselect": "Faceți clic pe cuvântul selectat pentru a-l deselecta.", "l2SupportNa": "Indisponibil", "l2SupportAlpha": "Alpha", @@ -3835,7 +3474,6 @@ "grammarCopySPC": "Specificitate", "grammarCopyPARTTYPE": "Tip partitiv", "grammarCopyINTREL": "Interogativ-Relativ", - "grammarCopyNUMFORMpsor": "Numărul posesiorului", "grammarCopyUNKNOWN": "Necunoscut", "grammarCopyNUMBERPSOR": "Numărul posesiorului", "grammarCopyPOSS": "Posesiv", @@ -3881,28 +3519,14 @@ "grammarCopyVOICEdir": "Direct", "grammarCopyVOICEinv": "Invers", "grammarCopyVOICErcp": "Reciprocat", - "enterPrompt": "Vă rugăm să introduceți un prompt de sistem", - "selectBotLanguage": "Selectați limba botului", - "chooseVoice": "Alegeți o voce", - "enterLanguageLevel": "Vă rugăm să introduceți nivelul de limbă", - "enterDiscussionTopic": "Vă rugăm să introduceți un subiect de discuție", - "selectBotChatMode": "Selectați modul de chat", - "messageNotInTargetLang": "Mesajul nu este în limba țintă", "other": "Altele", "levelShort": "LVL {level}", - "botModeValidation": "Vă rugăm să selectați modul de chat", "clickBestOption": "Alege cele mai bune opțiuni pentru a traduce mesajul tău!", "completeActivitiesToUnlock": "Finalizați cel puțin o activitate pentru a debloca traducerea!", - "botSettingsSubtitle": "Invită botul pentru a modera activitatea chat-ului", - "invitePeople": "Invită utilizatori", "noCapacityLimit": "Fără limită de capacitate", "downloadGroupText": "Descarcă textul grupului", "notificationsOn": "Notificări activate", "notificationsOff": "Notificări dezactivate", - "chatCanBeFoundViaSearch": "Chat-ul poate fi găsit prin căutare", - "requireCodeToJoin": "Se cere cod pentru a te alătura", - "canFindInSearch": "Poate fi găsit în căutare", - "addChatToSpace": "Adaugă chat", "createChatAndInviteUsers": "Creează chat și invită utilizatori", "updatedNewSpaceDescription": "Cursurile îți permit să consolidezi chat-urile și să construiești comunități private sau publice.", "joinWithCode": "Alătură-te cu cod", @@ -3938,39 +3562,19 @@ "constructUseCollected": "Colectat în chat", "constructUseNanDesc": "Nu se aplică", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Autentificare cu nume de utilizator și parolă", - "registrationEmailMessage": "Vă rugăm să verificați emailul cu un link trimis acolo. În unele cazuri, emailul poate dura până la 5 minute pentru a ajunge. Vă rugăm să verificați și folderul de spam.", "enableTTSToolName": "Activat textul vorbit", "enableTTSToolDescription": "Permite aplicației să genereze ieșire text-vorbit pentru porțiuni de text în limba țintă.", - "couldNotFindTTS": "Nu am putut găsi un motor text-vorbit pentru limba țintă curentă.", - "ttsInstructionsHyperlink": "Faceți clic aici pentru a vizualiza instrucțiuni pentru descărcarea unei voci noi pe dispozitivul dvs.", - "createAnAccount": "Creați un cont", - "signIn": "Autentificare", - "signUpWithEmail": "Înscrieți-vă cu email", - "signUpWithGoogle": "Înscrieți-vă cu Google", - "signUpWithApple": "Înscrieți-vă cu Apple", "yourUsername": "Numele tău de utilizator", "yourEmail": "Adresa ta de email", - "pleaseEnterAnEmail": "Vă rugăm să introduceți o adresă de email", - "signInWithGoogle": "Autentificare cu Google", - "signInWithApple": "Autentificare cu Apple", - "chooseYourAvatar": "Alege-ți avatarul", "iWantToLearn": "Vreau să învăț", - "letsStart": "Hai să începem", - "pleaseAgreeToTOS": "Vă rugăm să fiți de acord cu Termenii și Condițiile", "pleaseEnterEmail": "Vă rugăm să introduceți o adresă de email validă.", - "pleaseSelectALanguage": "Vă rugăm să selectați o limbă", "myBaseLanguage": "Limba mea de bază", - "clickWordsInstructions": "🧻 Faceți clic pe orice cuvânt pentru detalii. 🤐", - "chooseBestDefinition": "Ce înseamnă acest cuvânt?", "meaningSectionHeader": "Sens:", "formSectionHeader": "Forme folosite în chat:", - "noEmojiSelectedTooltip": "Niciun emoji selectat", "writingExercisesTooltip": "Scriere", "listeningExercisesTooltip": "Ascultare", "readingExercisesTooltip": "Citire", "meaningNotFound": "Sensul nu a putut fi găsit.", - "formsNotFound": "Formele nu au fost găsite.", "chooseBaseForm": "Alege forma de bază", "notTheCodeError": "Îmi pare rău, nu acesta este codul!", "totalXP": "XP total", @@ -4010,9 +3614,6 @@ "pickAnEmoji": "Care este emoji-ul tău preferat pentru '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Potrivește sensurile cu cuvintele din mesaj!", "doubleClickToEdit": "Dublu clic pentru editare.", - "removeFeature": "Eliminați {feature}", - "chooseCorrectLabel": "Alegeți eticheta corectă.", - "levelPopupTitle": "Felicitări pentru atingerea\nNivelului {level}", "activityPlannerTitle": "Planificator de activități", "topicLabel": "Subiect", "topicPlaceholder": "Alegeți un subiect...", @@ -4020,7 +3621,6 @@ "modePlaceholder": "Alegeți un mod...", "learningObjectiveLabel": "Obiectiv de învățare", "learningObjectivePlaceholder": "Alegeți un obiectiv de învățare...", - "mediaLabel": "Media pe care trebuie să o partajeze cursanții", "languageOfInstructionsLabel": "Limba instrucțiunilor de activitate", "targetLanguageLabel": "Limba țintă", "cefrLevelLabel": "Nivel CEFR", @@ -4035,20 +3635,15 @@ "instructions": "Instrucțiuni", "numberOfLearners": "Numărul de cursanți", "mustBeInteger": "Trebuie să fie un număr întreg, de exemplu 1, 2, 3, ...", - "noLemmasFound": "Nu există vocabular cu mai mult de {xp} XP. Continuați să exersați!", "constructUsePvmDesc": "Produs în mesaj vocal", - "lockedMorphFeature": "Așteaptă să fie deblocat", "leaveSpaceDescription": "Părăsind cursul, vei părăsi toate chat-urile din cadrul acestuia. Alți utilizatori vor vedea că ai părăsit cursul.", - "whatIsLemma": "Ce este lemma?", "constructUseCorMmDesc": "Semnificația mesajului corect", "constructUseIncMmDesc": "Semnificația mesajului incorect", "constructUseIgnMmDesc": "Semnificația mesajului ignorat", "clickForMeaningActivity": "Click aici pentru o provocare de semnificație", "meaning": "Semnificație", "chatWith": "Grup cu {displayname}", - "slightlyOffensive": "Ușor ofensiv", "clickOnEmailLink": "Vă rugăm să faceți clic pe link-ul din email și apoi să continuați.\n\nVerificați folderul de spam dacă email-ul nu a sosit.", - "whoIsAllowedToJoinThisChat": "Cine are voie să se alăture acestui chat", "dontForgetPassword": "Nu uita parola ta!", "enableAutocorrectToolName": "Activează corectarea automată a dispozitivului", "enableAutocorrectDescription": "Dacă dispozitivul tău suportă limba pe care o înveți, poți activa corectarea automată pentru a corecta erorile comune în timp ce tastezi.", @@ -4076,48 +3671,26 @@ "autocorrectNotAvailable": "Din păcate, platforma dvs. nu este în prezent compatibilă pentru această funcție. Rămâneți aproape pentru dezvoltări viitoare!", "pleaseUpdateApp": "Vă rugăm să actualizați aplicația pentru a continua.", "chooseEmojiInstructionsBody": "Potrivește emoji-urile cu cuvintele pe care le reprezintă cel mai bine. Nu vă faceți griji! Nu vor fi penalizări pentru dezacord. 😅", - "pickAnEmojiFor": "Alege un emoji pentru {lemma}", "analyticsVocabListBody": "Aceasta este tot vocabularul tău! Pe măsură ce câștigi XP pentru fiecare cuvânt, acestea vor trece de la sămânță la plină înflorire. Fă clic pe orice cuvânt pentru mai multe detalii.", "morphAnalyticsListBody": "Acestea sunt toate conceptele gramaticale din limba pe care o înveți! Le vei debloca pe măsură ce le întâlnești în timpul conversației. Fă clic pentru detalii.", "knockSpaceSuccess": "Ai solicitat să te alături acestui curs! Un administrator va răspunde cererii tale când o va primi 😊", - "joinByCode": "Alătură-te cu cod", "chooseWordAudioInstructionsBody": "Ascultă mesajul complet. Apoi potrivește audio-urile cu cuvintele.", "chooseMorphsInstructionsBody": "Fă clic pe piesele de puzzle pentru întrebări gramaticale!", - "inviteAndLaunch": "Invită și lansează", - "createOwnChat": "Creează propriul chat", "pleaseEnterInt": "Te rugăm să introduci un număr", "home": "Acasă", "join": "Alătură-te", "readingAssistanceOverviewBody": "Fă clic pe butoanele de mai jos pentru mini-jocuri de potrivire a emoji-urilor, audio-urilor, sensurilor cuvintelor și conceptelor gramaticale. Sau fă clic pe orice cuvânt pentru detalii.", - "learnByTexting": "Învață prin mesaje", - "levelSummaryTrigger": "Vezi rezumatul", "levelSummaryPopupTitle": "Rezumat nivel {level}", - "referFriends": "Recomandă prieteni", - "referFriendDialogTitle": "Invită un prieten în conversația ta", - "referFriendDialogDesc": "Ai un prieten entuziasmat să învețe o limbă nouă cu tine? Copiază și trimite acest link de invitație pentru a te alătura și a începe să vorbești cu el astăzi.", - "youUnlocked": "Ai deblocat", "resetInstructionTooltipsTitle": "Resetează sfaturile de instrucțiuni", "resetInstructionTooltipsDesc": "Fă clic pentru a afișa sfaturi de instrucțiuni precum pentru un utilizator nou.", "selectForGrammar": "Selectează o pictogramă de gramatică pentru activități și detalii.", - "newChatActivityTitle": "Adaugă o activitate distractivă?", - "newChatActivityDesc": "Transformă fiecare conversație de grup într-o aventură cu Planificatorul de Activități! Setează subiecte captivante și obiective pentru grup, și adu conversațiile la viață cu imagini uimitoare. Stârnește discuții imaginative și menține distracția fără efort!", - "exploreMore": "Explorează mai mult", "randomize": "Aleatorizează", "clear": "Șterge", "makeYourOwnActivity": "Creează-ți propria activitate", "featuredActivities": "Recomandate", - "goToChat": "Mergi la conversație", "save": "Salvează", - "selectActivity": "Selectează activitate", - "wordFocusListeningMultipleChoice": "Care sunet se potrivește cuvântului?", "startChat": "Începe o conversație", "translationProblem": "Problemă de traducere", - "perfectTranslation": "Traducere perfectă!", - "greatJobTranslation": "Ai făcut o treabă grozavă cu această traducere!", - "goodJobTranslation": "Bună treabă la această traducere.", - "makingProgress": "Faci progrese!", - "keepPracticing": "Continuă să exersezi!", - "niceJob": "Bravo!", "askToJoin": "Cere să te alături", "emptyChatWarningTitle": "Conversația este goală", "emptyChatWarningDesc": "Nu ai invitat pe nimeni în conversația ta. Mergi la setările de chat pentru a invita contactele sau Botul. Poți face acest lucru și mai târziu.", @@ -4136,8 +3709,6 @@ "languageLevelC2Desc": "Pot înțelege aproape tot ce aud sau citesc și mă pot exprima fluent și precis.", "newVocab": "Vocabular nou", "newGrammar": "Concepte gramaticale noi", - "congratulationsOnReaching": "Ai atins nivelul {level}!", - "seeDetails": "Vezi Detalii", "choosePracticeMode": "Fă clic pe unul dintre butoanele de mai sus pentru a începe o activitate de practică", "ban": "Ban", "unban": "Debanare", @@ -4151,8 +3722,6 @@ "timesUsedWithAssistance": "Timpuri folosite cu asistență", "shareInviteCode": "Partaja codul de invitație: {code}", "leaderboard": "Clasament", - "welcomeUser": "Bine ai venit, {user}", - "joinSpaceOnboardingDesc": "Ai un cod sau un link de invitație pentru un curs public?", "skipForNow": "Sari peste pentru moment", "permissions": "Permisiuni", "spaceChildPermission": "Cine poate adăuga noi conversații la acest curs", @@ -4160,12 +3729,8 @@ "defaultOption": "Implicit", "deleteChatDesc": "Ești sigur că vrei să ștergi această conversație? Va fi ștearsă pentru toți participanții și toate mesajele din conversație nu vor mai fi disponibile pentru practică sau analize de învățare.", "deleteSpaceDesc": "Cursul și orice conversație selectată vor fi șterse pentru toți participanții și toate mesajele din conversație nu vor mai fi disponibile pentru practică sau analize de învățare. Această acțiune nu poate fi anulată.", - "chatWithActivities": "Conversație cu activități", "launch": "Lansează", - "launchActivityToChats": "Lansează activitate în conversații", "searchChats": "Caută conversații", - "selectChats": "Selectează conversații", - "selectChatToStart": "Gata! Selectează o conversație pentru a începe", "maxFifty": "Maxim 50", "configureSpace": "Configurează cursul", "pinMessages": "Fixează mesaje", @@ -4179,9 +3744,7 @@ "announcements": "Anunțuri", "activities": "Activități", "access": "Acces", - "botSettings": "Setări bot", "activitySuggestionTimeoutMessage": "Lucrăm din greu pentru a genera mai multe activități pentru tine, te rugăm să revii în un minut", - "accessSettingsWarning": "Ups! Se pare că nu ai permisiunea de a seta regulile de acces ale acestei camere. Ar trebui să verifici aceste reguli pentru a te asigura că sunt ceea ce ai nevoie și să vorbești cu un administrator de cameră dacă trebuie să le schimbi", "howSpaceCanBeFound": "Cum poate fi găsit acest curs", "private": "Privat", "cannotBeFoundInSearch": "Nu poate fi găsit în căutare", @@ -4194,16 +3757,6 @@ "canBeFoundViaKnock": "• cerere de aderare și aprobare de administrator", "youHaveLeveledUp": "Ai avansat de nivel!", "sendActivities": "Trimite activități", - "getStarted": "Începe", - "getStartedBotChatDesc": "Chat-ul cu AI este un loc excelent pentru a începe, iar instrumentele de citire, scriere, ascultare și vorbire ale Pangea fac totul ușor!", - "getStartedCommunitiesDesc": "Învățarea cu o comunitate este locul unde strălucește Pangea Chat!\nPoți să te alături clasei tale, să găsești un curs sau chiar să creezi unul propriu!", - "getStartedFriendsDesc": "Ai un prieten care vrea să învețe cu tine?", - "getStartedBotChatComplete": "Foarte bine! Discuți cu botul!", - "getStartedCommunitiesComplete": "Groza! Te-ai alăturat unui curs!", - "getStartedComplete": "Ai finalizat această secțiune!\nContinuă să explorezi caracteristicile noastre uimitoare vorbind cu prietenii!", - "getStartedFriendsComplete": "Woohoo! Ai prieteni! 😙", - "getStartedBotChatButton": "Începe să discuți!", - "getStartedFriendsButton": "Discută cu un prieten", "groupChat": "Chat de grup", "directMessage": "Mesaj direct", "newDirectMessage": "Mesaj direct nou", @@ -4219,7 +3772,6 @@ "mySavedActivities": "Activitățile mele salvate", "noSavedActivities": "Nu există activități salvate", "saveActivity": "Salvează această activitate", - "yourSavedActivities": "Activități salvate", "failedToPlayVideo": "Nu s-a reușit redarea videoclipului", "done": "Gata", "inThisSpace": "În acest curs", @@ -4258,37 +3810,27 @@ "maximumActivityParticipants": "Fiecare activitate poate avea maximum {count} participant(i).", "pending": "În așteptare", "inactive": "Inactiv", - "unjoinedActivityMessage": "Vrei să participi? Alege un rol deschis!\nSau stai și urmărește spectacolul!", - "fullActivityMessage": "Simte-te liber să urmărești spectacolul! Deși nu există roluri deschise pentru participare, poți vizualiza chat-ul!", "confirmRole": "Confirmă rolul", "openRoleLabel": "DESCHIS", "joinedTheActivity": "👋 {username} s-a alăturat ca {role}", "finishedTheActivity": "🎯 {username} a încheiat această activitate", - "endActivityTitle": "Am terminat", - "endActivityDesc": "Ai finalizat obiectivele?\nAceasta este confirmarea ta că te retragi din chat. Dar nu-ți face griji, distracția continuă în chat! Simte-te liber să stai și să te bucuri de spectacol până când toți apasă 'Gata'.", "archiveToAnalytics": "Adaugă la Activitățile mele finalizate", "activitySummaryError": "Rezumatul activităților indisponibil", "requestSummaries": "Solicită rezumate", - "loadingActivitySummary": "Se încarcă rezumatul activității...", "generatingNewActivities": "Sunteți primul utilizator al acestei perechi de limbi! Vă rugăm să ne acordați un minut, pregătim activități speciale pentru dvs.", - "requestAccessTitle": "Solicitați acces la vizualizarea analizelor?", + "requestAccessTitle": "Solicitați acces la analize?", "requestAccessDesc": "Doriți să solicitați acces pentru a vizualiza analizele participanților?\n\nDacă participanții sunt de acord, administratorii acestui curs vor putea vizualiza:\n • vocabularul total\n • conceptele gramaticale totale\n • sesiuni de activitate finalizate\n • conceptele gramaticale specifice utilizate, corect și incorect\n\nEi nu vor putea vizualiza:\n • mesajele din chat-urile din afara cursului\n • lista de vocabular", "requestAccess": "Solicită acces ({count})", "analyticsInactiveTitle": "Solicitările către utilizatorii inactivi nu au putut fi trimise", "analyticsInactiveDesc": "Utilizatorii inactivi care nu s-au autentificat de când a fost introdusă această funcție nu vor vedea solicitarea dvs.\n\nButonul de solicitare va apărea odată ce se vor întoarce. Puteți retrimite solicitarea mai târziu făcând clic pe butonul Solicitare sub numele lor când este disponibil.", "accessRequestedTitle": "Solicitare de acces la analize", - "accessRequestedDesc": "Administratorii “{space}” solicită să vadă analizele dvs. de învățare.\n\nDacă sunteți de acord, administratorii acestui curs vor putea vizualiza:\n • vocabularul total\n • conceptele gramaticale totale\n • sesiuni de activitate finalizate\n • conceptele gramaticale specifice utilizate, corect și incorect\n\nEi nu vor putea vizualiza:\n • mesajele din chat-urile din afara cursului\n • lista de vocabular", - "allowAccess": "Permite accesul", - "denyAccess": "Refuză accesul", + "accessRequestedDesc": "Solicitând admin(i): {admin} \n\nAdminii din „{space}” solicită să vizualizeze analizele dumneavoastră de învățare.\n\nDacă sunteți de acord, ei vor putea să vizualizeze:\n • vocabularul total\n • conceptele gramaticale totale\n • totalul sesiunilor de activitate finalizate\n • conceptele gramaticale specifice utilizate, corect și incorect\n\nEi nu vor putea să vizualizeze:\n • mesajele din chat-uri în afara cursului\n • lista de vocabular", "adminRequestedAccess": "Administratorii au solicitat să vadă analizele dvs.", "lastUpdated": "Actualizat\n{time}", "activityFinishedMessage": "Totul finalizat!", "endForAll": "Se încheie pentru toți", "newCourse": "Curs nou", - "newCourseSubtitle": "Ce plan de curs doriți să utilizați?", - "failedToLoadCourses": "Încărcarea cursurilor a eșuat", "numModules": "{num} module", - "numActivityPlans": "{num} planuri de activitate", "coursePlan": "Plan de curs", "editCourseLater": "Poți edita titlul, descrierile și imaginea cursului mai târziu.", "newCourseAccess": "În mod implicit, cursurile sunt private și necesită aprobarea administratorului pentru a te alătura. Poți edita aceste setări oricând.", @@ -4302,17 +3844,11 @@ "accessDesc": "Poți face cursul tău deschis lumii! Sau, îl poți face privat și sigur.", "createGroupChatDesc": "În timp ce sesiunile de activitate încep și se termină, chat-urile de grup vor rămâne deschise pentru comunicare de rutină.", "deleteDesc": "Doar administratorii pot șterge un curs. Aceasta este o acțiune distructivă care elimină toți utilizatorii și șterge toate chat-urile selectate din curs. Procedează cu precauție.", - "failedToLoadCourseInfo": "Nu s-a putut încărca informațiile despre curs", "noCourseFound": "Oh, acest curs are nevoie de un plan!\n\nPlanurile de curs sunt o succesiune de subiecte și activități de conversație.", "additionalParticipants": "+ {num} alții", - "activityNotFoundForCourse": "Această activitate nu a fost găsită în cadrul cursului", - "courseChats": "Chat-uri de curs", - "myActivitySessions": "Sesiunile mele de activitate", "directMessages": "Mesaje directe", "whatNow": "Ce urmează?", "chooseNextActivity": "Alege următoarea activitate!", - "seeInstructions": "Vezi Instrucțiuni", - "hideInstructions": "Ascunde Instrucțiuni", "letsGo": "Hai să începem", "chooseRole": "Alege un rol!", "chooseRoleToParticipate": "Alege un rol pentru a participa!", @@ -4322,23 +3858,15 @@ "inviteFriends": "Invită prieteni", "waitNotDone": "Așteaptă, nu am terminat!", "waitingForOthersToFinish": "Aștept ca ceilalți să termine...", - "saveToCompletedActivities": "Salvează în activități finalizate", "generatingSummary": "Analizăm chat-ul și generăm rezultate", - "instructionsLanguage": "Limba instrucțiunilor", "findCourse": "Găsește un curs", - "activityCompletedDesc": "Activitatea finalizată a fost adăugată la analize, unde poți revizui și exersa limba folosită.", "pingParticipantsNotification": "{user} caută utilizatori pentru a se alătura sesiunii de activitate în {room}", "course": "Curs", "courses": "Cursuri", "courseName": "Numele cursului", "createNewCourse": "Curs nou", - "publicCourses": "Cursuri publice", "goToCourse": "Mergi la curs: {course}", "activityComplete": "Această activitate a fost finalizată. Rezumatul activității ar trebui să fie disponibil mai jos.", - "haventChattedMuch": "Se pare că nu ai vorbit prea mult, încearcă să folosești mai multe cuvinte de vocabular! Dacă simți că ai atins obiectivul, poți încheia activitatea mai jos.", - "haveChatted": "Se pare că ai vorbit de ceva vreme! Dacă simți că ai atins obiectivul, încheie pentru a termina activitatea și vom genera un rezumat în chat!", - "userDoneAndWaiting": "{num1}/{num2} participanți au terminat. Așteaptă ca toți să termine, și vom genera un rezumat în chat! \n\nDacă vrei să te reunești în conversație, apasă butonul de continuare în chat.", - "othersDoneAndWaiting": "{num1}/{num2} au terminat. Ai atins obiectivul tău?", "startNewSession": "Începe o sesiune nouă", "joinOpenSession": "Participă la sesiune deschisă", "less": "mai puțin", @@ -4348,7 +3876,6 @@ "openToJoin": "Deschis pentru participare", "results": "Rezultate", "activityDone": "Activitate finalizată!", - "moreLabel": "mai mult", "promoCodeInfo": "Codurile promoționale pot fi introduse pe pagina următoare", "editsComingSoon": "Funcția de editare a orașelor și activităților va fi disponibilă în curând.", "editing": "Editare", @@ -4364,13 +3891,10 @@ "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", - "chooseLanguage": "Alege o limbă.", + "chooseLanguage": "Alegeți o limbă țintă.", "planTrip": "Planifică-ți călătoria", "howAreYouTraveling": "Cum călătorești?", "unlockPrivateTrip": "Deblochează o călătorie privată", @@ -4383,25 +3907,20 @@ "courseCode": "Care este parola secretă?", "courseCodeHint": "Codul sau linkul călătoriei", "unlockMyTrip": "Deblochează călătoria mea", - "anyLevel": "Orice nivel", "signupOption": "Cum vrei să te înscrii?", "withApple": "Cu Apple", "withGoogle": "Cu Google", "withEmail": "Cu Email", "createAccount": "Creează cont", - "noCoursesFound": "Nu au fost găsite cursuri", "loginWithEmail": "Autentificare cu email", "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", - "allCefrLevels": "Toate nivelurile CEFR", "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.", "directMessageBotTitle": "Mesaj direct Pangea Bot", "feedbackTitle": "Feedback despre activitate", - "feedbackDesc": "Cum ar trebui îmbunătățită activitatea? Dacă poți oferi câteva detalii, vom face schimbarea!", "feedbackHint": "Feedback-ul tău", "feedbackButton": "Trimite feedback", "directMessageBotDesc": "Vorbitul cu oameni este mai distractiv, dar... AI este întotdeauna pregătit!", @@ -5740,30 +5259,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5779,18 +5274,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5815,18 +5298,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5863,38 +5334,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5903,62 +5346,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5995,10 +5394,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6007,14 +5402,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6023,46 +5410,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6071,10 +5422,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6131,18 +5478,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6151,14 +5486,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6187,18 +5514,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6207,42 +5522,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6251,14 +5534,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6279,26 +5554,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6319,10 +5574,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6355,25 +5606,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6430,34 +5662,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6486,778 +5690,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8250,14 +6686,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8269,14 +6697,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8308,10 +6728,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8320,18 +6736,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8340,14 +6744,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8372,38 +6768,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8449,10 +6817,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8477,10 +6841,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8505,10 +6865,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8517,66 +6873,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8597,42 +6897,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8657,154 +6933,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8821,18 +6949,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8853,14 +6969,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8877,10 +6985,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8893,14 +6997,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8909,14 +7005,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8944,26 +7032,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8992,18 +7060,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9040,10 +7100,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9976,10 +8032,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10160,34 +8212,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10200,10 +8224,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10212,14 +8232,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10236,22 +8248,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10399,14 +8395,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10415,34 +8403,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10451,54 +8411,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10507,10 +8431,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10527,10 +8447,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10702,26 +8618,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10750,10 +8646,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10810,30 +8702,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10862,18 +8738,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10990,14 +8858,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11010,10 +8870,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11022,14 +8878,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11046,14 +8894,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11062,22 +8902,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11090,18 +8914,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11118,22 +8930,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11142,30 +8942,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11238,18 +9014,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11306,18 +9070,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11346,30 +9098,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11422,18 +9158,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11482,46 +9210,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11586,10 +9274,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11761,14 +9445,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11796,14 +9472,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11816,10 +9484,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11855,19 +9519,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11892,14 +9551,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11908,14 +9559,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11968,10 +9611,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11984,18 +9623,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12008,14 +9635,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12056,26 +9675,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12103,10 +9710,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12117,36 +9720,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12183,10 +9756,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12251,18 +9820,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12327,10 +9884,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12351,10 +9904,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12371,10 +9920,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12383,10 +9928,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12399,10 +9940,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12427,16 +9964,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Invită prieteni la activitate", - "inviteFriendsToActivityCourse": "Invită prieteni la activitate și curs", "feedbackRespDesc": "Verifică mâine pentru actualizări ale activității.", "activityDropdownDesc": "Când termini această activitate, fă clic mai jos", - "activityAnalyticsListBody": "Acestea sunt activitățile tale finalizate! După ce termini activitățile, le poți vizualiza aici.", "languageMismatchTitle": "Incompatibilitate de limbaj", "languageMismatchDesc": "Limba țintă nu se potrivește cu limba acestei activități. Vrei să actualizezi limba țintă?", "reportWordIssueTooltip": "Raportează problemă cu informația cuvântului", "tokenInfoFeedbackDialogTitle": "Feedback despre Informația Cuvântului", - "tokenInfoFeedbackDialogDesc": "AI face greșeli. Te rugăm să descrii orice problemă ai găsit cu informația de mai sus.", "noPublicCoursesFound": "Nu au fost găsite cursuri publice. Vrei să creezi unul?", "noCourseTemplatesFound": "Nu am putut găsi cursuri pentru limba ta țintă. Între timp, poți conversa cu Pangea Bot și verifica mai târziu pentru mai multe cursuri.", "botActivityJoinFailMessage": "Pangea Bot răspunde cu întârziere. Te rugăm să încerci din nou mai târziu sau să inviți un prieten.", @@ -12444,14 +9977,6 @@ "leaveDesc": "Părăsește acest spațiu și toate chat-urile din el", "selectAll": "Selectează tot", "deselectAll": "Deselectează tot", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12460,10 +9985,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12480,10 +10001,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12517,7 +10034,6 @@ "newMessageInPangeaChat": "📝 Mesaj nou în Pangea Chat", "shareCourse": "Partajează cursul", "addCourse": "Adaugă un curs", - "joinCourseWithCode": "Alătură-te cursului cu cod", "joinPublicCourse": "Alătură-te cursului public", "vocabLevelsDesc": "Aici vor fi plasate cuvintele de vocabular odată ce le-ai nivelat!", "highlightVocabTooltip": "Subliniază cuvintele țintă din vocabular de mai jos trimițându-le sau exersându-le în chat", @@ -12541,10 +10057,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12553,7 +10065,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nu s-au găsit mesaje directe sau chat-uri. Asigură-te că căutarea ta este scrisă corect.", + "activityAnalyticsTooltipBody": "Acestea sunt activitățile tale salvate pentru revizuire și practică.", + "numSavedActivities": "Numărul de activități salvate", + "saveActivityTitle": "Salvează activitatea", + "saveActivityDesc": "Bravo! Salvează această activitate pentru revizuire și practică ulterioară", + "levelInfoTooltip": "Aici poți vedea toate punctele pe care le-ai câștigat și cum!", + "alreadyInCourseWithID": "Ești deja într-un curs cu acest plan. Vrei să creezi un curs cu același plan sau să mergi la cursul existent?", + "goToExistingCourse": "Mergi la cursul existent", + "emojiView": "Vizualizare emoji", + "feedbackDialogDesc": "Fac și eu greșeli! Ai ceva care să mă ajute să mă îmbunătățesc?", + "contactHasBeenInvitedToTheCourse": "Contactul a fost invitat la curs", + "activityStatsButtonTooltip": "Informații despre activitate", + "allow": "Permite", + "deny": "Refuză", + "enabledRenewal": "Activează reînnoirea abonamentului", + "subscriptionEndsOn": "Abonamentul se încheie pe", + "subscriptionRenewsOn": "Abonamentul se reînnoiește pe", + "waitForSubscriptionChanges": "Modificările la abonamentul tău pot dura câteva momente pentru a se reflecta în aplicație.", + "subscribeReadingAssistance": "Abonează-te pentru a debloca instrumentele de mesagerie", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharică", + "arDisplayName": "Arabă", + "asDisplayName": "Asamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaidjan", + "baDisplayName": "Bașchir", + "banDisplayName": "Balinenez", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bielorus", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgărească", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengaleză", + "bnBDDisplayName": "Bengaleză (Bangladesh)", + "bnINDisplayName": "Bengaleză (India)", + "brDisplayName": "Bretonă", + "bsDisplayName": "Bosniacă", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalană", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Kurdă Centrală", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsicană", + "crhDisplayName": "Turcă Crimeeană", + "crsDisplayName": "Creolă Seselwa Franceză", + "csDisplayName": "Cehă", + "cvDisplayName": "Ciuvașă", + "cyDisplayName": "Waleză", + "daDisplayName": "Daneză", + "deDisplayName": "Germană", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Engleză", + "enAUDisplayName": "Engleză (Australia)", + "enGBDisplayName": "Engleză (Regatul Unit)", + "enINDisplayName": "Engleză (India)", + "enUSDisplayName": "Engleză (SUA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spaniolă", + "esESDisplayName": "Spaniolă (Spania)", + "esMXDisplayName": "Spaniolă (Mexic)", + "euDisplayName": "Bască", + "faDisplayName": "Persană", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finlandeză", + "filDisplayName": "Filipinez", + "fjDisplayName": "Fijian", + "foDisplayName": "Faroese", + "frDisplayName": "Franceză", + "frCADisplayName": "Franceză (Canada)", + "frFRDisplayName": "Franceză (Franța)", + "fyDisplayName": "Frisian de Vest", + "gaDisplayName": "Irlandeză", + "gaaDisplayName": "Ga", + "gdDisplayName": "Gaelic Scoțian", + "glDisplayName": "Galeză", + "gnDisplayName": "Guarani", + "gomDisplayName": "Konkani Goan", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiană", + "heDisplayName": "Ebraică", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Croată", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Creolă haitiană", + "huDisplayName": "Maghiară", + "hyDisplayName": "Armeană", + "idDisplayName": "Indoneziană", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Icelandică", + "itDisplayName": "Italiană", + "jaDisplayName": "Japoneză", + "jvDisplayName": "Javanese", + "kaDisplayName": "Georgiană", + "kkDisplayName": "Kazah", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Coreeană", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Republica Democratică Congo)", + "kuDisplayName": "Kurdă", + "kyDisplayName": "Kârgâz", + "laDisplayName": "Latină", + "lbDisplayName": "Luxemburgheză", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgheză", + "lijDisplayName": "Liguriană", + "lmoDisplayName": "Lombardă", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Lituaniană", + "ltgDisplayName": "Latgaliană", + "luoDisplayName": "Luo (Kenia și Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letonă", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgașă", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedoneană", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongolă", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arabă)", + "msMYDisplayName": "Malay (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmanez", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norvegian (Bokmål)", + "neDisplayName": "Nepalez", + "newDisplayName": "Newari", + "nlDisplayName": "Olandez", + "nlBEDisplayName": "Flamand", + "noDisplayName": "Norvegian", + "nrDisplayName": "Ndebele de Sud", + "nsoDisplayName": "Sotho de Nord", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poloneză", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugheză", + "ptBRDisplayName": "Portugheză (Brazilia)", + "ptPTDisplayName": "Portugheză (Portugalia)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Română", + "roMDDisplayName": "Moldovenească", + "romDisplayName": "Romani", + "ruDisplayName": "Rusă", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Siciliană", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovacă", + "slDisplayName": "Slovenă", + "smDisplayName": "Samoană", + "snDisplayName": "Shona", + "soDisplayName": "Somaleză", + "sqDisplayName": "Albaneză", + "srDisplayName": "Sârbească", + "srMEDisplayName": "Montenegrin", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho de Sud", + "suDisplayName": "Sundanese", + "svDisplayName": "Suedeză", + "swDisplayName": "Swahili", + "szlDisplayName": "Silezian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadjik", + "thDisplayName": "Thailandez", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turc", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uighur", + "ukDisplayName": "Ucrainiană", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbec", + "viDisplayName": "Vietnameză", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yiddish", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucatec", + "yueDisplayName": "Cantonese", + "yueCNDisplayName": "Cantonese (China)", + "yueHKDisplayName": "Cantonese (Hong Kong)", + "zhDisplayName": "Chineză", + "zhCNDisplayName": "Chineză (Simplificată)", + "zhTWDisplayName": "Chineză (Tradițională)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12620,6 +11318,7 @@ "notStartedActivitiesTitle": "Sesiuni deschise ({num})", "inProgressActivitiesTitle": "Se desfășoară acum ({num})", "completedActivitiesTitle": "Finalizate ({num})", + "pickDifferentActivity": "Alege o activitate diferită", "inOngoingActivity": "Ai o activitate în desfășurare!", "@notStartedActivitiesTitle": { "type": "String", @@ -12645,10 +11344,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Limba țintă nu se potrivește cu acest mesaj. Doriți să actualizați limba țintă?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Aceasta este toată lumea din acest curs. Faceți clic pe avatarul oricărui utilizator și „începeți conversația” pentru a trimite un mesaj direct.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Această cuvânt de vocabular va fi eliminat permanent din analizele tale", + "woman": "Femeie", + "man": "Bărbat", + "otherGender": "Altul", + "unselectedGender": "Selectați o opțiune de gen", + "gender": "Gen", + "chatParticipantTooltip": "Aceasta este toată lumea din acest chat. Faceți clic pe avatarul oricărui utilizator și “începeți conversația” pentru a trimite un DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Instrumentele de învățare sunt dezactivate pentru mesajele care nu sunt în limba ta țintă.", + "vocabEmoji": "Emoji vocabular", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Solicita regenerarea", + "optionalRegenerateReason": "(Opțional) Motiv", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Ai setat emoji-ul pentru {lemma}! Vom folosi acest emoji pentru a reprezenta cuvântul în activitățile practice de acum înainte.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Așteptând finalizarea autentificării", + "ssoDialogDesc": "Am deschis un nou tab pentru a te putea autentifica în siguranță.", + "ssoDialogHelpText": "🤔 Dacă nu ai văzut noul tab, te rugăm să verifici blocatorul de feronete.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Dezactivează uneltele de limbă", + "disableLanguageToolsDesc": "Doriți să dezactivați asistența automată pentru limbă?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Permisiune refuzată. Activați permisiunile de înregistrare pentru a înregistra mesaje audio.", + "genericWebRecordingError": "Ceva a mers prost. Recomandăm utilizarea browserului Chrome atunci când înregistrați mesaje.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Pentru cea mai bună experiență utilizând această aplicație, vă rugăm să extindeți dimensiunea ecranului.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Activități pentru deblocarea următorului subiect", "activitiesToUnlockTopicDesc": "Stabilește numărul de activități pentru a debloca următorul subiect al cursului", "@activitiesToUnlockTopicTitle": { @@ -12658,5 +11475,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Practică corectă a definițiilor vocabularului", + "constructUseIncLMDesc": "Practică incorectă a definițiilor vocabularului", + "constructUseCorLADesc": "Practică corectă a audio-ului vocabularului", + "constructUseIncLADesc": "Practică incorectă a audio-ului vocabularului", + "constructUseBonus": "Bonus în timpul practicii vocabularului", + "practiceVocab": "Practică vocabularul", + "selectMeaning": "Selectați semnificația", + "selectAudio": "Selectați audio-ul corespunzător", + "congratulations": "Felicitări!", + "anotherRound": "Încă o rundă", + "noActivityRequest": "Nu există cereri de activitate curente.", + "quit": "Ieși", + "congratulationsYouveCompletedPractice": "Felicitări! Ai completat sesiunea de practică.", + "mustHave10Words": "Trebuie să ai cel puțin 10 cuvinte de vocabular pentru a le exersa. Încearcă să vorbești cu un prieten sau cu Pangea Bot pentru a descoperi mai multe!", + "botSettings": "Setări Bot", + "activitySettingsOverrideWarning": "Limba și nivelul de limbă sunt determinate de planul de activitate", + "voice": "Voce", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 7c331e44e..720485908 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1,6 +1,6 @@ { "@@locale": "ru", - "@@last_modified": "2026-01-06 13:02:42.875671", + "@@last_modified": "2026-01-07 14:28:59.154241", "about": "О проекте", "@about": { "type": "String", @@ -3316,26 +3316,14 @@ "commandHint_logoutall": "Выйти со всех активных устройств", "displayNavigationRail": "Показать панель навигации на мобильном устройстве", "customReaction": "Пользовательская реакция", - "accountInformation": "Информация об аккаунте", - "addGroupDescription": "Добавить описание чата", - "addNewFriend": "Добавить нового друга", - "alreadyHaveAnAccount": "Уже есть аккаунт?", - "createNewGroup": "Создать новый чат", - "editChatPermissions": "Редактировать разрешения чата", "writeAMessageLangCodes": "Введите на {l1} или {l2}...", "requests": "Запросы", - "allCorrect": "Вот как я бы сказал! Отлично!", - "newWayAllGood": "Это не так, как я бы сказал, но выглядит хорошо!", - "othersAreBetter": "Хм, возможно, есть лучший способ сказать это.", "holdForInfo": "Нажмите и удерживайте для получения информации о слове.", "greenFeedback": "Это то, что я бы вставил!", "yellowFeedback": "Хм, попробуйте это и посмотрите, сработает ли! Чтобы использовать это слово, просто нажмите его снова.", "redFeedback": "Я думаю, это неправильно...", "itInstructionsTitle": "Я могу помочь вам с переводом!", "itInstructionsBody": "Вы можете нажимать и удерживать выборы для получения информации о слове.", - "oneday": "Последние 24 часа", - "oneweek": "Последние 7 дней", - "onemonth": "Прошлый месяц", "gaTooltip": "Использование L2 с грамматической помощью", "taTooltip": "Использование L2 с переводческой помощью", "unTooltip": "Другое", @@ -3345,58 +3333,27 @@ "interactiveTranslatorAllowed": "Выбор студента", "interactiveTranslatorRequired": "Обязательно", "notYetSet": "Еще не установлено", - "myLearning": "Моя аналитика", "waTooltip": "Использование L2 без помощи", - "changeDateRange": "Изменить диапазон дат", - "classDescription": "Описание", - "addStudents": "Пригласить пользователей по ссылке или коду", - "copyClassLink": "Копировать ссылку для приглашения", - "copyClassCode": "Копировать код приглашения", - "inviteStudentByUserName": "Пригласить пользователей по имени пользователя", "languageSettings": "Настройки языка", "interactiveTranslator": "Помощь с переводом", - "shareVideo": "Поделиться видео", - "shareVideoDesc": "Включите это, чтобы студенты могли делиться видео в чатах.", - "shareFiles": "Поделиться файлами", - "selectLanguageLevel": "Выберите уровень языка", "noIdenticalLanguages": "Пожалуйста, выберите разные исходный и целевой языки", - "iWantALanguagePartnerFrom": "Из:", - "worldWide": "Весь мир", - "noResults": "Нет результатов! Попробуйте расширить поиск.", "searchBy": "Поиск по стране и языкам", - "iWantAConversationPartner": "Я хочу партнера для разговора, который", - "iWantALanguagePartnerWhoSpeaks": "Говорит:", - "iWantALanguagePartnerWhoIsLearning": "Учится:", "joinWithClassCode": "Присоединиться к курсу", - "joinWithClassCodeHint": "Введите код приглашения", - "languageLevelPreA1": "Настоящий новичок (Pre A1)", - "languageLevelA1": "Начинающий (A1)", - "languageLevelA2": "Элементарный (A2)", - "languageLevelB1": "Средний (B1)", - "languageLevelB2": "Выше среднего (B2)", - "languageLevelC1": "Продвинутый (C1)", - "languageLevelC2": "Мастерство (C2)", + "languageLevelPreA1": "Новичок Низкий (Pre A1)", + "languageLevelA1": "Новичок Мид (A1)", + "languageLevelA2": "Начальный высокий (A2)", + "languageLevelB1": "Средний средний (B1)", + "languageLevelB2": "Продвинутый низкий (B2)", + "languageLevelC1": "Продвинутый средний (C1)", + "languageLevelC2": "Высший (C2)", "changeTheNameOfTheClass": "Изменить название", "changeTheNameOfTheChat": "Изменить название чата", - "askPangeaBot": "Попросите Pangea Bot дать контекстное определение.", "sorryNoResults": "Извините, результатов нет.", "ignoreInThisText": "Игнорировать", - "helpMeTranslate": "Да!", - "needsItShortMessage": "Вне цели", "needsItMessage": "Подождите, это не {targetLanguage}! Вам нужна помощь с переводом?", - "needsIgcMessage": "Это сообщение содержит грамматическую ошибку.", - "tokenTranslationTitle": "Слово на вашем основном языке.", - "spanTranslationDesc": "Смотрите возможные переводы ниже.", - "spanTranslationTitle": "Некоторые слова на вашем основном языке.", - "l1SpanAndGrammarTitle": "Вне целевого языка", - "l1SpanAndGrammarDesc": "Это может быть на вашем основном языке или это может быть грамматическая ошибка.", - "otherTitle": "У вас есть ошибка.", - "otherDesc": "Смотрите возможные исправления ниже.", "countryInformation": "Моя страна", - "myLanguages": "Мои основные и целевые языки", "targetLanguage": "Целевой язык", "sourceLanguage": "Основной язык", - "languagesISpeak": "Языки, которыми я говорю", "updateLanguage": "Мои языки", "whatLanguageYouWantToLearn": "Какой язык вы хотите выучить?", "whatIsYourBaseLanguage": "Какой у вас основной язык?", @@ -3411,13 +3368,8 @@ "errorDisableLanguageAssistanceUserDesc": "Нажмите здесь, чтобы обновить настройки помощи с переводом и грамматикой", "errorDisableITClassDesc": "Помощь с переводом отключена для курса, в котором находится этот чат.", "errorDisableIGCClassDesc": "Помощь с грамматикой отключена для курса, в котором находится этот чат.", - "itIsDisabled": "Интерактивный перевод отключен", - "igcIsDisabled": "Интерактивная проверка грамматики отключена", - "goToLearningSettings": "Перейти к настройкам обучения", "error405Title": "Языки не установлены", "error405Desc": "Пожалуйста, установите ваши языки в Главное меню > Настройки обучения.", - "loginOrSignup": "Войти с", - "iAgreeToThe": "Я согласен с ", "termsAndConditions": "Условиями использования", "andCertifyIAmAtLeast13YearsOfAge": " и подтверждаю, что мне не менее 16 лет.", "error502504Title": "Вау, много студентов онлайн!", @@ -3425,40 +3377,21 @@ "error404Title": "Ошибка перевода!", "error404Desc": "Бот Pangea не уверен, как это перевести...", "errorPleaseRefresh": "Мы этим занимаемся! Пожалуйста, обновите страницу и попробуйте снова.", - "toggleIT": "Интерактивный перевод", - "toggleIGC": "Интерактивная проверка грамматики", - "toggleToolSettingsDescription": "Здесь вы можете включать или выключать настройки отдельных языковых инструментов.", "connectedToStaging": "Подключено к тестовой среде", "learningSettings": "Настройки обучения", - "sendVoiceNotes": "Отправлять голосовые заметки", - "sendVoiceNotesDesc": "Включите это, чтобы студенты могли отправлять голосовые заметки в чатах.", - "chatTopic": "Тема чата", - "chatTopicDesc": "Установите тему чата", - "inviteStudentByUserNameDesc": "Если у вашего студента уже есть аккаунт, вы можете найти его.", "participants": "Участники", - "almostPerfect": "Похоже, всё правильно! Вот что я бы сказал.", - "prettyGood": "Довольно хорошо! Вот что я бы сказал.", - "letMeThink": "Хм, давайте посмотрим, как у вас получилось!", "clickMessageTitle": "Нужна помощь?", "clickMessageBody": "Нажмите на сообщение для получения языковых инструментов, таких как перевод, воспроизведение и другие!", - "understandingMessagesTitle": "Определения и переводы!", - "understandingMessagesBody": "Щелкните подчеркнутые слова для получения определений. Переводите с помощью опций сообщения (вверху справа).", "allDone": "Готово!", "vocab": "Лексика", "low": "У нас есть доказательства, что пользователь не понимает эти слова.", "medium": "Эти слова были использованы. Неясно, полностью ли пользователь их понимает.", "high": "У нас есть доказательства, что пользователь понимает эти слова.", - "unknownProficiency": "Эти слова не использовались в Pangea Chat.", - "changeView": "Переключить виды.", - "clearAll": "Очистить все слова?", - "generateVocabulary": "Создать словарь из заголовка и описания", - "generatePrompts": "Создать подсказки", "subscribe": "Подписаться", "getAccess": "Подпишитесь сейчас!", "subscriptionDesc": "Общение — бесплатно! Подпишитесь, чтобы разблокировать интерактивный перевод, проверку грамматики и аналитические данные обучения.", "subscriptionManagement": "Управление подпиской", "currentSubscription": "Текущая подписка", - "changeSubscription": "Изменить подписку", "cancelSubscription": "Отменить подписку", "selectYourPlan": "Выберите свой план", "subsciptionPlatformTooltip": "Пожалуйста, войдите на ваше исходное устройство, чтобы управлять планом подписки", @@ -3467,9 +3400,6 @@ "paymentHistory": "История платежей", "emptyChatDownloadWarning": "Невозможно скачать пустой чат", "update": "Обновить", - "updateDesc": "Теперь вы можете обновить это приложение с {localVersion} до {storeVersion}", - "maybeLater": "Может быть позже", - "mainMenu": "Главное меню", "toggleImmersionMode": "Режим погружения", "toggleImmersionModeDesc": "При включении все сообщения отображаются на вашем целевом языке. Эта настройка особенно полезна при языковых обменах.", "itToggleDescription": "Этот инструмент изучения языка определит слова на вашем базовом языке и поможет вам перевести их на целевой язык. Хотя это редкость, ИИ может допускать ошибки перевода.", @@ -3484,212 +3414,13 @@ "definitionsToolDescription": "При включении слова, подчеркнутые синим, можно щелкнуть для получения определений. Щелкните сообщение для доступа к определениям.", "translationsToolDescrption": "При включении щелкните сообщение и значок перевода, чтобы увидеть сообщение на вашем основном языке.", "welcomeBack": "С возвращением! Если вы участвовали в пилоте 2023-2024 годов, свяжитесь с нами для получения вашей специальной подписки пилота. Если вы учитель, у которого (или у вашей организации) есть лицензии для вашего класса, свяжитесь с нами для получения учительской подписки.", - "kickAllStudents": "Исключить всех студентов", - "kickAllStudentsConfirmation": "Вы уверены, что хотите исключить всех студентов?", - "inviteAllStudents": "Пригласить всех студентов", - "inviteAllStudentsConfirmation": "Вы уверены, что хотите пригласить всех студентов?", - "inviteUsersFromPangea": "Добавить администраторов", - "redeemPromoCode": "Активировать промо-код", - "enterPromoCode": "Введите промо-код", "downloadTxtFile": "Скачать текстовый файл", "downloadCSVFile": "Скачать CSV-файл", "promotionalSubscriptionDesc": "У вас в настоящее время пожизненная промо-подписка. Обратитесь в поддержку@pangea.chat для помощи в изменении вашей подписки.", "originalSubscriptionPlatform": "Подписка приобретена через {purchasePlatform}", "oneWeekTrial": "Пробный период 1 неделя", "downloadXLSXFile": "Скачать файл Excel", - "abDisplayName": "Абхазский", - "aaDisplayName": "Афарский", - "afDisplayName": "Африкаанс", - "akDisplayName": "Акан", - "sqDisplayName": "Албанский", - "amDisplayName": "Амхарский", - "arDisplayName": "Арабский", - "anDisplayName": "Арагонский", - "hyDisplayName": "Армянский", - "asDisplayName": "Ассамский", - "avDisplayName": "Аварский", - "aeDisplayName": "Авестийский", - "ayDisplayName": "Аймара", - "azDisplayName": "Азербайджанский", - "bmDisplayName": "Бамана", - "baDisplayName": "Башкирский", - "euDisplayName": "Баскский", - "beDisplayName": "Белорусский", - "bnDisplayName": "Бенгальский", - "bhDisplayName": "Бихари", - "biDisplayName": "Бислама", - "bsDisplayName": "Боснийский", - "brDisplayName": "Бретонский", - "bgDisplayName": "Болгарский", - "myDisplayName": "Бирманский", - "caDisplayName": "Каталонский, Валенсийский", - "chDisplayName": "Чаморро", - "ceDisplayName": "Чеченский", - "nyDisplayName": "Чичева, Чева, Ньянджа", - "zhDisplayName": "Китайский", - "cvDisplayName": "Чувашский", - "kwDisplayName": "Корнский", - "coDisplayName": "Корсиканский", - "crDisplayName": "Кри", - "hrDisplayName": "Хорватский", - "csDisplayName": "Чешский", - "daDisplayName": "Датский", - "dvDisplayName": "Дивехи; Дхивехи; Мальдивский;", - "nlDisplayName": "Голландский", - "enDisplayName": "Английский", - "eoDisplayName": "Эсперанто", - "etDisplayName": "Эстонский", - "eeDisplayName": "Эве", - "foDisplayName": "Фарерский", - "fjDisplayName": "Фиджийский", - "fiDisplayName": "Финский", - "frDisplayName": "Французский", - "ffDisplayName": "Фула; Фула; Пулар; Пулар", - "glDisplayName": "Галицкий", - "kaDisplayName": "Грузинский", - "deDisplayName": "Немецкий", - "elDisplayName": "Греческий, современный", - "gnDisplayName": "Гуарани", - "guDisplayName": "Гуджарати", - "htDisplayName": "Гаитянский, гаитянский креольский", - "haDisplayName": "Хауса", - "heDisplayName": "Иврит (современный)", - "hzDisplayName": "Herero", - "hiDisplayName": "Хинди", - "hoDisplayName": "Хири Моту", - "huDisplayName": "Венгерский", - "iaDisplayName": "Интерлингва", - "idDisplayName": "Индонезийский", - "ieDisplayName": "Интерлингви", - "gaDisplayName": "Ирландский", - "igDisplayName": "Ибо", - "ikDisplayName": "Инупиак", - "ioDisplayName": "Идо", - "isDisplayName": "Исландский", - "itDisplayName": "Итальянский", - "iuDisplayName": "Инуктиктут", - "jaDisplayName": "Японский", - "jvDisplayName": "Яванский", - "klDisplayName": "Калаалисут, Гренландский", - "knDisplayName": "Каннада", - "krDisplayName": "Канури", - "ksDisplayName": "Кашмири", - "kkDisplayName": "Казахский", - "kmDisplayName": "Кхмерский", - "kiDisplayName": "Кикуйю, Гикуйю", - "rwDisplayName": "Киньяруанда", - "kyDisplayName": "Киргизский, Кыргызский", - "kvDisplayName": "Коми", - "kgDisplayName": "Конго", - "koDisplayName": "Корейский", - "kuDisplayName": "Курдский", - "kjDisplayName": "Кваньяма, Куаньяма", - "laDisplayName": "Латинский", - "lbDisplayName": "Люксембургский, Летзебургский", - "lgDisplayName": "Луганда", - "liDisplayName": "Лимбургский, Лимбургский, Лимбургер", - "lnDisplayName": "Лингала", - "loDisplayName": "Лаосский", - "ltDisplayName": "Литовский", - "luDisplayName": "Луба-Катанга", - "lvDisplayName": "Латышский", - "gvDisplayName": "Манский", - "mkDisplayName": "Македонский", - "mgDisplayName": "Малагасийский", - "msDisplayName": "Малайский", - "mlDisplayName": "Малаялам", - "mtDisplayName": "Мальтийский", - "miDisplayName": "Маори", - "mrDisplayName": "Маратхи (Марахі)", - "mhDisplayName": "Маршалльский", - "mnDisplayName": "Монгольский", - "naDisplayName": "Науру", - "nvDisplayName": "Навахо, Наво", - "nbDisplayName": "Норвежский букмол", - "ndDisplayName": "Северный ндебеле", - "neDisplayName": "Непальский", - "ngDisplayName": "Ндонга", - "nnDisplayName": "Норвежский нюнорск", - "noDisplayName": "Норвежский", - "iiDisplayName": "Нуосу", - "nrDisplayName": "Южный ндебеле", - "ocDisplayName": "Окситанский", - "ojDisplayName": "Оджибве, Оджибва", - "cuDisplayName": "Древнецерковнославянский, церковнославянский, старобългарски, старославянский", - "omDisplayName": "Оромо", - "orDisplayName": "Ория", - "osDisplayName": "Осетинский, осетинский язык", - "paDisplayName": "Пенджаби, панджаби", - "piDisplayName": "Пали", - "faDisplayName": "Персидский", - "plDisplayName": "Польский", - "psDisplayName": "Пушту, пашто", - "ptDisplayName": "Португальский", - "quDisplayName": "Кечуа", - "rmDisplayName": "Ретороманский", - "rnDisplayName": "Кирунди", - "roDisplayName": "Румынский, молдавский", - "ruDisplayName": "Русский", - "saDisplayName": "Санскрит (Санскрита)", - "scDisplayName": "Сардинский", - "sdDisplayName": "Синдхи", - "seDisplayName": "Северный саамский", - "smDisplayName": "Самоанский", - "sgDisplayName": "Санго", - "srDisplayName": "Сербский", - "gdDisplayName": "Шотландский гэльский, гэльский", - "snDisplayName": "Шона", - "siDisplayName": "Сингальский, сингальский", - "skDisplayName": "Словацкий", - "slDisplayName": "Словенский", - "soDisplayName": "Сомалийский", - "stDisplayName": "Южносото", - "esDisplayName": "Испанский", - "suDisplayName": "Сунданский", - "swDisplayName": "Суахили", - "ssDisplayName": "Свати", - "svDisplayName": "Шведский", - "taDisplayName": "Тамильский", - "teDisplayName": "Телугу", - "tgDisplayName": "Таджикский", - "thDisplayName": "Тайский", - "tiDisplayName": "Тигринья", - "boDisplayName": "Тибетский стандарт, тибетский, центральный", - "tkDisplayName": "Туркменский", - "tlDisplayName": "Тагальский", - "tnDisplayName": "Тсвана", - "toDisplayName": "Тонганский (острова Тонга)", - "trDisplayName": "Турецкий", - "tsDisplayName": "Тсонга", - "ttDisplayName": "Татарский", - "twDisplayName": "Тви", - "tyDisplayName": "Тихуанский", - "ugDisplayName": "Уйгурский, уйгур", - "ukDisplayName": "Украинский", - "urDisplayName": "Урду", - "uzDisplayName": "Узбекский", - "veDisplayName": "Венда", - "viDisplayName": "Вьетнамский", - "voDisplayName": "Волапюк", - "waDisplayName": "Валлонский", - "cyDisplayName": "Валлийский", - "woDisplayName": "Волоф", - "fyDisplayName": "Западнофризский", - "xhDisplayName": "Кхоса", - "yiDisplayName": "Идиш", - "yoDisplayName": "Йоруба", - "zaDisplayName": "Чжуан, Чуанг", "unkDisplayName": "Неизвестно", - "zuDisplayName": "Зулу", - "hawDisplayName": "Гавайский", - "hmnDisplayName": "Хмонг", - "multiDisplayName": "Мульти", - "cebDisplayName": "Себуано", - "dzDisplayName": "Дзонгхе", - "iwDisplayName": "Иврит", - "jwDisplayName": "Яванский", - "moDisplayName": "Молдавский", - "shDisplayName": "Сербско-хорватский", "wwCountryDisplayName": "Всемирная сеть", "afCountryDisplayName": "Афганистан", "axCountryDisplayName": "Аландские острова", @@ -3937,41 +3668,25 @@ "yeCountryDisplayName": "Йемен", "zmCountryDisplayName": "Замбия", "zwCountryDisplayName": "Зимбабве", - "pay": "Оплатить", - "allPrivateChats": "Личные сообщения", - "unknownPrivateChat": "Неизвестный личный чат", + "pay": "Оформить заказ", "invitedToSpace": "{user} пригласил вас присоединиться к курсу: {space}! Хотите принять приглашение?", - "declinedInvitation": "Приглашение отклонено", - "acceptedInvitation": "Приглашение принято", "youreInvited": "📩 Вы приглашены!", "invitedToChat": "{user} пригласил вас присоединиться к чату: {name}! Хотите принять приглашение?", "monthlySubscription": "Ежемесячная", "yearlySubscription": "Годовая", "defaultSubscription": "Подписка Pangea Chat", "freeTrial": "Бесплатный пробный период", - "grammarAnalytics": "Аналитика ошибок", "total": "Итого: ", "noDataFound": "Данные не найдены", - "promoSubscriptionExpirationDesc": "Ваша текущая подписка является промо-акцией и истекает {expiration}. Свяжитесь с support@pangea.chat для помощи с изменением подписки.", - "emptyChatNameWarning": "Пожалуйста, введите название для этого чата", "blurMeansTranslateTitle": "Почему сообщение размыто?", "blurMeansTranslateBody": "Когда включен режим погружения, сообщения, отправленные на вашем основном языке, будут размыты, пока Pangea Bot переводит их на ваш целевой язык. Режим погружения можно включать и выключать в настройках отдельного курса и профиля.", - "someErrorTitle": "Хм, что-то не так", - "someErrorBody": "Это может быть ошибка или что-то в вашем основном языке.", "bestCorrectionFeedback": "Это правильно!", "distractorFeedback": "Это не совсем правильно.", "bestAnswerFeedback": "Это правильно!", "definitionDefaultPrompt": "Что означает это слово?", "practiceDefaultPrompt": "Какой лучший ответ?", "correctionDefaultPrompt": "Какое лучшее исправление?", - "itStartDefaultPrompt": "Хотите помочь с переводом?", - "lockedChatWarning": "🔒 Этот чат заблокирован", - "lockChat": "Заблокировать чат", - "suggestToChat": "Предложить этот чат", - "suggestToChatDesc": "Предложенные чаты появятся в списках чатов", "acceptSelection": "Принять исправление", - "acceptSelectionAnyway": "Использовать это всё равно", - "makingActivity": "Создание активности", "why": "Почему?", "definition": "Определение", "exampleSentence": "Приклад речення", @@ -3979,128 +3694,55 @@ "reportMessageTitle": "{reportingUserId} повідомив про повідомлення від {reportedUserId} у чаті {roomName}", "reportMessageBody": "Повідомлення: {reportedMessage}\nПричина: {reason}", "noTeachersFound": "Вчителі не знайдені для повідомлення", - "viewArchive": "Переглянути архів", "trialExpiration": "Ваша безкоштовна пробна версія закінчується {expiration}", "freeTrialDesc": "Нові користувачі отримують тижневу безкоштовну пробну версію Pangea Chat", "activateTrial": "Безкоштовна 7-денна пробна версія", "successfullySubscribed": "Ви успішно підписалися!", "clickToManageSubscription": "Натисніть тут, щоб керувати підпискою.", - "errorGettingAudio": "Помилка при отриманні аудіо. Будь ласка, оновіть сторінку та спробуйте знову.", "signUp": "Зареєструватися", "pleaseChooseAtLeastChars": "Будь ласка, виберіть щонайменше {min} символів.", "noEmailWarning": "Будь ласка, введіть дійсну адресу електронної пошти. Інакше ви не зможете скинути пароль. Якщо не хочете цього робити, натисніть ще раз на кнопку, щоб продовжити.", "pleaseEnterValidEmail": "Будь ласка, введіть дійсну адресу електронної пошти.", "pleaseChooseAUsername": "Будь ласка, виберіть ім'я користувача", - "chooseAUsername": "Виберіть ім'я користувача", "define": "Визначити", "listen": "Слухати", - "addConversationBot": "Включить бота для беседы", - "addConversationBotDesc": "Добавить бота в этот чат", - "convoBotSettingsDescription": "Редактировать тему беседы и уровень сложности", - "enterAConversationTopic": "Введите тему беседы", - "conversationTopic": "Тема беседы", - "enableModeration": "Включить модерацию", - "enableModerationDesc": "Включить автоматическую модерацию для проверки сообщений перед отправкой", - "conversationLanguageLevel": "Какой уровень языка у этой беседы?", - "showDefinition": "Показать определение", - "subscriptionPopupTitle": "Это предложение может содержать грамматическую ошибку...", - "subscriptionPopupDesc": "Подпишитесь сегодня, чтобы разблокировать перевод и исправление грамматики!", - "seeOptions": "Посмотреть опции", - "continuedWithoutSubscription": "Продолжить без подписки", "trialPeriodExpired": "Ваш пробный период истёк", - "selectToDefine": "Нажмите на любое слово, чтобы увидеть его определение!", "translations": "переводы", "messageAudio": "аудио сообщения", "definitions": "определения", "subscribedToUnlockTools": "Подпишитесь, чтобы разблокировать интерактивный перевод, проверку грамматики, воспроизведение аудио, персонализированные упражнения и аналитические данные обучения!", "translationTooltip": "Перевести", - "audioTooltip": "Воспроизвести аудио", "speechToTextTooltip": "Транскрипция", - "certifyAge": "Я подтверждаю, что мне больше {age} лет", "kickBotWarning": "Удаление бота Pangea из чата удалит бота для беседы.", - "joinToView": "Присоединяйтесь к этой комнате, чтобы просмотреть детали", "refresh": "Обновить", - "autoPlayTitle": "Автоматическое воспроизведение сообщений", - "autoPlayDesc": "При включении текст-в-речь аудио сообщений будет воспроизводиться автоматически при выборе.", "messageAnalytics": "Аналитика сообщений", "words": "Слова", "score": "Очки", "accuracy": "Точность", "points": "Баллы", "noPaymentInfo": "Информация о платеже не требуется!", - "conversationBotModeSelectDescription": "Активность чата", - "conversationBotModeSelectOption_discussion": "Обсуждение", - "conversationBotModeSelectOption_custom": "Настраиваемый", - "conversationBotModeSelectOption_conversation": "Беседа", - "conversationBotModeSelectOption_textAdventure": "Текстовое приключение", - "conversationBotModeSelectOption_storyGame": "История игры", - "conversationBotDiscussionZone_title": "Настройки обсуждения", - "conversationBotDiscussionZone_discussionTopicLabel": "Тема обсуждения", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Установить тему обсуждения", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Ключевые слова для обсуждения", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Установить ключевые слова для обсуждения", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Список ключевых слов, разделённых запятыми, для направления обсуждения", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Отправлять напоминание о обсуждении по расписанию", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Часов между напоминаниями о обсуждении", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Ответ на реакцию ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Реакция для отправки напоминания о обсуждении", - "conversationBotCustomZone_title": "Настройки по умолчанию", - "conversationBotCustomZone_customSystemPromptLabel": "Системное сообщение", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Установить пользовательское системное сообщение", - "conversationBotCustomZone_customSystemPromptEmptyError": "Отсутствует пользовательское системное сообщение", - "botConfig": "Настройки бота и активности", - "botConfigNoPermissionTitle": "Нет разрешения", - "botConfigNoPermissionMessage": "Обратитесь к администратору комнаты для изменения настроек бота", - "addConversationBotDialogTitleInvite": "Подтвердите приглашение бота для обсуждения", - "addConversationBotButtonInvite": "Пригласить", - "addConversationBotDialogInviteConfirmation": "Пригласить", - "addConversationBotButtonTitleRemove": "Подтвердите удаление бота для беседы", - "addConversationBotButtonRemove": "Удалить", - "addConversationBotDialogRemoveConfirmation": "Удалить", - "conversationBotConfigConfirmChange": "Подтвердить", - "conversationBotStatus": "Пригласить бота", - "conversationBotTextAdventureZone_title": "Текстовое приключение", - "conversationBotTextAdventureZone_instructionLabel": "Инструкции для Мастера игры", - "conversationBotTextAdventureZone_instructionPlaceholder": "Установите инструкции для Мастера игры", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Отсутствуют инструкции для Мастера игры", - "studentAnalyticsNotAvailable": "Данные о студенте в настоящее время недоступны", - "roomDataMissing": "Некоторые данные могут отсутствовать в комнатах, в которых вы не состоите участником.", "updatePhoneOS": "Возможно, потребуется обновить версию ОС вашего устройства.", "wordsPerMinute": "Слова в минуту", "autoIGCToolName": "Автоматически запускать помощь в написании Pangea", "autoIGCToolDescription": "Автоматически запускать помощь в грамматике и переводе Pangea Chat перед отправкой моего сообщения.", - "runGrammarCorrection": "Проверить сообщение", - "grammarCorrectionFailed": "Проблемы для устранения", - "grammarCorrectionComplete": "Выглядит хорошо!", "tooltipInstructionsTitle": "Не уверены, что это делает?", "tooltipInstructionsMobileBody": "Нажмите и удерживайте элементы, чтобы просмотреть подсказки.", "tooltipInstructionsBrowserBody": "Наведите курсор на элементы, чтобы просмотреть подсказки.", "chatCapacity": "Вместимость чата", "roomFull": "Эта комната уже заполнена.", - "topicNotSet": "Тема не установлена.", - "chatCapacityNotSet": "В этом чате нет ограничения по вместимости.", "chatCapacityHasBeenChanged": "Вместимость чата изменена", "chatCapacitySetTooLow": "Вместимость чата должна быть не менее {count}.", "chatCapacityExplanation": "Ограничение вместимости чата ограничивает количество участников, допускаемых в чат.", - "chatExceedsCapacity": "Этот чат превышает свою вместимость.", "tooManyRequest": "Слишком много запросов, пожалуйста, попробуйте позже.", "enterNumber": "Пожалуйста, введите целое число.", "buildTranslation": "Создайте перевод из приведённых выше вариантов", - "nonexistentSelection": "Выбор больше не существует.", - "changeAnalyticsLanguage": "Изменить язык аналитики", "practice": "Практика", "noLanguagesSet": "Языки не установлены", - "noActivitiesFound": "Достаточно на сегодня! Вернитесь позже для продолжения.", - "hintTitle": "Подсказка:", "speechToTextBody": "Для голосовых сообщений вы можете видеть транскрипт, а также оценку скорости речи в словах в минуту.", "versionNotFound": "Версия не найдена", "fetchingVersion": "Получение версии...", "versionFetchError": "Ошибка при получении версии", "versionText": "Версия: {version}+{buildNumber}", - "languageButtonLabel": "Язык: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Автоматический перевод", - "interactiveTranslatorAutoPlayDesc": "Запускает интерактивный переводчик без запроса.", - "changeAnalyticsView": "Изменить представление аналитики", "l1TranslationBody": "Сообщения на вашем основном языке не будут переводиться.", "deleteSubscriptionWarningTitle": "У вас активная подписка", "deleteSubscriptionWarningBody": "Удаление аккаунта не отменяет автоматически вашу подписку.", @@ -4108,9 +3750,7 @@ "error520Title": "Пожалуйста, попробуйте снова.", "error520Desc": "Извините, мы не смогли понять ваше сообщение...", "wordsUsed": "Использованные слова", - "errorTypes": "Типы ошибок", "level": "Уровень", - "canceledSend": "Отмененная отправка", "morphsUsed": "Использованные морфы", "translationChoicesBody": "Нажмите и удерживайте вариант для подсказки.", "grammar": "Грамматика", @@ -4120,7 +3760,6 @@ "reportContentIssueTitle": "Сообщить о проблеме с содержимым", "feedback": "Дополнительные отзывы", "reportContentIssueDescription": "Упс! ИИ может способствовать персонализированному обучению, но... также может выдавать ложные сведения. Пожалуйста, предоставьте любые отзывы, и мы попробуем снова.", - "changeContent": "Упс! ИИ может способствовать персонализированному обучению, но... также может выдавать ложные сведения. Что это должно быть?", "clickTheWordAgainToDeselect": "Кликните по выбранному слову, чтобы отменить выбор.", "l2SupportNa": "Недоступно", "l2SupportAlpha": "Альфа", @@ -4354,7 +3993,6 @@ "grammarCopySPC": "Специфичность", "grammarCopyPARTTYPE": "Тип частичного", "grammarCopyINTREL": "Вопросительно-относительный", - "grammarCopyNUMFORMpsor": "Номер обладателя", "grammarCopyUNKNOWN": "Неизвестно", "grammarCopyNUMBERPSOR": "Номер обладателя", "grammarCopyPOSS": "Притяжательное", @@ -4400,28 +4038,14 @@ "grammarCopyVOICEdir": "Прямой", "grammarCopyVOICEinv": "Обратный", "grammarCopyVOICErcp": "Взаимный", - "enterPrompt": "Пожалуйста, введите системный запрос", - "selectBotLanguage": "Выберите язык бота", - "chooseVoice": "Выберите голос", - "enterLanguageLevel": "Пожалуйста, введите уровень языка", - "enterDiscussionTopic": "Пожалуйста, введите тему обсуждения", - "selectBotChatMode": "Выберите режим чата", - "messageNotInTargetLang": "Сообщение не на целевом языке", "other": "Другое", "levelShort": "УРОВЕНЬ {level}", - "botModeValidation": "Пожалуйста, выберите режим чата", "clickBestOption": "Выберите лучшие варианты для перевода вашего сообщения!", "completeActivitiesToUnlock": "Выполните хотя бы одно задание, чтобы разблокировать перевод!", - "botSettingsSubtitle": "Пригласите бота для модерирования активности чата", - "invitePeople": "Пригласить пользователей", "noCapacityLimit": "Нет ограничения по вместимости", "downloadGroupText": "Скачать текст группы", "notificationsOn": "Уведомления включены", "notificationsOff": "Уведомления выключены", - "chatCanBeFoundViaSearch": "Чат можно найти через поиск", - "requireCodeToJoin": "Требовать код для присоединения", - "canFindInSearch": "Можно найти в поиске", - "addChatToSpace": "Добавить чат", "createChatAndInviteUsers": "Создать чат и пригласить пользователей", "updatedNewSpaceDescription": "Курсы позволяют вам объединить ваши чаты и создавать частные или публичные сообщества.", "joinWithCode": "Присоединиться по коду", @@ -4457,39 +4081,19 @@ "constructUseCollected": "Thu thập trong trò chuyện", "constructUseNanDesc": "Không áp dụng được", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Đăng nhập bằng tên người dùng và mật khẩu", - "registrationEmailMessage": "Vui lòng xác minh email của bạn bằng liên kết được gửi đến đó. Trong một số trường hợp, email có thể mất tới 5 phút để đến. Vui lòng kiểm tra cả thư rác của bạn.", "enableTTSToolName": "Bật chuyển đổi văn bản thành giọng nói", "enableTTSToolDescription": "Cho phép ứng dụng tạo ra đầu ra chuyển đổi văn bản thành giọng nói cho các phần của văn bản bằng ngôn ngữ mục tiêu của bạn.", - "couldNotFindTTS": "Chúng tôi không thể tìm thấy engine chuyển đổi văn bản thành giọng nói cho ngôn ngữ mục tiêu hiện tại của bạn.", - "ttsInstructionsHyperlink": "Nhấp vào đây để xem hướng dẫn tải xuống một giọng nói mới trên thiết bị của bạn.", - "createAnAccount": "Tạo tài khoản", - "signIn": "Đăng nhập", - "signUpWithEmail": "Đăng ký bằng Email", - "signUpWithGoogle": "Đăng ký bằng Google", - "signUpWithApple": "Đăng ký bằng Apple", "yourUsername": "Tên người dùng của bạn", "yourEmail": "Email của bạn", - "pleaseEnterAnEmail": "Vui lòng nhập địa chỉ email", - "signInWithGoogle": "Đăng nhập bằng Google", - "signInWithApple": "Đăng nhập bằng Apple", - "chooseYourAvatar": "Chọn hình đại diện của bạn", "iWantToLearn": "Я хочу учиться", - "letsStart": "Давайте начнем", - "pleaseAgreeToTOS": "Пожалуйста, согласитесь с Условиями использования", "pleaseEnterEmail": "Пожалуйста, введите действительный адрес электронной почты.", - "pleaseSelectALanguage": "Пожалуйста, выберите язык", "myBaseLanguage": "Мой основной язык", - "clickWordsInstructions": "🧻 Нажмите на любое слово для получения деталей. 🤐", - "chooseBestDefinition": "Что означает это слово?", "meaningSectionHeader": "Значение:", "formSectionHeader": "Формы, используемые в чатах:", - "noEmojiSelectedTooltip": "Эмодзи не выбрано", "writingExercisesTooltip": "Письмо", "listeningExercisesTooltip": "Прослушивание", "readingExercisesTooltip": "Чтение", "meaningNotFound": "Значение не найдено.", - "formsNotFound": "Формы не найдены.", "chooseBaseForm": "Выберите базовую форму", "notTheCodeError": "Извините, это не код!", "totalXP": "Общий опыт", @@ -4529,9 +4133,6 @@ "pickAnEmoji": "Какое ваше любимое эмодзи для '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Соответствуйте значениям слова в сообщении!", "doubleClickToEdit": "Дважды щелкните, чтобы редактировать.", - "removeFeature": "Удалить {feature}", - "chooseCorrectLabel": "Выберите правильную метку.", - "levelPopupTitle": "Поздравляем с достижением\nУровня {level}", "activityPlannerTitle": "Планировщик мероприятий", "topicLabel": "Тема", "topicPlaceholder": "Выберите тему...", @@ -4539,7 +4140,6 @@ "modePlaceholder": "Выберите режим...", "learningObjectiveLabel": "Цель обучения", "learningObjectivePlaceholder": "Выберите цель обучения...", - "mediaLabel": "Медиа, которыми должны делиться учащиеся", "languageOfInstructionsLabel": "Язык инструкций по деятельности", "targetLanguageLabel": "Целевой язык", "cefrLevelLabel": "Уровень CEFR", @@ -4554,20 +4154,15 @@ "instructions": "Инструкции", "numberOfLearners": "Количество учащихся", "mustBeInteger": "Должно быть целым числом, например 1, 2, 3, ...", - "noLemmasFound": "В словаре нет слов с более чем {xp} XP. Продолжайте практиковаться!", "constructUsePvmDesc": "Произведено в голосовом сообщении", - "lockedMorphFeature": "Ожидает разблокировки", "leaveSpaceDescription": "Покидая курс, вы покидаете все чаты внутри него. Другие пользователи увидят, что вы покинули курс.", - "whatIsLemma": "Что такое лемма?", "constructUseCorMmDesc": "Правильное значение сообщения", "constructUseIncMmDesc": "Неправильное значение сообщения", "constructUseIgnMmDesc": "Игнорируемое значение сообщения", "clickForMeaningActivity": "Нажмите здесь для задания на значение", "meaning": "Значение", "chatWith": "Группа с {displayname}", - "slightlyOffensive": "Немного оскорбительно", "clickOnEmailLink": "Пожалуйста, перейдите по ссылке в письме и продолжите.\n\nПроверьте папку спам, если письмо не пришло.", - "whoIsAllowedToJoinThisChat": "Кто может присоединиться к этому чату", "dontForgetPassword": "Не забудьте свой пароль!", "enableAutocorrectToolName": "Включить автокоррект на устройстве", "enableAutocorrectDescription": "Если ваше устройство поддерживает язык, который вы изучаете, вы можете включить автокоррект для исправления распространенных ошибок во время набора текста.", @@ -4595,48 +4190,26 @@ "autocorrectNotAvailable": "К сожалению, эта платформа в настоящее время не поддерживается для этой функции. Следите за обновлениями!", "pleaseUpdateApp": "Пожалуйста, обновите приложение, чтобы продолжить.", "chooseEmojiInstructionsBody": "Совместите эмодзи с словами, которые они лучше всего представляют. Не волнуйтесь! За несогласие баллы не снимаются. 😅", - "pickAnEmojiFor": "Выберите эмодзи для {lemma}", "analyticsVocabListBody": "Это весь ваш словарный запас! По мере накопления опыта за каждое слово оно будет переходить от ростка к полному цветению. Нажмите на любое слово, чтобы увидеть больше деталей.", "morphAnalyticsListBody": "Это все грамматические концепции в изучаемом вами языке! Вы разблокируете их по мере их появления во время общения. Нажмите для деталей.", "knockSpaceSuccess": "Вы запросили присоединиться к этому курсу! Администратор ответит на ваш запрос, как только получит его 😊", - "joinByCode": "Присоединиться по коду", "chooseWordAudioInstructionsBody": "Прослушайте полное сообщение. Затем сопоставьте аудио с словами.", "chooseMorphsInstructionsBody": "Нажимайте на части головоломки для вопросов по грамматике!", - "inviteAndLaunch": "Пригласить и запустить", - "createOwnChat": "Создать свой чат", "pleaseEnterInt": "Пожалуйста, введите число", "home": "Главная", "join": "Присоединиться", "readingAssistanceOverviewBody": "Нажимайте на кнопки ниже для мини-игр по сопоставлению эмодзи, аудио, значений слов и грамматических концепций. Или нажмите на любое слово для деталей.", - "learnByTexting": "Учитесь, переписываясь", - "levelSummaryTrigger": "Посмотреть сводку", "levelSummaryPopupTitle": "Сводка уровня {level}", - "referFriends": "Пригласить друзей", - "referFriendDialogTitle": "Пригласите друга в ваш чат", - "referFriendDialogDesc": "Есть друг, который хочет учить новый язык вместе с вами? Тогда скопируйте и отправьте эту ссылку-приглашение, чтобы присоединиться и начать общение с вами сегодня.", - "youUnlocked": "Вы разблокировали", "resetInstructionTooltipsTitle": "Сбросить подсказки инструкций", "resetInstructionTooltipsDesc": "Нажмите, чтобы показать подсказки инструкций, как для нового пользователя.", "selectForGrammar": "Выберите значок грамматики для действий и деталей.", - "newChatActivityTitle": "Добавить забавное действие?", - "newChatActivityDesc": "Сделайте каждую групповую беседу приключением с Планировщиком действий! Установите захватывающие темы и цели для группы, оживите разговоры с помощью потрясающих изображений. Вдохновляйте на воображаемые обсуждения и поддерживайте веселье без усилий!", - "exploreMore": "Исследовать больше", "randomize": "Рандомизировать", "clear": "Очистить", "makeYourOwnActivity": "Создайте свое собственное действие", "featuredActivities": "Рекомендуемые", - "goToChat": "Перейти к чату", "save": "Сохранить", - "selectActivity": "Выберите действие", - "wordFocusListeningMultipleChoice": "Какой аудио соответствует слову?", "startChat": "Начать чат", "translationProblem": "Проблема с переводом", - "perfectTranslation": "Идеальный перевод!", - "greatJobTranslation": "Отличная работа с этим переводом!", - "goodJobTranslation": "Хорошая работа над этим переводом.", - "makingProgress": "Вы делаете прогресс!", - "keepPracticing": "Продолжайте практиковаться!", - "niceJob": "Отличная работа!", "askToJoin": "Попросить присоединиться", "emptyChatWarningTitle": "Чат пуст", "emptyChatWarningDesc": "Вы не пригласили никого в ваш чат. Перейдите в настройки чата, чтобы пригласить контакты или бота. Вы также можете сделать это позже.", @@ -4655,8 +4228,6 @@ "languageLevelC2Desc": "Я могу понять практически все услышанное или прочитанное и выражать себя свободно и точно.", "newVocab": "Новая лексика", "newGrammar": "Новые грамматические концепции", - "congratulationsOnReaching": "Вы достигли уровня {level}!", - "seeDetails": "Посмотреть детали", "choosePracticeMode": "Нажмите одну из кнопок выше, чтобы начать практическое занятие", "ban": "Забанить", "unban": "Разбанить", @@ -4670,8 +4241,6 @@ "timesUsedWithAssistance": "Использовано с помощью", "shareInviteCode": "Поделиться кодом приглашения: {code}", "leaderboard": "Таблица лидеров", - "welcomeUser": "Добро пожаловать, {user}", - "joinSpaceOnboardingDesc": "У вас есть код или ссылка на публичный курс?", "skipForNow": "Пропустить пока", "permissions": "Разрешения", "spaceChildPermission": "Кто может добавлять новые чаты в этот курс", @@ -4679,12 +4248,8 @@ "defaultOption": "По умолчанию", "deleteChatDesc": "Вы уверены, что хотите удалить этот чат? Он будет удален для всех участников, и все сообщения в чате больше не будут доступны для практики или аналитики обучения.", "deleteSpaceDesc": "Курс и все выбранные чаты будут удалены для всех участников, и все сообщения в чате больше не будут доступны для практики или аналитики обучения. Это действие нельзя отменить.", - "chatWithActivities": "Чат с активностями", "launch": "Запустить", - "launchActivityToChats": "Запустить активность в чаты", "searchChats": "Поиск чатов", - "selectChats": "Выбрать чаты", - "selectChatToStart": "Готово! Выберите чат для начала", "maxFifty": "Макс. 50", "configureSpace": "Настроить курс", "pinMessages": "Закрепить сообщения", @@ -4698,9 +4263,7 @@ "announcements": "Объявления", "activities": "Мероприятия", "access": "Доступ", - "botSettings": "Настройки бота", "activitySuggestionTimeoutMessage": "Мы усердно работаем над созданием новых мероприятий для вас, пожалуйста, проверьте снова через минуту", - "accessSettingsWarning": "Ой! Похоже, у вас нет разрешения на установку правил доступа к этой комнате. Вам следует проверить их, чтобы убедиться, что они соответствуют вашим потребностям, и обратиться к администратору комнаты, если нужно их изменить", "howSpaceCanBeFound": "Как можно найти этот курс", "private": "Частный", "cannotBeFoundInSearch": "Не может быть найден в поиске", @@ -4713,16 +4276,6 @@ "canBeFoundViaKnock": "• запрос на присоединение и одобрение администратора", "youHaveLeveledUp": "Вы повысили уровень!", "sendActivities": "Отправить мероприятия", - "getStarted": "Начать", - "getStartedBotChatDesc": "Общение с ИИ — отличное место для начала, а инструменты для чтения, письма, прослушивания и говорения в Pangea делают это легко!", - "getStartedCommunitiesDesc": "Обучение в сообществе — это то, где сияет Pangea Chat!\nВы можете присоединиться к своему классу, найти курс или даже создать свой собственный!", - "getStartedFriendsDesc": "У вас есть друг, который хочет учиться вместе с вами?", - "getStartedBotChatComplete": "Отлично! Вы общаетесь с ботом!", - "getStartedCommunitiesComplete": "Отлично, вы присоединились к курсу!", - "getStartedComplete": "Вы завершили этот раздел!\nПродолжайте исследовать наши удивительные функции, общаясь с друзьями!", - "getStartedFriendsComplete": "Ура! У вас есть друзья! 😎", - "getStartedBotChatButton": "Начать общение!", - "getStartedFriendsButton": "Поговорить с другом", "groupChat": "Групповой чат", "directMessage": "Личное сообщение", "newDirectMessage": "Новое личное сообщение", @@ -4738,7 +4291,6 @@ "mySavedActivities": "Мои сохранённые активности", "noSavedActivities": "Нет сохранённых активностей", "saveActivity": "Сохранить эту активность", - "yourSavedActivities": "Сохранённые активности", "failedToPlayVideo": "Не удалось воспроизвести видео", "done": "Готово", "inThisSpace": "На этом курсе", @@ -4777,37 +4329,27 @@ "maximumActivityParticipants": "Каждая активность может иметь максимум {count} участник(ов).", "pending": "В ожидании", "inactive": "Неактивно", - "unjoinedActivityMessage": "Хотите принять участие? Выберите открытую роль!\nИли просто посмотрите и насладитесь шоу!", - "fullActivityMessage": "Не стесняйтесь смотреть шоу! Пока нет открытых ролей для участия, вы можете просматривать чат!", "confirmRole": "Подтвердить роль", "openRoleLabel": "ОТКРЫТО", "joinedTheActivity": "👋 {username} присоединился как {role}", "finishedTheActivity": "🎯 {username} завершил эту активность", - "endActivityTitle": "Я закончил", - "endActivityDesc": "Вы выполнили цели?\nЭто ваше подтверждение, что вы уходите из чата. Но не волнуйтесь, веселье продолжается в чате! Не стесняйтесь оставаться и наслаждаться шоу, пока все не нажмут 'Готово'.", "archiveToAnalytics": "Добавить в мои завершённые активности", "activitySummaryError": "Сводки по активности недоступны", "requestSummaries": "Запросить сводки", - "loadingActivitySummary": "Загрузка сводки активности...", "generatingNewActivities": "Вы первый пользователь этой языковой пары! Пожалуйста, подождите минуту, мы готовим для вас активности.", - "requestAccessTitle": "Запросить доступ к просмотру аналитики?", + "requestAccessTitle": "Запросить доступ к аналитике?", "requestAccessDesc": "Хотите запросить доступ к просмотру аналитики участников?\n\nЕсли участники согласятся, администраторы этого курса смогут видеть:\n • общий словарный запас\n • общие грамматические концепции\n • общее количество завершённых сессий\n • конкретные грамматические концепции, использованные правильно и неправильно\n\nОни не смогут видеть:\n • сообщения в чатах вне курса\n • список словарных запасов", "requestAccess": "Запросить доступ ({count})", "analyticsInactiveTitle": "Запросы к неактивным пользователям не могут быть отправлены", "analyticsInactiveDesc": "Неактивные пользователи, которые не входили в систему с момента внедрения этой функции, не увидят вашу заявку.\n\nКнопка «Запрос» появится, когда они вернутся. Вы можете повторно отправить запрос позже, нажав кнопку «Запрос» под их именем, когда она станет доступна.", "accessRequestedTitle": "Запрос доступа к аналитике", - "accessRequestedDesc": "Администраторы “{space}” запрашивают доступ к просмотру вашей аналитики обучения.\n\nЕсли вы согласны, администраторы этого курса смогут просматривать:\n • общее количество словарного запаса\n • общее количество грамматических концепций\n • общее количество завершенных сессий активности\n • конкретные использованные грамматические концепции, правильно и неправильно\n\nОни не смогут просматривать:\n • сообщения в чатах за пределами курса\n • список словарных слов", - "allowAccess": "Разрешить доступ", - "denyAccess": "Запретить доступ", + "accessRequestedDesc": "Запрашивающие администраторы: {admin} \n\nАдминистраторы из “{space}” запрашивают доступ к вашим учебным аналитическим данным.\n\nЕсли вы согласны, они смогут видеть ваши:\n • общий словарный запас\n • общие грамматические концепции\n • общее количество завершенных сессий активности\n • конкретные грамматические концепции, использованные правильно и неправильно\n\nОни не смогут видеть ваши:\n • сообщения в чатах вне курса\n • список словарного запаса", "adminRequestedAccess": "Администраторы запросили доступ к вашей аналитике.", "lastUpdated": "Обновлено\n{time}", "activityFinishedMessage": "Все завершено!", "endForAll": "Завершить для всех", "newCourse": "Новый курс", - "newCourseSubtitle": "Какой план курса вы хотели бы использовать?", - "failedToLoadCourses": "Не удалось загрузить курсы", "numModules": "{num} модулей", - "numActivityPlans": "{num} планов деятельности", "coursePlan": "План курса", "editCourseLater": "Вы можете редактировать название шаблона, описания и изображение курса позже.", "newCourseAccess": "По умолчанию курсы являются приватными и требуют одобрения администратора для присоединения. Вы можете изменить эти настройки в любое время.", @@ -4821,17 +4363,11 @@ "accessDesc": "Вы можете сделать ваш курс открытым для всех! Или сделать его приватным и безопасным.", "createGroupChatDesc": "В то время как сессии активности начинаются и заканчиваются, групповые чаты останутся открытыми для регулярного общения.", "deleteDesc": "Только администраторы могут удалить курс. Это разрушительное действие, которое удаляет всех пользователей и удаляет все выбранные чаты внутри курса. Будьте осторожны.", - "failedToLoadCourseInfo": "Не удалось загрузить информацию о курсе", "noCourseFound": "О, этот курс нуждается в плане!\n\nПланы курса — это последовательность тем и разговорных активностей.", "additionalParticipants": "+ {num} других", - "activityNotFoundForCourse": "Эта активность не найдена в курсе", - "courseChats": "Чаты курса", - "myActivitySessions": "Мои сессии активности", "directMessages": "Личные сообщения", "whatNow": "Что дальше?", "chooseNextActivity": "Выберите следующую активность!", - "seeInstructions": "Посмотреть инструкции", - "hideInstructions": "Скрыть инструкции", "letsGo": "Поехали", "chooseRole": "Выберите роль!", "chooseRoleToParticipate": "Выберите роль для участия!", @@ -4841,23 +4377,15 @@ "inviteFriends": "Пригласить друзей", "waitNotDone": "Подожди, я еще не закончил!", "waitingForOthersToFinish": "Ожидание завершения остальных...", - "saveToCompletedActivities": "Сохранить в завершенные активности", "generatingSummary": "Анализ чата и генерация результатов", - "instructionsLanguage": "Язык инструкций", "findCourse": "Найти курс", - "activityCompletedDesc": "Ваш завершенный урок добавлен в аналитику, где вы можете просмотреть и практиковать использованный язык.", "pingParticipantsNotification": "{user} ищет участников для присоединения к сессии в {room}", "course": "Курс", "courses": "Курсы", "courseName": "Название курса", "createNewCourse": "Новый курс", - "publicCourses": "Публичные курсы", "goToCourse": "Перейти к курсу: {course}", "activityComplete": "Эта активность завершена. Обзор активности должен быть доступен ниже.", - "haventChattedMuch": "Похоже, вы не много общались, попробуйте использовать больше слов! Если вы чувствуете, что достигли своей цели, вы можете завершить активность ниже.", - "haveChatted": "Похоже, вы уже некоторое время общаетесь! Если вы чувствуете, что достигли своей цели, завершите, чтобы закончить активность, и мы сгенерируем для вас сводку в чате!", - "userDoneAndWaiting": "{num1}/{num2} участников завершили. Подождите, пока все закончат, и мы сгенерируем для вас сводку в чате!\n\nЕсли хотите присоединиться к разговору снова, нажмите кнопку продолжения в чате.", - "othersDoneAndWaiting": "{num1}/{num2} завершили. Вы достигли своей цели?", "startNewSession": "Начать новую сессию", "joinOpenSession": "Присоединиться к открытому сеансу", "less": "меньше", @@ -4867,7 +4395,6 @@ "openToJoin": "Открыто для присоединения", "results": "Результаты", "activityDone": "Активность завершена!", - "moreLabel": "больше", "promoCodeInfo": "Промокоды можно ввести на следующей странице", "editsComingSoon": "Вскоре появится возможность редактировать города и активности.", "editing": "Редактирование", @@ -4883,13 +4410,10 @@ "courseSavedSuccessfully": "Курс софранился соответство", "addCoursePlan": "Добавить план курса", "activityStatsButtonInstruction": "Нажмите закатовок, чтобы проверить статистику вашей детальности и закрути курс концем", - "readingAnalyticsDesc": "Нажимайте практику на кожном сообщении для обыкновенную детальность.", - "speakingAnalyticsDesc": "Записывайте ковозновую обобовую повесь для практики говорения.", - "audioAnalyticsDesc": "Нажимайте практику на кождом сообщении для обыкновенную нашительность.", "loginToAccount": "войти в мой установки", "appDescription": "Совседанно наступайте человеческий язык,например, в котором написате друзям.", "languages": "Конфедерации", - "chooseLanguage": "Выберите человеческий язык.", + "chooseLanguage": "Выберите целевой язык.", "planTrip": "Планите поездку", "howAreYouTraveling": "Как вы проезжаете?", "unlockPrivateTrip": "Обекращиваете свой событие", @@ -4902,25 +4426,20 @@ "courseCode": "Какой секретный пароль?", "courseCodeHint": "Код или ссылка на поездку", "unlockMyTrip": "Разблокировать мою поездку", - "anyLevel": "Любой уровень", "signupOption": "Как вы хотите зарегистрироваться?", "withApple": "Через Apple", "withGoogle": "Через Google", "withEmail": "Через Email", "createAccount": "Создать аккаунт", - "noCoursesFound": "Курсы не найдены", "loginWithEmail": "Войти через email", "usernameOrEmail": "Имя пользователя или email", "email": "Email", "forgotPassword": "Забыли пароль?", - "writingAnalyticsDesc": "Отправляйте сообщения для практики письма.", "endActivity": "Завершить деятельность", "allLanguages": "Все языки", - "allCefrLevels": "Все уровни CEFR", "chatListTooltip": "Здесь вы найдете свои личные сообщения! Нажмите на аватар любого пользователя и выберите «начать разговор», чтобы отправить личное сообщение.", "directMessageBotTitle": "Личное сообщение Pangea Bot", "feedbackTitle": "Обратная связь по активности", - "feedbackDesc": "Как можно улучшить активность? Если вы можете предоставить детали, мы внесем изменения!", "feedbackHint": "Ваш отзыв", "feedbackButton": "Отправить отзыв", "directMessageBotDesc": "Общение с людьми — веселее, но... ИИ всегда готов!", @@ -5110,30 +4629,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5149,18 +4644,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5185,18 +4668,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5233,38 +4704,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5273,62 +4716,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5365,10 +4764,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5377,14 +4772,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5393,46 +4780,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5441,10 +4792,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5501,18 +4848,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5521,14 +4856,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5557,18 +4884,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5577,42 +4892,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5621,14 +4904,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5649,26 +4924,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5689,10 +4944,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5725,25 +4976,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5800,34 +5032,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5856,778 +5060,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7620,14 +6056,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7639,14 +6067,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7678,10 +6098,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7690,18 +6106,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7710,14 +6114,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7742,38 +6138,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7819,10 +6187,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7847,10 +6211,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7875,10 +6235,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7887,66 +6243,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7967,42 +6267,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8027,154 +6303,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8191,18 +6319,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8223,14 +6339,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8247,10 +6355,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8263,14 +6367,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8279,14 +6375,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8314,26 +6402,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8362,18 +6430,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8410,10 +6470,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9346,10 +7402,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9530,34 +7582,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9570,10 +7594,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9582,14 +7602,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9606,22 +7618,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9769,14 +7765,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9785,34 +7773,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9821,54 +7781,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9877,10 +7801,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9897,10 +7817,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10072,26 +7988,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10120,10 +8016,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10180,30 +8072,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10232,18 +8108,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10360,14 +8228,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10380,10 +8240,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10392,14 +8248,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10416,14 +8264,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10432,22 +8272,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10460,18 +8284,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10488,22 +8300,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10512,30 +8312,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10608,18 +8384,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10676,18 +8440,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10716,30 +8468,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10792,18 +8528,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10852,46 +8580,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10956,10 +8644,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11131,14 +8815,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11166,14 +8842,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11186,10 +8854,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11225,19 +8889,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11262,14 +8921,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11278,14 +8929,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11338,10 +8981,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11354,18 +8993,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11378,14 +9005,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11426,26 +9045,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11473,10 +9080,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11487,36 +9090,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11553,10 +9126,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11621,18 +9190,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11697,10 +9254,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11721,10 +9274,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11741,10 +9290,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11753,10 +9298,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11769,10 +9310,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11797,16 +9334,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Пригласить друзей на мероприятие", - "inviteFriendsToActivityCourse": "Пригласить друзей на мероприятие и курс", "feedbackRespDesc": "Проверьте завтра обновления по мероприятию.", "activityDropdownDesc": "Когда закончите с этим мероприятием, нажмите ниже", - "activityAnalyticsListBody": "Это ваши завершённые мероприятия! После завершения мероприятий вы можете просмотреть их здесь.", "languageMismatchTitle": "Несовпадение языка", "languageMismatchDesc": "Ваш целевой язык не совпадает с языком этого мероприятия. Обновить ваш целевой язык?", "reportWordIssueTooltip": "Сообщить о проблеме с информацией о слове", "tokenInfoFeedbackDialogTitle": "Обратная связь по информации о слове", - "tokenInfoFeedbackDialogDesc": "Искусственный интеллект допускает ошибки. Пожалуйста, опишите любые проблемы, которые вы обнаружили в информации выше.", "noPublicCoursesFound": "Публичные курсы не найдены. Хотите создать один?", "noCourseTemplatesFound": "Мы не смогли найти курсы для вашего целевого языка. Пока вы можете пообщаться с Pangea Bot и проверить позже наличие новых курсов.", "botActivityJoinFailMessage": "Pangea Bot отвечает долго. Пожалуйста, попробуйте позже или пригласите друга.", @@ -11814,14 +9347,6 @@ "leaveDesc": "Покинуть это пространство и все чаты внутри него", "selectAll": "Выбрать все", "deselectAll": "Снять выделение со всего", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11830,10 +9355,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11850,10 +9371,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11887,7 +9404,6 @@ "newMessageInPangeaChat": "🗨️ Новое сообщение в чате Pangea", "shareCourse": "Поделиться курсом", "addCourse": "Добавить курс", - "joinCourseWithCode": "Присоединиться к курсу по коду", "joinPublicCourse": "Присоединиться к публичному курсу", "vocabLevelsDesc": "Здесь появятся слова словаря, как только вы их повысите!", "highlightVocabTooltip": "Выделите целевые слова словаря ниже, отправив их или практикуя с ними в чате", @@ -11911,10 +9427,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11923,7 +9435,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Нет личных сообщений или чатов. Убедитесь, что ваш запрос написан правильно.", + "activityAnalyticsTooltipBody": "Это ваши сохраненные активности для обзора и практики.", + "numSavedActivities": "Количество сохраненных активностей", + "saveActivityTitle": "Сохранить активность", + "saveActivityDesc": "Хорошая работа! Сохраните эту активность для дальнейшего обзора и практики", + "levelInfoTooltip": "Здесь вы можете увидеть все очки, которые вы заработали, и как!", + "alreadyInCourseWithID": "Вы уже находитесь в курсе с этим планом. Хотите создать курс с тем же планом или перейти к существующему курсу?", + "goToExistingCourse": "Перейти к существующему курсу", + "emojiView": "Просмотр эмодзи", + "feedbackDialogDesc": "Я тоже совершаю ошибки! Есть что-то, что поможет мне улучшиться?", + "contactHasBeenInvitedToTheCourse": "Контакт был приглашен на курс", + "activityStatsButtonTooltip": "Информация о деятельности", + "allow": "Разрешить", + "deny": "Запретить", + "enabledRenewal": "Включить автоматическое продление подписки", + "subscriptionEndsOn": "Подписка заканчивается", + "subscriptionRenewsOn": "Подписка продлевается", + "waitForSubscriptionChanges": "Изменения вашей подписки могут занять некоторое время, чтобы отобразиться в приложении.", + "subscribeReadingAssistance": "Подпишитесь, чтобы разблокировать инструменты сообщений", + "aceDisplayName": "Achinese", + "achDisplayName": "Аколи", + "afDisplayName": "Африкаанс", + "akDisplayName": "Акан", + "alzDisplayName": "Алур", + "amDisplayName": "Амхарский", + "arDisplayName": "Арабский", + "asDisplayName": "Ассамский", + "awaDisplayName": "Авади", + "ayDisplayName": "Аймара", + "azDisplayName": "Азербайджанский", + "baDisplayName": "Башкирский", + "banDisplayName": "Балийский", + "bbcDisplayName": "Батака Тоба", + "beDisplayName": "Белорусский", + "bemDisplayName": "Бемба", + "bewDisplayName": "Бетави", + "bgDisplayName": "Болгарский", + "bhoDisplayName": "Бходжпури", + "bikDisplayName": "Бикол", + "bmDisplayName": "Бамбару", + "bnDisplayName": "Бенгальский", + "bnBDDisplayName": "Бенгальский (Бангладеш)", + "bnINDisplayName": "Бенгальский (Индия)", + "brDisplayName": "Бретонский", + "bsDisplayName": "Боснийский", + "btsDisplayName": "Батака Сималунгун", + "btxDisplayName": "Батака Каро", + "buaDisplayName": "Бурятский", + "caDisplayName": "Каталонский", + "cebDisplayName": "Себуанский", + "cggDisplayName": "Чига", + "chmDisplayName": "Мари", + "ckbDisplayName": "Центральный курдский", + "cnhDisplayName": "Хакха Чин", + "coDisplayName": "Корсиканский", + "crhDisplayName": "Крымскотатарский", + "crsDisplayName": "Сесelwa креольский французский", + "csDisplayName": "Чешский", + "cvDisplayName": "Чувашский", + "cyDisplayName": "Уэльсский", + "daDisplayName": "Датский", + "deDisplayName": "Немецкий", + "dinDisplayName": "Динка", + "doiDisplayName": "Догри", + "dovDisplayName": "Домбе", + "dzDisplayName": "Дзонгкха", + "eeDisplayName": "Эве", + "enDisplayName": "Английский", + "enAUDisplayName": "Английский (Австралия)", + "enGBDisplayName": "Английский (Великобритания)", + "enINDisplayName": "Английский (Индия)", + "enUSDisplayName": "Английский (США)", + "eoDisplayName": "Эсперанто", + "esDisplayName": "Испанский", + "esESDisplayName": "Испанский (Испания)", + "esMXDisplayName": "Испанский (Мексика)", + "euDisplayName": "Баскский", + "faDisplayName": "Персидский", + "ffDisplayName": "Фула", + "fiDisplayName": "Финский", + "filDisplayName": "Филиппинский", + "fjDisplayName": "Фиджийский", + "foDisplayName": "Фарерский", + "frDisplayName": "Французский", + "frCADisplayName": "Французский (Канада)", + "frFRDisplayName": "Французский (Франция)", + "fyDisplayName": "Западнофризский", + "gaDisplayName": "Ирландский", + "gaaDisplayName": "Га", + "gdDisplayName": "Шотландский гэльский", + "glDisplayName": "Галисийский", + "gnDisplayName": "Гуарани", + "gomDisplayName": "Гоа-конкани", + "guDisplayName": "Гуджарати", + "haDisplayName": "Хауса", + "hawDisplayName": "Гавайский", + "heDisplayName": "Иврит", + "hiDisplayName": "Хинди", + "hilDisplayName": "Хилигайнон", + "hmnDisplayName": "Хмонг", + "hneDisplayName": "Чхаттисгархи", + "hrDisplayName": "Хорватский", + "hrxDisplayName": "Хунсрик", + "htDisplayName": "Гаитянский креольский", + "huDisplayName": "Венгерский", + "hyDisplayName": "Армянский", + "idDisplayName": "Индонезийский", + "igDisplayName": "Игбо", + "iloDisplayName": "Илокано", + "isDisplayName": "Исландский", + "itDisplayName": "Итальянский", + "jaDisplayName": "Японский", + "jvDisplayName": "Яванский", + "kaDisplayName": "Грузинский", + "kkDisplayName": "Казахский", + "kmDisplayName": "Кхмерский", + "knDisplayName": "Каннада", + "koDisplayName": "Корейский", + "kokDisplayName": "Конкани", + "kriDisplayName": "Крио", + "ksDisplayName": "Кашмири", + "ktuDisplayName": "Китуба (Демократическая Республика Конго)", + "kuDisplayName": "Курдский", + "kyDisplayName": "Кыргызский", + "laDisplayName": "Латинский", + "lbDisplayName": "Люксембургский", + "lgDisplayName": "Ганда", + "liDisplayName": "Лимбургский", + "lijDisplayName": "Лигурийский", + "lmoDisplayName": "Ломбардский", + "lnDisplayName": "Лингала", + "loDisplayName": "Лао", + "ltDisplayName": "Литовский", + "ltgDisplayName": "Латгальский", + "luoDisplayName": "Луо (Кения и Танзания)", + "lusDisplayName": "Мизо", + "lvDisplayName": "Латышский", + "maiDisplayName": "Майтхили", + "makDisplayName": "Макасар", + "mgDisplayName": "Малагасийский", + "miDisplayName": "Маори", + "minDisplayName": "Минангкабау", + "mkDisplayName": "Македонский", + "mlDisplayName": "Малаялам", + "mnDisplayName": "Монгольский", + "mniDisplayName": "Манипури", + "mrDisplayName": "Маратхи", + "msDisplayName": "Малайский", + "msArabDisplayName": "Малайский (арабский)", + "msMYDisplayName": "Малайский (Малайзия)", + "mtDisplayName": "Мальтийский", + "mwrDisplayName": "Марвари", + "myDisplayName": "Бирманский", + "nanDisplayName": "Минь Нань", + "nbDisplayName": "Норвежский (Бокмол)", + "neDisplayName": "Непальский", + "newDisplayName": "Невари", + "nlDisplayName": "Нидерландский", + "nlBEDisplayName": "Фламандский", + "noDisplayName": "Норвежский", + "nrDisplayName": "Южный Ндебеле", + "nsoDisplayName": "Северный Сото", + "nusDisplayName": "Нуэр", + "nyDisplayName": "Ньянджа", + "ocDisplayName": "Окситан", + "omDisplayName": "Оромо", + "orDisplayName": "Одиа", + "paDisplayName": "Панджаби", + "paArabDisplayName": "Панджаби (Шахмукхи)", + "paINDisplayName": "Панджаби (Гурмукхи)", + "pagDisplayName": "Пангасинан", + "pamDisplayName": "Пампанга", + "papDisplayName": "Папиаменто", + "plDisplayName": "Польский", + "psDisplayName": "Пушту", + "ptDisplayName": "Португальский", + "ptBRDisplayName": "Португальский (Бразилия)", + "ptPTDisplayName": "Португальский (Португалия)", + "quDisplayName": "Кечуа", + "rajDisplayName": "Раджастхани", + "rnDisplayName": "Рунди", + "roDisplayName": "Румынский", + "roMDDisplayName": "Молдавский", + "romDisplayName": "Ромский", + "ruDisplayName": "Русский", + "rwDisplayName": "Киньярванда", + "saDisplayName": "Санскрит", + "satDisplayName": "Сантали", + "scnDisplayName": "Сицилийский", + "sdDisplayName": "Синдхи", + "sgDisplayName": "Санго", + "shnDisplayName": "Шан", + "siDisplayName": "Сингальский", + "skDisplayName": "Словацкий", + "slDisplayName": "Словенский", + "smDisplayName": "Самоанский", + "snDisplayName": "Шона", + "soDisplayName": "Сомали", + "sqDisplayName": "Албанский", + "srDisplayName": "Сербский", + "srMEDisplayName": "Черногорский", + "ssDisplayName": "Свати", + "stDisplayName": "Южносото", + "suDisplayName": "Сунданский", + "svDisplayName": "Шведский", + "swDisplayName": "Суахили", + "szlDisplayName": "Силезский", + "taDisplayName": "Тамильский", + "teDisplayName": "Телугу", + "tetDisplayName": "Тетум", + "tgDisplayName": "Таджикский", + "thDisplayName": "Тайский", + "tiDisplayName": "Тигринья", + "tkDisplayName": "Туркменский", + "tlDisplayName": "Тагалог", + "tnDisplayName": "Тсвана", + "trDisplayName": "Турецкий", + "tsDisplayName": "Тсонга", + "ttDisplayName": "Татарский", + "ugDisplayName": "Уйгурский", + "ukDisplayName": "Украинский", + "urDisplayName": "Урду", + "urINDisplayName": "Урду (Индия)", + "urPKDisplayName": "Урду (Пакистан)", + "uzDisplayName": "Узбекский", + "viDisplayName": "Вьетнамский", + "wuuDisplayName": "У", + "xhDisplayName": "Ксоса", + "yiDisplayName": "Идиш", + "yoDisplayName": "Йоруба", + "yuaDisplayName": "Юкатекский", + "yueDisplayName": "Кантонский", + "yueCNDisplayName": "Кантонский (Китай)", + "yueHKDisplayName": "Кантонский (Гонконг)", + "zhDisplayName": "Китайский", + "zhCNDisplayName": "Китайский (упрощенный)", + "zhTWDisplayName": "Китайский (традиционный)", + "zuDisplayName": "Зулу", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11990,6 +10688,7 @@ "notStartedActivitiesTitle": "Открытые сессии ({num})", "inProgressActivitiesTitle": "Происходит сейчас ({num})", "completedActivitiesTitle": "Завершено ({num})", + "pickDifferentActivity": "Выберите другую активность", "inOngoingActivity": "У вас есть текущая активность!", "@notStartedActivitiesTitle": { "type": "String", @@ -12015,10 +10714,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ваш целевой язык не соответствует этому сообщению. Обновить ваш целевой язык?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Это все участники этого курса. Нажмите на аватар любого пользователя и выберите «начать разговор», чтобы отправить личное сообщение.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Это слово будет навсегда удалено из вашей аналитики", + "woman": "Женщина", + "man": "Мужчина", + "otherGender": "Другое", + "unselectedGender": "Выберите вариант пола", + "gender": "Пол", + "chatParticipantTooltip": "Это все участники этого чата. Нажмите на аватар любого пользователя и выберите «начать разговор», чтобы отправить личное сообщение.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Инструменты обучения отключены для сообщений, которые не на вашем целевом языке.", + "vocabEmoji": "Эмодзи словарного запаса", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Запросить регенерацию", + "optionalRegenerateReason": "(Необязательно) Причина", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Вы установили эмодзи для {lemma}! Мы будем использовать этот эмодзи для представления слова в практических заданиях в будущем.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Ожидание завершения входа", + "ssoDialogDesc": "Мы открыли новую вкладку, чтобы вы могли безопасно войти.", + "ssoDialogHelpText": "🤔 Если вы не видите новую вкладку, пожалуйста, проверьте блокировщик всплывающих окон.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Отключить языковые инструменты", + "disableLanguageToolsDesc": "Вы хотите отключить автоматическую языковую помощь?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Доступ запрещен. Включите разрешения на запись, чтобы записывать аудиосообщения.", + "genericWebRecordingError": "Что-то пошло не так. Мы рекомендуем использовать браузер Chrome для записи сообщений.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Для наилучшего использования этого приложения, пожалуйста, увеличьте размер экрана.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Деятельности для разблокировки следующей темы", "activitiesToUnlockTopicDesc": "Установите количество действий для разблокировки следующей темы курса", "@activitiesToUnlockTopicTitle": { @@ -12028,5 +10845,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Правильная практика определения слов", + "constructUseIncLMDesc": "Неправильная практика определения слов", + "constructUseCorLADesc": "Правильная практика аудио слов", + "constructUseIncLADesc": "Неправильная практика аудио слов", + "constructUseBonus": "Бонус во время практики слов", + "practiceVocab": "Практика словарного запаса", + "selectMeaning": "Выберите значение", + "selectAudio": "Выберите соответствующее аудио", + "congratulations": "Поздравляем!", + "anotherRound": "Еще один раунд", + "noActivityRequest": "Нет текущего запроса на активность.", + "quit": "Выйти", + "congratulationsYouveCompletedPractice": "Поздравляем! Вы завершили практическую сессию.", + "mustHave10Words": "Вы должны иметь как минимум 10 слов для практики. Попробуйте поговорить с другом или Pangea Bot, чтобы узнать больше!", + "botSettings": "Настройки бота", + "activitySettingsOverrideWarning": "Язык и уровень языка определяются планом активности", + "voice": "Голос", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index a98d2798e..ab85fb852 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -1,6 +1,6 @@ { "@@locale": "sk", - "@@last_modified": "2026-01-06 13:01:15.636781", + "@@last_modified": "2026-01-07 14:24:18.684168", "about": "O aplikácii", "@about": { "type": "String", @@ -2001,26 +2001,14 @@ "commandHint_logoutall": "Odhlásiť zo všetkých aktívnych zariadení", "displayNavigationRail": "Zobraziť navigačný panel na mobile", "customReaction": "Vlastná reakcia", - "accountInformation": "Informácie o účte", - "addGroupDescription": "Pridať popis chatu", - "addNewFriend": "Pridať nového priateľa", - "alreadyHaveAnAccount": "Už máte účet?", - "createNewGroup": "Vytvoriť nový chat", - "editChatPermissions": "Upraviť oprávnenia chatu", "writeAMessageLangCodes": "Napíšte v {l1} alebo {l2}...", "requests": "Žiadosti", - "allCorrect": "Takto by som to povedal! Super!", - "newWayAllGood": "Takto by som to nepovedal, ale vyzerá to dobre!", - "othersAreBetter": "Hm, môže byť lepší spôsob, ako to povedať.", "holdForInfo": "Kliknite a podržte pre informácie o slove.", "greenFeedback": "To je to, čo by som dal!", "yellowFeedback": "Hm, môžete to vyskúšať a zistiť, či to funguje! Ak chcete použiť toto slovo, jednoducho naň opäť kliknite.", "redFeedback": "Nemyslím si, že je to správne...", "itInstructionsTitle": "Môžem vám pomôcť s prekladom!", "itInstructionsBody": "Môžete kliknúť a podržať voľby pre informácie o slove.", - "oneday": "Posledných 24 hodín", - "oneweek": "Posledných 7 dní", - "onemonth": "Minulý mesiac", "gaTooltip": "L2 použitie s gramatickou asistenciou", "taTooltip": "L2 použitie s prekladateľskou asistenciou", "unTooltip": "Iné", @@ -2030,58 +2018,27 @@ "interactiveTranslatorAllowed": "Voľba študenta", "interactiveTranslatorRequired": "Požadované", "notYetSet": "Ešte nie je nastavené", - "myLearning": "Moje analýzy", "waTooltip": "L2 použitie bez asistencie", - "changeDateRange": "Zmeniť rozsah dátumu", - "classDescription": "Popis", - "addStudents": "Pozvať používateľov odkazom alebo kódom", - "copyClassLink": "Skopírovať odkaz na pozvanie", - "copyClassCode": "Skopírovať kód pozvania", - "inviteStudentByUserName": "Pozvať používateľov podľa používateľského mena", "languageSettings": "Nastavenia jazyka", "interactiveTranslator": "Pomocník pre preklad", - "shareVideo": "Zdieľať video", - "shareVideoDesc": "Zapnite túto možnosť, aby mohli študenti zdieľať videá v chatoch.", - "shareFiles": "Zdieľať súbory", - "selectLanguageLevel": "Vybrať úroveň jazyka", "noIdenticalLanguages": "Vyberte, prosím, odlišné základné a cieľové jazyky", - "iWantALanguagePartnerFrom": "Je z:", - "worldWide": "Celosvetovo", - "noResults": "Žiadne výsledky! Skúste rozšíriť vyhľadávanie.", "searchBy": "Hľadať podľa krajiny a jazykov", - "iWantAConversationPartner": "Chcem konverzačného partnera, ktorý", - "iWantALanguagePartnerWhoSpeaks": "Hovorí:", - "iWantALanguagePartnerWhoIsLearning": "Učí sa:", "joinWithClassCode": "Pripojiť sa ku kurzu", - "joinWithClassCodeHint": "Zadajte kód pozvania", - "languageLevelPreA1": "Úplný začiatočník (Pre A1)", - "languageLevelA1": "Začiatočník (A1)", - "languageLevelA2": "Elementárny (A2)", - "languageLevelB1": "Stredne pokročilý (B1)", - "languageLevelB2": "Vyšší stredne pokročilý (B2)", - "languageLevelC1": "Pokročilý (C1)", - "languageLevelC2": "Majstrovstvo (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Nováčik Stred (A1)", + "languageLevelA2": "Začiatočník Vysoký (A2)", + "languageLevelB1": "Stredne Pokročilý Stredný (B1)", + "languageLevelB2": "Pokročilý Nízky (B2)", + "languageLevelC1": "Pokročilý Stredný (C1)", + "languageLevelC2": "Nadpriemerný (C2)", "changeTheNameOfTheClass": "Zmeniť názov", "changeTheNameOfTheChat": "Zmeniť názov chatu", - "askPangeaBot": "Požiadať Pangea Bota o kontextovú definíciu.", "sorryNoResults": "Prepáčte, žiadne výsledky.", "ignoreInThisText": "Ignorovať", - "helpMeTranslate": "Áno!", - "needsItShortMessage": "Mimo cieľa", "needsItMessage": "Počkaj, to nie je {targetLanguage}! Potrebuješ pomoc s prekladom?", - "needsIgcMessage": "Táto správa má gramatickú chybu.", - "tokenTranslationTitle": "Slovo je vo vašom základnom jazyku.", - "spanTranslationDesc": "Pozrite si možné preklady nižšie.", - "spanTranslationTitle": "Niektoré slová sú vo vašom základnom jazyku.", - "l1SpanAndGrammarTitle": "Mimo cieľového jazyka", - "l1SpanAndGrammarDesc": "Toto môže byť vo vašom základnom jazyku alebo ide o gramatickú chybu.", - "otherTitle": "Máte chybu.", - "otherDesc": "Pozrite si možné opravy nižšie.", "countryInformation": "Moja krajina", - "myLanguages": "Moje základné a cieľové jazyky", "targetLanguage": "Cieľový jazyk", "sourceLanguage": "Základný jazyk", - "languagesISpeak": "Jazyky, ktorými hovorím", "updateLanguage": "Moje jazyky", "whatLanguageYouWantToLearn": "Aký jazyk sa chcete naučiť?", "whatIsYourBaseLanguage": "Aký je váš základný jazyk?", @@ -2096,13 +2053,8 @@ "errorDisableLanguageAssistanceUserDesc": "Kliknite sem na aktualizáciu nastavení pomoci s prekladom a gramatikou", "errorDisableITClassDesc": "Prekladová pomoc je vypnutá pre kurz, v ktorom sa nachádza tento chat.", "errorDisableIGCClassDesc": "Pomoc s gramatikou je vypnutá pre kurz, v ktorom sa nachádza tento chat.", - "itIsDisabled": "Interaktívny preklad je vypnutý", - "igcIsDisabled": "Interaktívne kontrolovanie gramatiky je vypnuté", - "goToLearningSettings": "Prejsť na Nastavenia učenia", "error405Title": "Jazyky nie sú nastavené", "error405Desc": "Prosím, nastavte si svoje jazyky v Hlavnom menu > Nastavenia učenia.", - "loginOrSignup": "Prihlásiť sa pomocou", - "iAgreeToThe": "Súhlasím s", "termsAndConditions": "Podmienkami a podmienkami", "andCertifyIAmAtLeast13YearsOfAge": " a potvrdzujem, že mám najmenej 16 rokov.", "error502504Title": "Wow, je online veľa študentov!", @@ -2110,40 +2062,21 @@ "error404Title": "Chyba prekladu!", "error404Desc": "Pangea Bot si nie je istý, ako to preložiť...", "errorPleaseRefresh": "Pozeráme sa na to! Prosím, načítajte stránku znova a skúste to znova.", - "toggleIT": "Interaktívny preklad", - "toggleIGC": "Interaktívne kontrolovanie gramatiky", - "toggleToolSettingsDescription": "Tu môžete prepínať nastavenia svojho individuálneho jazykového nástroja.", "connectedToStaging": "Pripojené k Stagingu", "learningSettings": "Nastavenia učenia", - "sendVoiceNotes": "Odoslať hlasové poznámky", - "sendVoiceNotesDesc": "Zapnite túto možnosť, aby mohli študenti posielať hlasové poznámky v chatoch.", - "chatTopic": "Téma chatu", - "chatTopicDesc": "Nastavte tému chatu", - "inviteStudentByUserNameDesc": "Ak má váš študent už účet, môžete ho vyhľadať.", "participants": "Účastníci", - "almostPerfect": "Zdá sa, že je to správne! Tu je, čo by som povedal.", - "prettyGood": "Celkom dobre! Tu je, čo by som povedal.", - "letMeThink": "Hmm, poďme zistiť, ako si to urobil!", "clickMessageTitle": "Potrebujete pomoc?", "clickMessageBody": "Kliknite na správu pre jazykové nástroje ako preklad, prehrávanie a ďalšie!", - "understandingMessagesTitle": "Definície a preklady!", - "understandingMessagesBody": "Kliknite na podčiarknuté slová pre definície. Preložte pomocou možností správy (v pravom hornom rohu).", "allDone": "Všetko hotovo!", "vocab": "Slovná zásoba", "low": "Máme dôkazy, že používateľ tieto slová nepozná.", "medium": "Tieto slová boli použité. Nie je jasné, či sú slová úplne pochopené alebo nie.", "high": "Máme dôkazy, že používateľ tieto slová rozumie.", - "unknownProficiency": "Tieto slová neboli použité v Pangea Chate.", - "changeView": "Prepnúť pohľady.", - "clearAll": "Vymazať všetky slová?", - "generateVocabulary": "Vygenerovať slovnú zásobu z názvu a popisu", - "generatePrompts": "Vygenerovať výzvy", "subscribe": "Odberať", "getAccess": "Odoberať teraz!", "subscriptionDesc": "Správa je zadarmo! Odberom odomknete interaktívny preklad, kontrolu gramatiky a analytiku učenia.", "subscriptionManagement": "Správa odberu", "currentSubscription": "Aktuálny odber", - "changeSubscription": "Zmeniť odber", "cancelSubscription": "Zrušiť odber", "selectYourPlan": "Vyberte si svoj plán", "subsciptionPlatformTooltip": "Prihláste sa do svojho pôvodného zariadenia, aby ste mohli spravovať svoj plán odberu", @@ -2152,9 +2085,6 @@ "paymentHistory": "História platieb", "emptyChatDownloadWarning": "Nie je možné stiahnuť prázdny chat", "update": "Aktualizovať", - "updateDesc": "Teraz môžete aktualizovať túto aplikáciu z {localVersion} na {storeVersion}", - "maybeLater": "Možno neskôr", - "mainMenu": "Hlavné menu", "toggleImmersionMode": "Režim ponorenia", "toggleImmersionModeDesc": "Keď je aktivovaný, všetky správy sa zobrazujú v cieľovom jazyku. Táto možnosť je najviac užitočná pri jazykových výmenách.", "itToggleDescription": "Tento nástroj na učenie sa jazykov identifikuje slová vo vašom základnom jazyku a pomáha vám ich preložiť do cieľového jazyka. Hoci je to zriedkavé, AI môže urobiť prekladové chyby.", @@ -2169,212 +2099,13 @@ "definitionsToolDescription": "Keď je aktivované, slová podčiarknuté modrou farbou je možné kliknúť pre definície. Kliknite na správy pre prístup k definíciám.", "translationsToolDescrption": "Keď je aktivované, kliknite na správu a na ikonu prekladu, aby ste videli správu vo vašom základnom jazyku.", "welcomeBack": "Vitajte späť! Ak ste boli súčasťou pilotného projektu 2023-2024, kontaktujte nás pre vašu špeciálnu pilotnú predplatnú službu. Ak ste učiteľ, ktorý zakúpil (alebo vaša inštitúcia zakúpila) licencie pre vašu triedu, kontaktujte nás pre vašu učiteľskú predplatnú službu.", - "kickAllStudents": "Vyhodiť všetkých študentov", - "kickAllStudentsConfirmation": "Ste si istí, že chcete vyhodiť všetkých študentov?", - "inviteAllStudents": "Pozvať všetkých študentov", - "inviteAllStudentsConfirmation": "Ste si istí, že chcete pozvať všetkých študentov?", - "inviteUsersFromPangea": "Pridať správcov", - "redeemPromoCode": "Uplatniť promo kód", - "enterPromoCode": "Zadajte promo kód", "downloadTxtFile": "Stiahnuť textový súbor", "downloadCSVFile": "Stiahnuť CSV súbor", "promotionalSubscriptionDesc": "Momentálne máte doživotnú propagačnú predplatnú službu. Kontaktujte support@pangea.chat pre pomoc s zmenou predplatného.", "originalSubscriptionPlatform": "Predplatné zakúpené cez {purchasePlatform}", "oneWeekTrial": "Jedno týždňová skúšobná verzia", "downloadXLSXFile": "Stiahnuť Excel súbor", - "abDisplayName": "Abcházsky", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albánčina", - "amDisplayName": "Amharčina", - "arDisplayName": "Arabčina", - "anDisplayName": "Aragónčina", - "hyDisplayName": "Arménčina", - "asDisplayName": "Assámsky", - "avDisplayName": "Avarčina", - "aeDisplayName": "Avestan", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbajčanský", - "bmDisplayName": "Bambara", - "baDisplayName": "Baškirský", - "euDisplayName": "Basque", - "beDisplayName": "Bieloruský", - "bnDisplayName": "Bengálsky", - "bhDisplayName": "Bihársky", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniansky", - "brDisplayName": "Bretonsky", - "bgDisplayName": "Bulharský", - "myDisplayName": "Barmanský", - "caDisplayName": "Katalánsky, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Čečenský", - "nyDisplayName": "Čichewa, Chewa, Nyanja", - "zhDisplayName": "Čínsky", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Kornský", - "coDisplayName": "Korsický", - "crDisplayName": "Kreí", - "hrDisplayName": "Chorvátsky", - "csDisplayName": "Český", - "daDisplayName": "Dánsky", - "dvDisplayName": "Divehi; Dhivehi; Maldivský;", - "nlDisplayName": "Holandský", - "enDisplayName": "Anglický", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estónsky", - "eeDisplayName": "Ewe", - "foDisplayName": "Faerský", - "fjDisplayName": "Fijian", - "fiDisplayName": "Fínsky", - "frDisplayName": "Francúzsky", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galícijský", - "kaDisplayName": "Gruzínska", - "deDisplayName": "Nemecký", - "elDisplayName": "Grécky, moderný", - "gnDisplayName": "Guaraní", - "guDisplayName": "Gudžarati", - "htDisplayName": "Haitská, haitská kreolčina", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrejčina (moderná)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindčina", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Maďarčina", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonézština", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Írčina", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandčina", - "itDisplayName": "Taliančina", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japončina", - "jvDisplayName": "Javanský", - "klDisplayName": "Kalaallisut, grónsky", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmírsky", - "kkDisplayName": "Kazašský", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizský, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Kórejský", - "kuDisplayName": "Kurdský", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxemburčtina, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburčtina, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laoský", - "ltDisplayName": "Litovský", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Lotyšský", - "gvDisplayName": "Manx", - "mkDisplayName": "Macedónsky", - "mgDisplayName": "Madagaskarský", - "msDisplayName": "Malajský", - "mlDisplayName": "Malajálam", - "mtDisplayName": "Maltský", - "miDisplayName": "Maorijský", - "mrDisplayName": "Maráthský (Marāṭhī)", - "mhDisplayName": "Marshallovský", - "mnDisplayName": "Mongolský", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Nórsky Bokmål", - "ndDisplayName": "Sever Ndebele", - "neDisplayName": "Nepálsky", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norwegian Nynorsk", - "noDisplayName": "Nórsky", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Južný Ndebele", - "ocDisplayName": "Okcitánčina", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Staroslovienčina, Cirkvi Slovančina, Cirkvi Slovančina, Starobulharčina, Staroslovienčina", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Osetski, Osetski jazyk", - "paDisplayName": "Pandžabčina, Pandžabský", - "piDisplayName": "Páli", - "faDisplayName": "Perzština", - "plDisplayName": "Poľština", - "psDisplayName": "Paštunčina, Pushto", - "ptDisplayName": "Portugalčina", - "quDisplayName": "Kečuánčina", - "rmDisplayName": "Rumunčina", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumunčina, Moldavčina, Moldovská", - "ruDisplayName": "Ruština", - "saDisplayName": "Sanskrit (Saštštá)", - "scDisplayName": "Sardínsky", - "sdDisplayName": "Sindhi", - "seDisplayName": "Severný sami", - "smDisplayName": "Samoančina", - "sgDisplayName": "Sango", - "srDisplayName": "Srbochorvátčina", - "gdDisplayName": "Škótska gaelská, gaelský", - "snDisplayName": "Šona", - "siDisplayName": "Sinhálčina, sinhálsky", - "skDisplayName": "Slovenčina", - "slDisplayName": "Slovinsky", - "soDisplayName": "Somálčina", - "stDisplayName": "Južná Sotho", - "esDisplayName": "Španielčina", - "suDisplayName": "Sundánčina", - "swDisplayName": "Swahilčina", - "ssDisplayName": "Swati", - "svDisplayName": "Švédčina", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžičtina", - "thDisplayName": "Thajčina", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibetčina, štandardná, centrálny dialekt", - "tkDisplayName": "Turkménčina", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga ostrovy)", - "trDisplayName": "Turečtina", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatarčina", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitčina", - "ugDisplayName": "Ujgurský, ujgurský jazyk", - "ukDisplayName": "Ukrajinčina", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbečtina", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamčina", - "voDisplayName": "Volapük", - "waDisplayName": "Valónčina", - "cyDisplayName": "Walesčina", - "woDisplayName": "Wolof", - "fyDisplayName": "Západná frízština", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Jorubčina", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Neznámy", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havajčina", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Viacnásobný", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrejčina", - "jwDisplayName": "Javánčina", - "moDisplayName": "Moldavčina", - "shDisplayName": "Srbochorvátsky", "wwCountryDisplayName": "Celosvetovo", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Alandské ostrovy", @@ -2622,41 +2353,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Platiť", - "allPrivateChats": "Priame správy", - "unknownPrivateChat": "Neznáma súkromná správa", + "pay": "Checkout", "invitedToSpace": "{user} vás pozval na kurz: {space}! Chcete prijať?", - "declinedInvitation": "Odmietnuté pozvanie", - "acceptedInvitation": "Prijaté pozvanie", "youreInvited": "📩 Ste pozvaní!", "invitedToChat": "{user} vás pozval do rozhovoru: {name}! Chcete prijať?", "monthlySubscription": "Mesačne", "yearlySubscription": "Ročne", "defaultSubscription": "Pangea Chat Predplatné", "freeTrial": "Bezplatná skúška", - "grammarAnalytics": "Analýza chýb", "total": "Celkom: ", "noDataFound": "Nenašli sa žiadne údaje", - "promoSubscriptionExpirationDesc": "Vaša aktuálna predplatná je propagačná a vyprší dňa {expiration}. Kontaktujte support@pangea.chat pre pomoc s zmenou predplatného.", - "emptyChatNameWarning": "Zadajte názov tohto chatu", "blurMeansTranslateTitle": "Prečo je správa rozmazaná?", "blurMeansTranslateBody": "Keď je zapnutý režim ponorenia, správy odoslané v vašom základnom jazyku budú rozmazané, zatiaľ čo Pangea Bot ich preloží do vášho cieľového jazyka. Režim ponorenia je možné prepínať v nastaveniach jednotlivých kurzov a chatov.", - "someErrorTitle": "Hm, niečo nie je v poriadku", - "someErrorBody": "Môže ísť o chybu alebo niečo vo vašom základnom jazyku.", "bestCorrectionFeedback": "To je správne!", "distractorFeedback": "To nie je úplne správne.", "bestAnswerFeedback": "To je správne!", "definitionDefaultPrompt": "Čo znamená toto slovo?", "practiceDefaultPrompt": "Aká je najlepšia odpoveď?", "correctionDefaultPrompt": "Aká je najlepšia náhrada?", - "itStartDefaultPrompt": "Chcete pomoc s prekladom?", - "lockedChatWarning": "🔒 Tento chat bol zamknutý", - "lockChat": "Zamknúť chat", - "suggestToChat": "Navrhnúť tento chat", - "suggestToChatDesc": "Navrhnuté chaty sa zobrazia v zoznamoch chatov", "acceptSelection": "Prijať opravu", - "acceptSelectionAnyway": "Použiť to tak či tak", - "makingActivity": "Vykonávanie aktivity", "why": "Prečo?", "definition": "Definícia", "exampleSentence": "Príklad vety", @@ -2664,128 +2379,55 @@ "reportMessageTitle": "{reportingUserId} nahlásil správu od {reportedUserId} v chate {roomName}", "reportMessageBody": "Správa: {reportedMessage}\nDôvod: {reason}", "noTeachersFound": "Nenašli sa žiadni učitelia na nahlásenie", - "viewArchive": "Zobraziť archív", "trialExpiration": "Váš bezplatný skúšobný čas vyprší dňa {expiration}", "freeTrialDesc": "Noví používatelia dostanú týždennú bezplatnú skúšobnú verziu Pangea Chat", "activateTrial": "Bezplatná 7-dňová skúšobná verzia", "successfullySubscribed": "Úspešne ste sa prihlásili!", "clickToManageSubscription": "Kliknite sem na správu svojho predplatného.", - "errorGettingAudio": "Chyba pri získavaní zvuku. Obnovte stránku a skúste znova.", "signUp": "Zaregistrovať sa", "pleaseChooseAtLeastChars": "Vyberte aspoň {min} znakov.", "noEmailWarning": "Zadajte platnú e-mailovú adresu. Inak nebudete môcť resetovať svoje heslo. Ak nechcete, opäť kliknite na tlačidlo na pokračovanie.", "pleaseEnterValidEmail": "Zadajte platnú e-mailovú adresu.", "pleaseChooseAUsername": "Vyberte si používateľské meno", - "chooseAUsername": "Vybrať používateľské meno", "define": "Definovať", "listen": "Počúvať", - "addConversationBot": "Povoliť konverzačného bota", - "addConversationBotDesc": "Pridať bota do tohto chatu", - "convoBotSettingsDescription": "Upraviť tému konverzácie a úroveň obtiažnosti", - "enterAConversationTopic": "Zadajte tému konverzácie", - "conversationTopic": "Téma konverzácie", - "enableModeration": "Povoliť moderovanie", - "enableModerationDesc": "Povoliť automatické moderovanie na kontrolu správ pred ich odoslaním", - "conversationLanguageLevel": "Aká je úroveň jazyka tejto konverzácie?", - "showDefinition": "Zobraziť definíciu", - "subscriptionPopupTitle": "Táto veta môže obsahovať gramatickú chybu...", - "subscriptionPopupDesc": "Prihláste sa dnes a odomknite preklad a opravu gramatiky!", - "seeOptions": "Zobraziť možnosti", - "continuedWithoutSubscription": "Pokračovať bez predplatného", "trialPeriodExpired": "Váš skúšobný čas vypršal", - "selectToDefine": "Kliknite na akékoľvek slovo, aby ste videli jeho definíciu!", "translations": "preklady", "messageAudio": "zvuk správy", "definitions": "definície", "subscribedToUnlockTools": "Odoberať na odomknutie interaktívneho prekladu a kontroly gramatiky, prehrávania zvuku, personalizovaných cvičení a analytiky učenia!", "translationTooltip": "Preložiť", - "audioTooltip": "Prehrať zvuk", "speechToTextTooltip": "Prepis", - "certifyAge": "Potvrdením, že mám viac ako {age} rokov", "kickBotWarning": "Vyhodenie Pangea Bota odstráni konverzačného bota z tohto chatu.", - "joinToView": "Pripojte sa do tejto miestnosti, aby ste si mohli prezrieť podrobnosti", "refresh": "Obnoviť", - "autoPlayTitle": "Automatické prehrávanie správ", - "autoPlayDesc": "Keď je povolené, textovo-hlasové prehrávanie správ sa bude automaticky prehrávať pri výbere.", "messageAnalytics": "Analytika správ", "words": "Slová", "score": "Skóre", "accuracy": "Presnosť", "points": "Body", "noPaymentInfo": "Nie sú potrebné žiadne platobné údaje!", - "conversationBotModeSelectDescription": "Aktivita chatu", - "conversationBotModeSelectOption_discussion": "Diskusia", - "conversationBotModeSelectOption_custom": "Vlastné", - "conversationBotModeSelectOption_conversation": "Konverzácia", - "conversationBotModeSelectOption_textAdventure": "Textové dobrodružstvo", - "conversationBotModeSelectOption_storyGame": "Príbehová hra", - "conversationBotDiscussionZone_title": "Nastavenia diskusie", - "conversationBotDiscussionZone_discussionTopicLabel": "Téma diskusie", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Nastavte tému diskusie", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Kľúčové slová diskusie", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Nastavte kľúčové slová diskusie", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Zoznam kľúčových slov oddelených čiarkou na vedenie diskusie", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Odoslať výzvu na diskusiu podľa plánu", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Hodiny medzi výzvami na diskusiu", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Reaguje na reakciu ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakcia na odoslanie výzvy na diskusiu", - "conversationBotCustomZone_title": "Vlastné nastavenia", - "conversationBotCustomZone_customSystemPromptLabel": "Systémová výzva", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Nastavte vlastnú systémovú výzvu", - "conversationBotCustomZone_customSystemPromptEmptyError": "Chýba vlastná systémová výzva", - "botConfig": "Nastavenia bota a aktivity", - "botConfigNoPermissionTitle": "Žiadne povolenie", - "botConfigNoPermissionMessage": "Kontaktujte správcu miestnosti, aby zmenil konfiguráciu bota", - "addConversationBotDialogTitleInvite": "Potvrďte pozvanie konverzačného bota", - "addConversationBotButtonInvite": "Pozvať", - "addConversationBotDialogInviteConfirmation": "Pozvať", - "addConversationBotButtonTitleRemove": "Potvrďte odstránenie konverzačného bota", - "addConversationBotButtonRemove": "Odstrániť", - "addConversationBotDialogRemoveConfirmation": "Odstrániť", - "conversationBotConfigConfirmChange": "Potvrdiť", - "conversationBotStatus": "Pozvať bota", - "conversationBotTextAdventureZone_title": "Textové dobrodružstvo", - "conversationBotTextAdventureZone_instructionLabel": "Inštrukcie majstra hry", - "conversationBotTextAdventureZone_instructionPlaceholder": "Nastavte inštrukcie majstra hry", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Chýbajú inštrukcie majstra hry", - "studentAnalyticsNotAvailable": "Dáta študenta momentálne nie sú dostupné", - "roomDataMissing": "Niektoré údaje môžu chýbať z miestností, ku ktorým nemáte prístup", "updatePhoneOS": "Možno budete musieť aktualizovať verziu operačného systému zariadenia", "wordsPerMinute": "Slová za minútu", "autoIGCToolName": "Automaticky spustiť pomoc pri písaní Pangea", "autoIGCToolDescription": "Automaticky spustiť gramatickú kontrolu a preklad pomocníka Pangea Chat pred odoslaním správy.", - "runGrammarCorrection": "Skontrolovať správu", - "grammarCorrectionFailed": "Problémy na vyriešenie", - "grammarCorrectionComplete": "Vyzerá dobre!", "tooltipInstructionsTitle": "Neviete, čo to robí?", "tooltipInstructionsMobileBody": "Stlačte a podržte položky na zobrazenie návodov.", "tooltipInstructionsBrowserBody": "Nájdite myšou nad položkami na zobrazenie návodov.", "chatCapacity": "Kapacita chatu", "roomFull": "Táto miestnosť je už plná.", - "topicNotSet": "Téma nebola nastavená.", - "chatCapacityNotSet": "Tento chat nemá stanovené obmedzenie kapacity.", "chatCapacityHasBeenChanged": "Kapacita chatu bola zmenená", "chatCapacitySetTooLow": "Kapacita chatu musí byť najmenej {count}.", "chatCapacityExplanation": "Kapacita chatu obmedzuje počet členov, ktorí môžu byť v chate.", - "chatExceedsCapacity": "Tento chat prekračuje svoju kapacitu.", "tooManyRequest": "Príliš veľa požiadaviek, skúste to neskôr.", "enterNumber": "Zadajte celé číslo.", "buildTranslation": "Vytvorte svoj preklad z možností vyššie", - "nonexistentSelection": "Výber už neexistuje.", - "changeAnalyticsLanguage": "Zmeniť jazyk analytiky", "practice": "Cvičiť", "noLanguagesSet": "Nastavené žiadne jazyky", - "noActivitiesFound": "Na teraz toho stačilo! Vráťte sa neskôr pre viac.", - "hintTitle": "Nápoveda:", "speechToTextBody": "Pre hlasové správy môžete vidieť prepis, ako aj skóre Rýchlosti slov za minútu od hovoriaceho.", "versionNotFound": "Verzia nenájdená", "fetchingVersion": "Načítavanie verzie...", "versionFetchError": "Chyba pri načítavaní verzie", "versionText": "Verzia: {version}+{buildNumber}", - "languageButtonLabel": "Jazyk: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatické prehrávanie prekladu", - "interactiveTranslatorAutoPlayDesc": "Spustí interaktívny prekladač bez otázky.", - "changeAnalyticsView": "Zmeniť pohľad na analytiku", "l1TranslationBody": "Správy v vašom základnom jazyku nebudú prekladané.", "deleteSubscriptionWarningTitle": "Máte aktívne predplatné", "deleteSubscriptionWarningBody": "Vymazanie vášho účtu automaticky nezruší vaše predplatné.", @@ -2793,9 +2435,7 @@ "error520Title": "Prosím, skúste to znova.", "error520Desc": "Prepáčte, nerozumeli sme vašej správe...", "wordsUsed": "Použité slová", - "errorTypes": "Typy chýb", "level": "Úroveň", - "canceledSend": "Odoslanie zrušené", "morphsUsed": "Použité morfémy", "translationChoicesBody": "Kliknite a podržte možnosť pre nápovedu.", "grammar": "Gramatika", @@ -2805,7 +2445,6 @@ "reportContentIssueTitle": "Nahlásiť problém s obsahom", "feedback": "Voliteľná spätná väzba", "reportContentIssueDescription": "Ups! AI môže uľahčiť personalizované vzdelávacie zážitky, ale... tiež halucinuje. Prosím, poskytnite akúkoľvek spätnú väzbu a pokúsime sa to znova.", - "changeContent": "Ups! AI môže uľahčiť personalizované vzdelávacie zážitky, ale... tiež halucinuje. Čo by to malo byť?", "clickTheWordAgainToDeselect": "Kliknite na vybrané slovo, aby ste ho odznačili.", "l2SupportNa": "Nedostupné", "l2SupportAlpha": "Alpha", @@ -3039,7 +2678,6 @@ "grammarCopySPC": "Špecifikácia", "grammarCopyPARTTYPE": "Typ partitivity", "grammarCopyINTREL": "Otázka-vzťah", - "grammarCopyNUMFORMpsor": "Číslo vlastníka", "grammarCopyUNKNOWN": "Neznáme", "grammarCopyNUMBERPSOR": "Číslo vlastníka", "grammarCopyPOSS": "Príslušnosť", @@ -3085,28 +2723,14 @@ "grammarCopyVOICEdir": "Priamy", "grammarCopyVOICEinv": "Inverzný", "grammarCopyVOICErcp": "Recipročný", - "enterPrompt": "Zadajte systémový príkaz", - "selectBotLanguage": "Vyberte jazyk bota", - "chooseVoice": "Vyberte hlas", - "enterLanguageLevel": "Zadajte úroveň jazyka", - "enterDiscussionTopic": "Zadajte tému diskusie", - "selectBotChatMode": "Vyberte režim chatu", - "messageNotInTargetLang": "Správa nie je v cieľovom jazyku", "other": "Iné", "levelShort": "ÚROVEŇ {level}", - "botModeValidation": "Prosím, vyberte režim chatu", "clickBestOption": "Vyberte najlepšie možnosti na preklad vašej správy!", "completeActivitiesToUnlock": "Dokončite aspoň jednu aktivitu na odomknutie prekladu!", - "botSettingsSubtitle": "Pozvať bota na moderovanie aktivity chatu", - "invitePeople": "Pozvať používateľov", "noCapacityLimit": "Žiadne obmedzenie kapacity", "downloadGroupText": "Stiahnuť text skupiny", "notificationsOn": "Oznámenia zapnuté", "notificationsOff": "Oznámenia vypnuté", - "chatCanBeFoundViaSearch": "Chat je možné nájsť cez vyhľadávanie", - "requireCodeToJoin": "Vyžaduje sa kód na pripojenie", - "canFindInSearch": "Môže sa nájsť vo vyhľadávaní", - "addChatToSpace": "Pridať chat do priestoru", "createChatAndInviteUsers": "Vytvoriť chat a pozvať používateľov", "updatedNewSpaceDescription": "Kurzy vám umožňujú konsolidovať vaše chaty a budovať súkromné alebo verejné komunity.", "joinWithCode": "Pripojiť sa s kódom", @@ -3142,39 +2766,19 @@ "constructUseCollected": "Zbierka v chate", "constructUseNanDesc": "Nepoužiteľné", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Prihlásiť sa pomocou používateľského mena a hesla", - "registrationEmailMessage": "Overte svoj e-mail pomocou odkazu, ktorý vám bol zaslaný. V niektorých prípadoch môže doručenie e-mailu trvať až 5 minút. Skontrolujte tiež priečinok nevyžiadanej pošty.", "enableTTSToolName": "Povolené text-to-speech", "enableTTSToolDescription": "Povoľte aplikácii generovať výstup text-to-speech pre časti textu vo vašom cieľovom jazyku.", - "couldNotFindTTS": "Nemohli sme nájsť engine text-to-speech pre váš aktuálny cieľový jazyk.", - "ttsInstructionsHyperlink": "Kliknite sem pre zobrazenie pokynov na stiahnutie nového hlasu na vašom zariadení.", - "createAnAccount": "Vytvoriť účet", - "signIn": "Prihlásiť sa", - "signUpWithEmail": "Zaregistrovať sa pomocou e-mailu", - "signUpWithGoogle": "Zaregistrovať sa pomocou Google", - "signUpWithApple": "Zaregistrovať sa pomocou Apple", "yourUsername": "Vaše používateľské meno", "yourEmail": "Váš e-mail", - "pleaseEnterAnEmail": "Zadajte e-mailovú adresu", - "signInWithGoogle": "Prihlásiť sa pomocou Google", - "signInWithApple": "Prihlásiť sa pomocou Apple", - "chooseYourAvatar": "Vyberte si svoj avatar", "iWantToLearn": "Chcem sa naučiť", - "letsStart": "Poďme začať", - "pleaseAgreeToTOS": "Prosím, súhlaste s Podmienkami používania", "pleaseEnterEmail": "Zadajte platnú e-mailovú adresu.", - "pleaseSelectALanguage": "Vyberte jazyk", "myBaseLanguage": "Môj základný jazyk", - "clickWordsInstructions": "🧻 Kliknite na akékoľvek slovo pre podrobnosti. 🤐", - "chooseBestDefinition": "Čo znamená toto slovo?", "meaningSectionHeader": "Význam:", "formSectionHeader": "Formy používané v chatoch:", - "noEmojiSelectedTooltip": "Žiadna emoji nebola vybraná", "writingExercisesTooltip": "Písanie", "listeningExercisesTooltip": "Počúvanie", "readingExercisesTooltip": "Čítanie", "meaningNotFound": "Význam sa nepodarilo nájsť.", - "formsNotFound": "Formulá nebolo možné nájsť.", "chooseBaseForm": "Vyberte základnú formu", "notTheCodeError": "Prepáčte, to nie je kód!", "totalXP": "Celkové XP", @@ -3214,9 +2818,6 @@ "pickAnEmoji": "Aká je tvoja obľúbená emoji pre '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Zhodujte významy so slovami v správe!", "doubleClickToEdit": "Dvojitým kliknutím upravíte.", - "removeFeature": "Odstrániť {feature}", - "chooseCorrectLabel": "Vyberte správnu značku.", - "levelPopupTitle": "Gratulujeme k dosiahnutiu\núrovne {level}", "activityPlannerTitle": "Plánovač aktivít", "topicLabel": "Téma", "topicPlaceholder": "Vyberte tému...", @@ -3224,7 +2825,6 @@ "modePlaceholder": "Vyberte režim...", "learningObjectiveLabel": "Cieľ učenia", "learningObjectivePlaceholder": "Vyberte cieľ učenia...", - "mediaLabel": "Médiá, ktoré by sa mali zdieľať", "languageOfInstructionsLabel": "Jazyk pokynov k aktivite", "targetLanguageLabel": "Cieľový jazyk", "cefrLevelLabel": "Úroveň CEFR", @@ -3239,20 +2839,15 @@ "instructions": "Inštrukcie", "numberOfLearners": "Počet študentov", "mustBeInteger": "Musí byť celé číslo, napr. 1, 2, 3, ...", - "noLemmasFound": "Nenašli sa žiadne slovné zásoby s viac ako {xp} XP. Pokračujte v cvičení!", "constructUsePvmDesc": "Vytvorené vo zvukovej správe", - "lockedMorphFeature": "Čaká na odomknutie", "leaveSpaceDescription": "Opustením kurzu opustíte všetky chaty v ňom. Ostatní používatelia uvidia, že ste opustili kurz.", - "whatIsLemma": "Čo je lemma?", "constructUseCorMmDesc": "Správny význam správy", "constructUseIncMmDesc": "Nesprávny význam správy", "constructUseIgnMmDesc": "Ignorovaný význam správy", "clickForMeaningActivity": "Kliknite sem pre Výzvu k významu", "meaning": "Význam", "chatWith": "Skupina s {displayname}", - "slightlyOffensive": "Mierne urážlivé", "clickOnEmailLink": "Kliknite na odkaz v e-maile a pokračujte.\n\nSkontrolujte priečinok so spamom, ak e-mail neprišiel.", - "whoIsAllowedToJoinThisChat": "Kto má povolenie pripojiť sa k tomuto chatu", "dontForgetPassword": "Nezabudnite si zapamätať heslo!", "enableAutocorrectToolName": "Povoliť automatickú korekciu zariadenia", "enableAutocorrectDescription": "Ak vaše zariadenie podporuje jazyk, ktorý sa učíte, môžete povoliť automatickú korekciu zariadenia na opravu bežných chýb pri písaní.", @@ -3280,48 +2875,26 @@ "autocorrectNotAvailable": "Bohužiaľ, vaša platforma momentálne nepodporuje túto funkciu. Sledujte ďalší vývoj!", "pleaseUpdateApp": "Prosím, aktualizujte aplikáciu, aby ste mohli pokračovať.", "chooseEmojiInstructionsBody": "Zodpovedajte emodži slovami, ktoré najlepšie reprezentujú. Nebojte sa! Za nesúhlas nebudú odpočítané body. 😅", - "pickAnEmojiFor": "Vyberte emodži pre {lemma}", "analyticsVocabListBody": "Toto je všetka vaša slovná zásoba! Ako získavate XP za každé slovo, prejdú od semienka po plný kvitnúci strom. Kliknite na akékoľvek slovo pre viac detailov.", "morphAnalyticsListBody": "Toto sú všetky gramatické koncepty v jazyku, ktorý sa učíte! Odblokujú sa, keď ich počas rozhovoru stretnete. Kliknite pre detaily.", "knockSpaceSuccess": "Požiadali ste o pripojenie k tomuto kurzu! Administrátor vám odpovie, keď to obdrží 😀", - "joinByCode": "Pripojiť sa pomocou kódu", "chooseWordAudioInstructionsBody": "Počúvajte úplnú správu. Potom zodpovedajte audia slovami.", "chooseMorphsInstructionsBody": "Kliknite na puzzle kúsky pre gramatické otázky!", - "inviteAndLaunch": "Pozvať a spustiť", - "createOwnChat": "Vytvorte vlastný chat", "pleaseEnterInt": "Prosím, zadajte číslo", "home": "Domov", "join": "Pripojiť sa", "readingAssistanceOverviewBody": "Kliknite na tlačidlá nižšie pre mini-hry na zodpovedanie emodži, audia, významov slov a gramatických konceptov. Alebo kliknite na akékoľvek slovo pre viac detailov.", - "learnByTexting": "Učte sa písaním správ", - "levelSummaryTrigger": "Zobraziť prehľad", "levelSummaryPopupTitle": "Prehľad úrovne {level}", - "referFriends": "Odporučte priateľov", - "referFriendDialogTitle": "Pozvite priateľa do vašej konverzácie", - "referFriendDialogDesc": "Máte priateľa, ktorý je nadšený z učenia sa nového jazyka s vami? Skopírujte a pošlite tento odkaz na pozvanie, aby sa mohol pridať a začať s vami chatovať ešte dnes.", - "youUnlocked": "Odomkli ste", "resetInstructionTooltipsTitle": "Obnoviť návody na inštrukcie", "resetInstructionTooltipsDesc": "Kliknite pre zobrazenie návodov na inštrukcie ako pre úplného nováčika.", "selectForGrammar": "Vyberte ikonu gramatiky pre aktivity a detaily.", - "newChatActivityTitle": "Pridať zábavnú aktivitu?", - "newChatActivityDesc": "Urobte z každého skupinového chatu dobrodružstvo s Plánovačom aktivít! Nastavte pútavé témy a ciele pre skupinu a oživte konverzácie úžasnými obrázkami. Podnecujte tvorivé diskusie a nechajte zábavu plynúť bez námahy!", - "exploreMore": "Preskúmať viac", "randomize": "Náhodne", "clear": "Vyčistiť", "makeYourOwnActivity": "Vytvorte vlastnú aktivitu", "featuredActivities": "Odporúčané", - "goToChat": "Prejsť na chat", "save": "Uložiť", - "selectActivity": "Vybrať aktivitu", - "wordFocusListeningMultipleChoice": "Ktoré audio zodpovedá slovu?", "startChat": "Začať rozhovor", "translationProblem": "Problém s prekladom", - "perfectTranslation": "Perfektný preklad!", - "greatJobTranslation": "Výborná práca s týmto prekladom!", - "goodJobTranslation": "Dobrá práca na tomto preklade.", - "makingProgress": "Robíš pokrok!", - "keepPracticing": "Pokračuj v cvičení!", - "niceJob": "Dobrá práca!", "askToJoin": "Požiadať o pripojenie", "emptyChatWarningTitle": "Chat je prázdny", "emptyChatWarningDesc": "Nepozvali ste nikoho do svojho chatu. Prejdite do nastavení chatu a pozvite svojich kontaktov alebo bota. Môžete to urobiť aj neskôr.", @@ -3340,8 +2913,6 @@ "languageLevelC2Desc": "Dokážem takmer všetko, čo počujem alebo čítam, a vyjadrujem sa plynulo a presne.", "newVocab": "Nová slovná zásoba", "newGrammar": "Nové gramatické koncepty", - "congratulationsOnReaching": "Dosiahli ste úroveň {level}!", - "seeDetails": "Zobraziť podrobnosti", "choosePracticeMode": "Kliknite na jeden z vyššie uvedených tlačidiel, aby ste začali cvičebnú aktivitu", "ban": "Zákaz", "unban": "Zrušiť zákaz", @@ -3355,8 +2926,6 @@ "timesUsedWithAssistance": "Počet použití s pomocou", "shareInviteCode": "Zdieľať pozývací kód: {code}", "leaderboard": "Rebríček", - "welcomeUser": "Vitaj {user}", - "joinSpaceOnboardingDesc": "Máte kód alebo odkaz na verejný kurz?", "skipForNow": "Preskočiť zatiaľ", "permissions": "Oprávnenia", "spaceChildPermission": "Kto môže pridávať nové chaty do tohto kurzu", @@ -3364,12 +2933,8 @@ "defaultOption": "Predvolené", "deleteChatDesc": "Ste si istí, že chcete vymazať tento chat? Bude vymazaný pre všetkých účastníkov a všetky správy v chate už nebudú dostupné na prax alebo analytiku učenia.", "deleteSpaceDesc": "Kurz a akékoľvek vybrané chaty budú vymazané pre všetkých účastníkov a všetky správy v chate už nebudú dostupné na prax alebo analytiku učenia. Táto akcia sa nedá vrátiť.", - "chatWithActivities": "Chat s aktivitami", "launch": "Spustiť", - "launchActivityToChats": "Spustiť aktivitu do chatov", "searchChats": "Hľadať chaty", - "selectChats": "Vybrať chaty", - "selectChatToStart": "Hotovo! Vyberte chat na začatie", "maxFifty": "Max 50", "configureSpace": "Konfigurovať kurz", "pinMessages": "Pripnúť správy", @@ -3383,9 +2948,7 @@ "announcements": "Oznámenia", "activities": "Aktivity", "access": "Prístup", - "botSettings": "Nastavenia bota", "activitySuggestionTimeoutMessage": "Pracujeme tvrdo na generovaní ďalších aktivít pre vás, prosím, skontrolujte to o minútu", - "accessSettingsWarning": "Ups! Vyzerá to, že nemáte oprávnenie na nastavenie pravidiel prístupu do tejto miestnosti. Mali by ste ich skontrolovať, aby ste sa uistili, že sú také, aké potrebujete, a ak ich potrebujete zmeniť, kontaktujte správcu miestnosti", "howSpaceCanBeFound": "Ako možno tento kurz nájsť", "private": "Súkromný", "cannotBeFoundInSearch": "Nemožno nájsť vo vyhľadávaní", @@ -3398,16 +2961,6 @@ "canBeFoundViaKnock": "• žiadosť o pripojenie a schválenie správcu", "youHaveLeveledUp": "Postupovali ste na vyššiu úroveň!", "sendActivities": "Odoslať aktivity", - "getStarted": "Začať", - "getStartedBotChatDesc": "Chatovanie s AI je skvelé miesto na začiatok a nástroje Pangea na čítanie, písanie, počúvanie a hovorenie to uľahčujú!", - "getStartedCommunitiesDesc": "Vzdelávanie s komunitou je miesto, kde vyniká Pangea Chat!\nMôžete sa pripojiť k svojej triede, nájsť kurz alebo si dokonca vytvoriť vlastný!", - "getStartedFriendsDesc": "Máte priateľa, ktorý chce s vami učiť?", - "getStartedBotChatComplete": "Dobre odvedená práca! Chatujete s botom!", - "getStartedCommunitiesComplete": "Skvelé, pripojili ste sa ku kurzu!", - "getStartedComplete": "Túto sekciu ste dokončili!\nPokračujte v objavovaní našich úžasných funkcií chatovaním s priateľmi!", - "getStartedFriendsComplete": "Woohoo! Máte priateľov! 😙", - "getStartedBotChatButton": "Začať chatovať!", - "getStartedFriendsButton": "Chatovať s priateľom", "groupChat": "Skupinový chat", "directMessage": "Priama správa", "newDirectMessage": "Nová priama správa", @@ -3423,7 +2976,6 @@ "mySavedActivities": "Moje uložené aktivity", "noSavedActivities": "Žiadne uložené aktivity", "saveActivity": "Uložiť túto aktivitu", - "yourSavedActivities": "Uložené aktivity", "failedToPlayVideo": "Nepodarilo sa spustiť video", "done": "Hotovo", "inThisSpace": "V tomto kurze", @@ -3462,37 +3014,27 @@ "maximumActivityParticipants": "Každá aktivita môže mať maximálne {count} účastníka(ov).", "pending": "Čaká sa", "inactive": "Neaktívne", - "unjoinedActivityMessage": "Chcete sa zúčastniť? Vyberte si otvorenú rolu!\nAlebo sa len pozerajte a užívajte si show!", - "fullActivityMessage": "Nechajte si priestor na sledovanie show! Hoci nie sú žiadne otvorené role na účasť, môžete sledovať chat!", "confirmRole": "Potvrdiť rolu", "openRoleLabel": "OTVORENÁ", "joinedTheActivity": "👋 {username} sa pripojil ako {role}", "finishedTheActivity": "🎯 {username} ukončil túto aktivitu", - "endActivityTitle": "Som hotový", - "endActivityDesc": "Dokončili ste ciele?\nToto je vaše potvrdenie, že sa stiahnete z písania správ. Ale nebojte sa, zábava pokračuje v chate! Nechajte si čas na pozeranie show a užívajte si to, kým všetci nekliknú na 'Hotovo'.", "archiveToAnalytics": "Pridať do mojich dokončených aktivít", "activitySummaryError": "Prehľady aktivít nie sú dostupné", "requestSummaries": "Požiadať o prehľady", - "loadingActivitySummary": "Načítavanie prehľadu aktivity...", "generatingNewActivities": "Ste prvým používateľom tohto jazykového páru! Prosím, venujte nám chvíľu, pripravujeme aktivity špeciálne pre vás.", - "requestAccessTitle": "Chcete požiadať o prístup k analytike?", + "requestAccessTitle": "Požiadať o prístup k analytike?", "requestAccessDesc": "Chceli by ste požiadať o prístup na zobrazenie analytiky účastníkov?\n\nAk účastníci súhlasia, administrátori tohto kurzu budú môcť vidieť ich:\n • celkovú slovnú zásobu\n • celkové gramatické koncepty\n • počet dokončených aktivít\n • špecifické gramatické koncepty použité, správne a nesprávne\n\nNebudú môcť vidieť ich:\n • správy v chatoch mimo kurzu\n • zoznam slovnej zásoby", "requestAccess": "Požiadať o prístup ({count})", "analyticsInactiveTitle": "Žiadosti o prístup od neaktívnych používateľov nemohli byť odoslané", "analyticsInactiveDesc": "Neaktívni používatelia, ktorí sa neprihlásili od zavedenia tejto funkcie, neuvidia vašu žiadosť.\n\nTlačidlo Požiadavka sa zobrazí, keď sa vrátia. Môžete žiadosť znova odoslať neskôr kliknutím na tlačidlo Požiadavka pod ich menom, keď bude dostupné.", "accessRequestedTitle": "Žiadosť o prístup k analytike", - "accessRequestedDesc": "Administrátori “{space}” žiadajú o zobrazenie vašej študijnej analytiky.\n\nAk súhlasíte, administrátori tohto kurzu budú môcť vidieť vašu:\n • celkovú slovnú zásobu\n • celkové gramatické koncepty\n • počet dokončených aktivít\n • špecifické gramatické koncepty použité, správne a nesprávne\n\nNebudú môcť vidieť vaše:\n • správy v chatoch mimo kurzu\n • zoznam slovnej zásoby", - "allowAccess": "Povoliť prístup", - "denyAccess": "Zamietnuť prístup", + "accessRequestedDesc": "Žiadosť o prístup od admina(ov): {admin} \n\nAdmini z „{space}“ žiadajú o zobrazenie vašich analytických údajov o učení.\n\nAk súhlasíte, budú môcť zobraziť vaše:\n • celkovú slovnú zásobu\n • celkové gramatické koncepty\n • celkový počet dokončených aktivít\n • konkrétne gramatické koncepty použité, správne a nesprávne\n\nNebudú môcť zobraziť vaše:\n • správy v chatoch mimo kurzu\n • zoznam slovnej zásoby", "adminRequestedAccess": "Administrátori požiadali o zobrazenie vašej analytiky.", "lastUpdated": "Aktualizované\n{time}", "activityFinishedMessage": "Všetko hotové!", "endForAll": "Ukončiť pre všetkých", "newCourse": "Nový kurz", - "newCourseSubtitle": "Aký plán kurzu by ste chceli použiť?", - "failedToLoadCourses": "Nepodarilo sa načítať kurzy", "numModules": "{num} modulov", - "numActivityPlans": "{num} plánov aktivít", "coursePlan": "Plán kurzu", "editCourseLater": "Môžete neskôr upraviť názov kurzu, popisy a obrázok kurzu.", "newCourseAccess": "Štandardne sú kurzy súkromné a vyžadujú schválenie správcu na pripojenie. Tieto nastavenia môžete upraviť kedykoľvek.", @@ -3506,17 +3048,11 @@ "accessDesc": "Môžete spraviť svoj kurz otvorený svetu! Alebo, urobiť svoj kurz súkromným a zabezpečeným.", "createGroupChatDesc": "Kde začínajú a končia aktivity, skupinové chaty zostanú otvorené na bežnú komunikáciu.", "deleteDesc": "Iba správcovia môžu vymazať kurz. Ide o deštruktívnu akciu, ktorá odstráni všetkých používateľov a vymaže všetky vybrané chaty v kurze. Postupujte opatrne.", - "failedToLoadCourseInfo": "Nepodarilo sa načítať informácie o kurze", "noCourseFound": "Ó, tento kurz potrebuje plán!\n\nPlány kurzov sú sledom tém a aktivít konverzácie.", "additionalParticipants": "+ {num} ďalších", - "activityNotFoundForCourse": "Táto aktivita nebola nájdená v kurze", - "courseChats": "Kurzyové chaty", - "myActivitySessions": "Moje aktivity", "directMessages": "Priame správy", "whatNow": "Čo teraz?", "chooseNextActivity": "Vyberte svoju ďalšiu aktivitu!", - "seeInstructions": "Zobraziť pokyny", - "hideInstructions": "Skryť pokyny", "letsGo": "Poďme na to", "chooseRole": "Vyberte si rolu!", "chooseRoleToParticipate": "Vyberte rolu na účasť!", @@ -3526,23 +3062,15 @@ "inviteFriends": "Pozvať priateľov", "waitNotDone": "Počkajte, ešte som nedokončil!", "waitingForOthersToFinish": "Čakáme na ostatných, aby dokončili...", - "saveToCompletedActivities": "Uložiť do dokončených aktivít", "generatingSummary": "Analyzujeme chat a generujeme výsledky", - "instructionsLanguage": "Jazyk pokynov", "findCourse": "Nájsť kurz", - "activityCompletedDesc": "Vaša dokončená aktivita bola pridaná do analytiky, kde si môžete prezrieť a precvičiť jazyk, ktorý ste použili.", "pingParticipantsNotification": "{user} hľadá používateľov na pripojenie k relácii aktivity v {room}", "course": "Kurz", "courses": "Kurzy", "courseName": "Názov kurzu", "createNewCourse": "Nový kurz", - "publicCourses": "Verejné kurzy", "goToCourse": "Prejsť na kurz: {course}", "activityComplete": "Táto aktivita bola dokončená. Súhrn aktivity by mal byť dostupný nižšie.", - "haventChattedMuch": "Vyzerá to, že ste veľa nehovorili, skúste použiť viac slovnej zásoby! Ak máte pocit, že ste splnili svoj cieľ, môžete ukončiť aktivitu nižšie.", - "haveChatted": "Vyzerá to, že ste si už chvíľu rozprávali! Ak máte pocit, že ste splnili svoj cieľ, ukončite aktivitu a my vám v chate vygenerujeme súhrn!", - "userDoneAndWaiting": "{num1}/{num2} účastníkov ukončilo. Počkajte, kým všetci dokončia, a my vám v chate vygenerujeme súhrn! \n\nAk by ste chceli znova vstúpiť do rozhovoru, kliknite na tlačidlo pokračovať v chate.", - "othersDoneAndWaiting": "{num1}/{num2} je hotovo. Dokončili ste svoj cieľ?", "startNewSession": "Začať novú reláciu", "joinOpenSession": "Pripojiť sa k otvorenej relácii", "less": "menej", @@ -3552,7 +3080,6 @@ "openToJoin": "Otvorené na pripojenie", "results": "Výsledky", "activityDone": "Aktivita hotová!", - "moreLabel": "viac", "promoCodeInfo": "Promo kódy je možné zadať na nasledujúcej stránke", "editsComingSoon": "Funkcia úpravy miest a aktivít čoskoro príde.", "editing": "Upraviť", @@ -3568,13 +3095,10 @@ "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", - "chooseLanguage": "Vyberte jazyk.", + "chooseLanguage": "Vyberte cieľový jazyk.", "planTrip": "Naplánujte si svoju cestu", "howAreYouTraveling": "Ako cestujete?", "unlockPrivateTrip": "Odomknúť súkromnú cestu", @@ -3587,25 +3111,20 @@ "courseCode": "Aké je tajné heslo?", "courseCodeHint": "Kód cesty alebo odkaz", "unlockMyTrip": "Odomknúť moju cestu", - "anyLevel": "Akákoľvek úroveň", "signupOption": "Ako sa chcete zaregistrovať?", "withApple": "S Apple", "withGoogle": "S Google", "withEmail": "S e-mailom", "createAccount": "Vytvoriť účet", - "noCoursesFound": "Nenašli sa žiadne kurzy", "loginWithEmail": "Prihlásiť sa pomocou e-mailu", "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", - "allCefrLevels": "Všetky úrovne CEFR", "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.", "directMessageBotTitle": "Priama správa Pangea Bot", "feedbackTitle": "Spätná väzba k aktivite", - "feedbackDesc": "Ako by sa mala aktivita zlepšiť? Ak môžete poskytnúť nejaké detaily, urobíme zmenu!", "feedbackHint": "Vaša spätná väzba", "feedbackButton": "Odoslať spätnú väzbu", "directMessageBotDesc": "Rozprávať sa s ľuďmi je zábavnejšie, ale... AI je vždy pripravené!", @@ -6089,30 +5608,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6128,18 +5623,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6164,18 +5647,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6212,38 +5683,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6252,62 +5695,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6344,10 +5743,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6356,14 +5751,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6372,46 +5759,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6420,10 +5771,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6480,18 +5827,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6500,14 +5835,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6536,18 +5863,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6556,42 +5871,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6600,14 +5883,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6628,26 +5903,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6668,10 +5923,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6704,25 +5955,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6779,34 +6011,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6835,778 +6039,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8599,14 +7035,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8618,14 +7046,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8657,10 +7077,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8669,18 +7085,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8689,14 +7093,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8721,38 +7117,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8798,10 +7166,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8826,10 +7190,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8854,10 +7214,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8866,66 +7222,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8946,42 +7246,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9006,154 +7282,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9170,18 +7298,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9202,14 +7318,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9226,10 +7334,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9242,14 +7346,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9258,14 +7354,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9293,26 +7381,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9341,18 +7409,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9389,10 +7449,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10325,10 +8381,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10509,34 +8561,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10549,10 +8573,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10561,14 +8581,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10585,22 +8597,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10748,14 +8744,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10764,34 +8752,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10800,54 +8760,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10856,10 +8780,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10876,10 +8796,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11051,26 +8967,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11099,10 +8995,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11159,30 +9051,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11211,18 +9087,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11339,14 +9207,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11359,10 +9219,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11371,14 +9227,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11395,14 +9243,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11411,22 +9251,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11439,18 +9263,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11467,22 +9279,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11491,30 +9291,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11587,18 +9363,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11655,18 +9419,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11695,30 +9447,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11771,18 +9507,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11831,46 +9559,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11935,10 +9623,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12110,14 +9794,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12145,14 +9821,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12165,10 +9833,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12204,19 +9868,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12241,14 +9900,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12257,14 +9908,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12317,10 +9960,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12333,18 +9972,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12357,14 +9984,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12405,26 +10024,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12452,10 +10059,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12466,36 +10069,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12532,10 +10105,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12600,18 +10169,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12676,10 +10233,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12700,10 +10253,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12720,10 +10269,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12732,10 +10277,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12748,10 +10289,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12776,16 +10313,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Pozvať priateľov na aktivitu", - "inviteFriendsToActivityCourse": "Pozvať priateľov na aktivitu a kurz", "feedbackRespDesc": "Skontrolujte zajtra aktualizácie aktivity.", "activityDropdownDesc": "Keď dokončíte túto aktivitu, kliknite nižšie", - "activityAnalyticsListBody": "Toto sú vaše dokončené aktivity! Po dokončení aktivít si ich môžete pozrieť tu.", "languageMismatchTitle": "Nesúlad jazyka", "languageMismatchDesc": "Váš cieľový jazyk nezodpovedá jazyku tejto aktivity. Chcete aktualizovať svoj cieľový jazyk?", "reportWordIssueTooltip": "Nahlásiť problém s informáciami o slove", "tokenInfoFeedbackDialogTitle": "Spätná väzba k informáciám o slove", - "tokenInfoFeedbackDialogDesc": "AI robí chyby. Prosím, opíšte akékoľvek problémy, ktoré ste našli s vyššie uvedenými informáciami.", "noPublicCoursesFound": "Nenašli sa žiadne verejné kurzy. Chceli by ste vytvoriť jeden?", "noCourseTemplatesFound": "Nenašli sme žiadne kurzy pre váš cieľový jazyk. Medzitým môžete chatovať s Pangea Botom a neskôr sa vrátiť pre viac kurzov.", "botActivityJoinFailMessage": "Pangea Bot sa chvíľu načítava. Skúste to prosím neskôr alebo pozvite priateľa.", @@ -12793,14 +10326,6 @@ "leaveDesc": "Opustiť tento priestor a všetky chaty v ňom", "selectAll": "Vybrať všetko", "deselectAll": "Zrušiť výber všetkého", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12809,10 +10334,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12829,10 +10350,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12866,7 +10383,6 @@ "newMessageInPangeaChat": "🗨️ Nová správa v Pangea chate", "shareCourse": "Zdieľať kurz", "addCourse": "Pridať kurz", - "joinCourseWithCode": "Pripojiť sa ku kurzu s kódom", "joinPublicCourse": "Pripojiť sa k verejnému kurzu", "vocabLevelsDesc": "Sem pôjdu slovíčka, keď ich vylepšíte na vyššiu úroveň!", "highlightVocabTooltip": "Zvýraznite cieľové slovíčka nižšie ich odoslaním alebo cvičením s nimi v chate", @@ -12890,10 +10406,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12902,7 +10414,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Žiadne priame správy ani chaty nenájdené. Uistite sa, že je váš vyhľadávanie správne napísané.", + "activityAnalyticsTooltipBody": "Toto sú vaše uložené aktivity na preskúmanie a cvičenie.", + "numSavedActivities": "Počet uložených aktivít", + "saveActivityTitle": "Uložiť aktivitu", + "saveActivityDesc": "Dobrá práca! Uložte túto aktivitu na neskoršie preskúmanie a cvičenie", + "levelInfoTooltip": "Tu môžete vidieť všetky body, ktoré ste získali a ako!", + "alreadyInCourseWithID": "Už ste v kurze s týmto plánom. Chcete vytvoriť kurz s rovnakým plánom, alebo prejsť do existujúceho kurzu?", + "goToExistingCourse": "Prejsť do existujúceho kurzu", + "emojiView": "Zobrazenie emoji", + "feedbackDialogDesc": "Robím chyby tiež! Niečo, čo by mi pomohlo zlepšiť sa?", + "contactHasBeenInvitedToTheCourse": "Kontakt bol pozvaný na kurz", + "activityStatsButtonTooltip": "Informácie o aktivite", + "allow": "Povoliť", + "deny": "Odmietnuť", + "enabledRenewal": "Povoliť obnovenie predplatného", + "subscriptionEndsOn": "Predplatné končí dňa", + "subscriptionRenewsOn": "Predplatné sa obnoví dňa", + "waitForSubscriptionChanges": "Zmeny vo vašom predplatnom sa môžu chvíľu odrážať v aplikácii.", + "subscribeReadingAssistance": "Prihláste sa na odomknutie nástrojov na správu správ", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikánčina", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharčina", + "arDisplayName": "Arabčina", + "asDisplayName": "Asámčina", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbajdžanský", + "baDisplayName": "Baškirčina", + "banDisplayName": "Balinčina", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Bieloruština", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulharčina", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengálčina", + "bnBDDisplayName": "Bengálčina (Bangladéš)", + "bnINDisplayName": "Bengálčina (India)", + "brDisplayName": "Bretončina", + "bsDisplayName": "Bosniančina", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriatčina", + "caDisplayName": "Katalánčina", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centrálny kurdský", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsičan", + "crhDisplayName": "Krymsko-turecký", + "crsDisplayName": "Seselwa kreolský francúzsky", + "csDisplayName": "Čeština", + "cvDisplayName": "Čuvaš", + "cyDisplayName": "Waleský", + "daDisplayName": "Dánsky", + "deDisplayName": "Nemecký", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Anglický", + "enAUDisplayName": "Anglický (Austrália)", + "enGBDisplayName": "Anglický (UK)", + "enINDisplayName": "Angličtina (India)", + "enUSDisplayName": "Angličtina (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Španielčina", + "esESDisplayName": "Španielčina (Španielsko)", + "esMXDisplayName": "Španielčina (Mexiko)", + "euDisplayName": "Baskičtina", + "faDisplayName": "Perzština", + "ffDisplayName": "Fulah", + "fiDisplayName": "Fínčina", + "filDisplayName": "Filipínsky", + "fjDisplayName": "Fidžijský", + "foDisplayName": "Farožský", + "frDisplayName": "Francúzsky", + "frCADisplayName": "Francúzsky (Kanada)", + "frFRDisplayName": "Francúzsky (Francúzsko)", + "fyDisplayName": "Západná frisčina", + "gaDisplayName": "Írsky", + "gaaDisplayName": "Ga", + "gdDisplayName": "Škótska gaelčina", + "glDisplayName": "Galícijčina", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goanská konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havajčina", + "heDisplayName": "Hebrejčina", + "hiDisplayName": "Hindčina", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Chorvátsky", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitská kreolčina", + "huDisplayName": "Maďarský", + "hyDisplayName": "Arménsky", + "idDisplayName": "Indonézsky", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islanský", + "itDisplayName": "Taliansky", + "jaDisplayName": "Japonský", + "jvDisplayName": "Javánsky", + "kaDisplayName": "Gruzínsky", + "kkDisplayName": "Kazach", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Kórejský", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kašmírčina", + "ktuDisplayName": "Kituba (Demokratická republika Kongo)", + "kuDisplayName": "Kurdčina", + "kyDisplayName": "Kyrgyzčina", + "laDisplayName": "Latinčina", + "lbDisplayName": "Luxemburčina", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburčina", + "lijDisplayName": "Ligurčina", + "lmoDisplayName": "Lombardčina", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litovčina", + "ltgDisplayName": "Latgalsky", + "luoDisplayName": "Luo (Keňa a Tanzánia)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lotyština", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaš", + "miDisplayName": "Maorí", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedónsky", + "mlDisplayName": "Malajálam", + "mnDisplayName": "Mongolský", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Maráthí", + "msDisplayName": "Malajčina", + "msArabDisplayName": "Malajčina (arabsky)", + "msMYDisplayName": "Malajčina (Malajzia)", + "mtDisplayName": "Maltézsky", + "mwrDisplayName": "Marwari", + "myDisplayName": "Barmčina", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Nórsky (Bokmål)", + "neDisplayName": "Nepálsky", + "newDisplayName": "Newari", + "nlDisplayName": "Holandský", + "nlBEDisplayName": "Flámsky", + "noDisplayName": "Nórsky", + "nrDisplayName": "Južný Ndebele", + "nsoDisplayName": "Severný Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitánčina", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Pandžábčina", + "paArabDisplayName": "Pandžábčina (Shahmukhi)", + "paINDisplayName": "Pandžábčina (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poľština", + "psDisplayName": "Paštčina", + "ptDisplayName": "Portugalčina", + "ptBRDisplayName": "Portugalčina (Brazília)", + "ptPTDisplayName": "Portugalčina (Portugalsko)", + "quDisplayName": "Kečuánčina", + "rajDisplayName": "Rádžastháni", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumunčina", + "roMDDisplayName": "Moldavčina", + "romDisplayName": "Rómsky", + "ruDisplayName": "Ruština", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicílčan", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Šan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovenčina", + "slDisplayName": "Slovinčina", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somálčina", + "sqDisplayName": "Albánčina", + "srDisplayName": "Srbčina", + "srMEDisplayName": "Čiernohorčina", + "ssDisplayName": "Swati", + "stDisplayName": "Juhoafrický Sotho", + "suDisplayName": "Sundánčina", + "svDisplayName": "Švédčina", + "swDisplayName": "Svahilčina", + "szlDisplayName": "Slezčina", + "taDisplayName": "Tamilčina", + "teDisplayName": "Telugčina", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tádžik", + "thDisplayName": "Thajský", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkménsky", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turecký", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatár", + "ugDisplayName": "Ujgurský", + "ukDisplayName": "Ukrajinský", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (India)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbecký", + "viDisplayName": "Vietnamčina", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukatek", + "yueDisplayName": "Kantončina", + "yueCNDisplayName": "Kantončina (Čína)", + "yueHKDisplayName": "Kantončina (Hongkong)", + "zhDisplayName": "Čínština", + "zhCNDisplayName": "Čínština (zjednodušená)", + "zhTWDisplayName": "Čínština (tradičná)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12969,6 +11667,7 @@ "notStartedActivitiesTitle": "Otvorené relácie ({num})", "inProgressActivitiesTitle": "Prebieha teraz ({num})", "completedActivitiesTitle": "Hotovo ({num})", + "pickDifferentActivity": "Vyberte inú aktivitu", "inOngoingActivity": "Máte prebiehajúcu aktivitu!", "@notStartedActivitiesTitle": { "type": "String", @@ -12994,10 +11693,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaša cieľová jazyková verzia sa nezhoduje s touto správou. Chcete aktualizovať svoju cieľovú jazykovú verziu?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Toto sú všetci účastníci tohto kurzu. Kliknite na avatar akéhokoľvek používateľa a „začať konverzáciu“, aby ste poslali súkromnú správu.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Toto slovo v slovnej zásobe bude trvalo odstránené z vašich analytických údajov", + "woman": "Žena", + "man": "Muž", + "otherGender": "Iné", + "unselectedGender": "Vyberte možnosť pohlavia", + "gender": "Pohlavie", + "chatParticipantTooltip": "Toto sú všetci v tomto chate. Kliknite na avatar akéhokoľvek používateľa a „začať konverzáciu“ na odoslanie priamej správy.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Nástroje na učenie sú zakázané pre správy, ktoré nie sú vo vašom cieľovom jazyku.", + "vocabEmoji": "Emodži slovnej zásoby", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Požiadať o regeneráciu", + "optionalRegenerateReason": "(Voliteľné) Dôvod", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Nastavili ste emoji pre {lemma}! Tento emoji budeme používať na reprezentáciu slova v praktických aktivitách v budúcnosti.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Čakáme na dokončenie prihlásenia", + "ssoDialogDesc": "Otvárame novú kartu, aby ste sa mohli prihlásiť bezpečne.", + "ssoDialogHelpText": "🤔 Ak ste nevideli novú kartu, skontrolujte prosím svoj blokovač vyskakovacích okien.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Deaktivovať jazykové nástroje", + "disableLanguageToolsDesc": "Chceli by ste deaktivovať automatickú jazykovú pomoc?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Povolenie zamietnuté. Aktivujte povolenia na nahrávanie, aby ste mohli nahrávať audio správy.", + "genericWebRecordingError": "Niečo sa pokazilo. Odporúčame používať prehliadač Chrome pri nahrávaní správ.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Pre najlepší zážitok z používania tejto aplikácie, prosím, zväčšite veľkosť obrazovky.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivity na odomknutie nasledujúcej témy", "activitiesToUnlockTopicDesc": "Nastavte počet aktivít na odomknutie nasledujúcej témy kurzu", "@activitiesToUnlockTopicTitle": { @@ -13007,5 +11824,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Správna prax definície slovnej zásoby", + "constructUseIncLMDesc": "Nesprávna prax definície slovnej zásoby", + "constructUseCorLADesc": "Správna prax audio slovnej zásoby", + "constructUseIncLADesc": "Nesprávna prax audio slovnej zásoby", + "constructUseBonus": "Bonus počas praxe slovnej zásoby", + "practiceVocab": "Cvičenie slovnej zásoby", + "selectMeaning": "Vyberte význam", + "selectAudio": "Vyberte zodpovedajúce audio", + "congratulations": "Gratulujeme!", + "anotherRound": "Ďalšie kolo", + "noActivityRequest": "Žiadna aktuálna požiadavka na aktivitu.", + "quit": "Ukončiť", + "congratulationsYouveCompletedPractice": "Gratulujeme! Dokončili ste cvičebnú reláciu.", + "mustHave10Words": "Musíte mať aspoň 10 slovíčok na precvičovanie. Skúste sa porozprávať s priateľom alebo Pangea Botom, aby ste objavili viac!", + "botSettings": "Nastavenia bota", + "activitySettingsOverrideWarning": "Jazyk a jazyková úroveň určené plánom aktivity", + "voice": "Hlas", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 7c644b5d6..f82b3a3a5 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -1331,28 +1331,16 @@ "commandHint_logoutall": "Odjava vseh aktivnih naprav", "displayNavigationRail": "Prikaži navigacijsko vrstico na mobilni napravi", "customReaction": "Prilagojena reakcija", - "accountInformation": "Informacije o računu", - "addGroupDescription": "Dodaj opis klepeta", - "addNewFriend": "Dodaj novega prijatelja", - "alreadyHaveAnAccount": "Že imate račun?", - "createNewGroup": "Ustvari nov klepet", - "editChatPermissions": "Uredi dovoljenja za klepet", "ignore": "Blokiraj", "ignoredUsers": "Blokirani uporabniki", "writeAMessageLangCodes": "Vpišite v {l1} ali {l2}...", "requests": "Zahteve", - "allCorrect": "Tako bi to rekel! Super!", - "newWayAllGood": "Tako ne bi rekel, ampak zgleda dobro!", - "othersAreBetter": "Hm, morda je boljši način za to povedati.", "holdForInfo": "Kliknite in držite za informacije o besedi.", "greenFeedback": "To bi jaz vnesel!", "yellowFeedback": "Hm, poskusi to in poglej, če deluje! Za uporabo te besede jo preprosto kliknite znova.", "redFeedback": "Mislim, da to ni prav...", "itInstructionsTitle": "Lahko vam pomagam pri prevajanju!", "itInstructionsBody": "Kliknite in držite možnosti za informacije o besedi.", - "oneday": "Zadnjih 24 ur", - "oneweek": "Zadnjih 7 dni", - "onemonth": "Prejšnji mesec", "gaTooltip": "L2 uporaba z jezikovno pomočjo", "taTooltip": "L2 uporaba z prevajalsko pomočjo", "unTooltip": "Drugo", @@ -1362,58 +1350,27 @@ "interactiveTranslatorAllowed": "Izbira učenca", "interactiveTranslatorRequired": "Zahtevano", "notYetSet": "Še ni nastavljeno", - "myLearning": "Moja analitika", "waTooltip": "Uporaba L2 brez pomoči", - "changeDateRange": "Spremeni obseg datuma", - "classDescription": "Opis", - "addStudents": "Vabilo uporabnikom z povezavo ali kodo", - "copyClassLink": "Kopiraj povezavo za povabilo", - "copyClassCode": "Kopiraj kodo za povabilo", - "inviteStudentByUserName": "Vabilo uporabnikom po uporabniškem imenu", "languageSettings": "Nastavitve jezika", "interactiveTranslator": "Pomoč pri prevajanju", - "shareVideo": "Deli video", - "shareVideoDesc": "Vklopite, da učenci lahko delijo videoposnetke v klepetih.", - "shareFiles": "Deli datoteke", - "selectLanguageLevel": "Izberi raven jezika", "noIdenticalLanguages": "Prosim, izberi različne osnovne in ciljne jezike", - "iWantALanguagePartnerFrom": "Je od:", - "worldWide": "Po vsem svetu", - "noResults": "Ni rezultatov! Poskusite razširiti iskanje.", "searchBy": "Išči po državi in jezikih", - "iWantAConversationPartner": "Želim sogovornika, ki", - "iWantALanguagePartnerWhoSpeaks": "Govori:", - "iWantALanguagePartnerWhoIsLearning": "Se uči:", "joinWithClassCode": "Pridruži se tečaju", - "joinWithClassCodeHint": "Vnesi kodo povabila", - "languageLevelPreA1": "Popoln začetnik (Pre A1)", - "languageLevelA1": "Začetnik (A1)", - "languageLevelA2": "Elementarni (A2)", - "languageLevelB1": "Srednjega nivoja (B1)", - "languageLevelB2": "Višji srednji nivo (B2)", - "languageLevelC1": "Napredno (C1)", - "languageLevelC2": "Obvladovanje (C2)", + "languageLevelPreA1": "Novice Low (Pre A1)", + "languageLevelA1": "Novice Mid (A1)", + "languageLevelA2": "Visoka začetna (A2)", + "languageLevelB1": "Srednja (B1)", + "languageLevelB2": "Nizka napredna (B2)", + "languageLevelC1": "Srednja napredna (C1)", + "languageLevelC2": "Visoka (C2)", "changeTheNameOfTheClass": "Spremeni ime", "changeTheNameOfTheChat": "Spremeni ime klepeta", - "askPangeaBot": "Vprašajte Pangea Bota za kontekstualno definicijo.", "sorryNoResults": "Oprostite, ni rezultatov.", "ignoreInThisText": "Prezri", - "helpMeTranslate": "Da!", - "needsItShortMessage": "Izven cilja", "needsItMessage": "Počakajte, to ni {targetLanguage}! Ali potrebujete pomoč pri prevajanju?", - "needsIgcMessage": "To sporočilo ima slovnično napako.", - "tokenTranslationTitle": "Beseda je v vašem osnovnem jeziku.", - "spanTranslationDesc": "Spodaj si oglejte možne prevode.", - "spanTranslationTitle": "Nekatere besede so v vašem osnovnem jeziku.", - "l1SpanAndGrammarTitle": "Izven cilja jezika", - "l1SpanAndGrammarDesc": "To je lahko v vašem osnovnem jeziku ali pa je slovnična napaka.", - "otherTitle": "Imate napako.", - "otherDesc": "Spodaj si oglejte možne popravke.", "countryInformation": "Moja država", - "myLanguages": "Moji osnovni in ciljni jeziki", "targetLanguage": "Ciljni jezik", "sourceLanguage": "Osnovni jezik", - "languagesISpeak": "Jeziki, ki jih govorim", "updateLanguage": "Moji jeziki", "whatLanguageYouWantToLearn": "Kateri jezik želiš naučiti?", "whatIsYourBaseLanguage": "Kakšen je vaš osnovni jezik?", @@ -1428,13 +1385,8 @@ "errorDisableLanguageAssistanceUserDesc": "Kliknite tukaj za posodobitev nastavitev pomoči pri prevajanju in slovnici", "errorDisableITClassDesc": "Pomoč pri prevajanju je izklopljena za tečaj, v katerem je ta klepet.", "errorDisableIGCClassDesc": "Pomoč pri slovnici je izklopljena za tečaj, v katerem je ta klepet.", - "itIsDisabled": "Interaktivno prevajanje je onemogočeno", - "igcIsDisabled": "Interaktivno preverjanje slovnice je onemogočeno", - "goToLearningSettings": "Pojdi na nastavitve učenja", "error405Title": "Jeziki niso nastavljeni", "error405Desc": "Prosimo, nastavite svoje jezike v Glavnem meniju > Nastavitve učenja.", - "loginOrSignup": "Prijavite se z", - "iAgreeToThe": "Strinjam se s ", "termsAndConditions": "Pogoji in določila", "andCertifyIAmAtLeast13YearsOfAge": "in potrjujem, da sem starejši od 16 let.", "error502504Title": "Vau, veliko je študentov na spletu!", @@ -1442,40 +1394,21 @@ "error404Title": "Napaka pri prevajanju!", "error404Desc": "Bot Pangea ni prepričan, kako naj to prevede...", "errorPleaseRefresh": "Preučujemo to! Prosimo, osvežite stran in poskusite znova.", - "toggleIT": "Interaktivno prevajanje", - "toggleIGC": "Interaktivno preverjanje slovnice", - "toggleToolSettingsDescription": "Tukaj lahko vklopite ali izklopite posamezna nastavitev jezikovnih orodij.", "connectedToStaging": "Povezano s testnim okoljem", "learningSettings": "Nastavitve učenja", - "sendVoiceNotes": "Pošlji glasovne opombe", - "sendVoiceNotesDesc": "Vklopite to možnost, da učenci lahko pošiljajo glasovne opombe v klepetih.", - "chatTopic": "Tema klepeta", - "chatTopicDesc": "Nastavite temo klepeta", - "inviteStudentByUserNameDesc": "Če ima vaš učenec že račun, ga lahko poiščete.", "participants": "Udeleženci", - "almostPerfect": "Zdi se, da je prav! Tukaj je, kaj bi jaz rekel.", - "prettyGood": "Prav dobro! Tukaj je, kaj bi jaz rekel.", - "letMeThink": "Hmm, poglejmo, kako si se izkazal!", "clickMessageTitle": "Potrebujete pomoč?", "clickMessageBody": "Kliknite sporočilo za jezikovne orodja, kot so prevajanje, predvajanje in več!", - "understandingMessagesTitle": "Definicije in prevodi!", - "understandingMessagesBody": "Kliknite podčrtana beseda za definicije. Prevedite z možnostmi sporočila (zgoraj desno).", "allDone": "Vse je opravljeno!", "vocab": "Vocab", "low": "Imamo dokaze, da uporabnik ne razume teh besed.", "medium": "Te besede so bile uporabljene. Ni jasno, ali jih uporabnik popolnoma razume ali ne.", "high": "Imamo dokaze, da uporabnik razume te besede.", - "unknownProficiency": "Te besede niso bile uporabljene v Pangea Chat.", - "changeView": "Preklopi poglede.", - "clearAll": "Počistiti vse besede?", - "generateVocabulary": "Ustvari besedišče iz naslova in opisa", - "generatePrompts": "Ustvari pozive", "subscribe": "Naroči se", "getAccess": "Naroči se zdaj!", "subscriptionDesc": "Sporočanje je brezplačno! Naročite se za odklepanje interaktivnega prevajanja, preverjanja slovnice in analitike učenja.", "subscriptionManagement": "Upravljanje naročnine", "currentSubscription": "Trenutna naročnina", - "changeSubscription": "Spremeni svojo naročnino", "cancelSubscription": "Prekliči naročnino", "selectYourPlan": "Izberi svoj načrt", "subsciptionPlatformTooltip": "Prijavite se v svojo izvorno napravo, da upravljate svojo naročnino", @@ -1484,9 +1417,6 @@ "paymentHistory": "Zgodovina plačil", "emptyChatDownloadWarning": "Ne morete prenesti praznega klepeta", "update": "Posodobi", - "updateDesc": "Zdaj lahko posodobite to aplikacijo iz {localVersion} na {storeVersion}", - "maybeLater": "Morda kasneje", - "mainMenu": "Glavni meni", "toggleImmersionMode": "Način potopitve", "toggleImmersionModeDesc": "Ko je omogočeno, so vsa sporočila prikazana v vašem ciljnem jeziku. Ta nastavitev je najbolj uporabna pri jezikovnih izmenjavah.", "itToggleDescription": "Ta orodje za učenje jezika bo prepoznalo besede v vašem osnovnem jeziku in vam pomagalo prevesti jih v vaš ciljni jezik. Čeprav redko, lahko AI naredi napake pri prevajanju.", @@ -1501,212 +1431,13 @@ "definitionsToolDescription": "Ko je omogočeno, so besede podčrtane v modro in jih je mogoče klikniti za definicije. Kliknite na sporočila za dostop do definicij.", "translationsToolDescrption": "Ko je omogočeno, kliknite na sporočilo in ikono prevoda, da si ogledate sporočilo v vašem osnovnem jeziku.", "welcomeBack": "Dobrodošli nazaj! Če ste bili del pilotnega programa 2023-2024, nas kontaktirajte za vašo posebno pilotno naročnino. Če ste učitelj, ki je (ali vaša institucija je) kupila licence za vašo razred, nas kontaktirajte za vašo učiteljsko naročnino.", - "kickAllStudents": "Odstrani vse učence", - "kickAllStudentsConfirmation": "Ste prepričani, da želite odstraniti vse učence?", - "inviteAllStudents": "Vabite vse učence", - "inviteAllStudentsConfirmation": "Ste prepričani, da želite povabiti vse učence?", - "inviteUsersFromPangea": "Dodaj administratorje", - "redeemPromoCode": "Unovči promocijsko kodo", - "enterPromoCode": "Vnesi promocijsko kodo", "downloadTxtFile": "Prenesi besedilno datoteko", "downloadCSVFile": "Prenesi CSV datoteko", "promotionalSubscriptionDesc": "Trenutno imate doživljenjsko promocijsko naročnino. Pišite na support@pangea.chat za pomoč pri spremembi vaše naročnine.", "originalSubscriptionPlatform": "Naročnina kupljena prek {purchasePlatform}", "oneWeekTrial": "Preizkus za en teden", "downloadXLSXFile": "Prenesi Excel datoteko", - "abDisplayName": "Abhazijski", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanski", - "amDisplayName": "Amharščina", - "arDisplayName": "Arabščina", - "anDisplayName": "Aragonščina", - "hyDisplayName": "Armenski", - "asDisplayName": "Assamski", - "avDisplayName": "Avarščina", - "aeDisplayName": "Avestaščina", - "ayDisplayName": "Ajmarščina", - "azDisplayName": "Azerbejdžanščina", - "bmDisplayName": "Bambara", - "baDisplayName": "Baškirski", - "euDisplayName": "Baskovski", - "beDisplayName": "Beloruščina", - "bnDisplayName": "Bengalščina", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosanski", - "brDisplayName": "Bretonec", - "bgDisplayName": "Bolgarščina", - "myDisplayName": "Burmanski", - "caDisplayName": "Katalonščina, Valencianščina", - "chDisplayName": "Chamorro", - "ceDisplayName": "Čečenščina", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kitajščina", - "cvDisplayName": "Čuvašščina", - "kwDisplayName": "Kornščina", - "coDisplayName": "Korsičanščina", - "crDisplayName": "Cree", - "hrDisplayName": "Hrvaščina", - "csDisplayName": "Češčina", - "daDisplayName": "Dansko", - "dvDisplayName": "Divehi; Dhivehi; Maldivski;", - "nlDisplayName": "Nizozemščina", - "enDisplayName": "Angleščina", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonščina", - "eeDisplayName": "Ewe", - "foDisplayName": "Farski", - "fjDisplayName": "Fidžijski", - "fiDisplayName": "Finščina", - "frDisplayName": "Francoščina", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicijski", - "kaDisplayName": "Gruzijski", - "deDisplayName": "Nemščina", - "elDisplayName": "Grščina, sodobna", - "gnDisplayName": "Gvarani", - "guDisplayName": "Gudžarati", - "htDisplayName": "Haitian, Haitijska kreolska", - "haDisplayName": "Hauska", - "heDisplayName": "Hebrejščina (sodobna)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindijščina", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Madžarščina", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonezijski", - "ieDisplayName": "Interlingue", - "gaDisplayName": "irski", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandščina", - "itDisplayName": "Italijanščina", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonski", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, grenlandski", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kašmirščina", - "kkDisplayName": "Kazahstanščina", - "kmDisplayName": "Khmerski", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizki, Kirgiški", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korejski", - "kuDisplayName": "Kurdski", - "kjDisplayName": "Kvanjama, Kuanyama", - "laDisplayName": "Latinščina", - "lbDisplayName": "Luksemburščina, Letzeburgesch", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburščina, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laoski", - "ltDisplayName": "Litovanščina", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Latvijščina", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonščina", - "mgDisplayName": "Madagaskarski", - "msDisplayName": "Malajščina", - "mlDisplayName": "Malajalam", - "mtDisplayName": "Malteščina", - "miDisplayName": "Maori", - "mrDisplayName": "Maratí (Maráthi)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongolski", - "naDisplayName": "Nauru", - "nvDisplayName": "Navaho, Navaho", - "nbDisplayName": "Norveški Bokmål", - "ndDisplayName": "Severni Ndebele", - "neDisplayName": "Nepalski", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norveški Nynorsk", - "noDisplayName": "Norveški", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Južni Ndebele", - "ocDisplayName": "Okcitanski", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Stara cerkvena slovanščina, cerkvena slovanščina, cerkvena slovanščina, stari bugarski, stari slavanski", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Osetski, osetščina", - "paDisplayName": "Pendžabi, pandžabi", - "piDisplayName": "Pāli", - "faDisplayName": "Perzijski", - "plDisplayName": "Poljščina", - "psDisplayName": "Paštunščina, Pushtu", - "ptDisplayName": "Portugalščina", - "quDisplayName": "Kečua", - "rmDisplayName": "Retoromanščina", - "rnDisplayName": "Kirundi", - "roDisplayName": "Romunščina, Moldavščina", - "ruDisplayName": "Ruščina", - "saDisplayName": "Sanskrt, Sánskṛta", - "scDisplayName": "Sardinščina", - "sdDisplayName": "Sindhi", - "seDisplayName": "Severni sami", - "smDisplayName": "Samoanščina", - "sgDisplayName": "Sango", - "srDisplayName": "Srbščina", - "gdDisplayName": "Škotska gelščina, gelščina", - "snDisplayName": "Šona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovak", - "slDisplayName": "Slovene", - "soDisplayName": "Somali", - "stDisplayName": "Southern Sotho", - "esDisplayName": "Španski", - "suDisplayName": "Sundanski", - "swDisplayName": "Svahilski", - "ssDisplayName": "Swati", - "svDisplayName": "Švedski", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžik", - "thDisplayName": "Tajski", - "tiDisplayName": "Tigrinja", - "boDisplayName": "Tibetanski standard, Tibetanski, Centralni", - "tkDisplayName": "Turkmenski", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga otoki)", - "trDisplayName": "Turkščina", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatarščina", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Ujgurski, Ujgurski", - "ukDisplayName": "Ukrajinščina", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbeki", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamščina", - "voDisplayName": "Volapščina", - "waDisplayName": "Valonščina", - "cyDisplayName": "Vališčina", - "woDisplayName": "Wolof", - "fyDisplayName": "Zahodnofrizijščina", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Neznano", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havajski", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Več", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebrejščina", - "jwDisplayName": "Javanščina", - "moDisplayName": "Moldavski", - "shDisplayName": "Srbko-hrvaški", "wwCountryDisplayName": "Po vsem svetu", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Otočja Aland", @@ -1954,41 +1685,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambija", "zwCountryDisplayName": "Zimbabve", - "pay": "Plačaj", - "allPrivateChats": "Neposredni pogovori", - "unknownPrivateChat": "Neznan zasebni klepet", + "pay": "Checkout", "invitedToSpace": "{user} vas je povabil, da se pridružite tečaju: {space}! Ali želite sprejeti?", - "declinedInvitation": "Zavrnil povabilo", - "acceptedInvitation": "Sprejel povabilo", "youreInvited": "📩 Vabilo!", "invitedToChat": "{user} vas je povabil, da se pridružite klepetu: {name}! Ali želite sprejeti?", "monthlySubscription": "Mesečno", "yearlySubscription": "Letno", "defaultSubscription": "Pangea Chat naročnina", "freeTrial": "Preizkusno obdobje", - "grammarAnalytics": "Analiza napak", "total": "Skupaj: ", "noDataFound": "Ni najdenih podatkov", - "promoSubscriptionExpirationDesc": "Vaša trenutna naročnina je promocijska in poteče dne {expiration}. Za pomoč pri spremembi naročnine pišite na support@pangea.chat.", - "emptyChatNameWarning": "Prosimo, vnesite ime za ta klepet", "blurMeansTranslateTitle": "Zakaj je sporočilo zamegljeno?", "blurMeansTranslateBody": "Med načinom potopitve so sporočila, poslana v vašem osnovnem jeziku, zamegljena, medtem ko jih Pangea Bot prevaja v vaš ciljni jezik. Način potopitve lahko vklopite ali izklopite v nastavitvah posameznih tečajev in nastavitev.", - "someErrorTitle": "Hm, nekaj ni v redu", - "someErrorBody": "Lahko je napaka ali nekaj v vašem osnovnem jeziku.", "bestCorrectionFeedback": "To je pravilno!", "distractorFeedback": "Ni čisto prav.", "bestAnswerFeedback": "To je pravilno!", "definitionDefaultPrompt": "Kaj pomeni ta beseda?", "practiceDefaultPrompt": "Kakšen je najboljši odgovor?", "correctionDefaultPrompt": "Kakšna je najboljša zamenjava?", - "itStartDefaultPrompt": "Ali želiš pomoč pri prevajanju?", - "lockedChatWarning": "🔒 Ta klepet je zaklenjen", - "lockChat": "Zakleni klepet", - "suggestToChat": "Predlagaj ta klepet", - "suggestToChatDesc": "Predlagani klepeti se bodo prikazali na seznamu klepetov", "acceptSelection": "Sprejmi popravek", - "acceptSelectionAnyway": "Kljub temu uporabi", - "makingActivity": "Izvajanje dejavnosti", "why": "Zakaj?", "definition": "Definicija", "exampleSentence": "Primer stavka", @@ -1996,128 +1711,55 @@ "reportMessageTitle": "{reportingUserId} je prijavil sporočilo od {reportedUserId} v klepetu {roomName}", "reportMessageBody": "Sporočilo: {reportedMessage}\nRazlog: {reason}", "noTeachersFound": "Ni najdenih učiteljev za prijavo", - "viewArchive": "Ogled arhiva", "trialExpiration": "Vaša brezplačna preizkusna doba poteče {expiration}", "freeTrialDesc": "Novi uporabniki prejmejo enotedensko brezplačno preizkusno različico Pangea Chata", "activateTrial": "Brezplačna 7-dnevna preizkusna različica", "successfullySubscribed": "Uspešno ste se naročili!", "clickToManageSubscription": "Kliknite tukaj za upravljanje naročnine.", - "errorGettingAudio": "Napaka pri pridobivanju zvoka. Osvežite stran in poskusite znova.", "signUp": "Registracija", "pleaseChooseAtLeastChars": "Prosimo, izberite vsaj {min} znakov.", "noEmailWarning": "Prosimo, vnesite veljaven e-poštni naslov. V nasprotnem primeru ne boste mogli ponastaviti gesla. Če ne želite, tapnite gumb znova za nadaljevanje.", "pleaseEnterValidEmail": "Prosimo, vnesite veljaven e-poštni naslov.", "pleaseChooseAUsername": "Prosimo, izberite uporabniško ime", - "chooseAUsername": "Izberi uporabniško ime", "define": "Določiti", "listen": "Poslušaj", - "addConversationBot": "Omogoči pogovornega bota", - "addConversationBotDesc": "Dodajte bota v ta pogovor", - "convoBotSettingsDescription": "Uredi temo pogovora in težavnost", - "enterAConversationTopic": "Vnesite temo pogovora", - "conversationTopic": "Tema pogovora", - "enableModeration": "Omogoči moderacijo", - "enableModerationDesc": "Omogoči samodejno moderacijo za pregled sporočil, preden so poslana", - "conversationLanguageLevel": "Kakšna je jezikovna raven tega pogovora?", - "showDefinition": "Prikaži definicijo", - "subscriptionPopupTitle": "Ta stavek bi lahko imel slovnično napako...", - "subscriptionPopupDesc": "Naročite se danes, da odklenete prevajanje in popravke slovnice!", - "seeOptions": "Oglej si možnosti", - "continuedWithoutSubscription": "Nadaljuj brez naročnine", "trialPeriodExpired": "Vaš preizkusni čas je potekel", - "selectToDefine": "Kliknite na katerokoli besedo, da si ogledate njeno definicijo!", "translations": "prevodi", "messageAudio": "zvočni posnetek sporočila", "definitions": "definicije", "subscribedToUnlockTools": "Naročite se za odklepanje interaktivnega prevajanja, preverjanja slovnice, predvajanja zvoka, prilagojenih vaj in analitike učenja!", "translationTooltip": "Prevedi", - "audioTooltip": "Predvajaj zvok", "speechToTextTooltip": "Prepis", - "certifyAge": "Potrjujem, da sem starejši od {age} let", "kickBotWarning": "Odstranitev Pangea bota bo odstranila pogovornega bota iz tega klepeta.", - "joinToView": "Pridružite se tej sobi za ogled podrobnosti", "refresh": "Osveži", - "autoPlayTitle": "Samodejno predvajanje sporočil", - "autoPlayDesc": "Ko je omogočeno, bo zvočni posnetek besedila sporočil samodejno predvajan, ko ga izberete.", "messageAnalytics": "Analitika sporočil", "words": "Besede", "score": "Točke", "accuracy": "Natančnost", "points": "Točke", "noPaymentInfo": "Ni potrebnih plačilnih informacij!", - "conversationBotModeSelectDescription": "Aktivnost klepeta", - "conversationBotModeSelectOption_discussion": "Razprava", - "conversationBotModeSelectOption_custom": "Prilagojeno", - "conversationBotModeSelectOption_conversation": "Klepet", - "conversationBotModeSelectOption_textAdventure": "Besedna pustolovščina", - "conversationBotModeSelectOption_storyGame": "Zgodba igra", - "conversationBotDiscussionZone_title": "Nastavitve razprave", - "conversationBotDiscussionZone_discussionTopicLabel": "Tema razprave", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Nastavi temo razprave", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Ključne besede razprave", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Nastavi ključne besede razprave", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Seznam ključnih besed, ločen s podpičji, za usmerjanje razprave", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Pošlji poziv k razpravi po urniku", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Ure med pozivi k razpravi", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Odgovori na reakcijo ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reakcija za pošiljanje poziva k razpravi", - "conversationBotCustomZone_title": "Prilagojene nastavitve", - "conversationBotCustomZone_customSystemPromptLabel": "Sistemski poziv", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Nastavi prilagojeni sistemski poziv", - "conversationBotCustomZone_customSystemPromptEmptyError": "Manjka prilagojeni sistemski poziv", - "botConfig": "Nastavitve bota in dejavnosti", - "botConfigNoPermissionTitle": "Brez dovoljenja", - "botConfigNoPermissionMessage": "Za spremembo konfiguracije bota kontaktirajte skrbnika sobe", - "addConversationBotDialogTitleInvite": "Potrdite vabilo v pogovornega bota", - "addConversationBotButtonInvite": "Vabili", - "addConversationBotDialogInviteConfirmation": "Vabilo", - "addConversationBotButtonTitleRemove": "Potrdite odstranitev pogovornega bota", - "addConversationBotButtonRemove": "Odstrani", - "addConversationBotDialogRemoveConfirmation": "Odstrani", - "conversationBotConfigConfirmChange": "Potrdi", - "conversationBotStatus": "Vabilo bota", - "conversationBotTextAdventureZone_title": "Tekstovna avantura", - "conversationBotTextAdventureZone_instructionLabel": "Navodila za vodjo igre", - "conversationBotTextAdventureZone_instructionPlaceholder": "Nastavi navodila za vodjo igre", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Manjka navodila za vodjo igre", - "studentAnalyticsNotAvailable": "Podatki o učencu trenutno niso na voljo", - "roomDataMissing": "Nekateri podatki v sobah, v katerih niste član, so lahko manjkajoči", "updatePhoneOS": "Morda boste morali posodobiti različico operacijskega sistema naprave", "wordsPerMinute": "Besed na minuto", "autoIGCToolName": "Samodejno zaženi pomoč pri pisanju Pangea", "autoIGCToolDescription": "Samodejno zaženi pomoč pri slovnici in prevajanju v klepetu Pangea pred pošiljanjem sporočila", - "runGrammarCorrection": "Preveri sporočilo", - "grammarCorrectionFailed": "Težave za odpravo", - "grammarCorrectionComplete": "Vse v redu!", "tooltipInstructionsTitle": "Niste prepričani, kaj to naredi?", "tooltipInstructionsMobileBody": "Podrsajte in držite elemente za ogled nasvetov orodja", "tooltipInstructionsBrowserBody": "Premaknite kazalec nad elemente za ogled nasvetov orodja", "chatCapacity": "Kapaciteta klepeta", "roomFull": "Ta soba je že polna", - "topicNotSet": "Tema še ni nastavljena", - "chatCapacityNotSet": "Ta klepet nima omejitve kapacitete", "chatCapacityHasBeenChanged": "Kapaciteta klepeta je bila spremenjena", "chatCapacitySetTooLow": "Kapaciteta klepeta mora biti vsaj {count}.", "chatCapacityExplanation": "Kapaciteta klepeta omejuje število članov, ki so lahko v klepetu.", - "chatExceedsCapacity": "Ta klepet presega svojo kapaciteto.", "tooManyRequest": "Preveč zahtev, poskusite znova kasneje.", "enterNumber": "Vnesite celotno število.", "buildTranslation": "Sestavite prevod iz zgornjih možnosti", - "nonexistentSelection": "Izbor več ne obstaja.", - "changeAnalyticsLanguage": "Spremeni jezik analitike", "practice": "Vaja", "noLanguagesSet": "Jeziki niso nastavljeni", - "noActivitiesFound": "Za zdaj je to dovolj! Vrni se kasneje po več.", - "hintTitle": "Namig:", "speechToTextBody": "Za glasovne sporočila lahko vidite prepis ter oceno govora na minuto.", "versionNotFound": "Različica ni najdena", "fetchingVersion": "Pridobivanje različice...", "versionFetchError": "Napaka pri pridobivanju različice", "versionText": "Različica: {version}+{buildNumber}", - "languageButtonLabel": "Jezik: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Samodejno predvajaj prevod", - "interactiveTranslatorAutoPlayDesc": "Zažene interaktivni prevajalnik brez vprašanja.", - "changeAnalyticsView": "Spremeni pogled analitike", "l1TranslationBody": "Sporočila v vašem osnovnem jeziku ne bodo prevedena.", "deleteSubscriptionWarningTitle": "Imate aktivno naročnino", "deleteSubscriptionWarningBody": "Brisanje vašega računa ne bo samodejno preklicalo vaše naročnine.", @@ -2125,9 +1767,7 @@ "error520Title": "Poskusite znova.", "error520Desc": "Oprostite, nismo mogli razumeti vaše sporočilo...", "wordsUsed": "Uporabljene besede", - "errorTypes": "Vrste napak", "level": "Raven", - "canceledSend": "Pošiljanje preklicano", "morphsUsed": "Uporabljeni morfi", "translationChoicesBody": "Kliknite in držite možnost za namig.", "grammar": "Slovnica", @@ -2137,7 +1777,6 @@ "reportContentIssueTitle": "Prijavi težavo s vsebino", "feedback": "Neobvezni povratni odziv", "reportContentIssueDescription": "Oh ne! Umetna inteligenca lahko olajša prilagojene učne izkušnje, vendar... tudi halucinira. Prosimo, da podate kakršne koli povratne informacije in poskusili bomo znova.", - "changeContent": "Oh ne! Umetna inteligenca lahko olajša prilagojene učne izkušnje, vendar... tudi halucinira. Kaj naj bo?", "clickTheWordAgainToDeselect": "Kliknite izbrano besedo, da jo odznačite.", "l2SupportNa": "Ni na voljo", "l2SupportAlpha": "Alpha", @@ -2371,7 +2010,6 @@ "grammarCopySPC": "Specifičnost", "grammarCopyPARTTYPE": "Delni tip", "grammarCopyINTREL": "Vprašalno-odnosen", - "grammarCopyNUMFORMpsor": "Število lastnika", "grammarCopyUNKNOWN": "Neznano", "grammarCopyNUMBERPSOR": "Število lastnika", "grammarCopyPOSS": "Vlastniško", @@ -2417,28 +2055,14 @@ "grammarCopyVOICEdir": "Neposredni", "grammarCopyVOICEinv": "Obratno", "grammarCopyVOICErcp": "Medsebojno", - "enterPrompt": "Vnesite sistemski poziv", - "selectBotLanguage": "Izberi jezik bota", - "chooseVoice": "Izberi glas", - "enterLanguageLevel": "Vnesite raven jezika", - "enterDiscussionTopic": "Vnesite temo razprave", - "selectBotChatMode": "Izberi način klepeta", - "messageNotInTargetLang": "Sporočilo ni v ciljnem jeziku", "other": "Drugo", "levelShort": "RAV {level}", - "botModeValidation": "Prosimo, izberite način klepeta", "clickBestOption": "Izberite najboljše možnosti za prevod vašega sporočila!", "completeActivitiesToUnlock": "Dokončajte vsaj eno dejavnost za odklepanje prevoda!", - "botSettingsSubtitle": "Vabilo botu za moderiranje dejavnosti klepeta", - "invitePeople": "Vabi uporabnike", "noCapacityLimit": "Brez omejitve zmogljivosti", "downloadGroupText": "Prenesi skupinsko besedilo", "notificationsOn": "Obvestila vključena", "notificationsOff": "Obvestila izključena", - "chatCanBeFoundViaSearch": "Klepet je mogoče najti z iskanjem", - "requireCodeToJoin": "Zahtevajte kodo za pridružitev", - "canFindInSearch": "Lahko najdete v iskanju", - "addChatToSpace": "Dodaj klepet", "createChatAndInviteUsers": "Ustvari klepet in povabi uporabnike", "updatedNewSpaceDescription": "Tečaji vam omogočajo, da združite svoje klepete in zgradite zasebne ali javne skupnosti.", "joinWithCode": "Pridruži se s kodo", @@ -2474,39 +2098,19 @@ "constructUseCollected": "Zbrano v klepetu", "constructUseNanDesc": "Ni primerno", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Prijava z uporabniškim imenom in geslom", - "registrationEmailMessage": "Prosimo, preverite svoj e-poštni naslov s povezavo, poslano tja. V nekaterih primerih traja do 5 minut, da prispe. Prav tako preverite mapo z vsiljeno pošto.", "enableTTSToolName": "Omogočeno besedilno pretvarjanje v govor", "enableTTSToolDescription": "Dovolite aplikaciji, da generira izhod besedilnega pretvarjanja v govor za dele besedila v vašem ciljnem jeziku.", - "couldNotFindTTS": "Za vaš trenutni ciljni jezik nismo našli motorja za pretvarjanje besedila v govor.", - "ttsInstructionsHyperlink": "Kliknite tukaj za ogled navodil za prenos novega glasu na vašo napravo.", - "createAnAccount": "Ustvarite račun", - "signIn": "Prijavite se", - "signUpWithEmail": "Registrirajte se z e-pošto", - "signUpWithGoogle": "Registrirajte se z Googleom", - "signUpWithApple": "Registrirajte se z Apple-om", "yourUsername": "Vaše uporabniško ime", "yourEmail": "Vaš e-poštni naslov", - "pleaseEnterAnEmail": "Vnesite e-poštni naslov", - "signInWithGoogle": "Prijavite se z Googleom", - "signInWithApple": "Prijavite se z Apple-om", - "chooseYourAvatar": "Izberite svoj avatar", "iWantToLearn": "Želim se učiti", - "letsStart": "Začnimo", - "pleaseAgreeToTOS": "Prosimo, strinjajte se s pogoji in določili", "pleaseEnterEmail": "Vnesite veljaven e-poštni naslov.", - "pleaseSelectALanguage": "Izberite jezik", "myBaseLanguage": "Moj osnovni jezik", - "clickWordsInstructions": "🧻 Kliknite katerokoli besedo za podrobnosti. 🤐", - "chooseBestDefinition": "Kaj pomeni ta beseda?", "meaningSectionHeader": "Pomen:", "formSectionHeader": "Oblike, uporabljene v klepetih:", - "noEmojiSelectedTooltip": "Ni izbrane emojije", "writingExercisesTooltip": "Pisanje", "listeningExercisesTooltip": "Poslušanje", "readingExercisesTooltip": "Branje", "meaningNotFound": "Pomen ni bilo mogoče najti.", - "formsNotFound": "Oblik ni bilo mogoče najti.", "chooseBaseForm": "Izberi osnovno obliko", "notTheCodeError": "Oprostite, to ni koda!", "totalXP": "Skupni XP", @@ -2546,9 +2150,6 @@ "pickAnEmoji": "Katero emoji je vaše najljubše za '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Ujemajte pomene z besedami v sporočilu!", "doubleClickToEdit": "Dvakrat kliknite za urejanje.", - "removeFeature": "Odstrani {feature}", - "chooseCorrectLabel": "Izberi pravilen oznako.", - "levelPopupTitle": "Čestitamo za dosego\nravni {level}", "activityPlannerTitle": "Načrtovalec dejavnosti", "topicLabel": "Tema", "topicPlaceholder": "Izberi temo...", @@ -2556,7 +2157,6 @@ "modePlaceholder": "Izberi način...", "learningObjectiveLabel": "Učni cilj", "learningObjectivePlaceholder": "Izberi učni cilj...", - "mediaLabel": "Medijske učne vsebine, ki jih je treba deliti", "languageOfInstructionsLabel": "Jezik navodil za dejavnost", "targetLanguageLabel": "Ciljni jezik", "cefrLevelLabel": "Raven CEFR", @@ -2571,20 +2171,15 @@ "instructions": "Navodila", "numberOfLearners": "Število učencev", "mustBeInteger": "Mora biti celo število, npr. 1, 2, 3, ...", - "noLemmasFound": "Ni besed, ki bi imele več kot {xp} XP. Nadaljuj z vadbo!", "constructUsePvmDesc": "Ustvarjeno v zvočni sporočilu", - "lockedMorphFeature": "Čaka na odklep", "leaveSpaceDescription": "Če zapustite tečaj, boste zapustili vse klepete znotraj njega. Drugi uporabniki bodo videli, da ste zapustili tečaj.", - "whatIsLemma": "Kaj je lemma?", "constructUseCorMmDesc": "Pravilno pomen sporočila", "constructUseIncMmDesc": "Napačen pomen sporočila", "constructUseIgnMmDesc": "Prezrti pomen sporočila", "clickForMeaningActivity": "Kliknite tukaj za izziv pomena", "meaning": "Pomen", "chatWith": "Skupina z {displayname}", - "slightlyOffensive": "Rahlo žaljivo", "clickOnEmailLink": "Prosimo, kliknite na povezavo v e-pošti in nadaljujte.\n\nPreverite mapo z vsiljeno pošto, če e-pošta ni prispela.", - "whoIsAllowedToJoinThisChat": "Kdo sme sodelovati v tem klepetu", "dontForgetPassword": "Ne pozabite gesla!", "enableAutocorrectToolName": "Omogoči samodejno popravljanje na napravi", "enableAutocorrectDescription": "Če vaša naprava podpira jezik, ki ga učite, lahko omogočite samodejno popravljanje, da popravlja pogoste napake med tipkanjem.", @@ -2612,48 +2207,26 @@ "autocorrectNotAvailable": "Na žalost vaša platforma trenutno ni podprta za to funkcijo. Ostanite z nami za nadaljnji razvoj!", "pleaseUpdateApp": "Prosimo, posodobite aplikacijo za nadaljevanje.", "chooseEmojiInstructionsBody": "Ujemajte emojije z besedami, ki jih najbolje predstavljajo. Ne skrbite! Ni kazni za nesoglasje. 😅", - "pickAnEmojiFor": "Izberi emojij za {lemma}", "analyticsVocabListBody": "To je vaš celoten besednjak! Ko boste zaslužili XP za vsako besedo, bo ta od semena do polnega cveta. Kliknite katerokoli besedo za več podrobnosti.", "morphAnalyticsListBody": "To so vsi slovnični koncepti v jeziku, ki ga učite! Odprli jih boste, ko jih boste srečali med klepetom. Kliknite za podrobnosti.", "knockSpaceSuccess": "Zahtevali ste, da se pridružite temu tečaju! Administrator bo odgovoril na vašo zahtevo, ko jo bo prejel 😀", - "joinByCode": "Pridruži se s kodo", "chooseWordAudioInstructionsBody": "Poslušajte celotno sporočilo. Nato ujemajte zvočne posnetke z besedami.", "chooseMorphsInstructionsBody": "Kliknite na sestavljene dele za vprašanja o slovnici!", - "inviteAndLaunch": "Vabilo in zagon", - "createOwnChat": "Ustvari svoj klepet", "pleaseEnterInt": "Vnesite številko", "home": "Domov", "join": "Pridruži se", "readingAssistanceOverviewBody": "Kliknite na gumbe spodaj za mini igre o ujemanju emojijev, zvočnih posnetkov, pomenov besed in slovničnih konceptov. Ali pa kliknite na katero koli besedo za podrobnosti.", - "learnByTexting": "Uči se s pošiljanjem sporočil", - "levelSummaryTrigger": "Ogled povzetka", "levelSummaryPopupTitle": "Povzetek ravni {level}", - "referFriends": "Priporočite prijatelje", - "referFriendDialogTitle": "Vabite prijatelja v vaš pogovor", - "referFriendDialogDesc": "Ali imate prijatelja, ki je navdušen nad učenjem novega jezika z vami? Nato kopirajte in pošljite ta povabilo povezavo, da se pridruži in začne klepet z vami danes.", - "youUnlocked": "Odklenili ste", "resetInstructionTooltipsTitle": "Ponastavi nasvete za navodila", "resetInstructionTooltipsDesc": "Kliknite, da prikažete nasvete za navodila, kot za popolnega novega uporabnika.", "selectForGrammar": "Izberite ikono slovnice za dejavnosti in podrobnosti.", - "newChatActivityTitle": "Dodajte zabavno dejavnost?", - "newChatActivityDesc": "Naredite vsako skupinsko pogovorno izkušnjo z načrtovalcem dejavnosti! Nastavite privlačne teme in cilje za skupino ter oživite pogovore s čudovitimi slikami. Spodbujajte domišljijske razprave in ohranjajte zabavo brez napora!", - "exploreMore": "Raziskuj več", "randomize": "Naključno", "clear": "Počisti", "makeYourOwnActivity": "Ustvarite svojo dejavnost", "featuredActivities": "Prikazano", - "goToChat": "Pojdi v pogovor", "save": "Shrani", - "selectActivity": "Izberi dejavnost", - "wordFocusListeningMultipleChoice": "Katera zvočna datoteka ustreza besedi?", "startChat": "Začni pogovor", "translationProblem": "Težava pri prevajanju", - "perfectTranslation": "Popoln prevod!", - "greatJobTranslation": "Odlično delo s tem prevodom!", - "goodJobTranslation": "Dober rezultat pri tem prevodu.", - "makingProgress": "Napredujete!", - "keepPracticing": "Vaja nadaljujte!", - "niceJob": "Dober job!", "askToJoin": "Prosi za vstop", "emptyChatWarningTitle": "Pogovor je prazen", "emptyChatWarningDesc": "Niste povabili nikogar v svoj klepet. Pojdite na nastavitve klepeta, da povabite svoje stike ali bota. To lahko storite tudi kasneje.", @@ -2672,8 +2245,6 @@ "languageLevelC2Desc": "Razumem praktično vse, kar slišim ali preberem, in se izražam tekoče ter natančno.", "newVocab": "Nove besede", "newGrammar": "Novi slovnični koncepti", - "congratulationsOnReaching": "Dosegli ste raven {level}!", - "seeDetails": "Poglej podrobnosti", "choosePracticeMode": "Kliknite na eno od zgornjih gumbov za začetek vaje", "ban": "Blokiraj", "unban": "Odobri blokado", @@ -2687,8 +2258,6 @@ "timesUsedWithAssistance": "Št. uporabe z pomočjo", "shareInviteCode": "Deli kodo povabila: {code}", "leaderboard": "Lestvica", - "welcomeUser": "Dobrodošel {user}", - "joinSpaceOnboardingDesc": "Ali imate kodo ali povezavo za javni tečaj?", "skipForNow": "Za zdaj preskoči", "permissions": "Dovoljenja", "spaceChildPermission": "Kdo lahko doda nove pogovore v ta tečaj", @@ -2696,12 +2265,8 @@ "defaultOption": "Privzeto", "deleteChatDesc": "Ali ste prepričani, da želite izbrisati ta pogovor? Izbrisal se bo za vse udeležence in vsi sporočili v pogovoru ne bodo več na voljo za prakso ali analitiko učenja.", "deleteSpaceDesc": "Tečaj in vsi izbrani pogovori bodo izbrisani za vse udeležence in vsi sporočili v pogovoru ne bodo več na voljo za prakso ali analitiko učenja. Ta dejanja ni mogoče razveljaviti.", - "chatWithActivities": "Klepet z dejavnostmi", "launch": "Zaženi", - "launchActivityToChats": "Zaženi dejavnost v klepetih", "searchChats": "Išči klepete", - "selectChats": "Izberi klepete", - "selectChatToStart": "Dokončano! Izberi klepet za začetek", "maxFifty": "Največ 50", "configureSpace": "Konfiguriraj tečaj", "pinMessages": "Pripni sporočila", @@ -2715,9 +2280,7 @@ "announcements": "Obvestila", "activities": "Dejavnosti", "access": "Dostop", - "botSettings": "Nastavitve bota", "activitySuggestionTimeoutMessage": "Trdo delamo, da vam ponudimo več dejavnosti, prosimo, preverite čez minuto", - "accessSettingsWarning": "Ups! Zdi se, da nimate dovoljenja za nastavitev pravil dostopa do te sobe. Preverite jih, da se prepričate, da so takšna, kot jih potrebujete, in se pogovorite z administratorjem sobe, če jih želite spremeniti", "howSpaceCanBeFound": "Kako je mogoče najti ta tečaj", "private": "Zasebno", "cannotBeFoundInSearch": "Ne more biti najdeno v iskanju", @@ -2730,16 +2293,6 @@ "canBeFoundViaKnock": "• zahteve za pridružitev in odobritev administratorja", "youHaveLeveledUp": "Napredovali ste!", "sendActivities": "Pošlji dejavnosti", - "getStarted": "Začni", - "getStartedBotChatDesc": "Klepet z AI je odličen začetek, orodja Pangea za branje, pisanje, poslušanje in govorjenje pa vam to olajšajo!", - "getStartedCommunitiesDesc": "Učenje z skupnostjo je tam, kjer Pangea Chat zares shine! \nLahko se pridružite svojemu razredu, najdete tečaj ali celo ustvarite svoj!", - "getStartedFriendsDesc": "Ali imate prijatelja, ki želi učiti z vami?", - "getStartedBotChatComplete": "Dobro opravljeno! Klepetate z botom!", - "getStartedCommunitiesComplete": "Odlično, pridružili ste se tečaju!", - "getStartedComplete": "Dokončali ste ta razdelek!\nNadaljujte z raziskovanjem naših čudovitih funkcij z klepetom s prijatelji!", - "getStartedFriendsComplete": "Uau! Imate prijatelje! 😉", - "getStartedBotChatButton": "Začni klepet!", - "getStartedFriendsButton": "Klepet z prijateljem", "groupChat": "Skupinski klepet", "directMessage": "Neposredna sporočila", "newDirectMessage": "Novo neposredno sporočilo", @@ -2755,7 +2308,6 @@ "mySavedActivities": "Moje shranjene dejavnosti", "noSavedActivities": "Ni shranjenih dejavnosti", "saveActivity": "Shrani to dejavnost", - "yourSavedActivities": "Shranjene dejavnosti", "failedToPlayVideo": "Ne uspe prikazati videoposnetka", "done": "Dokončano", "inThisSpace": "V tem prostoru", @@ -2794,37 +2346,27 @@ "maximumActivityParticipants": "Vsaka dejavnost lahko ima največ {count} udeleženca/-ev).", "pending": "V obravnavi", "inactive": "Neaktivno", - "unjoinedActivityMessage": "Želite sodelovati? Izberite odprto vlogo!\nAli pa se družite in gledajte predstavo!", - "fullActivityMessage": "Veselite se predstave! Čeprav ni odprtih vlog za sodelovanje, si lahko ogledate klepet!", "confirmRole": "Potrdi vlogo", "openRoleLabel": "ODPRTO", "joinedTheActivity": "👋 {username} se je pridružil kot {role}", "finishedTheActivity": "🎯 {username} je zaključil to dejavnost", - "endActivityTitle": "Sem končal", - "endActivityDesc": "Ste dokončali cilje?\nTo je vaše potrdilo, da se umikate od pogovora. Ampak ne skrbite, zabava se nadaljuje v klepetu! Prosto se družite in uživajte v predstavi, dokler vsi ne kliknejo 'Končano'.", "archiveToAnalytics": "Dodaj v moje zaključene dejavnosti", "activitySummaryError": "Povzetki dejavnosti niso na voljo", "requestSummaries": "Zahtevaj povzetke", - "loadingActivitySummary": "Nalaganje povzetka dejavnosti...", "generatingNewActivities": "Ste prvi uporabnik tega jezika! Prosim, vzemite si minuto, pripravljamo dejavnosti prav za vas.", - "requestAccessTitle": "Želite zaprositi za dostop do analitike?", + "requestAccessTitle": "Zahtevaj dostop do analitike?", "requestAccessDesc": "Ali želite zaprositi za dostop do ogledanja analitike udeležencev?\n\nČe se udeleženci strinjajo, bodo skrbniki tega tečaja lahko videli:\n • skupni slovar\n • skupne gramatične koncepte\n • število opravljenih dejavnosti\n • specifične uporabljene gramatične koncepte, pravilno in nepravilno\n\nNe bodo mogli videti:\n • sporočil v klepetih zunaj tečaja\n • seznam slovarja", "requestAccess": "Zahtevaj dostop ({count})", "analyticsInactiveTitle": "Zahtevki za neaktivne uporabnike niso bili poslani", "analyticsInactiveDesc": "Neaktivni uporabniki, ki se niso prijavili od uvedbe te funkcije, ne bodo videli vašega zahtevka.\n\nGumb Zaženi se bo pojavil, ko se vrnejo. Kasneje lahko ponovno pošljete zahtevo s klikom na gumb Zaženi pod njihovim imenom, ko bo na voljo.", "accessRequestedTitle": "Zahteva za dostop do analitike", - "accessRequestedDesc": "Skrbniki prostora “{space}” zahtevajo ogled vaših učnih analitik.\n\nČe se strinjate, bodo skrbniki tega tečaja lahko videli:\n • skupni slovar\n • skupne gramatične koncepte\n • število opravljenih dejavnosti\n • specifične uporabljene gramatične koncepte, pravilno in nepravilno\n\nNe bodo mogli videti:\n • sporočil v klepetih zunaj tečaja\n • seznam slovarja", - "allowAccess": "Dovoli dostop", - "denyAccess": "Zavrni dostop", + "accessRequestedDesc": "Zahtevajo admini: {admin} \n\nAdmini iz “{space}” zahtevajo ogled vaših analitik učenja.\n\nČe se strinjate, bodo lahko videli vaše:\n • skupno besedišče\n • skupne slovnične koncepte\n • skupno število zaključenih aktivnosti\n • specifične slovnične koncepte, uporabljene pravilno in nepravilno\n\nNe bodo mogli videti vaših:\n • sporočil v klepetih zunaj tečaja\n • seznama besed", "adminRequestedAccess": "Administratorji so zaprosili za ogled vaših analiz.", "lastUpdated": "Posodobljeno\n{time}", "activityFinishedMessage": "Vse je končano!", "endForAll": "Končaj za vse", "newCourse": "Nov tečaj", - "newCourseSubtitle": "Katero načrtovanje tečaja želite uporabiti?", - "failedToLoadCourses": "Ni bilo mogoče naložiti tečajev", "numModules": "{num} modulov", - "numActivityPlans": "{num} načrtov dejavnosti", "coursePlan": "Načrt tečaja", "editCourseLater": "Lahko kasneje uredite naslov predloge, opise in sliko tečaja.", "newCourseAccess": "Privzeto so tečaji zasebni in zahtevajo odobritev administratorja za vstop. Te nastavitve lahko kadar koli uredite.", @@ -2838,17 +2380,11 @@ "accessDesc": "Lahko naredite svoj tečaj odprt za svet! Ali pa, naredite svoj tečaj zaseben in varen.", "createGroupChatDesc": "Medtem ko se aktivnosti začnejo in končajo, bodo skupinski klepeti ostali odprti za rutinsko komunikacijo.", "deleteDesc": "Samo skrbniki lahko izbrišejo tečaj. To je uničujoča dejanje, ki odstrani vse uporabnike in izbriše vse izbrane klepete znotraj tečaja. Bodite previdni.", - "failedToLoadCourseInfo": "Ni bilo mogoče naložiti informacij o tečaju", "noCourseFound": "O, ta tečaj potrebuje načrt!\n\nNačrti tečaja so zaporedje tem in dejavnosti pogovorov.", "additionalParticipants": "+ {num} drugih", - "activityNotFoundForCourse": "Te dejavnosti ni bilo mogoče najti v tečaju", - "courseChats": "Klepeti tečaja", - "myActivitySessions": "Moje seje dejavnosti", "directMessages": "Neposredna sporočila", "whatNow": "Kaj zdaj?", "chooseNextActivity": "Izberi svojo naslednjo dejavnost!", - "seeInstructions": "Poglej navodila", - "hideInstructions": "Skrij navodila", "letsGo": "Gremo", "chooseRole": "Izberi vlogo!", "chooseRoleToParticipate": "Izberi vlogo za sodelovanje!", @@ -2858,23 +2394,15 @@ "inviteFriends": "Vabite prijatelje", "waitNotDone": "Počakaj, še nisem končal!", "waitingForOthersToFinish": "Čakam, da ostali zaključijo...", - "saveToCompletedActivities": "Shrani v zaključene dejavnosti", "generatingSummary": "Analiziram klepet in ustvarjam rezultate", - "instructionsLanguage": "Jezik navodil", "findCourse": "Najdi tečaj", - "activityCompletedDesc": "Vaša zaključena dejavnost je bila dodana v analitiko, kjer lahko pregledate in vadite jezik, ki ste ga uporabili.", "pingParticipantsNotification": "{user} išče uporabnike za sodelovanje v aktivnosti v {room}", "course": "Tečaj", "courses": "Tečaji", "courseName": "Ime tečaja", "createNewCourse": "Nov tečaj", - "publicCourses": "Javni tečaji", "goToCourse": "Pojdi na tečaj: {course}", "activityComplete": "Ta dejavnost je zaključena. Povzetek dejavnosti bi moral biti na voljo spodaj.", - "haventChattedMuch": "Zdi se, da niste veliko klepetali, poskusite uporabiti še nekaj besed! Če menite, da ste dosegli svoj cilj, lahko dejavnost zaključite spodaj.", - "haveChatted": "Zdi se, da ste že nekaj časa klepetali! Če menite, da ste dosegli svoj cilj, zaključite dejavnost in ustvarili vam bomo povzetek v klepetu!", - "userDoneAndWaiting": "{num1}/{num2} udeležencev je zaključilo. Počakajte, da vsi zaključijo, in ustvarili vam bomo povzetek v klepetu! \n\nČe želite ponovno sodelovati v pogovoru, kliknite na gumb za nadaljevanje v klepetu.", - "othersDoneAndWaiting": "{num1}/{num2} je zaključilo. Ste dosegli svoj cilj?", "startNewSession": "Začni novo sejo", "joinOpenSession": "Pridruži se odprti seji", "less": "manj", @@ -2884,7 +2412,6 @@ "openToJoin": "Odprto za pridružitev", "results": "Rezultati", "activityDone": "Dejavnost zaključena!", - "moreLabel": "več", "promoCodeInfo": "Kodo za promocijo lahko vnesete na naslednji strani", "editsComingSoon": "Funkcija za urejanje mest in dejavnosti bo kmalu na voljo.", "editing": "Urejanje", @@ -2900,13 +2427,10 @@ "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", - "chooseLanguage": "Izberite jezik.", + "chooseLanguage": "Izberite ciljni jezik.", "planTrip": "Načrtujte svoje potovanje", "howAreYouTraveling": "Kako potujete?", "unlockPrivateTrip": "Odklenite zasebno potovanje", @@ -2919,25 +2443,20 @@ "courseCode": "Kakšno je skrivno geslo?", "courseCodeHint": "Potovalna šifra ali povezava", "unlockMyTrip": "Odkleni moje potovanje", - "anyLevel": "Katera koli raven", "signupOption": "Kako se želiš prijaviti?", "withApple": "Z Apple-om", "withGoogle": "Z Google-om", "withEmail": "Z e-pošto", "createAccount": "Ustvari račun", - "noCoursesFound": "Ni najdenih tečajev", "loginWithEmail": "Prijava z e-pošto", "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", - "allCefrLevels": "Vse ravni CEFR", "chatListTooltip": "Tukaj boste našli svoja neposredna sporočila! Kliknite na avatar katerega koli uporabnika in izberite »začni pogovor«, da pošljete DM.", "directMessageBotTitle": "Neposredno sporočilo Pangea Bot", "feedbackTitle": "Povratne informacije o dejavnosti", - "feedbackDesc": "Kako naj izboljšamo dejavnost? Če lahko zagotovite nekaj podrobnosti, bomo naredili spremembo!", "feedbackHint": "Vaše povratne informacije", "feedbackButton": "Pošlji povratne informacije", "directMessageBotDesc": "Govorenje z ljudmi je bolj zabavno, a... AI je vedno pripravljen!", @@ -2945,7 +2464,7 @@ "playWithAI": "Za zdaj igrajte z AI-jem", "courseStartDesc": "Pangea Bot je pripravljen kadarkoli!\n\n...ampak je bolje učiti se s prijatelji!", "@@locale": "sl", - "@@last_modified": "2026-01-06 13:01:36.111015", + "@@last_modified": "2026-01-07 14:25:29.847675", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6078,30 +5597,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6125,18 +5620,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6161,18 +5644,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6209,38 +5680,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6249,62 +5692,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6341,10 +5740,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6353,14 +5748,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6369,46 +5756,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6417,10 +5768,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6477,18 +5824,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6497,14 +5832,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6533,18 +5860,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6553,42 +5868,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6597,14 +5880,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6625,26 +5900,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6665,10 +5920,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6701,25 +5952,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6776,34 +6008,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6832,778 +6036,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8596,14 +7032,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8615,14 +7043,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8654,10 +7074,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8666,18 +7082,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8686,14 +7090,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8718,38 +7114,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8795,10 +7163,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8823,10 +7187,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8851,10 +7211,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8863,66 +7219,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8943,42 +7243,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9003,154 +7279,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9167,18 +7295,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9199,14 +7315,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9223,10 +7331,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9239,14 +7343,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9255,14 +7351,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9290,26 +7378,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9338,18 +7406,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9386,10 +7446,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10322,10 +8378,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10506,34 +8558,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10546,10 +8570,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10558,14 +8578,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10582,22 +8594,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10745,14 +8741,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10761,34 +8749,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10797,54 +8757,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10853,10 +8777,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10873,10 +8793,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11048,26 +8964,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11096,10 +8992,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11156,30 +9048,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11208,18 +9084,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11336,14 +9204,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11356,10 +9216,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11368,14 +9224,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11392,14 +9240,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11408,22 +9248,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11436,18 +9260,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11464,22 +9276,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11488,30 +9288,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11584,18 +9360,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11652,18 +9416,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11692,30 +9444,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11768,18 +9504,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11828,46 +9556,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11932,10 +9620,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12107,14 +9791,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12142,14 +9818,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12162,10 +9830,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12201,19 +9865,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12238,14 +9897,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12254,14 +9905,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12314,10 +9957,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12330,18 +9969,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12354,14 +9981,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12402,26 +10021,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12449,10 +10056,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12463,36 +10066,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12529,10 +10102,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12597,18 +10166,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12673,10 +10230,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12697,10 +10250,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12717,10 +10266,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12729,10 +10274,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12745,10 +10286,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12773,16 +10310,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Vabite prijatelje k aktivnosti", - "inviteFriendsToActivityCourse": "Vabite prijatelje k aktivnosti in tečaju", "feedbackRespDesc": "Vrnite se jutri za posodobitve aktivnosti.", "activityDropdownDesc": "Ko končate s to aktivnostjo, kliknite spodaj", - "activityAnalyticsListBody": "To so vaše zaključene aktivnosti! Po končani aktivnosti jih lahko ogledate tukaj.", "languageMismatchTitle": "Neujemanje jezika", "languageMismatchDesc": "Vaš ciljni jezik se ne ujema z jezikom te aktivnosti. Posodobiti ciljni jezik?", "reportWordIssueTooltip": "Prijavi težavo z informacijami o besedi", "tokenInfoFeedbackDialogTitle": "Povratne informacije o informacijah o besedi", - "tokenInfoFeedbackDialogDesc": "AI dela napake. Prosimo, opišite morebitne težave z zgornjimi informacijami.", "noPublicCoursesFound": "Ni najdenih javnih tečajev. Bi želeli ustvariti enega?", "noCourseTemplatesFound": "Nismo mogli najti tečajev za vaš ciljni jezik. Medtem lahko klepetate z Pangea Botom in kasneje preverite več tečajev.", "botActivityJoinFailMessage": "Pangea Bot se odziva nekoliko počasi. Poskusite znova kasneje ali povabite prijatelja.", @@ -12790,14 +10323,6 @@ "leaveDesc": "Zapusti ta prostor in vse klepete znotraj njega", "selectAll": "Izberi vse", "deselectAll": "Prekliči izbor vseh", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12806,10 +10331,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12826,10 +10347,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12863,7 +10380,6 @@ "newMessageInPangeaChat": "🗨️ Nova sporočilo v klepetu Pangea", "shareCourse": "Deli tečaj", "addCourse": "Dodaj tečaj", - "joinCourseWithCode": "Pridruži se tečaju z geslom", "joinPublicCourse": "Pridruži se javnemu tečaju", "vocabLevelsDesc": "Tukaj bodo šle besede za besednjak, ko jih boste nadgradili!", "highlightVocabTooltip": "Označite ciljne besede spodaj tako, da jih pošljete ali vadite z njimi v klepetu", @@ -12887,10 +10403,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12899,7 +10411,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Ni neposrednih sporočil ali klepetov. Prepričajte se, da je vaše iskanje pravilno napisano.", + "activityAnalyticsTooltipBody": "To so vaše shranjene dejavnosti za pregled in vadbo.", + "numSavedActivities": "Število shranjenih dejavnosti", + "saveActivityTitle": "Shrani dejavnost", + "saveActivityDesc": "Dobra opravljena! Shranite to dejavnost za kasnejši pregled in vadbo", + "levelInfoTooltip": "Tukaj lahko vidite vse točke, ki ste jih zaslužili, in kako!", + "alreadyInCourseWithID": "Že ste v tečaju s tem načrtom. Ali želite ustvariti tečaj s istim načrtom ali iti na obstoječi tečaj?", + "goToExistingCourse": "Pojdi na obstoječi tečaj", + "emojiView": "Pogled emojijev", + "feedbackDialogDesc": "Tudi jaz delam napake! Kaj lahko storim, da se izboljšam?", + "contactHasBeenInvitedToTheCourse": "Kontakt je bil povabljen na tečaj", + "activityStatsButtonTooltip": "Informacije o dejavnosti", + "allow": "Dovoli", + "deny": "Zavrni", + "enabledRenewal": "Omogoči obnavljanje naročnine", + "subscriptionEndsOn": "Naročnina se konča", + "subscriptionRenewsOn": "Naročnina se obnavlja", + "waitForSubscriptionChanges": "Spremembe vaše naročnine lahko trajajo trenutek, da se odražajo v aplikaciji.", + "subscribeReadingAssistance": "Naročite se za odklepanje orodij za sporočanje", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharščina", + "arDisplayName": "Arabščina", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbejdžanščina", + "baDisplayName": "Baškirščina", + "banDisplayName": "Balinéska", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Beloruščina", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bolgarščina", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalščina", + "bnBDDisplayName": "Bengalščina (Bangladeš)", + "bnINDisplayName": "Bengalščina (Indija)", + "brDisplayName": "Bretonščina", + "bsDisplayName": "Bošnjaščina", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriatščina", + "caDisplayName": "Katalonščina", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centralni kurdski", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korzikanščina", + "crhDisplayName": "Krimsko-turški", + "crsDisplayName": "Seselwa kreolski francoski", + "csDisplayName": "Češčina", + "cvDisplayName": "Čuvaš", + "cyDisplayName": "Welščina", + "daDisplayName": "Dansko", + "deDisplayName": "Nemščina", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Angleščina", + "enAUDisplayName": "Angleščina (Avstralija)", + "enGBDisplayName": "Angleščina (VB)", + "enINDisplayName": "Angleščina (Indija)", + "enUSDisplayName": "Angleščina (ZDA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Španščina", + "esESDisplayName": "Španščina (Španija)", + "esMXDisplayName": "Španščina (Mehika)", + "euDisplayName": "Baskovščina", + "faDisplayName": "Perzijščina", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finščina", + "filDisplayName": "Filipino", + "fjDisplayName": "Fidžijski", + "foDisplayName": "Faroese", + "frDisplayName": "Francoščina", + "frCADisplayName": "Francoščina (Kanada)", + "frFRDisplayName": "Francoščina (Francija)", + "fyDisplayName": "Zahodni Frisian", + "gaDisplayName": "Irščina", + "gaaDisplayName": "Ga", + "gdDisplayName": "Škotska gailiččina", + "glDisplayName": "Galicijanščina", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goanski konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Havajščina", + "heDisplayName": "Hebrejščina", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Hrvaški", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitijska kreolščina", + "huDisplayName": "Madžarščina", + "hyDisplayName": "Armenščina", + "idDisplayName": "Indonezijščina", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Islandščina", + "itDisplayName": "Italijanski", + "jaDisplayName": "Japonščina", + "jvDisplayName": "Javanski", + "kaDisplayName": "Gruzijski", + "kkDisplayName": "Kazahščina", + "kmDisplayName": "Khmerščina", + "knDisplayName": "Kannada", + "koDisplayName": "Korejščina", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kašmirski", + "ktuDisplayName": "Kituba (Demokratična republika Kongo)", + "kuDisplayName": "Kurdščina", + "kyDisplayName": "Kirgizščina", + "laDisplayName": "Latinščina", + "lbDisplayName": "Luksemburščina", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburščina", + "lijDisplayName": "Ligurščina", + "lmoDisplayName": "Lombardščina", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litovščina", + "ltgDisplayName": "Latgale", + "luoDisplayName": "Luo (Kenija in Tanzanija)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Latvijščina", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaščina", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonski", + "mlDisplayName": "Malajalam", + "mnDisplayName": "Mongolščina", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malajščina", + "msArabDisplayName": "Malajščina (arabščina)", + "msMYDisplayName": "Malajščina (Malezija)", + "mtDisplayName": "Malteščina", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmansko", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norveščina (Bokmål)", + "neDisplayName": "Nepalščina", + "newDisplayName": "Newari", + "nlDisplayName": "Nizozemščina", + "nlBEDisplayName": "Flamsko", + "noDisplayName": "Norveščina", + "nrDisplayName": "Južni Ndebele", + "nsoDisplayName": "Severni Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitanska", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poljščina", + "psDisplayName": "Pašto", + "ptDisplayName": "Portugalščina", + "ptBRDisplayName": "Portugalščina (Brazilija)", + "ptPTDisplayName": "Portugalščina (Portugalska)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Romunščina", + "roMDDisplayName": "Moldavščina", + "romDisplayName": "Romščina", + "ruDisplayName": "Ruščina", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrt", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilijanščina", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovaščina", + "slDisplayName": "Slovenščina", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somalščina", + "sqDisplayName": "Albanščina", + "srDisplayName": "Srbščina", + "srMEDisplayName": "Črnogorski", + "ssDisplayName": "Svati", + "stDisplayName": "Južni Sotho", + "suDisplayName": "Sundanski", + "svDisplayName": "Švedski", + "swDisplayName": "Svahili", + "szlDisplayName": "Silezijski", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tadžik", + "thDisplayName": "Tajski", + "tiDisplayName": "Tigrinija", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turški", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Ujgurski", + "ukDisplayName": "Ukrajinščina", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indija)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbeščina", + "viDisplayName": "Vietnamščina", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Jukatek", + "yueDisplayName": "Kantonsko", + "yueCNDisplayName": "Kantonsko (Kitajska)", + "yueHKDisplayName": "Kantonsko (Hongkong)", + "zhDisplayName": "Kitajščina", + "zhCNDisplayName": "Kitajščina (poenostavljena)", + "zhTWDisplayName": "Kitajščina (tradicionalna)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12966,6 +11664,7 @@ "notStartedActivitiesTitle": "Odprte seje ({num})", "inProgressActivitiesTitle": "Poteka zdaj ({num})", "completedActivitiesTitle": "Končano ({num})", + "pickDifferentActivity": "Izberite drugo dejavnost", "inOngoingActivity": "Imate potekajočo dejavnost!", "@notStartedActivitiesTitle": { "type": "String", @@ -12991,10 +11690,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaš cilj jezik ne ustreza temu sporočilu. Ali želite posodobiti svoj cilj jezik?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "To so vsi v tem tečaju. Kliknite na avatar katerega koli uporabnika in \"začnite pogovor\", da pošljete DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ta beseda v besedi bo trajno odstranjena iz vaših analiz.", + "woman": "Ženska", + "man": "Moški", + "otherGender": "Drugo", + "unselectedGender": "Izberite možnost spola", + "gender": "Spol", + "chatParticipantTooltip": "To so vsi v tem klepetu. Kliknite na avatar katerega koli uporabnika in \"začnite pogovor\", da pošljete DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Orodja za učenje so onemogočena za sporočila, ki niso v vašem ciljnem jeziku.", + "vocabEmoji": "Emojiji za besedišče", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Zahtevaj regeneracijo", + "optionalRegenerateReason": "(Neobvezno) Razlog", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Nastavili ste emoji za {lemma}! Ta emoji bomo uporabili za predstavitev besede v praktičnih dejavnostih v prihodnje.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Čakanje na dokončanje prijave", + "ssoDialogDesc": "Odprli smo nov zavihek, da se lahko varno prijavite.", + "ssoDialogHelpText": "🤔 Če niste videli novega zavihka, preverite svoj blokator pojavnih oken.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Onemogoči jezikovna orodja", + "disableLanguageToolsDesc": "Ali želite onemogočiti samodejno jezikovno pomoč?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Dovoljenje zavrnjeno. Omogočite dovoljenja za snemanje, da lahko snemate avdio sporočila.", + "genericWebRecordingError": "Prišlo je do napake. Priporočamo uporabo brskalnika Chrome pri snemanju sporočil.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Za najboljšo izkušnjo pri uporabi te aplikacije, prosimo, razširite velikost zaslona.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Dejavnosti za odklepanje naslednje teme", "activitiesToUnlockTopicDesc": "Določite število dejavnosti za odklepanje naslednje teme tečaja", "@activitiesToUnlockTopicTitle": { @@ -13004,5 +11821,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Pravilna praksa definicije besedi", + "constructUseIncLMDesc": "Napačna praksa definicije besedi", + "constructUseCorLADesc": "Pravilna praksa avdio besedi", + "constructUseIncLADesc": "Napačna praksa avdio besedi", + "constructUseBonus": "Bonus med prakso besedi", + "practiceVocab": "Vadite besedi", + "selectMeaning": "Izberite pomen", + "selectAudio": "Izberite ustrezen avdio", + "congratulations": "Čestitamo!", + "anotherRound": "Še en krog", + "noActivityRequest": "Trenutno ni zahtevka za aktivnost.", + "quit": "Izhod", + "congratulationsYouveCompletedPractice": "Čestitamo! Zaključili ste vadbeno sejo.", + "mustHave10Words": "Imeti morate vsaj 10 besed za besedišče, da jih lahko vadite. Poskusite se pogovoriti s prijateljem ali Pangea Botom, da odkrijete več!", + "botSettings": "Nastavitve bota", + "activitySettingsOverrideWarning": "Jezik in jezikovna raven sta določena z načrtom aktivnosti", + "voice": "Glas", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 463fe4312..c863983a5 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:46.667322", + "@@last_modified": "2026-01-07 14:29:14.506248", "about": "О програму", "@about": { "type": "String", @@ -2414,26 +2414,14 @@ "commandHint_logoutall": "Odjavi se sa svih aktivnih uređaja", "displayNavigationRail": "Prikaži navigacionu traku na mobilnom", "customReaction": "Prilagođena reakcija", - "accountInformation": "Informacije o nalogu", - "addGroupDescription": "Dodaj opis chata", - "addNewFriend": "Dodaj novog prijatelja", - "alreadyHaveAnAccount": "Već imate nalog?", - "createNewGroup": "Napravite novi chat", - "editChatPermissions": "Izmeni dozvole za chat", "writeAMessageLangCodes": "Kucajte na {l1} ili {l2}...", "requests": "Zahtevi", - "allCorrect": "Tako bih to rekao! Super!", - "newWayAllGood": "To nije baš kako bih to rekao, ali izgleda dobro!", - "othersAreBetter": "Hm, možda postoji bolji način da se to kaže.", "holdForInfo": "Kliknite i držite za informacije o reči.", "greenFeedback": "To je ono što bih ja stavio!", "yellowFeedback": "Hm, možete pokušati to i videti da li radi! Da biste koristili ovu reč, jednostavno je ponovo kliknite.", "redFeedback": "Mislim da to nije tačno...", "itInstructionsTitle": "Mogu vam pomoći sa prevodom!", "itInstructionsBody": "Možete kliknuti i držati opcije za informacije o reči.", - "oneday": "Poslednjih 24 sata", - "oneweek": "Poslednjih 7 dana", - "onemonth": "Prošli mesec", "gaTooltip": "L2 upotreba sa gramatičkom pomoći", "taTooltip": "L2 upotreba sa pomoć za prevod", "unTooltip": "Drugo", @@ -2443,58 +2431,27 @@ "interactiveTranslatorAllowed": "Izbor učenika", "interactiveTranslatorRequired": "Obavezno", "notYetSet": "Još nije postavljeno", - "myLearning": "Moja analitika", "waTooltip": "Korišćenje L2 bez pomoći", - "changeDateRange": "Promeni opseg datuma", - "classDescription": "Opis", - "addStudents": "Pozovi korisnike putem linka ili koda", - "copyClassLink": "Kopiraj link za poziv", - "copyClassCode": "Kopiraj kod za poziv", - "inviteStudentByUserName": "Pozovi korisnike putem korisničkog imena", "languageSettings": "Podešavanja jezika", "interactiveTranslator": "Pomoć pri prevođenju", - "shareVideo": "Podeli video", - "shareVideoDesc": "Uključite ovo da biste omogućili učenicima da dele video snimke u čatovima.", - "shareFiles": "Deli fajlove", - "selectLanguageLevel": "Izaberi nivo jezika", "noIdenticalLanguages": "Molimo izaberite različite osnovne i ciljne jezike", - "iWantALanguagePartnerFrom": "Od:", - "worldWide": "Svetovno", - "noResults": "Nema rezultata! Pokušajte da proširite pretragu.", "searchBy": "Pretraži po zemlji i jezicima", - "iWantAConversationPartner": "Želim partnera za razgovor koji", - "iWantALanguagePartnerWhoSpeaks": "Говори:", - "iWantALanguagePartnerWhoIsLearning": "Учится:", "joinWithClassCode": "Присоединиться к курсу", - "joinWithClassCodeHint": "Введите код приглашения", - "languageLevelPreA1": "Почетни почетни (Pre A1)", - "languageLevelA1": "Начинајући (A1)", - "languageLevelA2": "Основни (A2)", - "languageLevelB1": "Средњи (B1)", - "languageLevelB2": "Вишњи средњи (B2)", - "languageLevelC1": "Напредни (C1)", - "languageLevelC2": "Мастерство (C2)", + "languageLevelPreA1": "Почетник Низак (Пре A1)", + "languageLevelA1": "Почетник Средњи (A1)", + "languageLevelA2": "Početni Visoki (A2)", + "languageLevelB1": "Srednji Srednji (B1)", + "languageLevelB2": "Napredni Niski (B2)", + "languageLevelC1": "Napredni Srednji (C1)", + "languageLevelC2": "Superiorni (C2)", "changeTheNameOfTheClass": "Промени име", "changeTheNameOfTheChat": "Промени име ћаскања", - "askPangeaBot": "Питајте Пангее Бот за контекстуалну дефиницију.", "sorryNoResults": "Извините, нема резултата.", "ignoreInThisText": "Игнориши", - "helpMeTranslate": "Да!", - "needsItShortMessage": "Изван циља", "needsItMessage": "Чекај, то није {targetLanguage}! Да ли вам треба помоћ у превођењу?", - "needsIgcMessage": "Ова порука има граматичку грешку.", - "tokenTranslationTitle": "Reč je u vašem osnovnom jeziku.", - "spanTranslationDesc": "Pogledajte moguće prevode ispod.", - "spanTranslationTitle": "Neke reči su u vašem osnovnom jeziku.", - "l1SpanAndGrammarTitle": "Izvan ciljnog jezika", - "l1SpanAndGrammarDesc": "Ovo može biti u vašem osnovnom jeziku ili može biti greška u gramatici.", - "otherTitle": "Imate grešku.", - "otherDesc": "Pogledajte moguće ispravke ispod.", "countryInformation": "Moja zemlja", - "myLanguages": "Moji osnovni i ciljni jezici", "targetLanguage": "Ciljni jezik", "sourceLanguage": "Osnovni jezik", - "languagesISpeak": "Jezici koje govorim", "updateLanguage": "Moji jezici", "whatLanguageYouWantToLearn": "Koji jezik želite da naučite?", "whatIsYourBaseLanguage": "Koji je vaš osnovni jezik?", @@ -2509,13 +2466,8 @@ "errorDisableLanguageAssistanceUserDesc": "Kliknite ovde da biste ažurirali postavke pomoći u prevodu i gramatici", "errorDisableITClassDesc": "Pomoć u prevodu je isključena za kurs u kojem se nalazi ovaj chat.", "errorDisableIGCClassDesc": "Pomoć u gramatici je isključena za kurs u kojem se nalazi ovaj chat.", - "itIsDisabled": "Interaktivni prevod je onemogućen", - "igcIsDisabled": "Interaktivno proveravanje gramatike je onemogućeno", - "goToLearningSettings": "Idi na Postavke učenja", "error405Title": "Jezici nisu postavljeni", "error405Desc": "Molimo vas da postavite svoje jezike u Glavnom meniju > Postavke učenja.", - "loginOrSignup": "Prijavite se sa", - "iAgreeToThe": "Slažem se sa ", "termsAndConditions": "Uslovima i odredbama", "andCertifyIAmAtLeast13YearsOfAge": " i potvrđujem da imam najmanje 16 godina.", "error502504Title": "Vau, mnogo je učenika online!", @@ -2523,40 +2475,21 @@ "error404Title": "Greška u prevodu!", "error404Desc": "Pangea Bot nije siguran kako da prevede to...", "errorPleaseRefresh": "Radimo na tome! Molimo vas da osvežite stranicu i pokušate ponovo.", - "toggleIT": "Interaktivni prevod", - "toggleIGC": "Interaktivna provera gramatike", - "toggleToolSettingsDescription": "Ovde možete uključiti ili isključiti pojedinačne postavke alata za jezik.", "connectedToStaging": "Povezano sa Staging-om", "learningSettings": "Podešavanja učenja", - "sendVoiceNotes": "Pošalji glasovne beleške", - "sendVoiceNotesDesc": "Uključite ovo da biste omogućili učenicima da šalju glasovne beleške u čatovima.", - "chatTopic": "Tema četa", - "chatTopicDesc": "Postavi temu četa", - "inviteStudentByUserNameDesc": "Ako vaš učenik već ima nalog, možete ga pronaći pretragom.", "participants": "Učesnici", - "almostPerfect": "Izgleda da je tačno! Evo šta bih ja rekao.", - "prettyGood": "Prilično dobro! Evo šta bih ja rekao.", - "letMeThink": "Hmm, hajde da vidimo kako si prošao!", "clickMessageTitle": "Trebaš pomoć?", "clickMessageBody": "Klikni na poruku za alate za jezik poput prevoda, reprodukcije i više!", - "understandingMessagesTitle": "Definicije i prevodi!", - "understandingMessagesBody": "Klikni na podvučene reči za definicije. Prevedi pomoću opcija poruke (gore desno).", "allDone": "Sve je gotovo!", "vocab": "Vokabular", "low": "Imamo dokaze da korisnik ne razume ove reči.", "medium": "Ove reči su korišćene. Nije jasno da li su reči potpuno shvaćene ili ne.", "high": "Imamo dokaze da korisnik razume ove reči.", - "unknownProficiency": "Ove reči nisu korišćene u Pangea Četu.", - "changeView": "Prebaci prikaz.", - "clearAll": "Očistiti sve reči?", - "generateVocabulary": "Generiši vokabular iz naslova i opisa", - "generatePrompts": "Generiši podsticaje", "subscribe": "Pretplati se", "getAccess": "Pretplatite se odmah!", "subscriptionDesc": "Poruke su besplatne! Pretplatite se da biste otključali interaktivni prevod, proveru gramatike i analitiku učenja.", "subscriptionManagement": "Upravljanje pretplatom", "currentSubscription": "Trenutna pretplata", - "changeSubscription": "Promeni pretplatu", "cancelSubscription": "Otkaži pretplatu", "selectYourPlan": "Izaberite svoj plan", "subsciptionPlatformTooltip": "Molimo prijavite se na svoj originalni uređaj da biste upravljali svojom pretplatom", @@ -2565,9 +2498,6 @@ "paymentHistory": "Istorija plaćanja", "emptyChatDownloadWarning": "Немогућено преузети празан разговор", "update": "Ажурирај", - "updateDesc": "Сада можете ажурирати ову апликацију са {localVersion} на {storeVersion}", - "maybeLater": "Можда касније", - "mainMenu": "Главни мени", "toggleImmersionMode": "Режим уметања", "toggleImmersionModeDesc": "Када је омогућен, све поруке се приказују на вашем циљаном језику. Ова поставка је најкориснија у језичким разменама.", "itToggleDescription": "Овај алат за учење језика ће идентификовати речи у вашем основном језику и помоћи вам да их преведете на ваш циљани језик. Иако ретко, ИИ може направити грешке у преводу.", @@ -2582,212 +2512,13 @@ "definitionsToolDescription": "Када је омогућено, речи подвучене плавом бојом могу се кликнути за дефиниције. Кликните поруке за приступ дефиницијама.", "translationsToolDescrption": "Када је омогућено, кликните на поруку и икону превода да бисте видели поруку на вашем основном језику.", "welcomeBack": "Добродошли назад! Ако сте били део пилот програма 2023-2024, контактирајте нас за вашу посебну пилот претплату. Ако сте наставник који је (или ваша институција је) купио лиценце за вашу класу, контактирајте нас за вашу наставничку претплату.", - "kickAllStudents": "Искључи све студенте", - "kickAllStudentsConfirmation": "Да ли сте сигурни да желите да искључите све студенте?", - "inviteAllStudents": "Позови све студенте", - "inviteAllStudentsConfirmation": "Да ли сте сигурни да желите да позовете све студенте?", - "inviteUsersFromPangea": "Додај администраторе", - "redeemPromoCode": "Искористи промо код", - "enterPromoCode": "Унесите промо код", "downloadTxtFile": "Преузми текстуалну датотеку", "downloadCSVFile": "Преузми CSV датотеку", "promotionalSubscriptionDesc": "Тренутно имате трајну промотивну претплату. Пошаљите поруку support@pangea.chat за помоћ у променама ваше претплате.", "originalSubscriptionPlatform": "Претплата купљена преко {purchasePlatform}", "oneWeekTrial": "Пробни период од једне недеље", "downloadXLSXFile": "Преузми Excel датотеку", - "abDisplayName": "Абхаз", - "aaDisplayName": "Афар", - "afDisplayName": "Африканс", - "akDisplayName": "Акан", - "sqDisplayName": "Албански", - "amDisplayName": "Амхарски", - "arDisplayName": "Арапски", - "anDisplayName": "Арагонски", - "hyDisplayName": "Jermenski", - "asDisplayName": "Asamski", - "avDisplayName": "Avaric", - "aeDisplayName": "Avestanski", - "ayDisplayName": "Ajmarski", - "azDisplayName": "Azerbejdžanski", - "bmDisplayName": "Bambara", - "baDisplayName": "Baškirski", - "euDisplayName": "Baskijski", - "beDisplayName": "Beloruski", - "bnDisplayName": "Bengalski", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosanski", - "brDisplayName": "Bretonski", - "bgDisplayName": "Bugarski", - "myDisplayName": "Burmanski", - "caDisplayName": "Katalonski, Valensijski", - "chDisplayName": "Čamoranski", - "ceDisplayName": "Čečenski", - "nyDisplayName": "Čičeva, Čeva, Njanđa", - "zhDisplayName": "Kineski", - "cvDisplayName": "Čuvaš", - "kwDisplayName": "Korniska", - "coDisplayName": "Korsikan", - "crDisplayName": "Kree", - "hrDisplayName": "Hrvatski", - "csDisplayName": "Češki", - "daDisplayName": "Danski", - "dvDisplayName": "Divehi; Dhivehi; Maldivski;", - "nlDisplayName": "Holandski", - "enDisplayName": "Engleski", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonski", - "eeDisplayName": "Ewe", - "foDisplayName": "Farski", - "fjDisplayName": "Fidžijski", - "fiDisplayName": "Finski", - "frDisplayName": "Francuski", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicijski", - "kaDisplayName": "Gruzijski", - "deDisplayName": "Nemački", - "elDisplayName": "Grčki, savremeni", - "gnDisplayName": "Gvaraní", - "guDisplayName": "Gudžarati", - "htDisplayName": "Haitijski, Haitski kreolski", - "haDisplayName": "Hausa", - "heDisplayName": "Hebrejski (savremeni)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Mađarski", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonežanski", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Irski", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Islandski", - "itDisplayName": "Italijanski", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japanski", - "jvDisplayName": "Javanski", - "klDisplayName": "Kalaallisut, Grenlandski", - "knDisplayName": "Kanada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmirski", - "kkDisplayName": "Kazahstanski", - "kmDisplayName": "Kmerski", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirgizki, Kirgiški", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korejski", - "kuDisplayName": "Kurdski", - "kjDisplayName": "Kvanjama, Kuanyama", - "laDisplayName": "Latinski", - "lbDisplayName": "Luksemburški, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgish, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laoski", - "ltDisplayName": "Lituanski", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letonski", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonski", - "mgDisplayName": "Malgaški", - "msDisplayName": "Malajski", - "mlDisplayName": "Malajalam", - "mtDisplayName": "Malteški", - "miDisplayName": "Maori", - "mrDisplayName": "Marati (Marāṭhī)", - "mhDisplayName": "Maršalski", - "mnDisplayName": "Mongolski", - "naDisplayName": "Nauru", - "nvDisplayName": "Navaho, Navajo", - "nbDisplayName": "Norveški Bokmål", - "ndDisplayName": "Severni Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norveški Nynorsk", - "noDisplayName": "Norveški", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Južni Ndebele", - "ocDisplayName": "Okcitanski", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Stari crkveno slavensko, crkveno slavensko, staroslavenski, stari bugarski, stari slavenski", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Osetski, osetski", - "paDisplayName": "Pandžabi, pandžabi", - "piDisplayName": "Pāli", - "faDisplayName": "Perzijski", - "plDisplayName": "Poljski", - "psDisplayName": "Pašto, Pushto", - "ptDisplayName": "Portugalski", - "quDisplayName": "Kečuanski", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumunski, Moldavski, Moldovan", - "ruDisplayName": "Ruski", - "saDisplayName": "Sanskrit (Sanskṛta)", - "scDisplayName": "Sardinski", - "sdDisplayName": "Sindhi", - "seDisplayName": "Severni sami", - "smDisplayName": "Samoanski", - "sgDisplayName": "Sango", - "srDisplayName": "Srpski", - "gdDisplayName": "Škotski gaelik, gaelik", - "snDisplayName": "Šona", - "siDisplayName": "Singalese, Sinhalese", - "skDisplayName": "Slovački", - "slDisplayName": "Slovenački", - "soDisplayName": "Somalski", - "stDisplayName": "Južni Sotho", - "esDisplayName": "Španski", - "suDisplayName": "Sundanese", - "swDisplayName": "Svahili", - "ssDisplayName": "Swati", - "svDisplayName": "Švedski", - "taDisplayName": "Tamilski", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadžik", - "thDisplayName": "Tajlandski", - "tiDisplayName": "Tigrinja", - "boDisplayName": "Tibetanski standardni, tibetanski, centralni", - "tkDisplayName": "Turkmenski", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga ostrva)", - "trDisplayName": "Turski", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Tvi", - "tyDisplayName": "Tahićanski", - "ugDisplayName": "Ujgurski, ujgurski", - "ukDisplayName": "Ukrajinski", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbečki", - "veDisplayName": "Venda", - "viDisplayName": "Vijetnamski", - "voDisplayName": "Volapük", - "waDisplayName": "Valonski", - "cyDisplayName": "Velski", - "woDisplayName": "Volof", - "fyDisplayName": "Zapadnofrizijski", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jidiš", - "yoDisplayName": "Joruba", - "zaDisplayName": "Zhuang, Čuang", "unkDisplayName": "Nepoznato", - "zuDisplayName": "Zulu", - "hawDisplayName": "Havajski", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Višejezično", - "cebDisplayName": "Sebuano", - "dzDisplayName": "Džongkha", - "iwDisplayName": "Hebrejski", - "jwDisplayName": "Javanski", - "moDisplayName": "Moldavski", - "shDisplayName": "Srpskohrvatski", "wwCountryDisplayName": "Celom svet", "afCountryDisplayName": "Avganistan", "axCountryDisplayName": "Olandski Ostrva", @@ -3035,41 +2766,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambija", "zwCountryDisplayName": "Zimbabve", - "pay": "Plati", - "allPrivateChats": "Direktni razgovori", - "unknownPrivateChat": "Nepoznati privatni razgovor", + "pay": "Checkout", "invitedToSpace": "{user} vas je pozvao da se pridružite kursu: {space}! Da li želite da prihvatite?", - "declinedInvitation": "Odbijen poziv", - "acceptedInvitation": "Prihvatio poziv", "youreInvited": "📩 Pozvani ste!", "invitedToChat": "{user} vas je pozvao da se pridružite razgovoru: {name}! Da li želite da prihvatite?", "monthlySubscription": "Mesečno", "yearlySubscription": "Godišnje", "defaultSubscription": "Pangea Chat Pretplata", "freeTrial": "Besplatna probna verzija", - "grammarAnalytics": "Analiza grešaka", "total": "Ukupno: ", "noDataFound": "Nema pronađenih podataka", - "promoSubscriptionExpirationDesc": "Vaša trenutna pretplata je promotivna i ističe {expiration}. Pošaljite poruku na support@pangea.chat za pomoć pri promeni pretplate.", - "emptyChatNameWarning": "Molimo unesite ime za ovaj chat", "blurMeansTranslateTitle": "Zašto je poruka zamagljena?", "blurMeansTranslateBody": "Dok je režim uranjanja uključen, poruke koje šaljete na vašem osnovnom jeziku će biti zamagljene dok Pangea Bot ne prevede na ciljni jezik. Režim uranjanja može se uključiti ili isključiti u podešavanjima pojedinačnih i kurseva.", - "someErrorTitle": "Hm, nešto nije u redu", - "someErrorBody": "Moguće je da je došlo do greške ili nečega u vašem osnovnom jeziku.", "bestCorrectionFeedback": "To je tačno!", "distractorFeedback": "Nije baš tako.", "bestAnswerFeedback": "To je tačno!", "definitionDefaultPrompt": "Šta znači ova reč?", "practiceDefaultPrompt": "Koji je najbolji odgovor?", "correctionDefaultPrompt": "Koja je najbolja zamena?", - "itStartDefaultPrompt": "Želite li pomoć pri prevođenju?", - "lockedChatWarning": "🔒 Овај чат је закључан", - "lockChat": "Закључај чат", - "suggestToChat": "Предложи овај чат", - "suggestToChatDesc": "Предложени чатови ће се појавити у листи чатова", "acceptSelection": "Прихвати исправку", - "acceptSelectionAnyway": "Употреби ово ипак", - "makingActivity": "Обавља активност", "why": "Зашто?", "definition": "Дефиниција", "exampleSentence": "Пример реченице", @@ -3077,128 +2792,55 @@ "reportMessageTitle": "{reportingUserId} је пријавио поруку од {reportedUserId} у чату {roomName}", "reportMessageBody": "Порука: {reportedMessage}\nРазлог: {reason}", "noTeachersFound": "Нема пронађених наставника за пријаву", - "viewArchive": "Погледај архиву", "trialExpiration": "Ваша бесплатна проба истиче на {expiration}", "freeTrialDesc": "Нови корисници добијају једну недељу бесплатне пробе Пангее Чат", "activateTrial": "Активирај бесплатну пробу од 7 дана", "successfullySubscribed": "Успешно сте се претплатили!", "clickToManageSubscription": "Кликните овде да управљате својом претплатом.", - "errorGettingAudio": "Грешка при преузимању аудио записа. Молимо освежите страницу и покушајте поново.", "signUp": "Региструј се", "pleaseChooseAtLeastChars": "Молимо изаберите најмање {min} карактера.", "noEmailWarning": "Молимо унесите важећу адресу е-поште. У супротном, нећете моћи да ресетујете лозинку. Ако не желите, поново тапните на дугме да бисте наставили.", "pleaseEnterValidEmail": "Молимо унесите важећу адресу е-поште.", "pleaseChooseAUsername": "Молимо изаберите корисничко име", - "chooseAUsername": "Изаберите корисничко име", "define": "Дефиниши", "listen": "Слушај", - "addConversationBot": "Дозволи бота за разговор", - "addConversationBotDesc": "Додај бота у овај разговор", - "convoBotSettingsDescription": "Уреди тему разговора и тежину", - "enterAConversationTopic": "Унесите тему разговора", - "conversationTopic": "Тема разговора", - "enableModeration": "Омогући модерацију", - "enableModerationDesc": "Омогући аутоматску модерацију за преглед порука пре слања", - "conversationLanguageLevel": "Који је ниво језика овог разговора?", - "showDefinition": "Прикажи дефиницију", - "subscriptionPopupTitle": "Ова реченица можда има граматичку грешку...", - "subscriptionPopupDesc": "Претплатите се данас да бисте откључали превод и исправку граматике!", - "seeOptions": "Погледај опције", - "continuedWithoutSubscription": "Настави без претплате", "trialPeriodExpired": "Ваш пробни период је истекао", - "selectToDefine": "Кликните на било which реч да бисте видели њену дефиницију!", "translations": "преводи", "messageAudio": "аудио поруке", "definitions": "дефиниције", "subscribedToUnlockTools": "Претплатите се да бисте откључали интерактивни превод и проверу граматике, репродукцију аудио записа, персонализоване активности за вежбање и аналитике учења!", "translationTooltip": "Преведи", - "audioTooltip": "Пусти аудио", "speechToTextTooltip": "Транскрипт", - "certifyAge": "Потврђујем да имам више од {age} година", "kickBotWarning": "Искључивање Пангее бота уклонит ће бота за разговор из овог чета.", - "joinToView": "Придружите се овом соби да бисте видели детаље", "refresh": "Освежи", - "autoPlayTitle": "Аутоматско репродуковање порука", - "autoPlayDesc": "Када је омогућено, текстуално-говорни аудио порука ће се аутоматски репродуковати када се изаберу.", "messageAnalytics": "Аналитика порука", "words": "Речи", "score": "Резултат", "accuracy": "Tačnost", "points": "Poeni", "noPaymentInfo": "Није потребно информације о плаћању!", - "conversationBotModeSelectDescription": "Активност у ћаскању", - "conversationBotModeSelectOption_discussion": "Дискусија", - "conversationBotModeSelectOption_custom": "Прилагођено", - "conversationBotModeSelectOption_conversation": "Разговор", - "conversationBotModeSelectOption_textAdventure": "Текстуална авантура", - "conversationBotModeSelectOption_storyGame": "Игра прича", - "conversationBotDiscussionZone_title": "Подешавања дискусије", - "conversationBotDiscussionZone_discussionTopicLabel": "Тема дискусије", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Поставите тему дискусије", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Кључне речи за дискусију", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Поставите кључне речи за дискусију", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Списак кључних речи одвојених зарезом за вођење дискусије", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Пошаљи подсетник за дискусију по распореду", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Сати између подсетника за дискусију", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Реагује на реакцију ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Реакција за слање подсетника за дискусију", - "conversationBotCustomZone_title": "Прилагођена подешавања", - "conversationBotCustomZone_customSystemPromptLabel": "Sistemski prompt", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Postavi prilagođeni sistemski prompt", - "conversationBotCustomZone_customSystemPromptEmptyError": "Nedostaje prilagođeni sistemski prompt", - "botConfig": "Podešavanja bota i aktivnosti", - "botConfigNoPermissionTitle": "Nema dozvole", - "botConfigNoPermissionMessage": "Kontaktirajte administratora sobe za promenu konfiguracije bota", - "addConversationBotDialogTitleInvite": "Potvrdi pozivanje bota za razgovor", - "addConversationBotButtonInvite": "Pozovi", - "addConversationBotDialogInviteConfirmation": "Pozvati", - "addConversationBotButtonTitleRemove": "Potvrdi uklanjanje bota za razgovor", - "addConversationBotButtonRemove": "Ukloni", - "addConversationBotDialogRemoveConfirmation": "Ukloni", - "conversationBotConfigConfirmChange": "Potvrdi", - "conversationBotStatus": "Pozovi bota", - "conversationBotTextAdventureZone_title": "Tekstualna avantura", - "conversationBotTextAdventureZone_instructionLabel": "Uputstva za vodiča igre", - "conversationBotTextAdventureZone_instructionPlaceholder": "Postavi uputstva za vodiča igre", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Nedostaju uputstva za vodiča igre", - "studentAnalyticsNotAvailable": "Podaci o studentima trenutno nisu dostupni", - "roomDataMissing": "Neki podaci mogu nedostajati iz soba u kojima niste član.", "updatePhoneOS": "Можда ће вам бити потребно ажурирати верзију оперативног система уређаја.", "wordsPerMinute": "Речи по минуту", "autoIGCToolName": "Аутоматски покрените Пангее помоћ за писање", "autoIGCToolDescription": "Аутоматски покреће Пангее Граматика и помоћ за превођење пре слања моје поруке.", - "runGrammarCorrection": "Провери поруку", - "grammarCorrectionFailed": "Проблеми које треба решити", - "grammarCorrectionComplete": "Изгледа добро!", "tooltipInstructionsTitle": "Нисте сигурни шта то ради?", "tooltipInstructionsMobileBody": "Држите дуго на ставкама да бисте видели савете.", "tooltipInstructionsBrowserBody": "Покажите мишем на ставке да бисте видели савете.", "chatCapacity": "Капацитет чета", "roomFull": "Ова соба је већ пуна.", - "topicNotSet": "Тема још није постављена.", - "chatCapacityNotSet": "Овај чат нема ограничење капацитета.", "chatCapacityHasBeenChanged": "Капацитет чета је промењен", "chatCapacitySetTooLow": "Капацитет чета мора бити најмање {count}.", "chatCapacityExplanation": "Капацитет чета ограничава број чланова који могу бити у чату.", - "chatExceedsCapacity": "Овај чат прелази свој капацитет.", "tooManyRequest": "Превише захтева, покушајте поново касније.", "enterNumber": "Молимо унесите целобројну вредност.", "buildTranslation": "Izgradite svoj prevod iz izbora iznad", - "nonexistentSelection": "Izbor više ne postoji.", - "changeAnalyticsLanguage": "Promeni jezik analitike", "practice": "Vežbajte", "noLanguagesSet": "Nije postavljen nijedan jezik", - "noActivitiesFound": "Dovoljno za sada! Vratite se kasnije za više.", - "hintTitle": "Sugestija:", "speechToTextBody": "Za glasovne poruke, možete videti transkript kao i rezultat govornika u rečima po minutu.", "versionNotFound": "Verzija nije pronađena", "fetchingVersion": "Preuzimanje verzije...", "versionFetchError": "Greška pri preuzimanju verzije", "versionText": "Verzija: {version}+{buildNumber}", - "languageButtonLabel": "Jezik: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatsko puštanje prevoda", - "interactiveTranslatorAutoPlayDesc": "Pokreće interaktivni prevodilac bez pitanja.", - "changeAnalyticsView": "Promeni prikaz analitike", "l1TranslationBody": "Poruke na vašem osnovnom jeziku neće biti prevedene.", "deleteSubscriptionWarningTitle": "Imate aktivnu pretplatu", "deleteSubscriptionWarningBody": "Brisanje vašeg naloga neće automatski otkazati vašu pretplatu.", @@ -3206,9 +2848,7 @@ "error520Title": "Молимо покушајте поново.", "error520Desc": "Извините, нисмо могли да разумемо вашу поруку...", "wordsUsed": "Коришћене речи", - "errorTypes": "Типови грешака", "level": "Ниво", - "canceledSend": "Прекинуто слање", "morphsUsed": "Коришћени морфеми", "translationChoicesBody": "Кликните и држите опцију за сугестију.", "grammar": "Граматика", @@ -3218,7 +2858,6 @@ "reportContentIssueTitle": "Пријави проблем са садржајем", "feedback": "Опциони повратни информације", "reportContentIssueDescription": "Ух ох! ИИ може олакшати персонализовано учење али... такође халуцинира. Молимо пружите све повратне информације и покушаћемо поново.", - "changeContent": "Ух ох! ИИ може олакшати персонализовано учење али... такође халуцинира. Шта би требало да буде?", "clickTheWordAgainToDeselect": "Кликните поново на изабрану реч да бисте је одбележили.", "l2SupportNa": "Непоступно", "l2SupportAlpha": "Альфа", @@ -3452,7 +3091,6 @@ "grammarCopySPC": "Специфичност", "grammarCopyPARTTYPE": "Тип делимичног", "grammarCopyINTREL": "Интерогативно-односно", - "grammarCopyNUMFORMpsor": "Број поседоваоца", "grammarCopyUNKNOWN": "Портрет", "grammarCopyNUMBERPSOR": "Број поседоваоца", "grammarCopyPOSS": "Посесивно", @@ -3498,28 +3136,14 @@ "grammarCopyVOICEdir": "Direktni", "grammarCopyVOICEinv": "Inverse", "grammarCopyVOICErcp": "Recipročno", - "enterPrompt": "Molimo unesite sistemski prompt", - "selectBotLanguage": "Izaberite jezik bota", - "chooseVoice": "Izaberite glas", - "enterLanguageLevel": "Molimo unesite nivo jezika", - "enterDiscussionTopic": "Molimo unesite temu diskusije", - "selectBotChatMode": "Изаберите режим ћаскања", - "messageNotInTargetLang": "Порука није на циљаном језику", "other": "Друго", "levelShort": "Ниво {level}", - "botModeValidation": "Молимо изаберите режим ћаскања", "clickBestOption": "Изаберите најбоље опције за превођење ваше поруке!", "completeActivitiesToUnlock": "Завршите бар једну активност да бисте откључали превод!", - "botSettingsSubtitle": "Позовите бота да модерира активност у ћаскању", - "invitePeople": "Позовите кориснике", "noCapacityLimit": "Нема ограничења капацитета", "downloadGroupText": "Преузми текст групе", "notificationsOn": "Обавештења укључена", "notificationsOff": "Обавештења искључена", - "chatCanBeFoundViaSearch": "Ћаскање се може пронаћи преко претраге", - "requireCodeToJoin": "Потребан је код за придруживање", - "canFindInSearch": "Може се пронаћи у претрази", - "addChatToSpace": "Додај ћаскање", "createChatAndInviteUsers": "Креирај ћаскање и позови кориснике", "updatedNewSpaceDescription": "Курсеви вам омогућавају да консолидујете своје ћаскање и изградите приватне или јавне заједнице.", "joinWithCode": "Придружите се са кодом", @@ -3555,39 +3179,19 @@ "constructUseCollected": "Прикупљено у ћаскању", "constructUseNanDesc": "Није применљиво", "xpIntoLevel": "{currentXP} / {maxXP} поена искуства", - "signInWithUsername": "Пријавите се коришћењем корисничког имена и лозинке", - "registrationEmailMessage": "Молимо вас да верификујете свој емаил помоћу линка послатог тамо. У неким случајевима, емаил стиже до 5 минута. Такође проверите фасциклу за нежељену пошту.", "enableTTSToolName": "Омогућено текстуално-говорно претварање", "enableTTSToolDescription": "Дозволите апликацији да генерише излаз у виду текста у говор за делове текста на вашој циљаној језику.", - "couldNotFindTTS": "Нисмо могли да пронађемо мотор за текстуално-говорно претварање за ваш тренутни циљани језик.", - "ttsInstructionsHyperlink": "Кликните овде да бисте видели упутства за преузимање новог гласа на уређају.", - "createAnAccount": "Креирајте налог", - "signIn": "Пријавите се", - "signUpWithEmail": "Регистрација е-поштом", - "signUpWithGoogle": "Регистрација преко Гугл-а", - "signUpWithApple": "Регистрација преко Аппле-а", "yourUsername": "Ваше корисничко име", "yourEmail": "Ваша е-пошта", - "pleaseEnterAnEmail": "Молимо унесите е-маил адресу", - "signInWithGoogle": "Пријавите се преко Гугл-а", - "signInWithApple": "Пријавите се преко Аппле-а", - "chooseYourAvatar": "Изаберите свој аватар", "iWantToLearn": "Желим да учим", - "letsStart": "Хајде да почнемо", - "pleaseAgreeToTOS": "Молимо вас, прихватите Условe коришћења", "pleaseEnterEmail": "Молимо унесите важећу е-маил адресу.", - "pleaseSelectALanguage": "Молимо изаберите језик", "myBaseLanguage": "Мој основни језик", - "clickWordsInstructions": "🧻 Кликните на било which реч за детаље. 🤐", - "chooseBestDefinition": "Шта значи ова реч?", "meaningSectionHeader": "Значење:", "formSectionHeader": "Облици коришћени у ћаскањима:", - "noEmojiSelectedTooltip": "Није изабрана емоџи", "writingExercisesTooltip": "Писање", "listeningExercisesTooltip": "Слушање", "readingExercisesTooltip": "Читање", "meaningNotFound": "Значење није могуће пронаћи.", - "formsNotFound": "Облици нису могући пронаћи.", "chooseBaseForm": "Изаберите основни облик", "notTheCodeError": "Извините, то није код!", "totalXP": "Укупно XP", @@ -3627,9 +3231,6 @@ "pickAnEmoji": "Koji je tvoj omiljeni emoji za '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Usklađuj značenja sa rečima u poruci!", "doubleClickToEdit": "Dvoklik za uređivanje.", - "removeFeature": "Ukloni {feature}", - "chooseCorrectLabel": "Izaberi tačnu oznaku.", - "levelPopupTitle": "Čestitamo na dostizanju\nNivo {level}", "activityPlannerTitle": "Planer aktivnosti", "topicLabel": "Tema", "topicPlaceholder": "Izaberi temu...", @@ -3637,7 +3238,6 @@ "modePlaceholder": "Izaberi način...", "learningObjectiveLabel": "Cilj učenja", "learningObjectivePlaceholder": "Izaberi cilj učenja...", - "mediaLabel": "Mediji koje učenici treba da podele", "languageOfInstructionsLabel": "Jezik uputstava za aktivnost", "targetLanguageLabel": "Ciljni jezik", "cefrLevelLabel": "CEFR nivo", @@ -3652,20 +3252,15 @@ "instructions": "Упутства", "numberOfLearners": "Број ученика", "mustBeInteger": "Мора бити цео број нпр. 1, 2, 3, ...", - "noLemmasFound": "Нема речника са више од {xp} поена. Наставите са вежбањем!", "constructUsePvmDesc": "Произведено у гласовној поруци", - "lockedMorphFeature": "Чека на откључавање", "leaveSpaceDescription": "Напуштањем курса, напуштаћете све ћаскаонице у њему. Остали корисници ће видети да сте напустили курс.", - "whatIsLemma": "Шта је лемма?", "constructUseCorMmDesc": "Тачно значење поруке", "constructUseIncMmDesc": "Неточно значење поруке", "constructUseIgnMmDesc": "Заборављено значење поруке", "clickForMeaningActivity": "Кликните овде за изазов значења", "meaning": "Значење", "chatWith": "Група са {displayname}", - "slightlyOffensive": "Blago uvredljivo", "clickOnEmailLink": "Molimo kliknite na link u emailu i nastavite.\n\nProverite vašu spam fasciklu ako email nije stigao.", - "whoIsAllowedToJoinThisChat": "Ko sme da se pridruži ovom chatu", "dontForgetPassword": "Ne zaboravite vašu lozinku!", "enableAutocorrectToolName": "Omogući automatsku ispravku uređaja", "enableAutocorrectDescription": "Ako vaš uređaj podržava jezik koji učite, možete omogućiti automatsku ispravku uređaja za ispravljanje uobičajenih grešaka dok kucate.", @@ -3693,48 +3288,26 @@ "autocorrectNotAvailable": "Нажалост, ваша платформа тренутно није подржана за ову функцију. Останите у току за даљи развој!", "pleaseUpdateApp": "Молимо вас да ажурирате апликацију да бисте наставили.", "chooseEmojiInstructionsBody": "Ускладите емотиконе са речима које најбоље представљају. Не брини! Нема поена за неслагање. 😅", - "pickAnEmojiFor": "Изаберите емотикон за {lemma}", "analyticsVocabListBody": "Ово је ваш речник! Док зарађујете XP за сваку реч, она ће од семенке прерасти у пун цвет. Кликните на било коју реч за више детаља.", "morphAnalyticsListBody": "Ово су сви граматички концепти у језику који учите! Откључаћете их како их будете сусретали током ћаскања. Кликните за детаље.", "knockSpaceSuccess": "Затражили сте да се придружите овом курсу! Админ ће одговорити на ваш захтев када га прими 😄", - "joinByCode": "Придружи се кодом", "chooseWordAudioInstructionsBody": "Слушајте целу поруку. Затим ускладите аудио записе са речима.", "chooseMorphsInstructionsBody": "Кликните на делове загонетке за граматичка питања!", - "inviteAndLaunch": "Позови и покрени", - "createOwnChat": "Креирај свој ћаскаоник", "pleaseEnterInt": "Молимо унесите број", "home": "Почетна", "join": "Придружи се", "readingAssistanceOverviewBody": "Кликните на дугмад испод за мини-игре у којима се поклапају емотикони, аудио записи, значења речи и граматички концепти. Или кликните на било коју реч за детаље.", - "learnByTexting": "Учите путем слања порука", - "levelSummaryTrigger": "Погледајте резиме", "levelSummaryPopupTitle": "Резиме нивоа {level}", - "referFriends": "Препоручи пријатеље", - "referFriendDialogTitle": "Позовите пријатеља у ваш разговор", - "referFriendDialogDesc": "Да ли имате пријатеља који је узбуђен да научи нови језик са вама? Копирајте и пошаљите овај позивни линк да се придружите и почнете да разговарате са вама данас.", - "youUnlocked": "Откључали сте", "resetInstructionTooltipsTitle": "Ресетујте упутства", "resetInstructionTooltipsDesc": "Кликните да бисте приказали упутства као за потпуно новог корисника.", "selectForGrammar": "Изаберите икону граматике за активности и детаље.", - "newChatActivityTitle": "Додајте забавну активност?", - "newChatActivityDesc": "Учините сваки групни разговор авантуром уз Планер активности! Поставите привлачне теме и циљеве за групу, и оживите разговоре сјајним сликама. Подстичите маштовите дискусије и одржавајте забаву без напора!", - "exploreMore": "Истражите више", "randomize": "Рандомизуј", "clear": "Обриши", "makeYourOwnActivity": "Направите своју активност", "featuredActivities": "Истакнуте", - "goToChat": "Иди у ћаскање", "save": "Сачувај", - "selectActivity": "Изабери активност", - "wordFocusListeningMultipleChoice": "Који аудио одговара речи?", "startChat": "Почни ћаскање", "translationProblem": "Проблем са преводом", - "perfectTranslation": "Идеалан превод!", - "greatJobTranslation": "Одличан посао са овим преводом!", - "goodJobTranslation": "Добро обављен посао на овом преводу.", - "makingProgress": "Напредујеш!", - "keepPracticing": "Настави да вежбаш!", - "niceJob": "Добро урађено!", "askToJoin": "Питај да се придружиш", "emptyChatWarningTitle": "Ћаскање је празно", "emptyChatWarningDesc": "Нисте позвали никога у ваше ћаскање. Идите у подешавања ћаскања да бисте позвали своје контакте или бота. Ово можете урадити и касније.", @@ -3753,8 +3326,6 @@ "languageLevelC2Desc": "Могу разумети готово све што чујем или читам и изразити се течно и прецизно.", "newVocab": "Нови речник", "newGrammar": "Нови граматички концепти", - "congratulationsOnReaching": "Достигли сте ниво {level}!", - "seeDetails": "Погледајте детаље", "choosePracticeMode": "Кликните на један од горе наведених тастера да бисте започели вежбање", "ban": "Забрани", "unban": "Поништи забрану", @@ -3768,8 +3339,6 @@ "timesUsedWithAssistance": "Пута коришћено уз помоћ", "shareInviteCode": "Подели код позива: {code}", "leaderboard": "Табела резултата", - "welcomeUser": "Добродошли, {user}", - "joinSpaceOnboardingDesc": "Да ли имате код или линк за јавни курс?", "skipForNow": "Прескочи за сада", "permissions": "Дозволе", "spaceChildPermission": "Ко може додавати нове разговоре у овај курс", @@ -3777,12 +3346,8 @@ "defaultOption": "Подразумевано", "deleteChatDesc": "Да ли сте сигурни да желите да избришете овај разговор? Он ће бити избрисан за све учеснике, а све поруке унутар разговора више неће бити доступне за праксу или аналитике учења.", "deleteSpaceDesc": "Курс и било који изабрани разговори ће бити избрисани за све учеснике, а све поруке унутар разговора више неће бити доступне за праксу или аналитике учења. Ова акција се не може опозвати.", - "chatWithActivities": "Разговор са активностима", "launch": "Покрени", - "launchActivityToChats": "Покрени активност у разговоре", "searchChats": "Тражи разговоре", - "selectChats": "Изабери разговоре", - "selectChatToStart": "Завршено! Изаберите разговор за почетак", "maxFifty": "Максимум 50", "configureSpace": "Конфигуриши курс", "pinMessages": "Залепи поруке", @@ -3796,9 +3361,7 @@ "announcements": "Обавештења", "activities": "Активности", "access": "Приступ", - "botSettings": "Подешавања бота", "activitySuggestionTimeoutMessage": "Трудимо се да генеришемо више активности за вас, молимо вас да проверите поново за минут", - "accessSettingsWarning": "Упс! Изгледа да немате дозволу да поставите правила приступа овој соби. Требало би да проверите ово да бисте били сигурни да су онако како вам одговара и да разговарате са администратором собе ако треба да их промените", "howSpaceCanBeFound": "Како се овај курс може пронаћи", "private": "Приватно", "cannotBeFoundInSearch": "Не може се пронаћи у претрази", @@ -3811,16 +3374,6 @@ "canBeFoundViaKnock": "• zahteva za pridruživanje i odobrenje administratora", "youHaveLeveledUp": "Napredovali ste!", "sendActivities": "Pošalji aktivnosti", - "getStarted": "Početak", - "getStartedBotChatDesc": "Razgovor sa AI je sjajno mesto za početak, a alati za čitanje, pisanje, slušanje i govor na Pangea čine to jednostavnim!", - "getStartedCommunitiesDesc": "Učenje sa zajednicom je mesto gde Pangea Chat sija!\nMožete se pridružiti svom razredu, pronaći kurs ili čak napraviti svoj!", - "getStartedFriendsDesc": "Da li imate prijatelja koji želi da uči sa vama?", - "getStartedBotChatComplete": "Odlično! Komunicirate sa botom!", - "getStartedCommunitiesComplete": "Super, pridružili ste se kursu!", - "getStartedComplete": "Odeljak je završen!\nNastavite da istražujete naše sjajne funkcije razgovorom sa prijateljima!", - "getStartedFriendsComplete": "Ura! Imate prijatelje! 😉", - "getStartedBotChatButton": "Počnite da razgovarate!", - "getStartedFriendsButton": "Razgovaraj sa prijateljem", "groupChat": "Grupni razgovor", "directMessage": "Direktna poruka", "newDirectMessage": "Нова директна порука", @@ -3836,7 +3389,6 @@ "mySavedActivities": "Моје сачуване активности", "noSavedActivities": "Нема сачуваних активности", "saveActivity": "Сачувај ову активност", - "yourSavedActivities": "Сачуване активности", "failedToPlayVideo": "Учитавање видеа није успело", "done": "Завршено", "inThisSpace": "У овом курсу", @@ -3875,37 +3427,27 @@ "maximumActivityParticipants": "Svaka aktivnost može imati najviše {count} učesnik(a).", "pending": "Na čekanju", "inactive": "Neaktivno", - "unjoinedActivityMessage": "Želite li da učestvujete? Izaberite otvorenu ulogu!\nIli se družite i gledajte predstavu!", - "fullActivityMessage": "Slobodno gledajte predstavu! Iako nema otvorenih uloga za učešće, možete da pregledate chat!", "confirmRole": "Potvrdi ulogu", "openRoleLabel": "OTVORENO", "joinedTheActivity": "👋 {username} se pridružio kao {role}", "finishedTheActivity": "🎯 {username} završio ovu aktivnost", - "endActivityTitle": "Završio sam", - "endActivityDesc": "Da li ste završili sa ciljevima?\nOvo je vaše potvrda da se povlačite iz čavrljanja. Ali ne brinite, zabava se nastavlja u chatu! Slobodno se družite i uživajte u predstavi dok svi ne kliknu 'Završeno'.", "archiveToAnalytics": "Dodaj u moje završene aktivnosti", "activitySummaryError": "Sažeci aktivnosti nisu dostupni", "requestSummaries": "Zatraži sažetke", - "loadingActivitySummary": "Učitavanje sažetka aktivnosti...", "generatingNewActivities": "Vi ste prvi korisnik ovog para jezika! Molimo vas da pričekate minut, pripremamo aktivnosti baš za vas.", - "requestAccessTitle": "Želite li da zatražite pristup analitici?", + "requestAccessTitle": "Zatraži pristup analitici?", "requestAccessDesc": "Želite li da zatražite pristup za pregled analitike učesnika?\n\nAko se učesnici slože, administratori ovog kursa će moći da vide:\n • ukupni vokabular\n • ukupne gramatičke koncepte\n • ukupne sesije aktivnosti završene\n • specifične gramatičke koncepte korišćene, tačno i netačno\n\nNeće moći da vide:\n • poruke u čatovima izvan kursa\n • listu vokabulara", "requestAccess": "Zatraži pristup ({count})", "analyticsInactiveTitle": "Zahtevi za neaktivne korisnike nisu mogli biti poslati", "analyticsInactiveDesc": "Neaktivni korisnici koji se nisu prijavili od kada je ova funkcija uvedena neće videti vaš zahtev.\n\nDugme za zahtev će se pojaviti kada se vrate. Možete ponovo poslati zahtev kasnije klikom na dugme Zatraži pristup ispod njihovog imena kada bude dostupno.", "accessRequestedTitle": "Zahtev za pristup analitici", - "accessRequestedDesc": "Administratori “{space}” traže da vide vaše analitike učenja.\n\nAko se složite, administratori ovog kursa će moći da vide:\n • ukupni vokabular\n • ukupne gramatičke koncepte\n • ukupne sesije aktivnosti završene\n • specifične gramatičke koncepte korišćene, tačno i netačno\n\nNeće moći da vide:\n • poruke u čatovima izvan kursa\n • listu vokabulara", - "allowAccess": "Dozvoli pristup", - "denyAccess": "Odbij pristup", + "accessRequestedDesc": "Zahtevaju admin(i): {admin} \n\nAdmini iz „{space}“ traže da vide tvoje analitike učenja.\n\nAko se slažeš, moći će da vide tvoje:\n • ukupni rečnik\n • ukupni gramatički koncepti\n • ukupni završeni aktivnostni sesiji\n • specifične gramatičke koncepte korišćene, ispravno i pogrešno\n\nNeće moći da vide tvoje:\n • poruke u čatovima van kursa\n • listu reči", "adminRequestedAccess": "Administratori su zatražili da vide vaše analitike.", "lastUpdated": "Ažurirano\n{time}", "activityFinishedMessage": "Svi završeni!", "endForAll": "Završi za sve", "newCourse": "Novi kurs", - "newCourseSubtitle": "Koji plan kursa želite da koristite?", - "failedToLoadCourses": "Neuspešno učitavanje kurseva", "numModules": "{num} modula", - "numActivityPlans": "{num} planova aktivnosti", "coursePlan": "Plan kursa", "editCourseLater": "Možete kasnije izmeniti naslov šablona, opise i sliku kursa.", "newCourseAccess": "Podrazumevano, kursevi su privatni i zahtevaju odobrenje administratora za pridruživanje. Možete u bilo kom trenutku izmeniti ove postavke.", @@ -3919,17 +3461,11 @@ "accessDesc": "Možete učiniti svoj kurs otvorenim za sve! Ili, učiniti ga privatnim i sigurnim.", "createGroupChatDesc": "Dok sesije aktivnosti počinju i završavaju, grupni chatovi će ostati otvoreni za rutinsku komunikaciju.", "deleteDesc": "Samo administratori mogu obrisati kurs. Ovo je destruktivna radnja koja uklanja sve korisnike i briše sve odabrane chatove unutar kursa. Budite oprezni.", - "failedToLoadCourseInfo": "Neuspešno učitavanje informacija o kursu", "noCourseFound": "O, ovaj kurs zahteva plan!\n\nPlanovi kurseva su niz tema i aktivnosti razgovora.", "additionalParticipants": "+ {num} drugih", - "activityNotFoundForCourse": "Ova aktivnost nije pronađena unutar kursa", - "courseChats": "Разговори о курсу", - "myActivitySessions": "Моје активности", "directMessages": "Пряме поруке", "whatNow": "Шта сада?", "chooseNextActivity": "Изаберите следећу активност!", - "seeInstructions": "Погледајте упутства", - "hideInstructions": "Сакриј упутства", "letsGo": "Крећемо", "chooseRole": "Изаберите улогу!", "chooseRoleToParticipate": "Изаберите улогу за учешће!", @@ -3939,23 +3475,15 @@ "inviteFriends": "Позовите пријатеље", "waitNotDone": "Чекај, нисам завршио!", "waitingForOthersToFinish": "Чекамо да остали заврше...", - "saveToCompletedActivities": "Сачувај у завршене активности", "generatingSummary": "Анализирање разговора и генерисање резултата", - "instructionsLanguage": "Језик упутстава", "findCourse": "Пронађи курс", - "activityCompletedDesc": "Vaša završena aktivnost je dodata u analitiku gde možete pregledati i vežbati jezik koji ste koristili.", "pingParticipantsNotification": "{user} traži korisnike da se pridruže sesiji aktivnosti u {room}", "course": "Kurs", "courses": "Kursevi", "courseName": "Naziv kursa", "createNewCourse": "Novi kurs", - "publicCourses": "Javni kursevi", "goToCourse": "Idi na kurs: {course}", "activityComplete": "Ova aktivnost je završena. Sažetak aktivnosti bi trebao biti dostupan ispod.", - "haventChattedMuch": "Izgleda da niste mnogo ćaskali, pokušajte koristiti još reči vokabulara! Ako smatrate da ste završili svoj cilj, možete završiti aktivnost ispod.", - "haveChatted": "Izgleda da ste ćaskali neko vreme! Ako smatrate da ste završili svoj cilj, završite aktivnost i generisaćemo vam sažetak u ćaskanju!", - "userDoneAndWaiting": "{num1}/{num2} učesnika je završilo. Sačekajte da svi završe, i mi ćemo generisati sažetak u ćaskanju! \n\nAko želite da se ponovo pridružite razgovoru, kliknite na dugme za nastavak u ćaskanju.", - "othersDoneAndWaiting": "{num1}/{num2} su završili. Da li ste završili svoj cilj?", "startNewSession": "Započni novu sesiju", "joinOpenSession": "Pridruži se otvorenoj sesiji", "less": "manje", @@ -3965,7 +3493,6 @@ "openToJoin": "Otvoreno za pridruživanje", "results": "Резултати", "activityDone": "Активност завршена!", - "moreLabel": "више", "promoCodeInfo": "Промо кодови се могу унети на следећој страници", "editsComingSoon": "Функција уређивања градова и активности ће ускоро бити доступна.", "editing": "Уређивање", @@ -3981,13 +3508,10 @@ "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", - "chooseLanguage": "Izaberite jezik.", + "chooseLanguage": "Izaberite ciljni jezik.", "planTrip": "Planirajte svoje putovanje", "howAreYouTraveling": "Kako putujete?", "unlockPrivateTrip": "Otključajte privatno putovanje", @@ -4000,25 +3524,20 @@ "courseCode": "Koja je tajna šifra?", "courseCodeHint": "Šifra ili link putovanja", "unlockMyTrip": "Otključajte moje putovanje", - "anyLevel": "Bilo koji nivo", "signupOption": "Kako želite da se prijavite?", "withApple": "Sa Apple-om", "withGoogle": "Sa Google-om", "withEmail": "Sa email-om", "createAccount": "Kreirajte nalog", - "noCoursesFound": "Nema pronađenih kurseva", "loginWithEmail": "Prijavite se putem email-a", "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", - "allCefrLevels": "Svi CEFR nivoi", "chatListTooltip": "Ovde ćete pronaći svoje direktne poruke! Kliknite na avatar bilo kojeg korisnika i “započni razgovor” da biste poslali DM.", "directMessageBotTitle": "Direktna poruka Pangea Bota", "feedbackTitle": "Povratne informacije o aktivnosti", - "feedbackDesc": "Kako poboljšati aktivnost? Ako možete da date neke detalje, izvršićemo promenu!", "feedbackHint": "Vaše povratne informacije", "feedbackButton": "Pošaljite povratne informacije", "directMessageBotDesc": "Razgovor sa ljudima je zabavniji ali... AI je uvek spreman!", @@ -6107,30 +5626,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6146,18 +5641,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6182,18 +5665,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6230,38 +5701,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6270,62 +5713,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6362,10 +5761,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6374,14 +5769,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6390,46 +5777,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6438,10 +5789,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6498,18 +5845,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6518,14 +5853,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6554,18 +5881,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6574,42 +5889,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6618,14 +5901,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6646,26 +5921,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6686,10 +5941,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6722,25 +5973,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6797,34 +6029,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6853,778 +6057,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8617,14 +7053,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8636,14 +7064,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8675,10 +7095,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8687,18 +7103,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8707,14 +7111,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8739,38 +7135,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8816,10 +7184,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8844,10 +7208,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8872,10 +7232,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8884,66 +7240,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8964,42 +7264,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9024,154 +7300,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9188,18 +7316,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9220,14 +7336,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9244,10 +7352,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9260,14 +7364,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9276,14 +7372,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9311,26 +7399,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9359,18 +7427,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9407,10 +7467,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10343,10 +8399,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10527,34 +8579,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10567,10 +8591,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10579,14 +8599,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10603,22 +8615,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10766,14 +8762,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10782,34 +8770,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10818,54 +8778,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10874,10 +8798,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10894,10 +8814,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11069,26 +8985,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11117,10 +9013,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11177,30 +9069,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11229,18 +9105,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11357,14 +9225,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11377,10 +9237,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11389,14 +9245,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11413,14 +9261,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11429,22 +9269,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11457,18 +9281,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11485,22 +9297,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11509,30 +9309,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11605,18 +9381,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11673,18 +9437,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11713,30 +9465,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11789,18 +9525,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11849,46 +9577,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11953,10 +9641,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12128,14 +9812,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12163,14 +9839,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12183,10 +9851,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12222,19 +9886,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12259,14 +9918,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12275,14 +9926,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12335,10 +9978,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12351,18 +9990,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12375,14 +10002,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12423,26 +10042,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12470,10 +10077,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12484,36 +10087,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12550,10 +10123,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12618,18 +10187,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12694,10 +10251,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12718,10 +10271,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12738,10 +10287,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12750,10 +10295,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12766,10 +10307,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12794,16 +10331,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Позовите пријатеље на активност", - "inviteFriendsToActivityCourse": "Позовите пријатеље на активност и курс", "feedbackRespDesc": "Погледајте сутра за ажурирања активности.", "activityDropdownDesc": "Када завршите ову активност, кликните испод", - "activityAnalyticsListBody": "Ово су ваше завршене активности! Након што завршите активности, можете их прегледати овде.", "languageMismatchTitle": "Неслагање језика", "languageMismatchDesc": "Ваш циљани језик се не поклапа са језиком ове активности. Желите ли да ажурирате свој циљани језик?", "reportWordIssueTooltip": "Пријавите проблем са информацијама о речи", "tokenInfoFeedbackDialogTitle": "Повратне информације о информацијама о речи", - "tokenInfoFeedbackDialogDesc": "Искра AI прави грешке. Молимо вас да опишете све проблеме које сте пронашли са горе наведеним информацијама.", "noPublicCoursesFound": "Нису пронађени јавни курсеви. Желите ли да креирате један?", "noCourseTemplatesFound": "Нисмо могли да пронађемо курсеве за ваш циљани језик. У међувремену, можете разговарати са Пангеиа Ботом и проверити касније за више курсева.", "botActivityJoinFailMessage": "Пангеиа Бот се дуго одговара. Молимо вас да покушате поново касније или позовете пријатеља.", @@ -12811,14 +10344,6 @@ "leaveDesc": "Напустите овај простор и све разговоре у њему", "selectAll": "Изабери све", "deselectAll": "Одмотај све", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12827,10 +10352,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12847,10 +10368,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12884,7 +10401,6 @@ "newMessageInPangeaChat": "🗨️ Novi poruka u Pangea Četu", "shareCourse": "Podeli kurs", "addCourse": "Dodaj kurs", - "joinCourseWithCode": "Pridruži se kursu sa kodom", "joinPublicCourse": "Pridruži se javnom kursu", "vocabLevelsDesc": "Ovde će ići reči vokabulara nakon što ih podignete na viši nivo!", "highlightVocabTooltip": "Istaknite ciljne reči rečnika ispod tako što ćete ih poslati ili vežbati u čatu", @@ -12908,10 +10424,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12920,7 +10432,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Nema DM-ova ili chatova. Proverite da li je vaša pretraga pravilno napisana.", + "activityAnalyticsTooltipBody": "Ovo su vaše sačuvane aktivnosti za pregled i vežbu.", + "numSavedActivities": "Broj sačuvanih aktivnosti", + "saveActivityTitle": "Sačuvaj aktivnost", + "saveActivityDesc": "Dobar posao! Sačuvajte ovu aktivnost za kasniji pregled i vežbu", + "levelInfoTooltip": "Ovde možete videti sve poene koje ste osvojili i kako!", + "alreadyInCourseWithID": "Već ste u kursu sa ovim planom. Da li želite da kreirate kurs sa istim planom, ili da idete na postojeći kurs?", + "goToExistingCourse": "Idite na postojeći kurs", + "emojiView": "Prikaz emojija", + "feedbackDialogDesc": "I ja pravim greške! Ima li nešto što bi mi pomoglo da se poboljšam?", + "contactHasBeenInvitedToTheCourse": "Kontakt je pozvan na kurs", + "activityStatsButtonTooltip": "Informacije o aktivnosti", + "allow": "Dozvoli", + "deny": "Odbij", + "enabledRenewal": "Omogući obnavljanje pretplate", + "subscriptionEndsOn": "Pretplata ističe", + "subscriptionRenewsOn": "Pretplata se obnavlja", + "waitForSubscriptionChanges": "Promene u vašoj pretplati mogu potrajati trenutak da se odraze u aplikaciji.", + "subscribeReadingAssistance": "Pretplatite se da otključate alate za poruke", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharski", + "arDisplayName": "Arapski", + "asDisplayName": "Asamski", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Ajmara", + "azDisplayName": "Azerbejdžanski", + "baDisplayName": "Baškirski", + "banDisplayName": "Balinežanski", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Beloruski", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betavi", + "bgDisplayName": "Bugarski", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalski", + "bnBDDisplayName": "Bengalski (Bangladeš)", + "bnINDisplayName": "Bengalski (Indija)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosanski", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalonski", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Čiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Centralni kurdski", + "cnhDisplayName": "Hakha Čin", + "coDisplayName": "Korsikanski", + "crhDisplayName": "Krimsko-turski", + "crsDisplayName": "Seselwa kreolski francuski", + "csDisplayName": "Češki", + "cvDisplayName": "Čuvaški", + "cyDisplayName": "Velški", + "daDisplayName": "Danski", + "deDisplayName": "Nemački", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Eve", + "enDisplayName": "Engleski", + "enAUDisplayName": "Engleski (Australija)", + "enGBDisplayName": "Engleski (Velika Britanija)", + "enINDisplayName": "Engleski (Indija)", + "enUSDisplayName": "Engleski (SAD)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Španski", + "esESDisplayName": "Španski (Španija)", + "esMXDisplayName": "Španski (Meksiko)", + "euDisplayName": "Baskijski", + "faDisplayName": "Persijski", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finski", + "filDisplayName": "Filipinski", + "fjDisplayName": "Fidžijski", + "foDisplayName": "Faroški", + "frDisplayName": "Francuski", + "frCADisplayName": "Francuski (Kanada)", + "frFRDisplayName": "Francuski (Francuska)", + "fyDisplayName": "Zapadni Frisijski", + "gaDisplayName": "Irski", + "gaaDisplayName": "Ga", + "gdDisplayName": "Škotski Gailić", + "glDisplayName": "Galicijski", + "gnDisplayName": "Gvarani", + "gomDisplayName": "Goanski Konkani", + "guDisplayName": "Gujarat", + "haDisplayName": "Hausa", + "hawDisplayName": "Havajski", + "heDisplayName": "Hebrejski", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligajnon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Чхатисгархи", + "hrDisplayName": "Хрватски", + "hrxDisplayName": "Хунсрик", + "htDisplayName": "Хаити креолски", + "huDisplayName": "Мађарски", + "hyDisplayName": "Јерменски", + "idDisplayName": "Индонежански", + "igDisplayName": "Игбо", + "iloDisplayName": "Илоко", + "isDisplayName": "Исландски", + "itDisplayName": "Италијански", + "jaDisplayName": "Јапански", + "jvDisplayName": "Јавански", + "kaDisplayName": "Грузијски", + "kkDisplayName": "Казахски", + "kmDisplayName": "Кмерски", + "knDisplayName": "Каннада", + "koDisplayName": "Корејски", + "kokDisplayName": "Конкани", + "kriDisplayName": "Крио", + "ksDisplayName": "Кашмирски", + "ktuDisplayName": "Китуба (Демократска Република Конго)", + "kuDisplayName": "Курдски", + "kyDisplayName": "Киргиски", + "laDisplayName": "Латински", + "lbDisplayName": "Луксембуршки", + "lgDisplayName": "Ганда", + "liDisplayName": "Лимбуршки", + "lijDisplayName": "Лигурски", + "lmoDisplayName": "Ломбарски", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litvanac", + "ltgDisplayName": "Latgalski", + "luoDisplayName": "Luo (Kenija i Tanzanija)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letonski", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaški", + "miDisplayName": "Maorski", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonski", + "mlDisplayName": "Malajalamski", + "mnDisplayName": "Mongolski", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malajski", + "msArabDisplayName": "Malajski (arapski)", + "msMYDisplayName": "Malajski (Malezija)", + "mtDisplayName": "Malteški", + "mwrDisplayName": "Marvari", + "myDisplayName": "Burmanski", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norveški (Bokmål)", + "neDisplayName": "Nepalski", + "newDisplayName": "Njuarski", + "nlDisplayName": "Holandski", + "nlBEDisplayName": "Flamanski", + "noDisplayName": "Norveški", + "nrDisplayName": "Južni Ndebele", + "nsoDisplayName": "Severni Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okcitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Poljski", + "psDisplayName": "Paštunski", + "ptDisplayName": "Portugalski", + "ptBRDisplayName": "Portugalski (Brazil)", + "ptPTDisplayName": "Portugalski (Portugal)", + "quDisplayName": "Kečua", + "rajDisplayName": "Radžastanski", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumunski", + "roMDDisplayName": "Moldavski", + "romDisplayName": "Romani", + "ruDisplayName": "Ruski", + "rwDisplayName": "Kinjavanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilijanski", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Санго", + "shnDisplayName": "Шан", + "siDisplayName": "Синхалез", + "skDisplayName": "Словачки", + "slDisplayName": "Словеначки", + "smDisplayName": "Самоа", + "snDisplayName": "Шона", + "soDisplayName": "Сомали", + "sqDisplayName": "Албански", + "srDisplayName": "Српски", + "srMEDisplayName": "Crnogorski", + "ssDisplayName": "Svati", + "stDisplayName": "Južni Sotho", + "suDisplayName": "Sundanski", + "svDisplayName": "Švedski", + "swDisplayName": "Svahili", + "szlDisplayName": "Silezijski", + "taDisplayName": "Tamilski", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Таджик", + "thDisplayName": "Таи", + "tiDisplayName": "Тигриња", + "tkDisplayName": "Туркмен", + "tlDisplayName": "Тагалог", + "tnDisplayName": "Цвана", + "trDisplayName": "Турски", + "tsDisplayName": "Цонга", + "ttDisplayName": "Татар", + "ugDisplayName": "Ујгур", + "ukDisplayName": "Ukrajinski", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indija)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Uzbečki", + "viDisplayName": "Vijetnamski", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jidiš", + "yoDisplayName": "Joruba", + "yuaDisplayName": "Јукатек", + "yueDisplayName": "Кантонски", + "yueCNDisplayName": "Кантонски (Кина)", + "yueHKDisplayName": "Кантонски (Хонг Конг)", + "zhDisplayName": "Кинески", + "zhCNDisplayName": "Кинески (поједностављени)", + "zhTWDisplayName": "Кинески (традиционални)", + "zuDisplayName": "Зулу", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12987,6 +11685,7 @@ "notStartedActivitiesTitle": "Otvorene sesije ({num})", "inProgressActivitiesTitle": "Dešava se sada ({num})", "completedActivitiesTitle": "Završeno ({num})", + "pickDifferentActivity": "Izaberi drugu aktivnost", "inOngoingActivity": "Imate aktivnost u toku!", "@notStartedActivitiesTitle": { "type": "String", @@ -13012,10 +11711,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaš ciljni jezik se ne poklapa sa ovom porukom. Da li želite da ažurirate svoj ciljni jezik?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Ovo su svi u ovom kursu. Kliknite na avatar bilo kog korisnika i “počnite razgovor” da pošaljete DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Ova reč u rečniku će biti trajno uklonjena iz vaših analitika", + "woman": "Žena", + "man": "Muškarac", + "otherGender": "Drugo", + "unselectedGender": "Izaberite opciju pola", + "gender": "Pol", + "chatParticipantTooltip": "Ovo su svi u ovom čatu. Kliknite na avatar bilo kog korisnika i \"započnite razgovor\" da pošaljete DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Alati za učenje su onemogućeni za poruke koje nisu na vašem ciljanom jeziku.", + "vocabEmoji": "Emoji reči", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Zatraži regeneraciju", + "optionalRegenerateReason": "(Opcionalno) Razlog", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Postavili ste emoji za {lemma}! Ovaj emoji ćemo koristiti da predstavimo reč u praktičnim aktivnostima ubuduće.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Čekanje na završetak prijavljivanja", + "ssoDialogDesc": "Otvorili smo novu karticu kako biste se mogli sigurno prijaviti.", + "ssoDialogHelpText": "🤔 Ako niste videli novu karticu, molimo proverite svoj blokator iskačućih prozora.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Onemogući alate za jezik", + "disableLanguageToolsDesc": "Da li želite da onemogućite automatsku jezičku pomoć?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Dozvola odbijena. Omogućite dozvole za snimanje da biste snimali audio poruke.", + "genericWebRecordingError": "Nešto je pošlo po zlu. Preporučujemo korišćenje Chrome pretraživača prilikom snimanja poruka.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Za najbolje iskustvo korišćenja ove aplikacije, molimo vas da povećate veličinu ekrana.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktivnosti za otključavanje sledeće teme", "activitiesToUnlockTopicDesc": "Postavite broj aktivnosti za otključavanje sledeće teme kursa", "@activitiesToUnlockTopicTitle": { @@ -13025,5 +11842,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Praktikovanje ispravne definicije reči", + "constructUseIncLMDesc": "Praktikovanje pogrešne definicije reči", + "constructUseCorLADesc": "Praktikovanje ispravnog audio sadržaja reči", + "constructUseIncLADesc": "Praktikovanje pogrešnog audio sadržaja reči", + "constructUseBonus": "Bonus tokom praktikovanja reči", + "practiceVocab": "Vežbajte rečnik", + "selectMeaning": "Izaberite značenje", + "selectAudio": "Izaberite odgovarajući audio", + "congratulations": "Čestitamo!", + "anotherRound": "Još jedan krug", + "noActivityRequest": "Nema trenutnog zahteva za aktivnost.", + "quit": "Izlaz", + "congratulationsYouveCompletedPractice": "Čestitamo! Završili ste sesiju vežbanja.", + "mustHave10Words": "Morate imati najmanje 10 reči za rečnik da biste ih vežbali. Pokušajte da razgovarate sa prijateljem ili Pangea Bot-om da biste otkrili više!", + "botSettings": "Podešavanja Bota", + "activitySettingsOverrideWarning": "Jezik i nivo jezika određeni planom aktivnosti", + "voice": "Glas", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index 48fd04208..b70f8acbc 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:34.358506", + "@@last_modified": "2026-01-07 14:28:25.359543", "about": "Om", "@about": { "type": "String", @@ -3039,26 +3039,14 @@ "commandHint_logoutall": "Logga ut från alla aktiva enheter", "displayNavigationRail": "Visa navigationsfält på mobil", "customReaction": "Anpassad reaktion", - "accountInformation": "Kontoinformation", - "addGroupDescription": "Lägg till en chattbeskrivning", - "addNewFriend": "Lägg till ny vän", - "alreadyHaveAnAccount": "Har du redan ett konto?", - "createNewGroup": "Skapa en ny chatt", - "editChatPermissions": "Redigera chattbehörigheter", "writeAMessageLangCodes": "Skriv på {l1} eller {l2}...", "requests": "Förfrågningar", - "allCorrect": "Det är så jag skulle säga det! Bra!", - "newWayAllGood": "Det är inte så jag skulle ha sagt det, men det ser bra ut!", - "othersAreBetter": "Hm, det kan finnas ett bättre sätt att säga det.", "holdForInfo": "Klicka och håll för ordinformation.", "greenFeedback": "Det är vad jag skulle ha skrivit!", "yellowFeedback": "Hm, du kan prova det och se om det fungerar! För att använda detta ord, klicka bara på det igen.", "redFeedback": "Jag tror inte att det är rätt...", "itInstructionsTitle": "Jag kan hjälpa dig att översätta!", "itInstructionsBody": "Du kan klicka och hålla kvar val för ordinformation.", - "oneday": "Senaste 24 timmar", - "oneweek": "Senaste 7 dagar", - "onemonth": "Föregående månad", "gaTooltip": "L2 användning med grammatikhjälp", "taTooltip": "L2 användning med översättningshjälp", "unTooltip": "Annat", @@ -3068,58 +3056,27 @@ "interactiveTranslatorAllowed": "Elevens val", "interactiveTranslatorRequired": "Obligatorisk", "notYetSet": "Inte ännu inställt", - "myLearning": "Mina analyser", "waTooltip": "L2 användning utan hjälp", - "changeDateRange": "Ändra datumintervall", - "classDescription": "Beskrivning", - "addStudents": "Bjud in användare via länk eller kod", - "copyClassLink": "Kopiera inbjudningslänk", - "copyClassCode": "Kopiera inbjudningskod", - "inviteStudentByUserName": "Bjud in användare med användarnamn", "languageSettings": "Språkinställningar", "interactiveTranslator": "Översättningshjälp", - "shareVideo": "Dela video", - "shareVideoDesc": "Växla detta för att tillåta elever att dela videor i chattar.", - "shareFiles": "Dela filer", - "selectLanguageLevel": "Välj språknivå", "noIdenticalLanguages": "Vänligen välj olika grund- och målspråk", - "iWantALanguagePartnerFrom": "Är från:", - "worldWide": "Världen över", - "noResults": "Inga resultat! Försök att bredda din sökning.", "searchBy": "Sök efter land och språk", - "iWantAConversationPartner": "Jag vill ha en samtalspartner som", - "iWantALanguagePartnerWhoSpeaks": "Talar:", - "iWantALanguagePartnerWhoIsLearning": "Lär sig:", "joinWithClassCode": "Gå med i kurs", - "joinWithClassCodeHint": "Ange inbjudningskod", - "languageLevelPreA1": "Äkta nybörjare (Pre A1)", - "languageLevelA1": "Nybörjare (A1)", - "languageLevelA2": "Elementär (A2)", - "languageLevelB1": "Mellanliggande (B1)", - "languageLevelB2": "Övre mellanliggande (B2)", - "languageLevelC1": "Avancerad (C1)", - "languageLevelC2": "Mästerskap (C2)", + "languageLevelPreA1": "Novis Låg (Pre A1)", + "languageLevelA1": "Novis Mid (A1)", + "languageLevelA2": "Nybörjare Hög (A2)", + "languageLevelB1": "Medelnivå Mitten (B1)", + "languageLevelB2": "Avancerad Låg (B2)", + "languageLevelC1": "Avancerad Mitten (C1)", + "languageLevelC2": "Överlägsen (C2)", "changeTheNameOfTheClass": "Ändra namnet", "changeTheNameOfTheChat": "Ändra chatnamnet", - "askPangeaBot": "Fråga Pangea Bot om en kontextuell definition.", "sorryNoResults": "Tyvärr, inga resultat.", "ignoreInThisText": "Ignorera", - "helpMeTranslate": "Ja!", - "needsItShortMessage": "Utanför mål", "needsItMessage": "Vänta, det är inte {targetLanguage}! Behöver du hjälp med att översätta?", - "needsIgcMessage": "Detta meddelande har ett grammatikfel.", - "tokenTranslationTitle": "Ett ord är på ditt baskspråk.", - "spanTranslationDesc": "Se möjliga översättningar nedan.", - "spanTranslationTitle": "Vissa ord är på ditt baskspråk.", - "l1SpanAndGrammarTitle": "Utanför målspråket", - "l1SpanAndGrammarDesc": "Detta kan vara på ditt baskspråk eller så kan det vara ett grammatikfel.", - "otherTitle": "Du har ett fel.", - "otherDesc": "Se möjliga korrigeringar nedan.", "countryInformation": "Min land", - "myLanguages": "Mina grund- och målspråk", "targetLanguage": "Målspråk", "sourceLanguage": "Grundspråk", - "languagesISpeak": "Språk jag talar", "updateLanguage": "Mina språk", "whatLanguageYouWantToLearn": "Vilket språk vill du lära dig?", "whatIsYourBaseLanguage": "Vad är ditt grundspråk?", @@ -3134,13 +3091,8 @@ "errorDisableLanguageAssistanceUserDesc": "Klicka här för att uppdatera inställningar för översättningshjälp och grammatikhjälp", "errorDisableITClassDesc": "Översättningshjälp är avstängd för kursen som denna chatt tillhör.", "errorDisableIGCClassDesc": "Grammatikhjälp är avstängd för kursen som denna chatt tillhör.", - "itIsDisabled": "Interaktiv översättning är inaktiverad", - "igcIsDisabled": "Interaktiv grammatikkontroll är inaktiverad", - "goToLearningSettings": "Gå till inlärningsinställningar", "error405Title": "Språk inte inställda", "error405Desc": "Vänligen ställ in dina språk i Huvudmeny > Inlärningsinställningar.", - "loginOrSignup": "Logga in med", - "iAgreeToThe": "Jag samtycker till ", "termsAndConditions": "Villkor", "andCertifyIAmAtLeast13YearsOfAge": " och intygar att jag är minst 16 år gammal.", "error502504Title": "Wow, det är många elever online!", @@ -3148,40 +3100,21 @@ "error404Title": "Översättningsfel!", "error404Desc": "Pangea-boten är inte säker på hur den ska översätta det...", "errorPleaseRefresh": "Vi undersöker det! Vänligen ladda om och prova igen.", - "toggleIT": "Interaktiv översättning", - "toggleIGC": "Interaktiv grammatikkontroll", - "toggleToolSettingsDescription": "Här kan du växla dina individuella språkverktygsinställningar.", "connectedToStaging": "Ansluten till staging", "learningSettings": "Inlärningsinställningar", - "sendVoiceNotes": "Skicka röstmeddelanden", - "sendVoiceNotesDesc": "Växla detta för att tillåta elever att skicka röstmeddelanden i chattar.", - "chatTopic": "Chattämne", - "chatTopicDesc": "Sätt ett chattämne", - "inviteStudentByUserNameDesc": "Om din student redan har ett konto kan du söka efter dem.", "participants": "Deltagare", - "almostPerfect": "Det verkar rätt! Här är vad jag skulle ha sagt.", - "prettyGood": "Ganska bra! Här är vad jag skulle ha sagt.", - "letMeThink": "Hmm, låt oss se hur du gjorde!", "clickMessageTitle": "Behöver du hjälp?", "clickMessageBody": "Klicka på ett meddelande för språkvänliga verktyg som översättning, uppspelning och mer!", - "understandingMessagesTitle": "Definitioner och översättningar!", - "understandingMessagesBody": "Klicka på understrukna ord för definitioner. Översätt med meddelandealternativ (övre högra).", "allDone": "Klart!", "vocab": "Vokabulär", "low": "Vi har bevis för att användaren inte förstår dessa ord.", "medium": "Dessa ord har använts. Det är oklart om orden är fullt förstådda eller inte.", "high": "Vi har bevis för att användaren förstår dessa ord.", - "unknownProficiency": "Dessa ord har inte använts i Pangea Chat.", - "changeView": "Byt vy.", - "clearAll": "Rensa alla ord?", - "generateVocabulary": "Generera vokabulär från titel och beskrivning", - "generatePrompts": "Generera förslag", "subscribe": "Prenumerera", "getAccess": "Prenumerera nu!", "subscriptionDesc": "Meddelanden är gratis! Prenumerera för att låsa upp interaktiv översättning, grammatikkontroll och inlärningsanalys.", "subscriptionManagement": "Prenumerationshantering", "currentSubscription": "Nuvarande prenumeration", - "changeSubscription": "Ändra din prenumeration", "cancelSubscription": "Avbryt din prenumeration", "selectYourPlan": "Välj din plan", "subsciptionPlatformTooltip": "Logga in på din ursprungliga enhet för att hantera din prenumerationsplan", @@ -3190,9 +3123,6 @@ "paymentHistory": "Betalningshistorik", "emptyChatDownloadWarning": "Kan inte ladda ner tom chat", "update": "Uppdatera", - "updateDesc": "Du kan nu uppdatera denna app från {localVersion} till {storeVersion}", - "maybeLater": "Kanske senare", - "mainMenu": "Huvudmeny", "toggleImmersionMode": "Fördjupningsläge", "toggleImmersionModeDesc": "När det är aktiverat visas alla meddelanden på ditt målspråk. Denna inställning är mest användbar vid språkutbyten.", "itToggleDescription": "Detta språkinlärningsverktyg kommer att identifiera ord i ditt bask språk och hjälpa dig att översätta dem till ditt målspråk. Även om det är sällsynt kan AI göra översättningsfel.", @@ -3207,212 +3137,13 @@ "definitionsToolDescription": "När den är aktiverad kan ord understrukna i blått klickas för definitioner. Klicka på meddelanden för att få tillgång till definitioner.", "translationsToolDescrption": "När den är aktiverad, klicka på ett meddelande och översättningsikonen för att se ett meddelande på ditt bask språk.", "welcomeBack": "Välkommen tillbaka! Om du var en del av pilotprogrammet 2023-2024, kontakta oss för din specialpilotprenumeration. Om du är lärare som har (eller din institution har) köpt licenser för din klass, kontakta oss för din lärarprenumeration.", - "kickAllStudents": "Kicks alla elever", - "kickAllStudentsConfirmation": "Är du säker på att du vill kicka alla elever?", - "inviteAllStudents": "Bjud in alla elever", - "inviteAllStudentsConfirmation": "Är du säker på att du vill bjuda in alla elever?", - "inviteUsersFromPangea": "Lägg till administratörer", - "redeemPromoCode": "Lös in kampanjkod", - "enterPromoCode": "Ange kampanjkod", "downloadTxtFile": "Ladda ner textfil", "downloadCSVFile": "Ladda ner CSV-fil", "promotionalSubscriptionDesc": "Du har för närvarande ett livstidskampanjabonnemang. Skicka ett meddelande till support@pangea.chat för hjälp med att ändra ditt abonnemang.", "originalSubscriptionPlatform": "Abonnemang köpt via {purchasePlatform}", "oneWeekTrial": "En veckas provperiod", "downloadXLSXFile": "Ladda ner Excel-fil", - "abDisplayName": "Abkhasiska", - "aaDisplayName": "Afar", - "afDisplayName": "Afrikaans", - "akDisplayName": "Akan", - "sqDisplayName": "Albanska", - "amDisplayName": "Amhariska", - "arDisplayName": "Arabiska", - "anDisplayName": "Aragonesiska", - "hyDisplayName": "Armeniska", - "asDisplayName": "Assamesiska", - "avDisplayName": "Avariska", - "aeDisplayName": "Avestiska", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerbajdzjanska", - "bmDisplayName": "Bambara", - "baDisplayName": "Bashkir", - "euDisplayName": "Baskiska", - "beDisplayName": "Belarusiska", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Bosniska", - "brDisplayName": "Breton", - "bgDisplayName": "Bulgariska", - "myDisplayName": "Burmesiska", - "caDisplayName": "Katalanska, Valencianska", - "chDisplayName": "Chamorro", - "ceDisplayName": "Tjetjenska", - "nyDisplayName": "Chichewa, Chewa, Nyanja", - "zhDisplayName": "Kinesiska", - "cvDisplayName": "Chuvash", - "kwDisplayName": "Korniska", - "coDisplayName": "Korsikanska", - "crDisplayName": "Cree", - "hrDisplayName": "Kroatiska", - "csDisplayName": "Tjeckiska", - "daDisplayName": "Danska", - "dvDisplayName": "Divehi; Dhivehi; Maldivisk;", - "nlDisplayName": "Holländska", - "enDisplayName": "Engelska", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estniska", - "eeDisplayName": "Ewe", - "foDisplayName": "Färöiska", - "fjDisplayName": "Fijianska", - "fiDisplayName": "Finska", - "frDisplayName": "Franska", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galiciska", - "kaDisplayName": "Georgiska", - "deDisplayName": "Tyska", - "elDisplayName": "Grekiska, Modern", - "gnDisplayName": "Guarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haitisk, haitisk kreol", - "haDisplayName": "Hausa", - "heDisplayName": "Hebreiska (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hindi", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Ungerska", - "iaDisplayName": "Interlingua", - "idDisplayName": "Indonesiska", - "ieDisplayName": "Interlingue", - "gaDisplayName": "Iriska", - "igDisplayName": "Igbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "Isländska", - "itDisplayName": "Italienska", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japanska", - "jvDisplayName": "Javanesiska", - "klDisplayName": "Kalaallisut, grönländska", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakh", - "kmDisplayName": "Khmer", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kirghiz, Kyrgyz", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Koreanska", - "kuDisplayName": "Kurdiska", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latin", - "lbDisplayName": "Luxemburgiska, Letzeburgesch", - "lgDisplayName": "Luganda", - "liDisplayName": "Limburgiska, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laotiska", - "ltDisplayName": "Litauiska", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letiska", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonska", - "mgDisplayName": "Malagassiska", - "msDisplayName": "Malajiska", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Maltesiska", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Mongoliska", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norska Bokmål", - "ndDisplayName": "Nord-Ndebele", - "neDisplayName": "Nepalesiska", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norska Nynorsk", - "noDisplayName": "Norska", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Syd Ndebele", - "ocDisplayName": "Occitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Gamla kyrkslaviska, kyrklig slaviska, kyrkoslaviska, gamla bulgariska, gamla slaviska", - "omDisplayName": "Oromo", - "orDisplayName": "Orija", - "osDisplayName": "Ossetisk, ossetisk", - "paDisplayName": "Punjabi, Panjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Persiska", - "plDisplayName": "Polska", - "psDisplayName": "Pashto, Pushto", - "ptDisplayName": "Portugisiska", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumänska, moldaviska", - "ruDisplayName": "Ryska", - "saDisplayName": "Sanskrit (Saṃskṛta)", - "scDisplayName": "Sardinska", - "sdDisplayName": "Sindhi", - "seDisplayName": "Nordsamiska", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Serbiska", - "gdDisplayName": "Skotsk gaeliska, gaeliska", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Singalesiska", - "skDisplayName": "Slovakiska", - "slDisplayName": "Slovenska", - "soDisplayName": "Somaliska", - "stDisplayName": "Sydsotho", - "esDisplayName": "Spanska", - "suDisplayName": "Sundanesiska", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "Swedish", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tadzjikiska", - "thDisplayName": "Thai", - "tiDisplayName": "Tigrinja", - "boDisplayName": "Tibetanska, Tibetansk, Central", - "tkDisplayName": "Turkmenska", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tongaöarna)", - "trDisplayName": "Turkiska", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitisk", - "ugDisplayName": "Uigur, Uiguriska", - "ukDisplayName": "Ukrainska", - "urDisplayName": "Urdu", - "uzDisplayName": "Uzbekiska", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamesiska", - "voDisplayName": "Volapük", - "waDisplayName": "Wallonska", - "cyDisplayName": "Walesiska", - "woDisplayName": "Wolof", - "fyDisplayName": "Västfrisiska", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Jiddisch", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Okänd", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiianska", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Flera", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "Hebreiska", - "jwDisplayName": "Javanesiska", - "moDisplayName": "Moldaviska", - "shDisplayName": "Serbo-kroatiska", "wwCountryDisplayName": "Världen", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Ålandöarna", @@ -3660,41 +3391,25 @@ "yeCountryDisplayName": "Jemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Betala", - "allPrivateChats": "Privata chattar", - "unknownPrivateChat": "Okänd privat chatt", + "pay": "Till kassan", "invitedToSpace": "{user} har bjudit in dig att delta i en kurs: {space}! Vill du acceptera?", - "declinedInvitation": "Avböjde inbjudan", - "acceptedInvitation": "Accepterade inbjudan", "youreInvited": "📩 Du är inbjuden!", "invitedToChat": "{user} har bjudit in dig att delta i en chatt: {name}! Vill du acceptera?", "monthlySubscription": "Månadsvis", "yearlySubscription": "Årsvis", "defaultSubscription": "Pangea Chat-prenumeration", "freeTrial": "Gratis provperiod", - "grammarAnalytics": "Felanalys", "total": "Totalt: ", "noDataFound": "Inga data hittades", - "promoSubscriptionExpirationDesc": "Din nuvarande prenumeration är kampanjprenumeration och löper ut den {expiration}. Kontakta support@pangea.chat för hjälp med att ändra din prenumeration.", - "emptyChatNameWarning": "Vänligen ange ett namn för denna chatt", "blurMeansTranslateTitle": "Varför är meddelandet suddigt?", "blurMeansTranslateBody": "Med Immersion Mode aktiverat kommer meddelanden som skickas på ditt grundspråk att vara suddiga medan Pangea Bot översätter dem till ditt målspråk. Immersion Mode kan växlas i individuella och kursinställningar.", - "someErrorTitle": "Hm, något är fel", - "someErrorBody": "Det kan vara ett fel eller något i ditt grundspråk.", "bestCorrectionFeedback": "Det stämmer!", "distractorFeedback": "Det är inte helt rätt.", "bestAnswerFeedback": "Det stämmer!", "definitionDefaultPrompt": "Vad betyder detta ord?", "practiceDefaultPrompt": "Vad är det bästa svaret?", "correctionDefaultPrompt": "Vad är det bästa ersättningsordet?", - "itStartDefaultPrompt": "Vill du ha hjälp med att översätta?", - "lockedChatWarning": "🔒 Denna chatt har låsts", - "lockChat": "Lås chatt", - "suggestToChat": "Föreslå denna chatt", - "suggestToChatDesc": "Föreslagna chattar kommer att visas i chattlistor", "acceptSelection": "Acceptera korrigering", - "acceptSelectionAnyway": "Använd detta ändå", - "makingActivity": "Skapar aktivitet", "why": "Varför?", "definition": "Definition", "exampleSentence": "Exempelsats", @@ -3702,128 +3417,55 @@ "reportMessageTitle": "{reportingUserId} har rapporterat ett meddelande från {reportedUserId} i chatten {roomName}", "reportMessageBody": "Meddelande: {reportedMessage}\nOrsak: {reason}", "noTeachersFound": "Inga lärare hittades att rapportera till", - "viewArchive": "Visa arkiv", "trialExpiration": "Din gratis provperiod löper ut den {expiration}", "freeTrialDesc": "Nya användare får en veckas gratis provperiod av Pangea Chat", "activateTrial": "Gratis 7-dagars provperiod", "successfullySubscribed": "Du har framgångsrikt prenumererat!", "clickToManageSubscription": "Klicka här för att hantera din prenumeration.", - "errorGettingAudio": "Fel vid hämtning av ljud. Vänligen uppdatera sidan och försök igen.", "signUp": "Registrera dig", "pleaseChooseAtLeastChars": "Vänligen välj minst {min} tecken.", "noEmailWarning": "Vänligen ange en giltig e-postadress. Annars kan du inte återställa ditt lösenord. Om du inte vill, tryck igen på knappen för att fortsätta.", "pleaseEnterValidEmail": "Vänligen ange en giltig e-postadress.", "pleaseChooseAUsername": "Vänligen välj ett användarnamn", - "chooseAUsername": "Välj ett användarnamn", "define": "Definiera", "listen": "Lyssna", - "addConversationBot": "Aktivera konversationsbot", - "addConversationBotDesc": "Lägg till en bot till denna chatt", - "convoBotSettingsDescription": "Redigera konversationstema och svårighetsgrad", - "enterAConversationTopic": "Ange ett konversationstema", - "conversationTopic": "Konversationstema", - "enableModeration": "Aktivera moderering", - "enableModerationDesc": "Aktivera automatisk moderering för att granska meddelanden innan de skickas", - "conversationLanguageLevel": "Vilken är språknivån för denna konversation?", - "showDefinition": "Visa definition", - "subscriptionPopupTitle": "Denna mening kan ha ett grammatikfel...", - "subscriptionPopupDesc": "Prenumerera idag för att låsa upp översättning och grammatikrättning!", - "seeOptions": "Se alternativ", - "continuedWithoutSubscription": "Fortsätt utan att prenumerera", "trialPeriodExpired": "Din provperiod har löpt ut", - "selectToDefine": "Klicka på ett ord för att se dess definition!", "translations": "översättningar", "messageAudio": "meddelande ljud", "definitions": "definitioner", "subscribedToUnlockTools": "Prenumerera för att låsa upp interaktiv översättning och grammatikkontroll, ljuduppspelning, personliga övningsaktiviteter och inlärningsanalys!", "translationTooltip": "Översätt", - "audioTooltip": "Spela upp ljud", "speechToTextTooltip": "Transkription", - "certifyAge": "Jag intygar att jag är över {age} år gammal", "kickBotWarning": "Att sparka Pangea Bot kommer att ta bort konversationsboten från denna chatt.", - "joinToView": "Gå med i detta rum för att se detaljer", "refresh": "Uppdatera", - "autoPlayTitle": "Automatisk uppspelning av meddelanden", - "autoPlayDesc": "När den är aktiverad kommer text-till-tal-ljudet av meddelanden att spelas upp automatiskt när de väljs.", "messageAnalytics": "Meddelandesanalys", "words": "Ord", "score": "Poäng", "accuracy": "Noggrannhet", "points": "Poäng", "noPaymentInfo": "Ingen betalningsinformation behövs!", - "conversationBotModeSelectDescription": "Chattaktivitet", - "conversationBotModeSelectOption_discussion": "Diskussion", - "conversationBotModeSelectOption_custom": "Anpassad", - "conversationBotModeSelectOption_conversation": "Konversation", - "conversationBotModeSelectOption_textAdventure": "Textäventyr", - "conversationBotModeSelectOption_storyGame": "Storyspel", - "conversationBotDiscussionZone_title": "Diskussionsinställningar", - "conversationBotDiscussionZone_discussionTopicLabel": "Diskussionstema", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Ange diskussionstema", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Diskussionsnyckelord", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Ange diskussionsnyckelord", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Komma separerad lista av nyckelord för att styra diskussionen", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Skicka diskussionsuppmaning enligt schema", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Timmar mellan diskussionsuppmaningar", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Svarar på ⏩ reaktion", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Reaktion för att skicka diskussionsuppmaning", - "conversationBotCustomZone_title": "Anpassade inställningar", - "conversationBotCustomZone_customSystemPromptLabel": "Systemprompt", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Ange anpassad systemprompt", - "conversationBotCustomZone_customSystemPromptEmptyError": "Saknar anpassad systemprompt", - "botConfig": "Bot- och aktivitetsinställningar", - "botConfigNoPermissionTitle": "Ingen behörighet", - "botConfigNoPermissionMessage": "Kontakta rumadministratören för att ändra botkonfiguration", - "addConversationBotDialogTitleInvite": "Bekräfta inbjudan till konversationsbot", - "addConversationBotButtonInvite": "Bjud in", - "addConversationBotDialogInviteConfirmation": "Bjud in", - "addConversationBotButtonTitleRemove": "Bekräfta borttagning av konversationsbot", - "addConversationBotButtonRemove": "Ta bort", - "addConversationBotDialogRemoveConfirmation": "Ta bort", - "conversationBotConfigConfirmChange": "Bekräfta", - "conversationBotStatus": "Bjud in bot", - "conversationBotTextAdventureZone_title": "Textäventyr", - "conversationBotTextAdventureZone_instructionLabel": "Instruktioner för Game Master", - "conversationBotTextAdventureZone_instructionPlaceholder": "Ange instruktioner för game master", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Saknas instruktioner för game master", - "studentAnalyticsNotAvailable": "Studentdata är för närvarande inte tillgängliga", - "roomDataMissing": "Viss data kan saknas från rum där du inte är medlem.", "updatePhoneOS": "Du kan behöva uppdatera din enhets operativsystemversion.", "wordsPerMinute": "Ord per minut", "autoIGCToolName": "Kör Pangea skrivhjälp automatiskt", "autoIGCToolDescription": "Kör automatiskt Pangea Chat grammatik- och översättningshjälp innan jag skickar mitt meddelande.", - "runGrammarCorrection": "Kontrollera meddelande", - "grammarCorrectionFailed": "Problem att åtgärda", - "grammarCorrectionComplete": "Ser bra ut!", "tooltipInstructionsTitle": "Inte säker på vad det gör?", "tooltipInstructionsMobileBody": "Håll och tryck på objekt för att visa verktygstips.", "tooltipInstructionsBrowserBody": "Hovra över objekt för att visa verktygstips.", "chatCapacity": "Chattkapacitet", "roomFull": "Detta rum är redan fullt.", - "topicNotSet": "Ämnet har inte satts.", - "chatCapacityNotSet": "Denna chatt har ingen kapacitetsgräns.", "chatCapacityHasBeenChanged": "Chattkapacitet ändrad", "chatCapacitySetTooLow": "Chattkapaciteten måste vara minst {count}.", "chatCapacityExplanation": "Chattkapacitet begränsar antalet medlemmar som får vara med i en chatt.", - "chatExceedsCapacity": "Denna chatt överskrider sin kapacitet.", "tooManyRequest": "För många förfrågningar, försök igen senare.", "enterNumber": "Vänligen ange ett heltal.", "buildTranslation": "Bygg din översättning från valen ovan", - "nonexistentSelection": "Urvalet finns inte längre.", - "changeAnalyticsLanguage": "Ändra Analytics-språk", "practice": "Öva", "noLanguagesSet": "Inga språk inställda", - "noActivitiesFound": "Det räcker för nu! Kom tillbaka senare för mer.", - "hintTitle": "Tips:", "speechToTextBody": "För röstmeddelanden kan du se en transkription samt talarens ord per minut-poäng.", "versionNotFound": "Version hittades inte", "fetchingVersion": "Hämtar version...", "versionFetchError": "Fel vid hämtning av version", "versionText": "Version: {version}+{buildNumber}", - "languageButtonLabel": "Språk: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Automatisk uppspelning av översättning", - "interactiveTranslatorAutoPlayDesc": "Startar den interaktiva översättaren utan att fråga.", - "changeAnalyticsView": "Ändra analysvy", "l1TranslationBody": "Meddelanden på ditt bas-språk kommer inte att översättas.", "deleteSubscriptionWarningTitle": "Du har ett aktivt abonnemang", "deleteSubscriptionWarningBody": "Att radera ditt konto kommer inte automatiskt att avbryta ditt abonnemang.", @@ -3831,9 +3473,7 @@ "error520Title": "Vänligen försök igen.", "error520Desc": "Tyvärr kunde vi inte förstå ditt meddelande...", "wordsUsed": "Använda ord", - "errorTypes": "Typ av fel", "level": "Nivå", - "canceledSend": "Avbruten sändning", "morphsUsed": "Använda morfer", "translationChoicesBody": "Klicka och håll kvar ett alternativ för en ledtråd.", "grammar": " Grammatik", @@ -3843,7 +3483,6 @@ "reportContentIssueTitle": "Rapportera innehållsproblem", "feedback": "Valfri feedback", "reportContentIssueDescription": "Oj då! AI kan underlätta personliga inlärningsupplevelser men... hallucinerar också. Vänligen ge oss din feedback så försöker vi igen.", - "changeContent": "Oj då! AI kan underlätta personliga inlärningsupplevelser men... hallucinerar också. Vad ska det vara?", "clickTheWordAgainToDeselect": "Klicka på det valda ordet för att avmarkera det.", "l2SupportNa": "Inte tillgänglig", "l2SupportAlpha": "Alpha", @@ -4077,7 +3716,6 @@ "grammarCopySPC": "Specificitet", "grammarCopyPARTTYPE": "Partitiv Typ", "grammarCopyINTREL": "Interrogativ-Relativ", - "grammarCopyNUMFORMpsor": "Possessorns Nummer", "grammarCopyUNKNOWN": "Okänd", "grammarCopyNUMBERPSOR": "Possessorns Nummer", "grammarCopyPOSS": "Ägande", @@ -4123,28 +3761,14 @@ "grammarCopyVOICEdir": "Direkt", "grammarCopyVOICEinv": "Omvänd", "grammarCopyVOICErcp": "Reciprokt", - "enterPrompt": "Vänligen ange ett systemprompt", - "selectBotLanguage": "Välj bot-språk", - "chooseVoice": "Välj en röst", - "enterLanguageLevel": "Vänligen ange ett språknivå", - "enterDiscussionTopic": "Vänligen ange ett diskussionstema", - "selectBotChatMode": "Välj chattläge", - "messageNotInTargetLang": "Meddelandet är inte på målspråket", "other": "Annat", "levelShort": "NIVÅ {level}", - "botModeValidation": "Vänligen välj ett chattläge", "clickBestOption": "Välj de bästa alternativen för att översätta ditt meddelande!", "completeActivitiesToUnlock": "Slutför minst en aktivitet för att låsa upp översättningen!", - "botSettingsSubtitle": "Bjud in bot för att moderera chattaktivitet", - "invitePeople": "Bjud in användare", "noCapacityLimit": "Ingen kapacitetsgräns", "downloadGroupText": "Ladda ner grupptext", "notificationsOn": "Aviseringar på", "notificationsOff": "Aviseringar av", - "chatCanBeFoundViaSearch": "Chat kan hittas via sök", - "requireCodeToJoin": "Kräv kod för att gå med", - "canFindInSearch": "Kan hittas i sök", - "addChatToSpace": "Lägg till chatt", "createChatAndInviteUsers": "Skapa chatt och bjud in användare", "updatedNewSpaceDescription": "Kurser gör att du kan konsolidera dina chattar och bygga privata eller offentliga gemenskaper.", "joinWithCode": "Gå med med kod", @@ -4180,39 +3804,19 @@ "constructUseCollected": "Samlad i chatt", "constructUseNanDesc": "Ej tillämpligt", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Logga in med användarnamn och lösenord", - "registrationEmailMessage": "Vänligen verifiera din e-post med länken som skickats dit. I vissa fall kan det ta upp till 5 minuter innan e-postmeddelandet anländer. Kontrollera även din skräppostmapp.", "enableTTSToolName": "Aktiverad text-till-tal", "enableTTSToolDescription": "Tillåt appen att generera text-till-tal-utdata för delar av texten på ditt målspråk.", - "couldNotFindTTS": "Vi kunde inte hitta en text-till-tal-motor för ditt nuvarande målspråk.", - "ttsInstructionsHyperlink": "Klicka här för att se instruktioner för att ladda ner en ny röst på din enhet.", - "createAnAccount": "Skapa ett konto", - "signIn": "Logga in", - "signUpWithEmail": "Registrera dig med e-post", - "signUpWithGoogle": "Registrera dig med Google", - "signUpWithApple": "Registrera dig med Apple", "yourUsername": "Ditt användarnamn", "yourEmail": "Din e-post", - "pleaseEnterAnEmail": "Vänligen ange en e-postadress", - "signInWithGoogle": "Logga in med Google", - "signInWithApple": "Logga in med Apple", - "chooseYourAvatar": "Välj din avatar", "iWantToLearn": "Jag vill lära mig", - "letsStart": "Låt oss börja", - "pleaseAgreeToTOS": "Vänligen godkänn villkoren", "pleaseEnterEmail": "Vänligen ange en giltig e-postadress.", - "pleaseSelectALanguage": "Vänligen välj ett språk", "myBaseLanguage": "Mitt baskspråk", - "clickWordsInstructions": "🧻 Klicka på ett ord för detaljer. 🤐", - "chooseBestDefinition": "Vad betyder detta ord?", "meaningSectionHeader": "Betydelse:", "formSectionHeader": "Använda former i chattar:", - "noEmojiSelectedTooltip": "Inget emoji valt", "writingExercisesTooltip": "Skrivövningar", "listeningExercisesTooltip": "Lyssningsövningar", "readingExercisesTooltip": "Läsövningar", "meaningNotFound": "Betydelsen kunde inte hittas.", - "formsNotFound": "Former kunde inte hittas.", "chooseBaseForm": "Välj grundformen", "notTheCodeError": "Tyvärr, det är inte koden!", "totalXP": "Total erfarenhetspoäng", @@ -4252,9 +3856,6 @@ "pickAnEmoji": "Vilken är din favoritemoji för '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Matcha betydelser med orden i meddelandet!", "doubleClickToEdit": "Dubbelklicka för att redigera.", - "removeFeature": "Ta bort {feature}", - "chooseCorrectLabel": "Välj rätt etikett.", - "levelPopupTitle": "Grattis till att ha nått\nNivå {level}", "activityPlannerTitle": "Aktivitetsplaner", "topicLabel": "Ämne", "topicPlaceholder": "Välj ett ämne...", @@ -4262,7 +3863,6 @@ "modePlaceholder": "Välj en lägen...", "learningObjectiveLabel": "Lärandemål", "learningObjectivePlaceholder": "Välj ett lärandemål...", - "mediaLabel": "Media som eleverna ska dela", "languageOfInstructionsLabel": "Språk för aktivitetsinstruktioner", "targetLanguageLabel": "Mål språk", "cefrLevelLabel": "CEFR-nivå", @@ -4277,20 +3877,15 @@ "instructions": "Instruktioner", "numberOfLearners": "Antal elever", "mustBeInteger": "Må vara ett heltal, t.ex. 1, 2, 3, ...", - "noLemmasFound": "Det finns inget ordförråd med mer än {xp} XP. Fortsätt öva!", "constructUsePvmDesc": "Producerad i röstmeddelande", - "lockedMorphFeature": "Väntar på att låsas upp", "leaveSpaceDescription": "Genom att lämna kursen kommer du att lämna alla chattar inom den. Andra användare kommer att se att du har lämnat kursen.", - "whatIsLemma": "Vad är lemma?", "constructUseCorMmDesc": "Korrekt meddelandebetydelse", "constructUseIncMmDesc": "Felaktig meddelandebetydelse", "constructUseIgnMmDesc": "Ignorerad meddelandebetydelse", "clickForMeaningActivity": "Klicka här för en Betydelseutmaning", "meaning": "Betydelse", "chatWith": "Grupp med {displayname}", - "slightlyOffensive": "Lite stötande", "clickOnEmailLink": "Vänligen klicka på länken i e-postmeddelandet och fortsätt.\n\nKontrollera din skräppostmapp om e-postmeddelandet inte har kommit fram.", - "whoIsAllowedToJoinThisChat": "Vem får gå med i denna chatt", "dontForgetPassword": "Glöm inte ditt lösenord!", "enableAutocorrectToolName": "Aktivera enhetsautokorrigering", "enableAutocorrectDescription": "Om din enhet stöder det språk du lär dig kan du aktivera enhetsautokorrigering för att rätta vanliga fel när du skriver.", @@ -4318,48 +3913,26 @@ "autocorrectNotAvailable": "Tyvärr stöds inte din plattform för den här funktionen för tillfället. Håll utkik efter vidareutveckling!", "pleaseUpdateApp": "Uppdatera appen för att fortsätta.", "chooseEmojiInstructionsBody": "Matcha emojis med de ord de bäst representerar. Oroa dig inte! Inga poäng dras av för oenighet. 😅", - "pickAnEmojiFor": "Välj en emoji för {lemma}", "analyticsVocabListBody": "Det här är all din vokabulär! När du tjänar XP för varje ord, går de från frö till full blom. Klicka på vilket ord som helst för att se mer detaljer.", "morphAnalyticsListBody": "Det här är alla grammatikbegrepp i språket du lär dig! Du låser upp dem när du stöter på dem medan du chattar. Klicka för detaljer.", "knockSpaceSuccess": "Du har begärt att gå med i den här kursen! En administratör kommer att svara på din förfrågan när de mottagit den 😄", - "joinByCode": "Gå med med kod", "chooseWordAudioInstructionsBody": "Lyssna på hela meddelandet. Matcha sedan ljuden med orden.", "chooseMorphsInstructionsBody": "Klicka på pusselbitarna för grammatikfrågor!", - "inviteAndLaunch": "Bjud in och starta", - "createOwnChat": "Skapa din egen chatt", "pleaseEnterInt": "Vänligen ange ett nummer", "home": "Hem", "join": "Gå med", "readingAssistanceOverviewBody": "Klicka på knapparna nedan för mini-spel om att matcha emojis, ljud, ords betydelser och grammatikbegrepp. Eller klicka på vilket ord som helst för detaljer.", - "learnByTexting": "Lär dig genom att skriva", - "levelSummaryTrigger": "Visa sammanfattning", "levelSummaryPopupTitle": "Sammanfattning av nivå {level}", - "referFriends": "Rekommendera vänner", - "referFriendDialogTitle": "Bjud in en vän till din konversation", - "referFriendDialogDesc": "Har du en vän som är exalterad över att lära sig ett nytt språk med dig? Kopiera och skicka denna inbjudningslänk för att gå med och börja chatta med dig idag.", - "youUnlocked": "Du har låst upp", "resetInstructionTooltipsTitle": "Återställ instruktionstips", "resetInstructionTooltipsDesc": "Klicka för att visa instruktionstips som för en helt ny användare.", "selectForGrammar": "Välj en grammatikikon för aktiviteter och detaljer.", - "newChatActivityTitle": "Lägga till en rolig aktivitet?", - "newChatActivityDesc": "Gör varje gruppchatt till ett äventyr med Aktivitetplaneraren! Sätt fängslande ämnen och mål för gruppen, och få samtal att leva med fantastiska bilder. Tänd fantasifulla diskussioner och håll roligheten flytande utan ansträngning!", - "exploreMore": "Utforska mer", "randomize": "Slumpa", "clear": "Rensa", "makeYourOwnActivity": "Skapa din egen aktivitet", "featuredActivities": "Utvalda", - "goToChat": "Gå till chatten", "save": "Spara", - "selectActivity": "Välj aktivitet", - "wordFocusListeningMultipleChoice": "Vilket ljud matchar ordet?", "startChat": "Starta en chatt", "translationProblem": "Översättningsproblem", - "perfectTranslation": "Perfekt översättning!", - "greatJobTranslation": "Bra jobbat med den här översättningen!", - "goodJobTranslation": "Bra arbete med den här översättningen.", - "makingProgress": "Du gör framsteg!", - "keepPracticing": "Fortsätt öva!", - "niceJob": "Bra gjort!", "askToJoin": "Be om att få gå med", "emptyChatWarningTitle": "Chatt är tom", "emptyChatWarningDesc": "Du har inte bjudit in någon till din chatt. Gå till Chattinställningar för att bjuda in dina kontakter eller Bot. Du kan också göra detta senare.", @@ -4378,8 +3951,6 @@ "languageLevelC2Desc": "Jag kan förstå nästan allt jag hör eller läser och uttrycka mig flytande och exakt.", "newVocab": "Nytt vocab", "newGrammar": "Nya grammatikbegrepp", - "congratulationsOnReaching": "Du har nått nivå {level}!", - "seeDetails": "Se detaljer", "choosePracticeMode": "Klicka på en av knapparna ovan för att starta en övningsaktivitet", "ban": "Bannlys", "unban": "Avbanna", @@ -4393,8 +3964,6 @@ "timesUsedWithAssistance": "Användningstider med hjälp", "shareInviteCode": "Dela inbjudningskod: {code}", "leaderboard": "Topplista", - "welcomeUser": "Välkommen {user}", - "joinSpaceOnboardingDesc": "Har du en inbjudningskod eller länk till en offentlig kurs?", "skipForNow": "Hoppa över för tillfället", "permissions": "Behörigheter", "spaceChildPermission": "Vem kan lägga till nya chattar i denna kurs", @@ -4402,12 +3971,8 @@ "defaultOption": "Standard", "deleteChatDesc": "Är du säker på att du vill radera denna chatt? Den kommer att raderas för alla deltagare och alla meddelanden i chatten kommer inte längre att vara tillgängliga för övning eller inlärningsanalys.", "deleteSpaceDesc": "Kursen och eventuella valda chattar kommer att raderas för alla deltagare och alla meddelanden i chatten kommer inte längre att vara tillgängliga för övning eller inlärningsanalys. Denna åtgärd kan inte ångras.", - "chatWithActivities": "Chatta med aktiviteter", "launch": "Starta", - "launchActivityToChats": "Starta aktivitet till chattar", "searchChats": "Sök chattar", - "selectChats": "Välj chattar", - "selectChatToStart": "Klart! Välj en chatt för att starta", "maxFifty": "Max 50", "configureSpace": "Konfigurera kurs", "pinMessages": "Fäst meddelanden", @@ -4421,9 +3986,7 @@ "announcements": "Meddelanden", "activities": "Aktiviteter", "access": "Åtkomst", - "botSettings": "Bot-inställningar", "activitySuggestionTimeoutMessage": "Vi arbetar hårt för att generera fler aktiviteter för dig, vänligen kontrollera igen om en minut", - "accessSettingsWarning": "Hoppsan! Det verkar som att du inte har behörighet att ställa in åtkomstreglerna för detta rum. Du bör kontrollera dessa för att säkerställa att de är som du vill och prata med en rumadmin om du behöver ändra dem", "howSpaceCanBeFound": "Hur denna kurs kan hittas", "private": "Privat", "cannotBeFoundInSearch": "Kan inte hittas i sökningen", @@ -4436,16 +3999,6 @@ "canBeFoundViaKnock": "• begär att gå med och administratörsgodkännande", "youHaveLeveledUp": "Du har avancerat till nästa nivå!", "sendActivities": "Skicka aktiviteter", - "getStarted": "Kom igång", - "getStartedBotChatDesc": "Chatta med AI är en utmärkt plats att börja och Pangea läsning, skrivning, lyssning och talverktyg gör det enkelt!", - "getStartedCommunitiesDesc": "Att lära sig med en gemenskap är där Pangea Chat lyser! \nDu kan gå med i din klass, hitta en kurs eller till och med skapa din egen!", - "getStartedFriendsDesc": "Har du en vän som vill lära sig med dig?", - "getStartedBotChatComplete": "Bra gjort! Du chattar med boten!", - "getStartedCommunitiesComplete": "Bra, du har gått med i en kurs!", - "getStartedComplete": "Du har slutfört detta avsnitt! \nFortsätt utforska våra fantastiska funktioner genom att chatta med vänner!", - "getStartedFriendsComplete": "Woohoo! Du har vänner! 😉", - "getStartedBotChatButton": "Börja chatta!", - "getStartedFriendsButton": "Chatta med en vän", "groupChat": "Gruppchatt", "directMessage": "Direktmeddelande", "newDirectMessage": "Nytt direktmeddelande", @@ -4461,7 +4014,6 @@ "mySavedActivities": "Mina sparade aktiviteter", "noSavedActivities": "Inga sparade aktiviteter", "saveActivity": "Spara denna aktivitet", - "yourSavedActivities": "Sparade aktiviteter", "failedToPlayVideo": "Det gick inte att spela upp videon", "done": "Klart", "inThisSpace": "I denna kurs", @@ -4500,37 +4052,27 @@ "maximumActivityParticipants": "Varje aktivitet kan ha högst {count} deltagare.", "pending": "Väntar", "inactive": "Inaktiv", - "unjoinedActivityMessage": "Vill du delta? Välj en öppen roll!\nEller häng med och titta på showen!", - "fullActivityMessage": "Känn dig fri att titta på showen! Även om det inte finns några öppna roller att delta i, kan du se chatten!", "confirmRole": "Bekräfta roll", "openRoleLabel": "ÖPPEN", "joinedTheActivity": "👋 {username} gick med som {role}", "finishedTheActivity": "🎯 {username} avslutade denna aktivitet", - "endActivityTitle": "Jag är klar", - "endActivityDesc": "Har du uppnått målen?\nDet här är din bekräftelse på att du går tillbaka från att skriva. Men oroa dig inte, roligheten fortsätter i chatten! Häng med och njut av showen tills alla klickar på 'Klar'.", "archiveToAnalytics": "Lägg till i mina slutförda aktiviteter", "activitySummaryError": "Sammanfattningar av aktivitet är otillgängliga", "requestSummaries": "Begär sammanfattningar", - "loadingActivitySummary": "Läser in aktivitetsammanfattning...", "generatingNewActivities": "Du är den första användaren för detta språkpar! Ge oss en minut, vi förbereder aktiviteter speciellt för dig.", - "requestAccessTitle": "Begär tillgång till analysvisning?", + "requestAccessTitle": "Begär åtkomst till analys?", "requestAccessDesc": "Vill du begära tillgång för att se deltagaranalys?\n\nOm deltagarna samtycker, kommer administratörer av denna kurs att kunna se deras:\n • totala ordförråd\n • totala grammatikbegrepp\n • totala genomförda aktivitetsessioner\n • specifika grammatikbegrepp som används, korrekt och felaktigt\n\nDe kommer inte att kunna se deras:\n • meddelanden i chattar utanför kursen\n • ordförrådslista", "requestAccess": "Begär tillgång ({count})", "analyticsInactiveTitle": "Förfrågningar till inaktiva användare kunde inte skickas", "analyticsInactiveDesc": "Inaktiva användare som inte har loggat in sedan denna funktion infördes kommer inte att se din förfrågan.\n\nKnappen Begär kommer att visas när de återvänder. Du kan skicka om förfrågan senare genom att klicka på knappen Begär under deras namn när den är tillgänglig.", "accessRequestedTitle": "Begäran om tillgång till analys", - "accessRequestedDesc": "Administratörerna för \"{space}\" begär att få se dina inlärningsanalyser.\n\nOm du godkänner kommer administratörerna för denna kurs att kunna se din:\n • totala ordförråd\n • totala grammatikbegrepp\n • totala aktivitetsessioner som slutförts\n • de specifika grammatikbegreppen som används, korrekt och felaktigt\n\nDe kommer inte att kunna se dina:\n • meddelanden i chattar utanför kursen\n • ordförrådslistan", - "allowAccess": "Tillåt tillgång", - "denyAccess": "Neka tillgång", + "accessRequestedDesc": "Begärande admin(s): {admin} \n\nAdministratörer från “{space}” begär att få se din lärandeanalys.\n\nOm du går med på det, kommer de att kunna se din:\n • totala ordförråd\n • totala grammatiska koncept\n • totala genomförda aktivitetstillfällen\n • de specifika grammatiska koncept som använts, korrekt och inkorrekt\n\nDe kommer inte att kunna se din:\n • meddelanden i chattar utanför kursen\n • ordförrådslista", "adminRequestedAccess": "Administratörer har begärt att få se dina analyser.", "lastUpdated": "Uppdaterad\n{time}", "activityFinishedMessage": "Allt klart!", "endForAll": "Avsluta för alla", "newCourse": "Ny kurs", - "newCourseSubtitle": "Vilken kursplan vill du använda?", - "failedToLoadCourses": "Det gick inte att ladda kurser", "numModules": "{num} moduler", - "numActivityPlans": "{num} aktivitetsplaner", "coursePlan": "Kursplan", "editCourseLater": "Du kan redigera mallens titel, beskrivningar och kursbild senare.", "newCourseAccess": "Som standard är kurser privata och kräver administratörsgodkännande för att gå med. Du kan ändra dessa inställningar när som helst.", @@ -4544,17 +4086,11 @@ "accessDesc": "Du kan göra din kurs öppen för världen! Eller, gör din kurs privat och säker.", "createGroupChatDesc": "Medan aktivitetsessioner startar och slutar, förblir gruppchattar öppna för rutinkommunikation.", "deleteDesc": "Endast administratörer kan radera en kurs. Detta är en destruktiv åtgärd som tar bort alla användare och raderar alla valda chattar inom kursen. Fortsätt med försiktighet.", - "failedToLoadCourseInfo": "Misslyckades med att ladda kursinformation", "noCourseFound": "Åh, den här kursen behöver en plan!\n\nKursplaner är en sekvens av ämnen och samtalsaktiviteter.", "additionalParticipants": "+ {num} andra", - "activityNotFoundForCourse": "Denna aktivitet hittades inte inom kursen", - "courseChats": "Kurschattar", - "myActivitySessions": "Mina aktivitetsessioner", "directMessages": "Direktmeddelanden", "whatNow": "Vad nu?", "chooseNextActivity": "Välj din nästa aktivitet!", - "seeInstructions": "Se instruktioner", - "hideInstructions": "Dölj instruktioner", "letsGo": "Låt oss åka", "chooseRole": "Välj en roll!", "chooseRoleToParticipate": "Välj en roll för att delta!", @@ -4564,23 +4100,15 @@ "inviteFriends": "Bjud in vänner", "waitNotDone": "Vänta, jag är inte klar!", "waitingForOthersToFinish": "Väntar på att resten ska bli klara...", - "saveToCompletedActivities": "Spara till slutförda aktiviteter", "generatingSummary": "Analyserar chatten och genererar resultat", - "instructionsLanguage": "Instruktioners språk", "findCourse": "Hitta en kurs", - "activityCompletedDesc": "Din slutförda aktivitet har lagts till i analysen där du kan granska och öva det språk du använde.", "pingParticipantsNotification": "{user} letar efter användare att delta i aktivitetssessionen i {room}", "course": "Kurs", "courses": "Kurser", "courseName": "Kursnamn", "createNewCourse": "Ny kurs", - "publicCourses": "Offentliga kurser", "goToCourse": "Gå till kurs: {course}", "activityComplete": "Den här aktiviteten är klar. Sammanfattningen av aktiviteten bör finnas nedanför.", - "haventChattedMuch": "Det verkar som att du inte har pratat så mycket, försök använda fler vokabulärord! Om du känner att du har slutfört ditt mål kan du avsluta aktiviteten nedanför.", - "haveChatted": "Det verkar som att du har pratat ett tag! Om du känner att du har slutfört ditt mål, avsluta för att avsluta aktiviteten och vi kommer att generera en sammanfattning i chatten!", - "userDoneAndWaiting": "{num1}/{num2} deltagare har avslutat. Vänta tills alla är klara, så genererar vi en sammanfattning i chatten! \n\nOm du vill gå med i samtalet igen, klicka på fortsätt-knappen i chatten.", - "othersDoneAndWaiting": "{num1}/{num2} är klara. Har du slutfört ditt mål?", "startNewSession": "Starta ny session", "joinOpenSession": "Gå med i öppen session", "less": "mindre", @@ -4590,7 +4118,6 @@ "openToJoin": "Öppen för att delta", "results": "Resultat", "activityDone": "Aktivitet klar!", - "moreLabel": "mer", "promoCodeInfo": "Rabattkoder kan anges på nästa sida", "editsComingSoon": "Möjligheten att redigera städer och aktiviteter kommer snart.", "editing": "Redigerar", @@ -4606,13 +4133,10 @@ "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", - "chooseLanguage": "Välj ett språk.", + "chooseLanguage": "Välj ett målspråk.", "planTrip": "Planera din resa", "howAreYouTraveling": "Hur reser du?", "unlockPrivateTrip": "Lås upp en privat resa", @@ -4625,25 +4149,20 @@ "courseCode": "Vad är det hemliga lösenordet?", "courseCodeHint": "Resekod eller länk", "unlockMyTrip": "Lås upp min resa", - "anyLevel": "Nivå oavsett", "signupOption": "Hur vill du registrera dig?", "withApple": "Med Apple", "withGoogle": "Med Google", "withEmail": "Med e-post", "createAccount": "Skapa konto", - "noCoursesFound": "Inga kurser hittades", "loginWithEmail": "Logga in med e-post", "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", - "allCefrLevels": "Alla CEFR-nivåer", "chatListTooltip": "Här hittar du dina direktmeddelanden! Klicka på en användares avatar och “starta konversation” för att skicka ett DM.", "directMessageBotTitle": "Direktmeddelande Pangea Bot", "feedbackTitle": "Aktivitetsfeedback", - "feedbackDesc": "Hur kan aktiviteten förbättras? Om du kan ge lite detaljer, gör vi ändringen!", "feedbackHint": "Din feedback", "feedbackButton": "Skicka feedback", "directMessageBotDesc": "Att prata med människor är roligare men... AI är alltid redo!", @@ -5483,30 +5002,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5522,18 +5017,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5558,18 +5041,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5606,38 +5077,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5646,62 +5089,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5738,10 +5137,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5750,14 +5145,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5766,46 +5153,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5814,10 +5165,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5874,18 +5221,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5894,14 +5229,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5930,18 +5257,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5950,42 +5265,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5994,14 +5277,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6022,26 +5297,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6062,10 +5317,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6098,25 +5349,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6173,34 +5405,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6229,778 +5433,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7993,14 +6429,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8012,14 +6440,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8051,10 +6471,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8063,18 +6479,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8083,14 +6487,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8115,38 +6511,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8192,10 +6560,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8220,10 +6584,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8248,10 +6608,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8260,66 +6616,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8340,42 +6640,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8400,154 +6676,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8564,18 +6692,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8596,14 +6712,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8620,10 +6728,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8636,14 +6740,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8652,14 +6748,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8687,26 +6775,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8735,18 +6803,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8783,10 +6843,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9719,10 +7775,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9903,34 +7955,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9943,10 +7967,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9955,14 +7975,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9979,22 +7991,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10142,14 +8138,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10158,34 +8146,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10194,54 +8154,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10250,10 +8174,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10270,10 +8190,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10445,26 +8361,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10493,10 +8389,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10553,30 +8445,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10605,18 +8481,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10733,14 +8601,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10753,10 +8613,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10765,14 +8621,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10789,14 +8637,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10805,22 +8645,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10833,18 +8657,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10861,22 +8673,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10885,30 +8685,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10981,18 +8757,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11049,18 +8813,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11089,30 +8841,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11165,18 +8901,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11225,46 +8953,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11329,10 +9017,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11504,14 +9188,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11539,14 +9215,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11559,10 +9227,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11598,19 +9262,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11635,14 +9294,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11651,14 +9302,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11711,10 +9354,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11727,18 +9366,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11751,14 +9378,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11799,26 +9418,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11846,10 +9453,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11860,36 +9463,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11926,10 +9499,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11994,18 +9563,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12070,10 +9627,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12094,10 +9647,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12114,10 +9663,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12126,10 +9671,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12142,10 +9683,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12170,16 +9707,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Bjud in vänner till aktivitet", - "inviteFriendsToActivityCourse": "Bjud in vänner till aktivitet och kurs", "feedbackRespDesc": "Kolla tillbaka imorgon för aktivitetsuppdateringar.", "activityDropdownDesc": "När du är klar med denna aktivitet, klicka nedan", - "activityAnalyticsListBody": "Detta är dina slutförda aktiviteter! Efter att ha avslutat aktiviteter kan du se dem här.", "languageMismatchTitle": "Språkmatchning saknas", "languageMismatchDesc": "Ditt målspråk matchar inte språket för denna aktivitet. Vill du uppdatera ditt målspråk?", "reportWordIssueTooltip": "Rapportera problem med ordinformation", "tokenInfoFeedbackDialogTitle": "Feedback om ordinformation", - "tokenInfoFeedbackDialogDesc": "AI gör misstag. Vänligen beskriv eventuella problem du hittade med informationen ovan.", "noPublicCoursesFound": "Inga offentliga kurser hittades. Vill du skapa en?", "noCourseTemplatesFound": "Vi kunde inte hitta några kurser för ditt målspråk. Du kan chatta med Pangea Bot under tiden och återkomma senare för fler kurser.", "botActivityJoinFailMessage": "Pangea Bot tar ett tag att svara. Försök igen senare, eller bjud in en vän.", @@ -12187,14 +9720,6 @@ "leaveDesc": "Lämna detta utrymme och alla chattar inom det", "selectAll": "Välj alla", "deselectAll": "Avmarkera alla", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12203,10 +9728,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12223,10 +9744,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12260,7 +9777,6 @@ "newMessageInPangeaChat": "📩 Nytt meddelande i Pangea Chat", "shareCourse": "Dela kurs", "addCourse": "Lägg till en kurs", - "joinCourseWithCode": "Gå med i kurs med kod", "joinPublicCourse": "Gå med i offentlig kurs", "vocabLevelsDesc": "Det här är platsen där vokabulärord kommer att hamna när du har nivåer upp dem!", "highlightVocabTooltip": "Markera målvokabulärord nedan genom att skicka dem eller öva med dem i chatten", @@ -12284,10 +9800,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12296,7 +9808,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Inga DMs eller chattar hittades. Se till att din sökning är stavad korrekt.", + "activityAnalyticsTooltipBody": "Detta är dina sparade aktiviteter för granskning och övning.", + "numSavedActivities": "Antal sparade aktiviteter", + "saveActivityTitle": "Spara aktivitet", + "saveActivityDesc": "Bra jobbat! Spara denna aktivitet för senare granskning och övning", + "levelInfoTooltip": "Här kan du se alla poäng du har tjänat och hur!", + "alreadyInCourseWithID": "Du är redan i en kurs med denna plan. Vill du skapa en kurs med samma plan, eller gå till den befintliga kursen?", + "goToExistingCourse": "Gå till befintlig kurs", + "emojiView": "Emoji-vy", + "feedbackDialogDesc": "Jag gör misstag också! Något för att hjälpa mig att förbättra?", + "contactHasBeenInvitedToTheCourse": "Kontakten har blivit inbjuden till kursen", + "activityStatsButtonTooltip": "Aktivitetsinformation", + "allow": "Tillåt", + "deny": "Neka", + "enabledRenewal": "Aktivera prenumerationsförnyelse", + "subscriptionEndsOn": "Prenumerationen slutar den", + "subscriptionRenewsOn": "Prenumerationen förnyas den", + "waitForSubscriptionChanges": "Ändringar i din prenumeration kan ta en stund att återspeglas i appen.", + "subscribeReadingAssistance": "Prenumerera för att låsa upp meddelandeverktyg", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amhariska", + "arDisplayName": "Arabiska", + "asDisplayName": "Assamesiska", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azeriska", + "baDisplayName": "Baskir", + "banDisplayName": "Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Vitryska", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Bulgariska", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Indien)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosniska", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Katalanska", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Central kurdiska", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsikanska", + "crhDisplayName": "Krimturkiska", + "crsDisplayName": "Seselwa kreolfranska", + "csDisplayName": "Tjeckiska", + "cvDisplayName": "Tjuvash", + "cyDisplayName": "Walesiska", + "daDisplayName": "Danska", + "deDisplayName": "Tyska", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Engelska", + "enAUDisplayName": "Engelska (Australien)", + "enGBDisplayName": "Engelska (Storbritannien)", + "enINDisplayName": "Engelska (Indien)", + "enUSDisplayName": "Engelska (USA)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Spanska", + "esESDisplayName": "Spanska (Spanien)", + "esMXDisplayName": "Spanska (Mexiko)", + "euDisplayName": "Baskiska", + "faDisplayName": "Persiska", + "ffDisplayName": "Fulah", + "fiDisplayName": "Finska", + "filDisplayName": "Filippinska", + "fjDisplayName": "Fijianska", + "foDisplayName": "Färöiska", + "frDisplayName": "Franska", + "frCADisplayName": "Franska (Kanada)", + "frFRDisplayName": "Franska (Frankrike)", + "fyDisplayName": "Västra frisisk", + "gaDisplayName": "Irländska", + "gaaDisplayName": "Ga", + "gdDisplayName": "Skotsk gaeliska", + "glDisplayName": "Galiciska", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiianska", + "heDisplayName": "Hebreiska", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Kroatiska", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitisk kreol", + "huDisplayName": "Ungerska", + "hyDisplayName": "Armeniska", + "idDisplayName": "Indonesiska", + "igDisplayName": "Igbo", + "iloDisplayName": "Iloko", + "isDisplayName": "Isländska", + "itDisplayName": "Italienska", + "jaDisplayName": "Japanska", + "jvDisplayName": "Javanesiska", + "kaDisplayName": "Georgiska", + "kkDisplayName": "Kazakiska", + "kmDisplayName": "Khmer", + "knDisplayName": "Kannada", + "koDisplayName": "Koreanska", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Kashmiriska", + "ktuDisplayName": "Kituba (Demokratiska republiken Kongo)", + "kuDisplayName": "Kurdiska", + "kyDisplayName": "Kyrgyziska", + "laDisplayName": "Latin", + "lbDisplayName": "Luxemburgska", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgiska", + "lijDisplayName": "Liguriska", + "lmoDisplayName": "Lombardiska", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litauiska", + "ltgDisplayName": "Latgaliska", + "luoDisplayName": "Luo (Kenya och Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Lettiska", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malagassiska", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonska", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mongoliska", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaysiska", + "msArabDisplayName": "Malaysiska (arabiska)", + "msMYDisplayName": "Malaysiska (Malaysia)", + "mtDisplayName": "Maltesiska", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmesiska", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norska (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Holländska", + "nlBEDisplayName": "Flamländska", + "noDisplayName": "Norska", + "nrDisplayName": "Syd Ndebele", + "nsoDisplayName": "Norra Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Polska", + "psDisplayName": "Pashto", + "ptDisplayName": "Portugisiska", + "ptBRDisplayName": "Portugisiska (Brasilien)", + "ptPTDisplayName": "Portugisiska (Portugal)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthani", + "rnDisplayName": "Rundi", + "roDisplayName": "Rumänska", + "roMDDisplayName": "Moldaviska", + "romDisplayName": "Romani", + "ruDisplayName": "Ryska", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilianska", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Singalesiska", + "skDisplayName": "Slovakiska", + "slDisplayName": "Slovenska", + "smDisplayName": "Samoanska", + "snDisplayName": "Shona", + "soDisplayName": "Somaliska", + "sqDisplayName": "Albanska", + "srDisplayName": "Serbiska", + "srMEDisplayName": "Montenegrinska", + "ssDisplayName": "Swati", + "stDisplayName": "Sydsotho", + "suDisplayName": "Sundanesisk", + "svDisplayName": "Svenska", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesiska", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajikiska", + "thDisplayName": "Thailändska", + "tiDisplayName": "Tigrinja", + "tkDisplayName": "Turkmenska", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Turkiska", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uigurer", + "ukDisplayName": "Ukrainska", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Indien)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Usbekiska", + "viDisplayName": "Vietnamesiska", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Jiddisch", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonesiska", + "yueCNDisplayName": "Kantonesiska (Kina)", + "yueHKDisplayName": "Kantonesiska (Hongkong)", + "zhDisplayName": "Kinesiska", + "zhCNDisplayName": "Kinesiska (Förenklad)", + "zhTWDisplayName": "Kinesiska (Traditionell)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12362,6 +11060,7 @@ }, "notStartedActivitiesTitle": "Öppna sessioner ({num})", "inProgressActivitiesTitle": "Pågår nu ({num})", + "pickDifferentActivity": "Välj en annan aktivitet", "completedActivitiesTitle": "Avklarad ({num})", "inOngoingActivity": "Du har en pågående aktivitet!", "@notStartedActivitiesTitle": { @@ -12388,10 +11087,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ditt målspråk matchar inte detta meddelande. Vill du uppdatera ditt målspråk?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Detta är alla i den här kursen. Klicka på vilken användares avatar som helst och \"starta konversation\" för att skicka ett DM.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Detta vokabulärord kommer att tas bort permanent från din analys", + "woman": "Kvinna", + "man": "Man", + "otherGender": "Annat", + "unselectedGender": "Välj ett könsalternativ", + "gender": "Kön", + "chatParticipantTooltip": "Detta är alla i denna chatt. Klicka på vilken användares avatar som helst och \"starta konversation\" för att skicka ett DM.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Lärverktyg är inaktiverade för meddelanden som inte är på ditt målspråk.", + "vocabEmoji": "Vokabulärsemoji", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Begär regenerering", + "optionalRegenerateReason": "(Valfritt) Orsak", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Du har ställt in emojin för {lemma}! Vi kommer att använda denna emoji för att representera ordet i praktiska aktiviteter framöver.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Väntar på att inloggningen ska slutföras", + "ssoDialogDesc": "Vi har öppnat en ny flik så att du kan logga in säkert.", + "ssoDialogHelpText": "🤔 Om du inte såg den nya fliken, vänligen kontrollera din popup-blockerare.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Inaktivera språkinstrument", + "disableLanguageToolsDesc": "Vill du inaktivera automatisk språkhjälp?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Åtkomst nekad. Aktivera inspelningsbehörigheter för att spela in ljudmeddelanden.", + "genericWebRecordingError": "Något gick fel. Vi rekommenderar att du använder webbläsaren Chrome när du spelar in meddelanden.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "För bästa upplevelse med denna applikation, vänligen utöka din skärmstorlek.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Aktiviteter för att låsa upp nästa ämne", "activitiesToUnlockTopicDesc": "Ange antalet aktiviteter för att låsa upp nästa kursämne", "@activitiesToUnlockTopicTitle": { @@ -12401,5 +11218,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Korrekt vokabulär definitionsövning", + "constructUseIncLMDesc": "Inkorrekt vokabulär definitionsövning", + "constructUseCorLADesc": "Korrekt vokabulär ljudövning", + "constructUseIncLADesc": "Inkorrekt vokabulär ljudövning", + "constructUseBonus": "Bonus under vokabulärövning", + "practiceVocab": "Öva vokabulär", + "selectMeaning": "Välj betydelsen", + "selectAudio": "Välj den matchande ljudfilen", + "congratulations": "Grattis!", + "anotherRound": "En runda till", + "noActivityRequest": "Ingen aktuell aktivitetsförfrågan.", + "quit": "Avsluta", + "congratulationsYouveCompletedPractice": "Grattis! Du har slutfört övningssessionen.", + "mustHave10Words": "Du måste ha minst 10 ord för att öva dem. Försök att prata med en vän eller Pangea Bot för att upptäcka mer!", + "botSettings": "Botinställningar", + "activitySettingsOverrideWarning": "Språk och språknivå bestäms av aktivitetsplanen", + "voice": "Röst", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 864ec90d4..22033e897 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:17.997622", + "@@last_modified": "2026-01-07 14:27:42.869267", "acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது", "@acceptedTheInvitation": { "type": "String", @@ -3252,28 +3252,16 @@ "commandHint_logoutall": "அனைத்து செயல்படும் சாதனங்களிலிருந்தும் வெளியேறவும்", "displayNavigationRail": "மொபைலில் வழிசெலுத்தல் ரெய்லை காட்டவும்", "customReaction": "தனிப்பயன் எதிர்வினை", - "accountInformation": "கணக்கு தகவல்", - "addGroupDescription": "ஒரு உரையாடல் விளக்கத்தைச் சேர்க்கவும்", - "addNewFriend": "புதிய நண்பரைச் சேர்க்கவும்", - "alreadyHaveAnAccount": "ஏற்கனவே ஒரு கணக்கு உள்ளதா?", - "createNewGroup": "புதிய உரையாடலை உருவாக்கவும்", - "editChatPermissions": "உரையாடல் அனுமதிகளைத் திருத்தவும்", "ignore": "தடுக்கும்", "ignoredUsers": "தடுக்கும் பயனர்கள்", "writeAMessageLangCodes": "{l1} அல்லது {l2} இல் எழுதவும்...", "requests": "கோரிக்கைகள்", - "allCorrect": "அந்தபடி நான் சொல்லுவேன்! நன்றியது!", - "newWayAllGood": "அந்தபடி நான் சொல்லவில்லை ஆனால் அது நல்லது!", - "othersAreBetter": "ஹ்ம்ம, அதைச் சொல்ல ஒரு சிறந்த வழி இருக்கலாம்.", "holdForInfo": "வார்த்தை தகவலுக்கு கிளிக் செய்து பிடிக்கவும்.", "greenFeedback": "அது நான் போடவேண்டியது!", "yellowFeedback": "ஹ்ம்ம, அதை முயற்சி செய்து பார்க்கலாம்! இந்த வார்த்தையை பயன்படுத்த, மீண்டும் கிளிக் செய்யவும்.", "redFeedback": "அது சரியானது என்று நினைக்கவில்லை...", "itInstructionsTitle": "நான் உங்களுக்கு மொழிபெயர்க்க உதவ முடியும்!", "itInstructionsBody": "பதிவுகளைத் தேர்ந்தெடுத்து, வார்த்தை தகவலுக்கு பிடித்து வைத்துக் கொள்ளலாம்.", - "oneday": "கடந்த 24 மணி நேரம்", - "oneweek": "கடந்த 7 நாட்கள்", - "onemonth": "கடந்த மாதம்", "gaTooltip": "வியக்கருடன் இலக்கண உதவியுடன் பயன்படுத்தவும்", "taTooltip": "மொழிபெயர்ப்பு உதவியுடன் பயன்படுத்தவும்", "unTooltip": "மற்றவை", @@ -3283,58 +3271,27 @@ "interactiveTranslatorAllowed": "மாணவர் தேர்வு", "interactiveTranslatorRequired": "தேவை", "notYetSet": "இன்னும் அமைக்கப்படவில்லை", - "myLearning": "எனது பகுப்பாய்வுகள்", "waTooltip": "உதவியுடன் இல்லாமல் பயன்படுத்தவும்", - "changeDateRange": "தேதி வரம்பை மாற்றவும்", - "classDescription": "விளக்கம்", - "addStudents": "தொகுப்பை இணைக்கும் அல்லது குறியீடு மூலம் பயனர்களை அழைக்கவும்", - "copyClassLink": "அழைப்பு இணைப்பை நகலெடுக்கவும்", - "copyClassCode": "கிளாஸ் குறியீட்டை நகலெடு", - "inviteStudentByUserName": "பயனர்பெயரால் மாணவர்களை அழைப்பு", "languageSettings": "மொழி அமைப்புகள்", "interactiveTranslator": "பெயர்ப்பு உதவி", - "shareVideo": "வீடியோ பகிர்வு", - "shareVideoDesc": "மாணவர்களுக்கு வீடியோக்களைச் சேர்க்க அனுமதிக்க இதை இயக்கவும்.", - "shareFiles": "கோப்புகளை பகிர்", - "selectLanguageLevel": "மொழி நிலையை தேர்ந்தெடு", "noIdenticalLanguages": "தயவுசெய்து வேறுபட்ட அடிப்படை மற்றும் இலக்கு மொழிகளை தேர்ந்தெடுக்கவும்", - "iWantALanguagePartnerFrom": "இருப்பது:", - "worldWide": "உலகளாவிய", - "noResults": "பயன்கள் இல்லை! உங்கள் தேடலை விரிவாக்கவும்.", "searchBy": "நாடு மற்றும் மொழிகளால் தேடவும்", - "iWantAConversationPartner": "எனக்கு உரையாடல் கூட்டாளி வேண்டும்", - "iWantALanguagePartnerWhoSpeaks": "பேசும்:", - "iWantALanguagePartnerWhoIsLearning": "கற்றுக் கொண்டுவரும்:", "joinWithClassCode": "பாடத்துடன் சேரவும்", - "joinWithClassCodeHint": "அழைப்பு குறியீட்டை உள்ளிடவும்", - "languageLevelPreA1": "உண்மையான ஆரம்பம் (Pre A1)", - "languageLevelA1": "தொடக்கம் (A1)", - "languageLevelA2": "அடிப்படை (A2)", - "languageLevelB1": "இடையிலான (B1)", - "languageLevelB2": "மேலான இடையிலான (B2)", - "languageLevelC1": "மேம்பட்ட (C1)", - "languageLevelC2": "திறமை (C2)", + "languageLevelPreA1": "புதியவர் குறைந்த (முன் A1)", + "languageLevelA1": "புதிய நடுவண் (A1)", + "languageLevelA2": "புதிய உயர்வு (A2)", + "languageLevelB1": "மத்திய நடுத்தர (B1)", + "languageLevelB2": "மேம்பட்ட குறைந்த (B2)", + "languageLevelC1": "மேம்பட்ட நடுத்தர (C1)", + "languageLevelC2": "மேன்மை (C2)", "changeTheNameOfTheClass": "பெயரை மாற்றவும்", "changeTheNameOfTheChat": "செய்தி குழுவின் பெயரை மாற்றவும்", - "askPangeaBot": "பங்கேயா பாட்டிடம் ஒரு சூழ்நிலையியல் வரையறையை கேளுங்கள்.", "sorryNoResults": "மன்னிக்கவும், முடிவுகள் இல்லை.", "ignoreInThisText": "புறக்கணிக்கவும்", - "helpMeTranslate": "ஆம்!", - "needsItShortMessage": "இலக்கு வெளியே", "needsItMessage": "காத்திருக்கவும், அது {targetLanguage} அல்ல! மொழிபெயர்க்க உதவி தேவைபடுகிறதா?", - "needsIgcMessage": "இந்த செய்தியில் ஒரு இலக்கணம் பிழை உள்ளது.", - "tokenTranslationTitle": "ஒரு சொல் உங்கள் அடிப்படை மொழியில் உள்ளது.", - "spanTranslationDesc": "கீழே சாத்தியமான மொழிபெயர்ப்புகளைப் பாருங்கள்.", - "spanTranslationTitle": "சில சொற்கள் உங்கள் அடிப்படை மொழியில் உள்ளன.", - "l1SpanAndGrammarTitle": "இலக்கு மொழியின் வெளியே", - "l1SpanAndGrammarDesc": "இது உங்கள் அடிப்படை மொழியில் இருக்கலாம் அல்லது அது ஒரு இலக்கணம் பிழை ஆகும்.", - "otherTitle": "உங்களுக்கு ஒரு பிழை உள்ளது.", - "otherDesc": "தயவுசெய்து கீழே சாத்தியமான திருத்தங்களைப் பாருங்கள்.", "countryInformation": "என் நாடு", - "myLanguages": "என் அடிப்படை மற்றும் இலக்கு மொழிகள்", "targetLanguage": "இலக்கு மொழி", "sourceLanguage": "அடிப்படை மொழி", - "languagesISpeak": "நான் பேசும் மொழிகள்", "updateLanguage": "என் மொழிகள்", "whatLanguageYouWantToLearn": "நீங்கள் எந்த மொழியை கற்றுக்கொள்ள விரும்புகிறீர்கள்?", "whatIsYourBaseLanguage": "உங்கள் அடிப்படை மொழி என்ன?", @@ -3349,13 +3306,8 @@ "errorDisableLanguageAssistanceUserDesc": "பெயர்ப்பு உதவி மற்றும் வாக்கிய அமைப்பு உதவி அமைப்புகளை புதுப்பிக்க இங்கே கிளிக் செய்யவும்", "errorDisableITClassDesc": "இந்த உரையாடல் உள்ள பாடத்திற்கான பெயர்ப்பு உதவி அணைக்கப்பட்டுள்ளது.", "errorDisableIGCClassDesc": "இந்த உரையாடல் உள்ள பாடத்திற்கான வாக்கிய அமைப்பு உதவி அணைக்கப்பட்டுள்ளது.", - "itIsDisabled": "இணையதள மொழிபெயர்ப்பு முடக்கப்பட்டுள்ளது", - "igcIsDisabled": "இணையதள இலக்கண சரிபார்ப்பு முடக்கப்பட்டுள்ளது", - "goToLearningSettings": "கற்றல் அமைப்புகளுக்கு செல்லவும்", "error405Title": "மொழிகள் அமைக்கப்படவில்லை", "error405Desc": "தயவுசெய்து உங்கள் மொழிகளை முதன்மை மெனு > கற்றல் அமைப்புகளில் அமைக்கவும்.", - "loginOrSignup": "உள்நுழையவும் அல்லது பதிவு செய்யவும்", - "iAgreeToThe": "நான் ஒப்புக்கொள்கிறேன்", "termsAndConditions": "விதிகள் மற்றும் நிபந்தனைகள்", "andCertifyIAmAtLeast13YearsOfAge": " மற்றும் நான் குறைந்தபட்சம் 16 வயதுடையவன் என்பதை சான்றளிக்கின்றேன்.", "error502504Title": "வாவ், ஆன்லைனில் பல மாணவர்கள் உள்ளனர்!", @@ -3363,40 +3315,21 @@ "error404Title": "மொழிபெயர்ப்பு பிழை!", "error404Desc": "பெய்ஜியா பாட்டுக்கு அது எப்படி மொழிபெயர்க்க வேண்டும் என்று தெரியவில்லை...", "errorPleaseRefresh": "நாம் இதை ஆராய்கிறோம்! தயவுசெய்து மீண்டும் ஏற்றவும் மற்றும் முயற்சிக்கவும்.", - "toggleIT": "இணையதள மொழிபெயர்ப்பு", - "toggleIGC": "இணையதள இலக்கண சரிபார்ப்பு", - "toggleToolSettingsDescription": "இங்கே நீங்கள் உங்கள் தனிப்பட்ட மொழி கருவி அமைப்புகளை மாற்றலாம்.", "connectedToStaging": "ஸ்டேஜிங்குடன் இணைக்கப்பட்டுள்ளது", "learningSettings": "கற்றல் அமைப்புகள்", - "sendVoiceNotes": "குரல் குறிப்புகளை அனுப்பவும்", - "sendVoiceNotesDesc": "இந்த விருப்பத்தை இயக்கவும், மாணவர்களுக்கு உரையாடல்களில் குரல் குறிப்பு அனுப்ப அனுமதிக்கவும்.", - "chatTopic": "உரையாடல் தலைப்பு", - "chatTopicDesc": "ஒரு உரையாடல் தலைப்பை அமைக்கவும்", - "inviteStudentByUserNameDesc": "உங்கள் மாணவர் ஏற்கனவே கணக்கு வைத்திருந்தால், அவர்களைத் தேடலாம்.", "participants": "பங்கேற்பவர்கள்", - "almostPerfect": "அது சரியானது போல தெரிகிறது! நான் கூறியிருப்பது இதுதான்.", - "prettyGood": "சரி! நான் கூறியிருப்பது இதுதான்.", - "letMeThink": "ஹூம், நீங்கள் எப்படி செய்தீர்கள் என்று பார்ப்போம்!", "clickMessageTitle": "உதவி தேவையா?", "clickMessageBody": "மொழி கருவிகளுக்கான செய்தியை கிளிக் செய்யவும், மொழிபெயர்ப்பு, மீண்டும் ஒலி கேட்கும் மற்றும் மேலும்!", - "understandingMessagesTitle": "வரையறைகள் மற்றும் மொழிபெயர்ப்புகள்!", - "understandingMessagesBody": "வரையறைகளுக்கான கீழே உள்ள சொற்களை கிளிக் செய்யவும். செய்தி விருப்பங்களுடன் மொழிபெயர்க்கவும் (மேலே வலது).", "allDone": "அனைத்து பணிகளும் முடிந்தது!", "vocab": "பொருளாதாரம்", "low": "இந்த சொற்களைப் புரிந்துகொள்ளவில்லை என்று நாங்கள் சான்றளிக்கின்றோம்.", "medium": "இந்த சொற்கள் பயன்படுத்தப்பட்டுள்ளன. சொற்கள் முழுமையாக புரிந்துகொள்ளப்பட்டுள்ளதா என்று தெளிவில்லை.", "high": "இந்த சொற்களைப் புரிந்துகொள்ளும் சான்றுகள் நாங்கள் வைத்துள்ளோம்.", - "unknownProficiency": "இந்த சொற்கள் பாங்கியா உரையாடலில் பயன்படுத்தப்படவில்லை.", - "changeView": "காண்பிப்பை மாற்றவும்.", - "clearAll": "அனைத்து சொற்களையும் அழிக்கவா?", - "generateVocabulary": "தலைப்பு மற்றும் விளக்கத்திலிருந்து சொற்பொருளை உருவாக்கவும்", - "generatePrompts": "பிரேரணைகளை உருவாக்கவும்", "subscribe": "சந்தா பதிவு செய்யவும்", "getAccess": "இப்போது சந்தா பெறவும்!", "subscriptionDesc": "செய்தி அனுப்புதல் இலவசம்! தொடர்புடைய மொழிபெயர்ப்பு, இலக்கண சரிபார்ப்பு மற்றும் கற்றல் பகுப்பாய்வுகளை திறக்க சந்தா பதிவு செய்யவும்.", "subscriptionManagement": "சந்தா மேலாண்மை", "currentSubscription": "தற்போதைய சந்தா", - "changeSubscription": "உங்கள் சந்தாவை மாற்றவும்", "cancelSubscription": "சந்தாவை ரத்து செய்யவும்", "selectYourPlan": "உங்கள் திட்டத்தை தேர்ந்தெடுக்கவும்", "subsciptionPlatformTooltip": "உங்கள் அசல் சாதனத்தில் உள்நுழைந்து உங்கள் சந்தா திட்டத்தை நிர்வகிக்கவும்", @@ -3405,9 +3338,6 @@ "paymentHistory": "பணம் செலுத்தும் வரலாறு", "emptyChatDownloadWarning": "காலியான உரையாடலை பதிவிறக்கம் செய்ய முடியாது", "update": "புதுப்பிப்பு", - "updateDesc": "இப்போது இந்த பயன்பாட்டை {localVersion} இலிருந்து {storeVersion} க்கு புதுப்பிக்கலாம்", - "maybeLater": "பின்னர் முயற்சிக்கலாம்", - "mainMenu": "முக்கிய மெனு", "toggleImmersionMode": "முழுமையான முறையை மாற்றவும்", "toggleImmersionModeDesc": "செயலாக்கப்பட்டால், அனைத்து செய்திகளும் உங்கள் இலக்கு மொழியில் காட்டப்படும். இந்த அமைப்பு மொழி பரிமாற்றங்களில் மிகவும் பயனுள்ளதாகும்.", "itToggleDescription": "இந்த மொழி கற்றல் கருவி உங்கள் அடிப்படை மொழியில் உள்ள வார்த்தைகளை அடையாளம் காண்பதற்கும் அவற்றை உங்கள் இலக்கு மொழிக்கு மொழிபெயர்க்க உதவுவதற்கும் பயன்படும். அரிதானபோது, AI மொழிபெயர்ப்பு பிழைகள் செய்யலாம்.", @@ -3422,212 +3352,13 @@ "definitionsToolDescription": "செயலாக்கப்பட்டால், நீல நிறத்தில் கீழே உள்ள வார்த்தைகளை கிளிக் செய்து வரையறைகளைப் பெறலாம். வரையறைகளை அணுகுவதற்காக செய்திகள் மீது கிளிக் செய்யவும்.", "translationsToolDescrption": "செயலாக்கப்பட்டால், ஒரு செய்தியை கிளிக் செய்து மொழிபெயர்ப்பு ஐகானை அழுத்தி உங்கள் அடிப்படை மொழியில் ஒரு செய்தியைப் பார்க்கலாம்.", "welcomeBack": "மீண்டும் வரவேற்கிறோம்! நீங்கள் 2023-2024 பைலட் பகுதியாக இருந்தால், உங்கள் சிறப்பு பைலட் சந்தாவுக்காக எங்களை தொடர்பு கொள்ளவும். நீங்கள் ஆசிரியராக இருந்தால் (அல்லது உங்கள் நிறுவனம் உங்கள் வகுப்புக்கான உரிமங்களை வாங்கியிருந்தால்), ஆசிரியர் சந்தாவுக்காக எங்களை தொடர்பு கொள்ளவும்.", - "kickAllStudents": "அனைத்து மாணவர்களையும் வெளியேற்றவும்", - "kickAllStudentsConfirmation": "நீங்கள் அனைத்து மாணவர்களையும் வெளியேற்ற விரும்புகிறீர்களா?", - "inviteAllStudents": "அனைத்து மாணவர்களையும் அழைக்கவும்", - "inviteAllStudentsConfirmation": "நீங்கள் அனைத்து மாணவர்களையும் அழைக்க விரும்புகிறீர்களா?", - "inviteUsersFromPangea": "நிர்வாகிகளைச் சேர்க்கவும்", - "redeemPromoCode": "பிரமோ குறியீட்டை மீட்டெடுக்கவும்", - "enterPromoCode": "பிரமோ குறியீட்டை உள்ளிடவும்", "downloadTxtFile": "உரை கோப்பை பதிவிறக்கம் செய்க", "downloadCSVFile": "CSV கோப்பை பதிவிறக்கம் செய்க", "promotionalSubscriptionDesc": "நீங்கள் தற்போது வாழ்நாள் விளம்பர சந்தாவை பெற்றுள்ளீர்கள். உங்கள் சந்தாவை மாற்ற உதவிக்கு support@pangea.chat க்கு செய்தி அனுப்பவும்.", "originalSubscriptionPlatform": "கொள்முதல் செய்யப்பட்ட சந்தா {purchasePlatform} மூலம்", "oneWeekTrial": "ஒரு வார சோதனை", "downloadXLSXFile": "எக்செல் கோப்பை பதிவிறக்கம் செய்க", - "abDisplayName": "அப்காஸியன்", - "aaDisplayName": "அப்ஃபார்", - "afDisplayName": "ஆபிரிக்கான்ஸ்", - "akDisplayName": "அகன்", - "sqDisplayName": "அல்பேனியன்", - "amDisplayName": "அம்ஹாரிக்", - "arDisplayName": "அரபிக்", - "anDisplayName": "அரகோனீஸ்", - "hyDisplayName": "அர்மேனியன்", - "asDisplayName": "அசாமி", - "avDisplayName": "அவரிக்", - "aeDisplayName": "அவெஸ்தான்", - "ayDisplayName": "ஐமாரா", - "azDisplayName": "அஸெர்பைஜானி", - "bmDisplayName": "பம்பாரா", - "baDisplayName": "பஷ்கிர்", - "euDisplayName": "பாஸ்க்", - "beDisplayName": "பெலாருஷியன்", - "bnDisplayName": "பங்காலி", - "bhDisplayName": "பிஹாரி", - "biDisplayName": "பிஸ்லாமா", - "bsDisplayName": "போஷ்னியன்", - "brDisplayName": "பிரெட்டன்", - "bgDisplayName": "புல்கேரியன்", - "myDisplayName": "புர்மீஸ்", - "caDisplayName": "கத்தாலன், வாலென்சியன்", - "chDisplayName": "சமொரோ", - "ceDisplayName": "செச்சன்", - "nyDisplayName": "சிச்சேவா, சேவா, நியஞ்சா", - "zhDisplayName": "சீனம்", - "cvDisplayName": "சுவாச்", - "kwDisplayName": "கார்னிஷ்", - "coDisplayName": "கார்சிகன்", - "crDisplayName": "க்ரீ", - "hrDisplayName": "குரோஷியன்", - "csDisplayName": "செக்", - "daDisplayName": "டேனிஷ்", - "dvDisplayName": "டிவேஹி; திவேஹி; மல்டிவியன்;", - "nlDisplayName": "டச்சு", - "enDisplayName": "ஆங்கிலம்", - "eoDisplayName": "எஸ்பெராந்தோ", - "etDisplayName": "எஸ்டோனியன்", - "eeDisplayName": "ஈவே", - "foDisplayName": "பாரோசியன்", - "fjDisplayName": "பிஜியன்", - "fiDisplayName": "பின்னிஷ்", - "frDisplayName": "பிரெஞ்சு", - "ffDisplayName": "புலா; புலாஹ்; புலார்", - "glDisplayName": "கலீசியன்", - "kaDisplayName": "ஜார்ஜியன்", - "deDisplayName": "ஜெர்மன்", - "elDisplayName": "கிரேக்கம், நவீன", - "gnDisplayName": "குவாரானி", - "guDisplayName": "குஜராத்தி", - "htDisplayName": "ஹைட்டியன், ஹைட்டியன் கிரியோல்", - "haDisplayName": "ஹௌசா", - "heDisplayName": "ஹீப்ரூ (புதுமை)", - "hzDisplayName": "ஹெரெரோ", - "hiDisplayName": "இந்தி", - "hoDisplayName": "ஹிரி மோடு", - "huDisplayName": "ஹங்கேரியன்", - "iaDisplayName": "இண்டர்லிங்குவா", - "idDisplayName": "இந்தோனேஷியன்", - "ieDisplayName": "இண்டர்லிங்குவி", - "gaDisplayName": "அயரிஷ்", - "igDisplayName": "இக்போ", - "ikDisplayName": "இனுபியக்", - "ioDisplayName": "இடோ", - "isDisplayName": "ஐஸ்லாந்து", - "itDisplayName": "இத்தாலியன்", - "iuDisplayName": "இனுக்டிடூட்", - "jaDisplayName": "ஜப்பனீஸ்", - "jvDisplayName": "ஜாவனீஸ்", - "klDisplayName": "கலாலிஸுட், கிரீன்லாந்து", - "knDisplayName": "கன்னடா", - "krDisplayName": "கனுரி", - "ksDisplayName": "காஷ்மிரி", - "kkDisplayName": "கazakha", - "kmDisplayName": "கம்போடியன்", - "kiDisplayName": "கிகுயு, கிகுயு", - "rwDisplayName": "கின்யாருவாண்டா", - "kyDisplayName": "கிர்கிஸ், கிற்கிஸ்", - "kvDisplayName": "கோமி", - "kgDisplayName": "கொங்கோ", - "koDisplayName": "கொரியன்", - "kuDisplayName": "குர்திஷ்", - "kjDisplayName": "குவன்யாமா, குவன்யாமா", - "laDisplayName": "லத்தீன்", - "lbDisplayName": "லக்சம்புர்கிஷ், லெட்செபுர்ஷ்", - "lgDisplayName": "லங்கண்டா", - "liDisplayName": "லிம்புர்கிஷ், லிம்புர்கன், லிம்புர்கர்", - "lnDisplayName": "லிங்காலா", - "loDisplayName": "லாவோ", - "ltDisplayName": "லிதுவேனியன்", - "luDisplayName": "லூபா-காங்கடா", - "lvDisplayName": "லாட்டிவியன்", - "gvDisplayName": "மான்க்ஸ்", - "mkDisplayName": "மேசிடோனியன்", - "mgDisplayName": "மாலாக்ஸி", - "msDisplayName": "மலாய்", - "mlDisplayName": "மலையாளம்", - "mtDisplayName": "மால்டீஸ்", - "miDisplayName": "மாவோரி", - "mrDisplayName": "மராத்தி (மராதி)", - "mhDisplayName": "மார்ஷலீஸ்", - "mnDisplayName": "மங்கோலியன்", - "naDisplayName": "நவுரு", - "nvDisplayName": "நவாஜோ, நவாஹோ", - "nbDisplayName": "நார்வேஜியன் போக்மால்", - "ndDisplayName": "வடக்கு ந்டெபெலே", - "neDisplayName": "நேபாளி", - "ngDisplayName": "என்டோங்கா", - "nnDisplayName": "நார்வேஜியன் நைனோர்க்", - "noDisplayName": "நார்வேஜியன்", - "iiDisplayName": "நூசு", - "nrDisplayName": "தென் ந்டெபெலே", - "ocDisplayName": "ஒசிடன்", - "ojDisplayName": "ஒஜிப்வே, ஒஜிப்வா", - "cuDisplayName": "பழைய தேவாலய ஸ்லாவிக், தேவாலய ஸ்லாவிக், தேவாலய ஸ்லாவிக், பழைய புல்கேரியன், பழைய ஸ்லாவிக்", - "omDisplayName": "ஒரோமோ", - "orDisplayName": "ஒடியா", - "osDisplayName": "ஒசெட்டியன், ஒசெட்டிக்", - "paDisplayName": "பஞ்சாபி, பஞ்சாபி", - "piDisplayName": "பாலி", - "faDisplayName": "பெர்சியன்", - "plDisplayName": "போலிஷ்", - "psDisplayName": "பஷ்தோ, புஷ்தோ", - "ptDisplayName": "போர்ச்சுகீசியம்", - "quDisplayName": "கெச்சுவா", - "rmDisplayName": "ரோமான்ஷ்", - "rnDisplayName": "கிருண்டி", - "roDisplayName": "ருமேனியன், மால்டேஷியன், மால்டோவியன்", - "ruDisplayName": "ரஷியன்", - "saDisplayName": "சங்கிரித் (சாஸ்கிதா)", - "scDisplayName": "சார்டீனியன்", - "sdDisplayName": "சிந்தி", - "seDisplayName": "வடக்கு சாமி", - "smDisplayName": "சமோயன்", - "sgDisplayName": "சாங்கோ", - "srDisplayName": "செர்பியன்", - "gdDisplayName": "ஸ்காட்லாந்து கெய்லிக், கெய்லிக்", - "snDisplayName": "ஷோனா", - "siDisplayName": "சிங்களம், சிங்களர்", - "skDisplayName": "ஸ்லோவாக்", - "slDisplayName": "ஸ்லோவேன்", - "soDisplayName": "சோமாலி", - "stDisplayName": "தெற்கு சோதோ", - "esDisplayName": "ஸ்பானிஷ்", - "suDisplayName": "சுண்டானீஸ்", - "swDisplayName": "ஸ்வாஹிலி", - "ssDisplayName": "ஸ்வாட்டி", - "svDisplayName": "ஸ்வீடிஷ்", - "taDisplayName": "தமிழ்", - "teDisplayName": "தெலுங்கு", - "tgDisplayName": "தாஜிக்", - "thDisplayName": "தாய்", - "tiDisplayName": "டிகிரின்யா", - "boDisplayName": "திபெத்திய நிலையான, திபெத்திய, மத்திய", - "tkDisplayName": "துர்க்மேன்", - "tlDisplayName": "டாக்லாக்", - "tnDisplayName": "சுவானா", - "toDisplayName": "டோங்கா (டோங்கா தீவுகள்)", - "trDisplayName": "துருக்கிய", - "tsDisplayName": "சோங்கா", - "ttDisplayName": "தடார்", - "twDisplayName": "ட்வி", - "tyDisplayName": "தஹிதியன்", - "ugDisplayName": "உய்குர், உய்குர்", - "ukDisplayName": "உக்ரைனியன்", - "urDisplayName": "உருது", - "uzDisplayName": "உஸ்பெக்", - "veDisplayName": "வென்டா", - "viDisplayName": "வியட்நாமீஸ்", - "voDisplayName": "வொலாப்புக்", - "waDisplayName": "வாலூன்", - "cyDisplayName": "வெல்ஷ்", - "woDisplayName": "வொலோஃப்", - "fyDisplayName": "மேற்கு ஃபிரிசியன்", - "xhDisplayName": "கோசா", - "yiDisplayName": "யிடிஷ்", - "yoDisplayName": "யோருபா", - "zaDisplayName": "சுவாங், சுவாங்", "unkDisplayName": "அறியப்படாதது", - "zuDisplayName": "ஜூலு", - "hawDisplayName": "ஹவாயியன்", - "hmnDisplayName": "ஹ்மாங்", - "multiDisplayName": "பல்துறை", - "cebDisplayName": "செபுவானோ", - "dzDisplayName": "ட்சொங்கா", - "iwDisplayName": "ஹீப்ரூ", - "jwDisplayName": "ஜாவானீஸ்", - "moDisplayName": "மால்டேஷியன்", - "shDisplayName": "செர்போ-குரோஷியன்", "wwCountryDisplayName": "உலகளாவிய", "afCountryDisplayName": "அப்கானிஸ்தான்", "axCountryDisplayName": "ஆலந்து தீவுகள்", @@ -3875,41 +3606,25 @@ "yeCountryDisplayName": "யேமன்", "zmCountryDisplayName": "சம்பியா", "zwCountryDisplayName": "சிம்பாப்வே", - "pay": "பணம் செலுத்தவும்", - "allPrivateChats": "நேரடி உரைகள்", - "unknownPrivateChat": "அறியப்படாத தனிப்பட்ட உரை", + "pay": "Checkout", "invitedToSpace": "{user} உங்களை ஒரு பாடத்திற்குக் கூப்பிடினார்: {space}! நீங்கள் ஏற்க விரும்புகிறீர்களா?", - "declinedInvitation": "அனுப்பலை நிராகரித்தது", - "acceptedInvitation": "ஏற்றுக்கொண்டது", "youreInvited": "🚩 நீங்கள் அழைக்கப்பட்டீர்கள்!", "invitedToChat": "{user} உங்களை ஒரு உரைக்கு அழைத்தார்: {name}! நீங்கள் ஏற்க விரும்புகிறீர்களா?", "monthlySubscription": "மாதாந்திர", "yearlySubscription": "வருடாந்திர", "defaultSubscription": "பாங்கியா உரையாடல் சந்தா", "freeTrial": "இலவச சோதனை", - "grammarAnalytics": "பிழை பகுப்பாய்வு", "total": "மொத்தம்: ", "noDataFound": "தகவல் கிடைக்கவில்லை", - "promoSubscriptionExpirationDesc": "உங்கள் தற்போதைய சந்தா விளம்பரமயமானது மற்றும் {expiration} அன்று காலாவதியாகும். உங்கள் சந்தாவை மாற்ற உதவிக்கு support@pangea.chat க்கு மெசேஜ் அனுப்பவும்.", - "emptyChatNameWarning": "இந்த உரையாடலுக்கு ஒரு பெயரை உள்ளிடவும்", "blurMeansTranslateTitle": "செய்தி மங்கலாக ஏன் உள்ளது?", "blurMeansTranslateBody": "Immersion Mode இயங்கும் போது, உங்கள் அடிப்படை மொழியில் அனுப்பப்படும் செய்திகள் மங்கலாக இருக்கும், Pangea Bot அவற்றை உங்கள் இலக்கு மொழிக்கு மொழிபெயர்க்கும் போது. Immersion Mode தனிப்பட்ட மற்றும் பாடநெறி அமைப்புகளில் மாற்றக்கூடியது.", - "someErrorTitle": "ஹ்ம்ம, ஏதோ தவறு உள்ளது", - "someErrorBody": "இது ஒரு பிழை அல்லது உங்கள் அடிப்படை மொழியில் ஏதோ ஒன்று இருக்கலாம்.", "bestCorrectionFeedback": "அது சரியானது!", "distractorFeedback": "அது சரியானது அல்ல.", "bestAnswerFeedback": "அது சரியானது!", "definitionDefaultPrompt": "இந்த சொல்லின் அர்த்தம் என்ன?", "practiceDefaultPrompt": "சிறந்த பதில் என்ன?", "correctionDefaultPrompt": "சிறந்த மாற்று என்ன?", - "itStartDefaultPrompt": "மொழிபெயர்க்க உதவி வேண்டும் என்று நினைக்கிறீர்களா?", - "lockedChatWarning": "🔒 இந்த உரையாடல் பூட்டப்பட்டுள்ளது", - "lockChat": "உரையாடலை பூட்டு", - "suggestToChat": "இந்த உரையாடலை பரிந்துரைக்கவும்", - "suggestToChatDesc": "பரிந்துரைக்கப்பட்ட உரையாடல்கள் உரையாடல் பட்டியலில் தோன்றும்", "acceptSelection": "திருத்தத்தை ஏற்கவும்", - "acceptSelectionAnyway": "இதையும் பயன்படுத்தவும்", - "makingActivity": "செயல்பாட்டை உருவாக்குதல்", "why": "ஏன்?", "definition": "வரையறை", "exampleSentence": "உதாரண வாக்கியம்", @@ -3917,128 +3632,55 @@ "reportMessageTitle": "{reportingUserId} என்பவர் {reportedUserId} இன் செய்தியை {roomName} இல் அறிக்கை செய்துள்ளார்", "reportMessageBody": "செய்தி: {reportedMessage}\nகாரணம்: {reason}", "noTeachersFound": "அறிக்கை செய்ய ஆசிரியர்கள் இல்லை", - "viewArchive": "காப்பகத்தைப் பார்வையிடவும்", "trialExpiration": "உங்கள் இலவச சோதனை {expiration} அன்று முடிவடைகிறது", "freeTrialDesc": "புதிய பயனர்கள் பங்கேயா சந்தையில் ஒரு வார இலவச சோதனை பெறுகிறார்கள்", "activateTrial": "இலவச 7-நாள் சோதனை", "successfullySubscribed": "நீங்கள் வெற்றிகரமாக சந்தாவை பதிவு செய்துள்ளீர்கள்!", "clickToManageSubscription": "உங்கள் சந்தாவை நிர்வகிக்க இங்கே கிளிக் செய்யவும்.", - "errorGettingAudio": "ஒலி பெறுவதில் பிழை. தயவுசெய்து புதுப்பித்து மீண்டும் முயற்சிக்கவும்.", "signUp": "பதிவு செய்யவும்", "pleaseChooseAtLeastChars": "தயவுசெய்து குறைந்தது {min} எழுத்துகளைத் தேர்ந்தெடுக்கவும்.", "noEmailWarning": "தயவுசெய்து செல்லுபடியாகும் மின்னஞ்சல் முகவரியை உள்ளிடவும். இல்லையெனில் நீங்கள் உங்கள் கடவுச்சொல்லை மீட்டமைக்க முடியாது. நீங்கள் விரும்பவில்லை என்றால், தொடர இன் பொத்தானை மீண்டும் தட்டவும்.", "pleaseEnterValidEmail": "தயவுசெய்து செல்லுபடியாகும் மின்னஞ்சல் முகவரியை உள்ளிடவும்.", "pleaseChooseAUsername": "தயவுசெய்து ஒரு பயனர்பெயரைத் தேர்ந்தெடுக்கவும்", - "chooseAUsername": "ஒரு பயனர்பெயரை தேர்ந்தெடுக்கவும்", "define": "வரையறை", "listen": "கேளுங்கள்", - "addConversationBot": "பேச்சு பாட்டைச் சேர்க்கவும்", - "addConversationBotDesc": "இந்த உரையாடலில் ஒரு பாட்டைச் சேர்க்கவும்", - "convoBotSettingsDescription": "பேச்சு தலைப்பு மற்றும் கடினத்தன்மையைத் திருத்தவும்", - "enterAConversationTopic": "பேச்சு தலைப்பை உள்ளிடவும்", - "conversationTopic": "பேச்சு தலைப்பு", - "enableModeration": "மேலாண்மையை இயக்கு", - "enableModerationDesc": "செய்திகளை அனுப்புவதற்கு முன் தானாக மேலாண்மையை இயக்கு", - "conversationLanguageLevel": "இந்த பேச்சின் மொழி நிலை என்ன?", - "showDefinition": "வரையறையைக் காண்பி", - "subscriptionPopupTitle": "இந்த வாக்கியம் இலக்கண பிழை இருக்க வாய்ப்பு...", - "subscriptionPopupDesc": "இப்போது சந்தா செய்து மொழிபெயர்ப்பு மற்றும் இலக்கண திருத்தங்களை திறக்கவும்!", - "seeOptions": "விருப்பங்களைப் பார்க்கவும்", - "continuedWithoutSubscription": "சந்தாவின்றி தொடரவும்", "trialPeriodExpired": "உங்கள் சோதனை காலம் முடிவடைந்தது", - "selectToDefine": "தயவுசெய்து எந்த ஒரு சொல்லையும் கிளிக் செய்து அதன் வரையறையைப் பாருங்கள்!", "translations": "மொழிபெயர்ப்புகள்", "messageAudio": "செய்தி ஒலி", "definitions": "வரையறைகள்", "subscribedToUnlockTools": "இணையமிடும் மொழிபெயர்ப்பு மற்றும் இலக்கண சரிபார்ப்பு, ஒலி வாசிப்பு, தனிப்பட்ட பயிற்சி செயல்பாடுகள் மற்றும் கற்றல் பகுப்பாய்வுகளை திறக்க சந்தா செய்யவும்!", "translationTooltip": "மொழிபெயர்ப்பு", - "audioTooltip": "ஒலி வாசிப்பு", "speechToTextTooltip": "பதிவு", - "certifyAge": "நான் {age} வயதுக்கு மேல் என்று சான்றளிக்கிறேன்", "kickBotWarning": "பங்கேயா பாண்டியா பாட்டை இச்சந்தையில் இருந்து அகற்றும்.", - "joinToView": "விவரங்களைப் பார்க்க இந்த அறைக்கு சேரவும்", "refresh": "புதுப்பி", - "autoPlayTitle": "தானியங்கி வாசிப்பு செய்திகள்", - "autoPlayDesc": "செயலாக்கப்பட்டால், உரையின்-தொகுப்பு ஒலி தானாகவே வாசிக்கப்படும்.", "messageAnalytics": "செய்தி பகுப்பாய்வு", "words": "வாக்கியங்கள்", "score": "மதிப்பீடு", "accuracy": "துல்லியம்", "points": "புள்ளிகள்", "noPaymentInfo": "பணம் செலுத்தும் தகவல் தேவையில்லை!", - "conversationBotModeSelectDescription": "பேச்சு செயல்பாடு", - "conversationBotModeSelectOption_discussion": "பேச்சு", - "conversationBotModeSelectOption_custom": "தனிப்பயன்", - "conversationBotModeSelectOption_conversation": "பேச்சு", - "conversationBotModeSelectOption_textAdventure": "படிகை சாகசம்", - "conversationBotModeSelectOption_storyGame": "கதை விளையாட்டு", - "conversationBotDiscussionZone_title": "பேச்சு அமைப்புகள்", - "conversationBotDiscussionZone_discussionTopicLabel": "பேச்சு தலைப்பு", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "பேச்சு தலைப்பை அமைக்கவும்", - "conversationBotDiscussionZone_discussionKeywordsLabel": "பேச்சு முக்கியச்சொற்கள்", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "பேச்சு முக்கியச்சொற்களை அமைக்கவும்", - "conversationBotDiscussionZone_discussionKeywordsHintText": "பேச்சை வழிநடத்த முக்கியச்சொற்கள் பட்டியலை காமா பிரித்து எழுதவும்", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "அட்டவணையில் பேச்சு முன்மொழிவை அனுப்பவும்", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "பேச்சு முன்மொழிவுகளுக்கு இடையேயான மணி நேரம்", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "பதில் அளிக்கும் ⏩ பதில்", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "பேச்சு முன்மொழிவை அனுப்ப பதில்", - "conversationBotCustomZone_title": "தனிப்பயன் அமைப்புகள்", - "conversationBotCustomZone_customSystemPromptLabel": "சிஸ்டம் முன்மொழிவு", - "conversationBotCustomZone_customSystemPromptPlaceholder": "தனிப்பயன் சிஸ்டம் முன்மொழிவை அமைக்கவும்", - "conversationBotCustomZone_customSystemPromptEmptyError": "தனிப்பயன் சிஸ்டம் முன்மொழிவு இல்லை", - "botConfig": "போட் மற்றும் செயல்பாட்டு அமைப்புகள்", - "botConfigNoPermissionTitle": "அனுமதி இல்லை", - "botConfigNoPermissionMessage": "போட் அமைப்பை மாற்ற ரூம் நிர்வாகியை தொடர்பு கொள்ளவும்", - "addConversationBotDialogTitleInvite": "உரையாடல் பாட்டை அழைக்கும் உறுதிப்படுத்தவும்", - "addConversationBotButtonInvite": "அழைப்பு", - "addConversationBotDialogInviteConfirmation": "அழைப்பு", - "addConversationBotButtonTitleRemove": "உரையாடல் பாட்டை நீக்க உறுதிப்படுத்தவும்", - "addConversationBotButtonRemove": "நீக்கு", - "addConversationBotDialogRemoveConfirmation": "நீக்கு", - "conversationBotConfigConfirmChange": "உறுதிப்படுத்தவும்", - "conversationBotStatus": "பாட்டை அழைப்பு", - "conversationBotTextAdventureZone_title": "உரை சாகசம்", - "conversationBotTextAdventureZone_instructionLabel": "விளையாட்டு மேஸ்டர் வழிகாட்டல்கள்", - "conversationBotTextAdventureZone_instructionPlaceholder": "விளையாட்டு மேஸ்டர் வழிகாட்டல்களை அமைக்கவும்", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "விளையாட்டு மேஸ்டர் வழிகாட்டல்கள் காணவில்லை", - "studentAnalyticsNotAvailable": "மாணவர் தரவு தற்போது கிடைக்கவில்லை", - "roomDataMissing": "நீங்கள் உறுப்பினர் அல்லாத அறைகளில் சில தரவுகள் காணாமல் போகலாம்.", "updatePhoneOS": "உங்கள் சாதனத்தின் OS பதிப்பை புதுப்பிக்க வேண்டியிருக்கலாம்.", "wordsPerMinute": "நிமிடத்திற்கு சொற்கள்", "autoIGCToolName": "பங்கேயா எழுத்து உதவியை தானாக இயக்கவும்", "autoIGCToolDescription": "எனது செய்தியை அனுப்புவதற்கு முன் தானாக பங்கேயா உரையாடல் இலக்கணம் மற்றும் மொழிபெயர்ப்பு எழுத்து உதவியை இயக்கவும்.", - "runGrammarCorrection": "செய்தியை சரிபார்க்கவும்", - "grammarCorrectionFailed": "தீர்க்க வேண்டிய பிரச்சனைகள்", - "grammarCorrectionComplete": "சரி போல் தெரிகிறது!", "tooltipInstructionsTitle": "அது என்ன செய்கிறது என்று தெரியுமா?", "tooltipInstructionsMobileBody": "உருப்படிகளை அழுத்தி வைத்திருங்கள், கருவி விளக்கங்களைப் பார்க்க.", "tooltipInstructionsBrowserBody": "உருப்படிகளின் மேல் கரைசல் வைத்து கருவி விளக்கங்களைப் பார்க்க.", "chatCapacity": "பேச்சு திறன்", "roomFull": "இந்த அறை ஏற்கனவே திறனுக்கு மேல் உள்ளது.", - "topicNotSet": "தலைப்பு அமைக்கப்படவில்லை.", - "chatCapacityNotSet": "இந்த பேச்சுக்கு திறன் வரம்பு இல்லை.", "chatCapacityHasBeenChanged": "பேச்சு திறன் மாற்றப்பட்டது", "chatCapacitySetTooLow": "பேச்சு திறன் குறைந்தது {count} ஆக இருக்க வேண்டும்.", "chatCapacityExplanation": "பேச்சு திறன் என்பது ஒரு பேச்சில் அனுமதிக்கப்பட்ட உறுப்பினர்களின் எண்ணிக்கையை வரையறுக்கிறது.", - "chatExceedsCapacity": "இந்த பேச்சு அதன் திறனை மீறியுள்ளது.", "tooManyRequest": "மிகவும் அதிகமான கோரிக்கைகள், தயவுசெய்து பின்னர் முயற்சிக்கவும்.", "enterNumber": "தயவுசெய்து முழு எண் மதிப்பை உள்ளிடவும்.", "buildTranslation": "மேலே உள்ள தேர்வுகளிலிருந்து உங்கள் மொழிபெயர்ப்பை உருவாக்கவும்", - "nonexistentSelection": "தேர்வு இனி இல்லை.", - "changeAnalyticsLanguage": "புள்ளிவிவர மொழியை மாற்றவும்", "practice": "பயிற்சி", "noLanguagesSet": "மொழிகள் அமைக்கப்படவில்லை", - "noActivitiesFound": "இப்போது இதை போதும்! மேலும் கற்றுக்கொள்ள பின்னர் மீண்டும் வாருங்கள்.", - "hintTitle": "சுட்டுரை:", "speechToTextBody": "குரல் செய்திகளுக்காக, நீங்கள் உரையாடலின் உரைபடிவத்தையும் பேச்சாளரின் வார்த்தைகள் வீத மதிப்பீட்டையும் பார்க்கலாம்.", "versionNotFound": "பதிப்பு காணப்படவில்லை", "fetchingVersion": "பதிப்பை பெறுகிறது...", "versionFetchError": "பதிப்பை பெறும் போது பிழை", "versionText": "பதிப்பு: {version}+{buildNumber}", - "languageButtonLabel": "மொழி: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "தானியங்கி மொழிபெயர்ப்பு", - "interactiveTranslatorAutoPlayDesc": "பேசாமல் நேரடியாக மொழிபெயர்ப்பை துவக்குகிறது.", - "changeAnalyticsView": "புள்ளிவிவரக் காட்சியை மாற்று", "l1TranslationBody": "உங்கள் அடிப்படை மொழியில் உள்ள செய்திகள் மொழிபெயர்க்கப்படமாட்டாது.", "deleteSubscriptionWarningTitle": "உங்களுக்கு ஒரு செயலில் உள்ள சந்தா உள்ளது", "deleteSubscriptionWarningBody": "உங்கள் கணக்கை நீக்குவது தானாகவே உங்கள் சந்தாவை ரத்து செய்யாது.", @@ -4046,9 +3688,7 @@ "error520Title": "தயவுசெய்து மீண்டும் முயற்சிக்கவும்.", "error520Desc": "மன்னிக்கவும், உங்கள் செய்தியை புரிந்துகொள்ள முடியவில்லை...", "wordsUsed": "பயன்படுத்தப்பட்ட வார்த்தைகள்", - "errorTypes": "பிழை வகைகள்", "level": "நிலை", - "canceledSend": "நீக்கப்பட்டது", "morphsUsed": "மோர்ப்ஸ் பயன்படுத்தப்பட்டது", "translationChoicesBody": "ஒரு விருப்பத்தை கிளிக் செய்து பிடித்து ஒரு குறிப்பு பெறவும்.", "grammar": "வியக்கரம்", @@ -4058,7 +3698,6 @@ "reportContentIssueTitle": "உள்ளடக்கப் பிரச்சனையை அறிக்கை செய்யவும்", "feedback": "விருப்பமான கருத்து", "reportContentIssueDescription": "ஓஹோ! AI தனிப்பட்ட கற்றல் அனுபவங்களை எளிதாக்க முடியும் ஆனால்... அது ஹாலியூசேஷன்களையும் செய்கிறது. உங்கள் எந்தவொரு கருத்தையும் வழங்கவும், மீண்டும் முயற்சிப்போம்.", - "changeContent": "ஓஹோ! AI தனிப்பட்ட கற்றல் அனுபவங்களை எளிதாக்க முடியும் ஆனால்... அது ஹாலியூசேஷன்களையும் செய்கிறது. அது என்ன ஆக வேண்டும்?", "clickTheWordAgainToDeselect": "தேர்ந்தெடுத்த வார்த்தையை மறுசெயலாக்க கிளிக் செய்யவும்.", "l2SupportNa": "கிடைக்கவில்லை", "l2SupportAlpha": "அல்பா", @@ -4292,7 +3931,6 @@ "grammarCopySPC": "தொகுத்தமைப்பு", "grammarCopyPARTTYPE": "பகுதி வகை", "grammarCopyINTREL": "வினாவும்-உறுப்பினமும்", - "grammarCopyNUMFORMpsor": "பொறுப்பதாரரின் எண்", "grammarCopyUNKNOWN": "தெரியாதது", "grammarCopyNUMBERPSOR": "பொறுப்பதாரரின் எண்", "grammarCopyPOSS": "உரிமை", @@ -4338,28 +3976,14 @@ "grammarCopyVOICEdir": "தடையற்ற", "grammarCopyVOICEinv": "மாறும்", "grammarCopyVOICErcp": "பரஸ்பர", - "enterPrompt": "தயவுசெய்து ஒரு அமைப்பு முன்மொழிவை உள்ளிடவும்", - "selectBotLanguage": "போட் மொழியை தேர்ந்தெடுக்கவும்", - "chooseVoice": "ஒரு குரலை தேர்ந்தெடுக்கவும்", - "enterLanguageLevel": "தயவுசெய்து ஒரு மொழி நிலையை உள்ளிடவும்", - "enterDiscussionTopic": "தயவுசெய்து ஒரு விவாத தலைப்பை உள்ளிடவும்", - "selectBotChatMode": "சாட் முறையை தேர்ந்தெடுக்கவும்", - "messageNotInTargetLang": "செய்தி இலக்கு மொழியில் இல்லை", "other": "மற்றவை", "levelShort": "LVL {level}", - "botModeValidation": "தயவுசெய்து ஒரு சாட் முறையை தேர்ந்தெடுக்கவும்", "clickBestOption": "உங்கள் செய்தியை மொழிபெயர்க்க சிறந்த விருப்பங்களை தேர்ந்தெடுக்கவும்!", "completeActivitiesToUnlock": "பதிப்பதற்கான குறைந்தபட்ச ஒரு செயல்பாட்டை முடிக்கவும்!", - "botSettingsSubtitle": "செயல்பாட்டை நடாத்துவதற்கு பாட்டை அழைக்கவும்", - "invitePeople": "பயனர்களை அழைக்கவும்", "noCapacityLimit": "திறனில் எந்த வரம்பும் இல்லை", "downloadGroupText": "குழு உரையை பதிவிறக்கம் செய்யவும்", "notificationsOn": "அறிவிப்புகள் இயங்கும்", "notificationsOff": "அறிவிப்புகள் நிறுத்தப்பட்டது", - "chatCanBeFoundViaSearch": "செய்தி தேடலால் கண்டுபிடிக்கலாம்", - "requireCodeToJoin": "சேருவதற்கு குறியீடு தேவை", - "canFindInSearch": "தேடலில் கண்டுபிடிக்கலாம்", - "addChatToSpace": "செய்தியை சேர்க்கவும்", "createChatAndInviteUsers": "செய்தியை உருவாக்கி பயனர்களை அழைக்கவும்", "updatedNewSpaceDescription": "பாடத்திட்டங்கள் உங்கள் உரையாடல்களை ஒருங்கிணைக்கவும் தனிப்பட்ட அல்லது பொது சமூகங்களை கட்டியெழுப்பவும் அனுமதிக்கின்றன.", "joinWithCode": "குறியீடு கொண்டு சேரவும்", @@ -4395,39 +4019,19 @@ "constructUseCollected": "செயலியில் சேகரிக்கப்பட்டது", "constructUseNanDesc": "பயன்படாது", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "பயனர்பெயர் மற்றும் கடவுச்சொல்லுடன் உள்நுழைக", - "registrationEmailMessage": "அங்குள்ள உங்கள் மின்னஞ்சலை ஒரு இணைப்புடன் சரிபார்க்கவும். சில சந்தர்ப்பங்களில், மின்னஞ்சல் 5 நிமிடங்கள் வரை வரும். உங்கள் ஸ்பாம் அடைவைச் சரிபார்க்கவும்.", "enableTTSToolName": "உயர்த்தப்பட்ட உரை-தொடர்பு இயக்கு", "enableTTSToolDescription": "உங்கள் இலக்கு மொழியில் உரை-தொடர்பு வெளியீட்டை உருவாக்க அனுமதி அளிக்கவும்.", - "couldNotFindTTS": "உங்கள் தற்போதைய இலக்கு மொழிக்கான உரை-தொடர்பு இயந்திரத்தை கண்டுபிடிக்க முடியவில்லை.", - "ttsInstructionsHyperlink": "உங்கள் சாதனத்தில் புதிய குரல் பதிவிறக்க வழிமுறைகளைப் பார்க்க இங்கே கிளிக் செய்யவும்.", - "createAnAccount": "ஒரு கணக்கை உருவாக்கவும்", - "signIn": "உள்நுழைக", - "signUpWithEmail": "மின்னஞ்சலுடன் பதிவு செய்யவும்", - "signUpWithGoogle": "கூகிள் மூலம் பதிவு செய்யவும்", - "signUpWithApple": "ஆப்பிள் மூலம் பதிவு செய்யவும்", "yourUsername": "உங்கள் பயனர்பெயர்", "yourEmail": "உங்கள் மின்னஞ்சல்", - "pleaseEnterAnEmail": "தயவுசெய்து ஒரு மின்னஞ்சல் முகவரியை உள்ளிடவும்", - "signInWithGoogle": "கூகிள் உடன் உள்நுழைக", - "signInWithApple": "ஆப்பிள் உடன் உள்நுழைக", - "chooseYourAvatar": "உங்கள் அவதாரம் தேர்ந்தெடுக்கவும்", "iWantToLearn": "நான் கற்றுக்கொள்ள விரும்புகிறேன்", - "letsStart": "தொடங்குவோம்", - "pleaseAgreeToTOS": "தயவுசெய்து விதிமுறைகள் மற்றும் நிபந்தனைகளுக்கு ஒப்புக்கொள்ளவும்", "pleaseEnterEmail": "தயவுசெய்து செல்லுபடியாகும் மின்னஞ்சல் முகவரியை உள்ளிடவும்.", - "pleaseSelectALanguage": "தயவுசெய்து ஒரு மொழியை தேர்ந்தெடுக்கவும்", "myBaseLanguage": "எனது அடிப்படைக் மொழி", - "clickWordsInstructions": "🧻 எந்த சொல்லையும் கிளிக் செய்து விவரங்களை அறியவும்.🤐", - "chooseBestDefinition": "இந்த சொல்லின் பொருள் என்ன?", "meaningSectionHeader": "பொருள்:", "formSectionHeader": "பேச்சுகளில் பயன்படுத்தப்படும் படிவங்கள்:", - "noEmojiSelectedTooltip": "எந்த எமோஜியும் தேர்ந்தெடுக்கப்படவில்லை", "writingExercisesTooltip": "எழுத்து பயிற்சிகள்", "listeningExercisesTooltip": "கேட்கும் பயிற்சிகள்", "readingExercisesTooltip": "படிக்கும் பயிற்சிகள்", "meaningNotFound": "பொருள் கண்டுபிடிக்க முடியவில்லை.", - "formsNotFound": "படிவங்கள் கண்டுபிடிக்க முடியவில்லை.", "chooseBaseForm": "அடிப்படைக் படிவத்தை தேர்ந்தெடுக்கவும்", "notTheCodeError": "மன்னிக்கவும், அது அந்தக் குறியீடு அல்ல!", "totalXP": "மொத்த XP", @@ -4467,9 +4071,6 @@ "pickAnEmoji": "'{lemma}' க்கு உங்கள் பிடித்த எமோஜி என்ன?", "chooseLemmaMeaningInstructionsBody": "செய்தியில் உள்ள சொற்களுடன் பொருள்களை பொருத்தவும்!", "doubleClickToEdit": "தொட்டச்செய்தி மூலம் திருத்தவும்.", - "removeFeature": "{feature} ஐ அகற்று", - "chooseCorrectLabel": "சரியான லேபிளை தேர்வு செய்க.", - "levelPopupTitle": "பட்டியலில் சேரும் போது வாழ்த்துக்கள்\nபட்டியல் {level} அடைந்தது", "activityPlannerTitle": "செயல்பாட்டு திட்டக்காரர்", "topicLabel": "தலைப்பு", "topicPlaceholder": "ஒரு தலைப்பை தேர்ந்தெடுக்கவும்...", @@ -4477,7 +4078,6 @@ "modePlaceholder": "ஒரு முறையை தேர்ந்தெடுக்கவும்...", "learningObjectiveLabel": "கற்றல் நோக்கம்", "learningObjectivePlaceholder": "ஒரு கற்றல் நோக்கத்தை தேர்ந்தெடுக்கவும்...", - "mediaLabel": "மீடியா பகிர வேண்டும்", "languageOfInstructionsLabel": "செயல்பாட்டு வழிகாட்டியின் மொழி", "targetLanguageLabel": "இலக்கு மொழி", "cefrLevelLabel": "CEFR நிலை", @@ -4492,20 +4092,15 @@ "instructions": "வழிகாட்டுதல்கள்", "numberOfLearners": "கற்றலாளர்களின் எண்ணிக்கை", "mustBeInteger": "இது ஒரு முழு எண் ஆக வேண்டும் உதாரணமாக 1, 2, 3, ...", - "noLemmasFound": "{xp} XP-ஐ விட அதிகமான சொற்பொருள்கள் இல்லை. பயிற்சி தொடரவும்!", "constructUsePvmDesc": "குரல் செய்தியில் உருவாக்கப்பட்டது", - "lockedMorphFeature": "திறக்கப்பட காத்திருக்கிறது", "leaveSpaceDescription": "பாடத்திலிருந்து வெளியேறுவதன் மூலம், நீங்கள் அதில் உள்ள அனைத்து உரையாடல்களையும் விட்டு செல்லுவீர்கள். மற்ற பயனர்கள் நீங்கள் பாடத்திலிருந்து வெளியேறியதை காண்பார்கள்.", - "whatIsLemma": "லெம்மா என்ன?", "constructUseCorMmDesc": "சரியான செய்தி பொருள்", "constructUseIncMmDesc": "தவறான செய்தி பொருள்", "constructUseIgnMmDesc": "புறக்கணிக்கப்பட்ட செய்தி பொருள்", "clickForMeaningActivity": "அர்த்த சவால் செய்ய இங்கே கிளிக் செய்யவும்", "meaning": "அர்த்தம்", "chatWith": "{displayname} உடன் குழு", - "slightlyOffensive": "சற்று அவமானகரமானது", "clickOnEmailLink": "தயவுசெய்து மின்னஞ்சல் உள்ள இணைப்பில் கிளிக் செய்து தொடரவும்.\n\nமின்னஞ்சல் வரவில்லை என்றால் உங்கள் ஸ்பாம் கோப்புறையைச் சரிபார்க்கவும்.", - "whoIsAllowedToJoinThisChat": "இந்த உரையாடலில் சேர அனுமதிக்கப்பட்டவர்கள் யார்", "dontForgetPassword": "உங்கள் கடவுச்சொல்லை மறக்காதீர்கள்!", "enableAutocorrectToolName": "சாதன தானியக்க திருத்தத்தை இயக்கு", "enableAutocorrectDescription": "உங்கள் சாதனம் நீங்கள் கற்றுக் கொண்ட மொழியை ஆதரிக்குமானால், பொதுவான பிழைகளை திருத்துவதற்காக சாதன தானியக்க திருத்தத்தை இயக்கு.", @@ -4533,48 +4128,26 @@ "autocorrectNotAvailable": "துரதிருஷ்டவசமாக, உங்கள் தளத்திற்கு இந்த அம்சம் தற்போது ஆதரிக்கப்படவில்லை. மேலும் மேம்பாட்டுக்காக காத்திருக்கவும்!", "pleaseUpdateApp": "தயவுசெய்து செயலியை புதுப்பிக்கவும் தொடரவும்.", "chooseEmojiInstructionsBody": "எழுத்துக்களை சிறந்த முறையில் பிரதிநிதித்துவப்படுத்தும் எமோஜிகளை பொருத்தவும். கவலைப்பட வேண்டாம்! ஒப்பந்தம் இல்லாமல் புள்ளிகள் குறையாது. 😅", - "pickAnEmojiFor": "{lemma} க்கு ஒரு எமோஜி தேர்ந்தெடுக்கவும்", "analyticsVocabListBody": "இது உங்கள் அனைத்து சொற்பொருள்களும்! ஒவ்வொரு சொல்லுக்கும் நீங்கள் பெறும் XP மூலம், அவை விதைமரத்திலிருந்து முழுமையான மலர்வரை செல்லும். மேலும் விவரங்களை காண எந்த சொல்லையும் கிளிக் செய்யவும்.", "morphAnalyticsListBody": "இவை நீங்கள் கற்றுக் கொண்ட மொழியின் அனைத்து இலக்கண கருத்துக்களும்! நீங்கள் அவற்றை சந்திக்கும் போது அவற்றை திறக்கப்போகும்! விவரங்களுக்கு கிளிக் செய்யவும்.", "knockSpaceSuccess": "இந்த பாடத்திட்டத்தில் சேர விரும்புகிறீர்கள்! நீங்கள் அதை பெறும்போது ஒரு நிர்வாகி உங்கள் கோரிக்கைக்கு பதில் அளிப்பார் 😀", - "joinByCode": "குறியீட்டால் சேரவும்", "chooseWordAudioInstructionsBody": "முழுமையான செய்தியை கேளுங்கள். பின்னர் ஆடியோவை சொற்களுடன் பொருத்தவும்.", "chooseMorphsInstructionsBody": "இலக்கண கேள்விகளுக்கான புதிர் துண்டுகளை கிளிக் செய்யவும்!", - "inviteAndLaunch": "அழைத்து தொடங்கவும்", - "createOwnChat": "உங்கள் சொந்த உரையாடலை உருவாக்கவும்", "pleaseEnterInt": "தயவுசெய்து ஒரு எண்ணை உள்ளிடவும்", "home": "முகப்பு", "join": "சேரவும்", "readingAssistanceOverviewBody": "எமோஜிகள், ஆடியோ, சொல் அர்த்தங்கள் மற்றும் இலக்கண கருத்துக்களை பொருத்த சிறிய விளையாட்டுகளுக்கான பொத்தான்களை கீழே கிளிக் செய்யவும். அல்லது எந்த சொல்லையும் கிளிக் செய்து விவரங்களைப் பாருங்கள்.", - "learnByTexting": "எழுத்து மூலம் கற்றுக்கொள்ளவும்", - "levelSummaryTrigger": "சுருக்கத்தைப் பார்வையிடவும்", "levelSummaryPopupTitle": "படிநிலை {level} சுருக்கம்", - "referFriends": "நண்பர்களை பரிந்துரையிடு", - "referFriendDialogTitle": "உங்கள் உரையாடலுக்கு ஒரு நண்பரை அழைக்கவும்", - "referFriendDialogDesc": "உங்களுக்கு புதிய மொழியை கற்றுக்கொள்ள ஆர்வமுள்ள நண்பர் உள்ளவரா? அப்பொழுது இந்த அழைப்பு இணைப்பை நகலெடுத்து பகிர்ந்து கொண்டு இன்று உங்களுடன் உரையாட ஆரம்பிக்கவும்.", - "youUnlocked": "நீங்கள் திறந்துவிட்டீர்கள்", "resetInstructionTooltipsTitle": "வழிகாட்டல் குறிப்புகளை மீட்டமைக்கவும்", "resetInstructionTooltipsDesc": "புதிய பயனராக உள்ளவர்களுக்கு போல வழிகாட்டல் குறிப்புகளை காட்ட கிளிக் செய்யவும்.", "selectForGrammar": "செயல்பாடுகளுக்கும் விவரங்களுக்கும் ஒரு இலக்கண ஐகானை தேர்ந்தெடு.", - "newChatActivityTitle": "ஒரு சுவாரஸ்ய செயல்பாட்டை சேர்க்கவா?", - "newChatActivityDesc": "செயல்பாட்டு திட்டத்துடன் ஒவ்வொரு குழு உரையாடலையும் சாகசமாக மாற்றவும்! குழுவுக்கான கவர்ச்சிகரமான தலைப்புகள் மற்றும் நோக்கங்களை அமைக்கவும், அழகான படங்களுடன் உரையாடல்களை உயிர்ப்பிக்கவும். கற்பனைபூர்வமான விவாதங்களை தூண்டவும் மற்றும் சிரிப்பு ஓட்டத்தை எளிதாக வைத்திருக்கவும்!", - "exploreMore": "மேலும் ஆராயவும்", "randomize": "தற்செயலாக்கு", "clear": "அழி", "makeYourOwnActivity": "உங்கள் சொந்த செயல்பாட்டை உருவாக்கவும்", "featuredActivities": "சிறப்பானவை", - "goToChat": "உரையாடலுக்கு செல்லவும்", "save": "சேமிக்கவும்", - "selectActivity": "செயல்பாட்டை தேர்ந்தெடு", - "wordFocusListeningMultipleChoice": "எந்த ஒலி சொல்லுடன் பொருந்துகிறது?", "startChat": "உரையாடலைத் தொடங்கவும்", "translationProblem": "பெயர்ப்பு பிரச்சனை", - "perfectTranslation": "துல்லியமான மொழிபெயர்ப்பு!", - "greatJobTranslation": "இந்த மொழிபெயர்ப்பில் சிறந்த வேலை!", - "goodJobTranslation": "இந்த மொழிபெயர்ப்பில் நல்ல வேலை.", - "makingProgress": "நீங்கள் முன்னேற்றம் அடைகிறீர்கள்!", - "keepPracticing": "பயிற்சி தொடருங்கள்!", - "niceJob": "நல்ல வேலை!", "askToJoin": "சேர வேண்டுகோள் விடுங்கள்", "emptyChatWarningTitle": "செய்தி காலி", "emptyChatWarningDesc": "நீங்கள் யாரையும் உங்கள் உரையாடலுக்கு அழைக்கவில்லை. தொடர்புகளை அழைக்க அல்லது பாட்டை அழைக்க உரையாடல் அமைப்புகளுக்கு செல்லவும். இதை பின்னர் செய்யவும் முடியும்.", @@ -4593,8 +4166,6 @@ "languageLevelC2Desc": "நான் கேட்கப்பட்ட அல்லது படித்த அனைத்தையும் புரிந்துகொள்ள முடியும் மற்றும் தன்னிச்சையாகவும் துல்லியமாகவும் வெளிப்படுத்த முடியும்.", "newVocab": "புதிய சொற்பொருள்", "newGrammar": "புதிய இலக்கண கருத்துக்கள்", - "congratulationsOnReaching": "நீங்கள் நிலை {level}க்கு சென்றுவிட்டீர்கள்!", - "seeDetails": "விவரங்களைப் பார்க்கவும்", "choosePracticeMode": "மேலே உள்ள பொத்தான்களில் ஒன்றை கிளிக் செய்து பயிற்சி செயல்பாட்டைத் தொடங்கவும்", "ban": "தடைசெய்", "unban": "தடை நீக்கு", @@ -4608,8 +4179,6 @@ "timesUsedWithAssistance": "உதவியுடன் பயன்படுத்தப்பட்ட நேரங்கள்", "shareInviteCode": "அழைப்புக் குறியீடு பகிரவும்: {code}", "leaderboard": "தலைவரிசை", - "welcomeUser": "வரவேற்கிறோம் {user}", - "joinSpaceOnboardingDesc": "நீங்கள் ஒரு அழைப்பு குறியீடு அல்லது பொதுவான பாடத்திற்கான இணைப்பை வைத்துள்ளீர்களா?", "skipForNow": "இப்போது தவிர்க்கவும்", "permissions": "அனுமதிகள்", "spaceChildPermission": "இந்த பாடத்துக்கு புதிய உரையாடல்களை யார் சேர்க்கலாம்", @@ -4617,12 +4186,8 @@ "defaultOption": "இயல்பு", "deleteChatDesc": "இந்த உரையாடலை நீக்க விரும்புகிறீர்களா? இது அனைத்து பங்கேற்பாளர்களுக்கும் நீக்கப்படும் மற்றும் உரையாடலுக்குள் உள்ள அனைத்து செய்திகளும் பயிற்சி அல்லது கற்றல் பகுப்பாய்வுகளுக்கு இனி கிடைக்காது.", "deleteSpaceDesc": "பாடம் மற்றும் தேர்ந்தெடுத்த உரையாடல்கள் அனைத்தும் அனைத்து பங்கேற்பாளர்களுக்கும் நீக்கப்படும் மற்றும் உரையாடலுக்குள் உள்ள அனைத்து செய்திகளும் பயிற்சி அல்லது கற்றல் பகுப்பாய்வுகளுக்கு இனி கிடைக்காது. இந்த நடவடிக்கை திருத்த முடியாது.", - "chatWithActivities": "செயல்பாடுகளுடன் உரையாடல்", "launch": "துவக்கம்", - "launchActivityToChats": "செயல்பாட்டை உரையாடல்களுக்கு துவக்கவும்", "searchChats": "உரையாடல்களைத் தேடு", - "selectChats": "உரையாடல்களை தேர்ந்தெடு", - "selectChatToStart": "முடிந்தது! துவக்க ஒரு உரையாடலை தேர்ந்தெடு", "maxFifty": "அதிகபட்சம் 50", "configureSpace": "பாடத்தைக் கட்டமைக்கவும்", "pinMessages": "செய்திகளை பின் இடுக", @@ -4636,9 +4201,7 @@ "announcements": "அறிவிப்புகள்", "activities": "செயல்பாடுகள்", "access": "அணுகல்", - "botSettings": "போட் அமைப்புகள்", "activitySuggestionTimeoutMessage": "நீங்கள் விரும்பும் மேலும் செயல்பாடுகளை உருவாக்க நாங்கள் கடுமையாக பணியாற்றுகிறோம், தயவுசெய்து ஒரு நிமிடத்தில் மீண்டும் சரிபார்க்கவும்", - "accessSettingsWarning": "அய்யோ! இந்த அறையின் அணுகல் விதிகளை அமைக்க நீங்கள் அனுமதி இல்லை என்று தெரிகிறது. நீங்கள் தேவையானதை உறுதி செய்ய இந்த அமைப்புகளை சரிபார்க்க வேண்டும் மற்றும் மாற்ற வேண்டுமானால் அறை நிர்வாகியுடன் பேசவும்", "howSpaceCanBeFound": "இந்த பாடத்திட்டம் எப்படி கண்டுபிடிக்கலாம்", "private": "தனிப்பட்ட", "cannotBeFoundInSearch": "தேடலில் கண்டுபிடிக்க முடியாது", @@ -4651,16 +4214,6 @@ "canBeFoundViaKnock": "• சேர்க்க கோரிக்கை மற்றும் நிர்வாக அனுமதி", "youHaveLeveledUp": "நீங்கள் நிலை உயர்த்திவிட்டீர்கள்!", "sendActivities": "செயல்பாடுகளை அனுப்பவும்", - "getStarted": "தொடங்கவும்", - "getStartedBotChatDesc": "AI உடன் உரையாடுவது தொடக்கத்திற்கு சிறந்த இடம் மற்றும் பாங்கியா வாசிப்பு, எழுதுதல், கேட்கும் மற்றும் பேசும் கருவிகள் அதை எளிதாக்குகின்றன!", - "getStartedCommunitiesDesc": "கூட்டத்துடன் கற்றல் என்பது பாங்கியா உரையாடல் பிரகாசிக்கும் இடம்!\nநீங்கள் உங்கள் வகுப்பில் சேரலாம், ஒரு பாடத்திட்டத்தை கண்டுபிடிக்கலாம், அல்லது உங்கள் சொந்ததை உருவாக்கலாம்!", - "getStartedFriendsDesc": "உங்களுக்கு கற்றுக்கொள்ள விரும்பும் நண்பர் உள்ளவரா?", - "getStartedBotChatComplete": "சரி! நீங்கள் பாட்டுடன் உரையாடுகிறீர்கள்!", - "getStartedCommunitiesComplete": "சிறந்தது, நீங்கள் ஒரு பாடத்திட்டத்தில் சேர்ந்துள்ளீர்கள்!", - "getStartedComplete": "இந்த பகுதியை நீங்கள் முடித்துவிட்டீர்கள்!\nநமது அற்புதமான அம்சங்களை நண்பர்களுடன் உரையாடி தொடரவும்!", - "getStartedFriendsComplete": "வூஹூ! உங்களுக்கு நண்பர்கள் கிடைத்தனர்! 😉", - "getStartedBotChatButton": "உரையாடத் தொடங்கவும்!", - "getStartedFriendsButton": "ஒரு நண்பருடன் உரையாடவும்", "groupChat": "குழு உரையாடல்", "directMessage": "நேரடி செய்தி", "newDirectMessage": "புதிய நேரடி செய்தி", @@ -4676,7 +4229,6 @@ "mySavedActivities": "எனது சேமிக்கப்பட்ட செயல்பாடுகள்", "noSavedActivities": "சேமிக்கப்பட்ட செயல்பாடுகள் இல்லை", "saveActivity": "இந்த செயல்பாட்டை சேமிக்கவும்", - "yourSavedActivities": "உங்கள் சேமிக்கப்பட்ட செயல்பாடுகள்", "failedToPlayVideo": "வீடியோ播放 முடியவில்லை", "done": "முடிந்தது", "inThisSpace": "இந்த பாடத்தில்", @@ -4715,37 +4267,27 @@ "maximumActivityParticipants": "ஒவ்வொரு செயல்பாட்டுக்கும் அதிகபட்ச {count} பங்கேற்பாளர்கள் இருக்கலாம்.", "pending": "காத்திருக்கிறது", "inactive": "செயலற்றது", - "unjoinedActivityMessage": "பங்கேற்க விரும்புகிறீர்களா? திறந்த பங்கு தேர்வு செய்யவும்!\nஅல்லது வெளியே சென்று நிகழ்ச்சியைப் பாருங்கள்!", - "fullActivityMessage": "நிகழ்ச்சியைப் பாருங்கள்! பங்கேற்க திறந்த பங்குகள் இல்லாதபோதும், நீங்கள் உரையாடலைக் காணலாம்!", "confirmRole": "பங்கு உறுதிப்படுத்தவும்", "openRoleLabel": "திறந்தது", "joinedTheActivity": "👋 {username} {role} ஆக சேர்ந்தார்", "finishedTheActivity": "🎯 {username} இந்த செயல்பாட்டை முடித்தார்", - "endActivityTitle": "நான் முடித்துவிட்டேன்", - "endActivityDesc": "நீங்கள் குறிக்கோள்களை நிறைவேற்றினீர்களா?\nஇது உங்கள் உறுதிப்பத்திரம், நீங்கள் உரையாடலிலிருந்து பின்வாங்குகிறீர்கள். ஆனால் கவலைப்படாதீர்கள், பொழுதுபோக்கு உரையாடலில் தொடரும்! அனைவரும் 'முடிந்தது' என்பதைக் கிளிக் செய்யும் வரை வெளியே சென்று நிகழ்ச்சியை அனுபவிக்கவும்.", "archiveToAnalytics": "எனது முடித்த செயல்பாடுகளுக்கு சேர்க்கவும்", "activitySummaryError": "செயல்பாட்டு சுருக்கங்கள் கிடைக்கவில்லை", "requestSummaries": "சுருக்கங்களை கோரவும்", - "loadingActivitySummary": "செயல்பாட்டு சுருக்கம் ஏற்றப்படுகிறது...", "generatingNewActivities": "இந்த மொழி ஜோடியின் முதல் பயனர் நீங்கள்! தயவுசெய்து ஒரு நிமிடம் காத்திருக்கவும், நாங்கள் உங்களுக்காக செயல்பாடுகளை தயாரித்து வருகின்றோம்.", - "requestAccessTitle": "புள்ளிவிவர பார்வை அணுகலை கோர வேண்டுமா?", + "requestAccessTitle": "அணுகல் பகுப்பாய்வு கோரிக்கையா?", "requestAccessDesc": "பங்கேற்பாளர்களின் பகுப்பாய்வை காண விரும்புகிறீர்களா?\n\nபங்கேற்பாளர்கள் ஒப்புக்கொண்டால், இந்த பாடக்குறிப்பின் நிர்வாகிகள் அவர்களின்:\n • மொத்த சொற்பொருள்\n • மொத்த இலக்கண கருத்துக்கள்\n • மொத்த செயல்பாட்டு அமர்வுகள் முடிக்கப்பட்டவை\n • பயன்படுத்தப்பட்ட, சரியான மற்றும் தவறான இலக்கண கருத்துக்கள்\n\nஅவர்கள் பார்க்க முடியாது:\n • பாடக்குறிப்பைத் தவிர மற்ற உரையாடல்களில் செய்திகள்\n • சொற்பொருள் பட்டியல்", "requestAccess": "வினவல் அணுகல் ({count})", "analyticsInactiveTitle": "செயல்பாட்டில் இல்லாத பயனர்களுக்கு கோரிக்கைகள் அனுப்ப முடியாது", "analyticsInactiveDesc": "இந்த அம்சம் அறிமுகப்படுத்தப்பட்டதிலிருந்து உள்நுழையாத செயல்பாட்டில் இல்லாத பயனர்கள் உங்கள் கோரிக்கையை காண முடியாது.\n\nபயனர் திரும்பும்போது, கோரிக்கை பொத்தான் தோன்றும். அவர்கள் பெயரின் கீழ் உள்ள கோரிக்கை பொத்தானை கிளிக் செய்து பின்னர் மீண்டும் அனுப்பலாம்.", "accessRequestedTitle": "பகுப்பாய்வு அணுகல் கோரிக்கை", - "accessRequestedDesc": "\"{space}\" இன் நிர்வாகிகள் உங்கள் கற்றல் பகுப்பாய்வை காண கோரிக்கின்றனர்.\n\nநீங்கள் ஒப்புக்கொண்டால், இந்த பாடக்குறிப்பின் நிர்வாகிகள் உங்கள்:\n • மொத்த சொற்பொருள்\n • மொத்த இலக்கண கருத்துக்கள்\n • மொத்த செயல்பாட்டு அமர்வுகள் முடிக்கப்பட்டவை\n • பயன்படுத்தப்பட்ட, சரியான மற்றும் தவறான இலக்கண கருத்துக்கள்\n\nஅவர்கள் பார்க்க முடியாது:\n • பாடக்குறிப்பைத் தவிர மற்ற உரையாடல்களில் செய்திகள்\n • சொற்பொருள் பட்டியல்", - "allowAccess": "அணுகலை அனுமதிக்கவும்", - "denyAccess": "அணுகலை மறுக்கவும்", + "accessRequestedDesc": "அணுகல் கோருகிற நிர்வாகி(கள்): {admin} \n\n“{space}” இல் இருந்து நிர்வாகிகள் உங்கள் கற்றல் பகுப்பாய்வுகளை காண கோரிக்கையிடுகிறார்கள்.\n\nநீங்கள் ஒப்புக்கொண்டால், அவர்கள் உங்கள்:\n • மொத்த சொல்வழிகள்\n • மொத்த இலக்கண கருத்துகள்\n • மொத்த செயல்பாட்டு அமர்வுகள் முடிக்கப்பட்டது\n • சரியாகவும் தவறாகவும் பயன்படுத்திய குறிப்பிட்ட இலக்கண கருத்துகள்\n\nஅவர்கள் உங்கள்:\n • பாடத்திற்குப் புறமாக உள்ள உரையாடல்களில் உள்ள செய்திகளை காண முடியாது\n • சொல்வழி பட்டியல்", "adminRequestedAccess": "நிர்வாகிகள் உங்கள் பகுப்பாய்வை காண கோரிக்கை வைத்துள்ளனர்.", "lastUpdated": "புதுப்பிக்கப்பட்டது\n{time}", "activityFinishedMessage": "அனைத்தும் முடிந்தது!", "endForAll": "அனைவருக்கும் முடிவு", "newCourse": "புதிய பாடம்", - "newCourseSubtitle": "நீங்கள் எந்த பாட திட்டத்தை பயன்படுத்த விரும்புகிறீர்கள்?", - "failedToLoadCourses": "பாடங்களை ஏற்ற முடியவில்லை", "numModules": "{num} பகுதிகள்", - "numActivityPlans": "{num} செயல்பாட்டு திட்டங்கள்", "coursePlan": "பாட திட்டம்", "editCourseLater": "பின்னர் நீங்கள் மாதிரி தலைப்பு, விளக்கங்கள் மற்றும் பாடம் படத்தைத் திருத்தலாம்.", "newCourseAccess": "இயல்பாக, பாடங்கள் தனிப்பட்டவை மற்றும் சேர்க்க நிர்வாகத்தின் ஒப்புதலை தேவைபடுகின்றன. நீங்கள் எப்போது வேண்டுமானாலும் இந்த அமைப்புகளை மாற்றலாம்.", @@ -4759,17 +4301,11 @@ "accessDesc": "உங்கள் பாடத்தைக் உலகிற்கு திறக்கலாம்! அல்லது, தனிப்பட்ட மற்றும் பாதுகாப்பானதாக மாற்றவும்.", "createGroupChatDesc": "செயல்பாட்டுக் கூட்டங்கள் தொடங்கும் மற்றும் முடிவடையும் இடம், குழு உரையாடல்கள் வழக்கமான தொடர்புக்கு திறந்தவையாக இருக்கும்.", "deleteDesc": "பாடத்தைக் நீக்குவதற்கு மட்டுமே நிர்வாகிகள் அனுமதிக்கின்றனர். இது அனைத்து பயனர்களையும் நீக்கி, தேர்ந்தெடுத்த அனைத்து உரையாடல்களையும் அழிக்கும் அழிப்பான நடவடிக்கை. கவனமாக செயல்படவும்.", - "failedToLoadCourseInfo": "பாடத் தகவலை ஏற்ற முடியவில்லை", "noCourseFound": "ஓ, இந்த பாடத்துக்கு ஒரு திட்டம் தேவை!\n\nபாடத்திட்டங்கள் என்பது தலைப்புகளின் தொடரும் மற்றும் உரையாடல் செயல்பாடுகளின் தொகுப்பாகும்.", "additionalParticipants": "+ {num} மற்றவர்கள்", - "activityNotFoundForCourse": "இந்த செயல்பாடு பாடத்துக்குள் கண்டுபிடிக்கப்படவில்லை", - "courseChats": "பாடத்தைக் குறித்த உரையாடல்கள்", - "myActivitySessions": "எனது செயல்பாட்டு அமர்வுகள்", "directMessages": "நேரடி செய்திகள்", "whatNow": "இப்போது என்ன?", "chooseNextActivity": "உங்கள் அடுத்த செயல்பாட்டை தேர்ந்தெடுக்கவும்!", - "seeInstructions": "வழிமுறைகளைப் பாருங்கள்", - "hideInstructions": "வழிகாட்டுதல்களை மறை", "letsGo": "போய்ச் செல்லலாம்", "chooseRole": "பாத்திரத்தை தேர்ந்தெடு!", "chooseRoleToParticipate": "பங்கேற்கப் பாத்திரத்தை தேர்ந்தெடு!", @@ -4779,23 +4315,15 @@ "inviteFriends": "நண்பர்களை அழை", "waitNotDone": "காத்திருக்கவும், நான் முடிக்கவில்லை!", "waitingForOthersToFinish": "மற்றவர்களும் முடிக்க காத்திருக்கிறது...", - "saveToCompletedActivities": "முடிந்த செயல்பாடுகளுக்கு சேமிக்கவும்", "generatingSummary": "செயல்பாட்டை பகுப்பாய்வு செய்து முடிவுகளை உருவாக்குகிறது", - "instructionsLanguage": "வழிகாட்டுதல்களின் மொழி", "findCourse": "பாடத்தைக் கண்டுபிடி", - "activityCompletedDesc": "உங்கள் முடிந்த செயல்பாடு பகுப்பாய்வில் சேர்க்கப்பட்டது, நீங்கள் பயன்படுத்திய மொழியை மதிப்பாய்வு மற்றும் பயிற்சி செய்யலாம்.", "pingParticipantsNotification": "{user} {room} இல் செயல்பாட்டில் சேர பங்கேற்பாளர்களை தேடுகிறார்", "course": "பாடம்", "courses": "பாடங்கள்", "courseName": "பாடத்தின் பெயர்", "createNewCourse": "புதிய பாடம்", - "publicCourses": "பொது பாடங்கள்", "goToCourse": "பாடத்துக்கு செல்லவும்: {course}", "activityComplete": "இந்த செயல்பாடு முடிந்துவிட்டது. செயல்பாட்டின் சுருக்கம் கீழே கிடைக்கும்.", - "haventChattedMuch": "நீங்கள் அதிகமாக உரையாடவில்லை போல் தெரிகிறது, சில கூடுதல் சொற்களை பயன்படுத்த முயற்சிக்கவும்! உங்கள் குறிக்கோளை நிறைவேற்றியதாக நினைத்தால், கீழே செயல்பாட்டை முடிக்கலாம்.", - "haveChatted": "நீங்கள் சில நேரமாக உரையாடி வருகிறீர்கள் போல் தெரிகிறது! உங்கள் குறிக்கோளை நிறைவேற்றியதாக நினைத்தால், செயல்பாட்டை முடிக்கவும், நாங்கள் உரையாடலில் ஒரு சுருக்கத்தை உருவாக்குவோம்!", - "userDoneAndWaiting": "{num1}/{num2} பங்கேற்பாளர்கள் முடித்துவிட்டனர். அனைவரும் முடிக்கும்வரை காத்திருக்கவும், நாங்கள் உரையாடலில் ஒரு சுருக்கத்தை உருவாக்குவோம்! \n\nஉங்கள் உரையாடலை மீண்டும் தொடங்க விரும்பினால், உரையாடலில் தொடரும் பொத்தானை கிளிக் செய்யவும்.", - "othersDoneAndWaiting": "{num1}/{num2} முடித்துவிட்டனர். நீங்கள் உங்கள் குறிக்கோளை நிறைவேற்றியுள்ளீர்களா?", "startNewSession": "புதிய அமர்வை தொடங்கவும்", "joinOpenSession": "திறந்த அமர்வில் சேரவும்", "less": "குறைவாக", @@ -4805,7 +4333,6 @@ "openToJoin": "சேர்வதற்கு திறந்தது", "results": "விளைவுகள்", "activityDone": "செயல்பாடு முடிந்தது!", - "moreLabel": "மேலும்", "promoCodeInfo": "பிரமோ குறியீடுகளை அடுத்த பக்கத்தில் உள்ளிடலாம்", "editsComingSoon": "நகரங்கள் மற்றும் செயல்பாடுகளைத் திருத்தும் திறன் விரைவில் வரும்.", "editing": "திருத்துதல்", @@ -4821,13 +4348,10 @@ "courseSavedSuccessfully": "பாடம் வெற்றிகரமாக சேமிக்கப்பட்டது", "addCoursePlan": "பாடத்திட்டத்தைச் சேர்க்கவும்", "activityStatsButtonInstruction": "உங்கள் செயல்பாட்டு புள்ளிவிவரங்களைப் பார்க்க இங்கே கிளிக் செய்யவும் மற்றும் முடிந்ததும் செயல்பாட்டை மூடவும்", - "readingAnalyticsDesc": "ஒவ்வொரு செய்தியிலும் பயிற்சி செய்ய வாசிப்பு செயல்பாடுகளுக்காக கிளிக் செய்யவும்.", - "speakingAnalyticsDesc": "பேச்சு பயிற்சிக்காக குரல் செய்திகளை பதிவு செய்யவும்.", - "audioAnalyticsDesc": "ஒவ்வொரு செய்தியிலும் கேட்கும் செயல்பாடுகளுக்காக கிளிக் செய்யவும்.", "loginToAccount": "என் கணக்கில் உள்நுழையவும்", "appDescription": "ஒரு மொழியை கற்றுக்கொள்ளுங்கள்\nஉங்கள் நண்பர்களுடன் உரையாடும் போது.", "languages": "மொழிகள்", - "chooseLanguage": "ஒரு மொழியை தேர்ந்தெடுக்கவும்.", + "chooseLanguage": "ஒரு இலக்கு மொழியை தேர்வு செய்யவும்.", "planTrip": "உங்கள் பயணத்தை திட்டமிடுங்கள்", "howAreYouTraveling": "நீங்கள் எப்படி பயணம் செய்து கொண்டிருக்கிறீர்கள்?", "unlockPrivateTrip": "தனிப்பட்ட பயணத்தை திறக்கவும்", @@ -4840,25 +4364,20 @@ "courseCode": "ரகசிய கடவுச்சொல் என்ன?", "courseCodeHint": "பயணக் குறியீடு அல்லது இணைப்பு", "unlockMyTrip": "எனது பயணத்தை திறக்கவும்", - "anyLevel": "எந்த நிலையும்", "signupOption": "நீங்கள் எப்படி பதிவு செய்ய விரும்புகிறீர்கள்?", "withApple": "ஆப்பிள் உடன்", "withGoogle": "கூகிள் உடன்", "withEmail": "மின்னஞ்சல் உடன்", "createAccount": "கணக்கை உருவாக்கவும்", - "noCoursesFound": "பாடங்கள் எதுவும் கண்டுபிடிக்கப்படவில்லை", "loginWithEmail": "மின்னஞ்சலுடன் உள்நுழைக", "usernameOrEmail": "பயனர்பெயர் அல்லது மின்னஞ்சல்", "email": "மின்னஞ்சல்", "forgotPassword": "கடவுச்சொல்லை மறந்துவிட்டீர்களா?", - "writingAnalyticsDesc": "எழுதும் பயிற்சிக்கு செய்திகள் அனுப்பவும்.", "endActivity": "செயல்பாட்டை முடிக்கவும்", "allLanguages": "அனைத்து மொழிகள்", - "allCefrLevels": "அனைத்து CEFR நிலைகள்", "chatListTooltip": "இங்கே நீங்கள் நேரடி செய்திகளை காணலாம்! எந்த பயனரின் அவதாரத்தையும் கிளிக் செய்து “பேச்சு தொடங்கவும்” என்பதைக் கிளிக் செய்து DM அனுப்பவும்.", "directMessageBotTitle": "நேரடி செய்தி பங்கேயா பாட்டி", "feedbackTitle": "செயல்பாட்டு கருத்து", - "feedbackDesc": "செயல்பாட்டை எப்படி மேம்படுத்த வேண்டும்? சில விவரங்களை வழங்கினால், நாங்கள் மாற்றுவோம்!", "feedbackHint": "உங்கள் கருத்து", "feedbackButton": "கருத்தை சமர்ப்பிக்கவும்", "directMessageBotDesc": "மனிதர்களுடன் பேசுவது அதிக மகிழ்ச்சி ஆனால்... AI எப்போதும் தயாராக உள்ளது!", @@ -5221,30 +4740,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -5268,18 +4763,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5304,18 +4787,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5352,38 +4823,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5392,62 +4835,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5484,10 +4883,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5496,14 +4891,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5512,46 +4899,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5560,10 +4911,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5620,18 +4967,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5640,14 +4975,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5676,18 +5003,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5696,42 +5011,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5740,14 +5023,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5768,26 +5043,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5808,10 +5063,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5844,25 +5095,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5919,34 +5151,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5975,778 +5179,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7739,14 +6175,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7758,14 +6186,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7797,10 +6217,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7809,18 +6225,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7829,14 +6233,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7861,38 +6257,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7938,10 +6306,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7966,10 +6330,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7994,10 +6354,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8006,66 +6362,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8086,42 +6386,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8146,154 +6422,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8310,18 +6438,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8342,14 +6458,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8366,10 +6474,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8382,14 +6486,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8398,14 +6494,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8433,26 +6521,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8481,18 +6549,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8529,10 +6589,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9465,10 +7521,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9649,34 +7701,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9689,10 +7713,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9701,14 +7721,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9725,22 +7737,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9888,14 +7884,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9904,34 +7892,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9940,54 +7900,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9996,10 +7920,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10016,10 +7936,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10191,26 +8107,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10239,10 +8135,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10299,30 +8191,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10351,18 +8227,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10479,14 +8347,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10499,10 +8359,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10511,14 +8367,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10535,14 +8383,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10551,22 +8391,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10579,18 +8403,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10607,22 +8419,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10631,30 +8431,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10727,18 +8503,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10795,18 +8559,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10835,30 +8587,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10911,18 +8647,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10971,46 +8699,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11075,10 +8763,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11250,14 +8934,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11285,14 +8961,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11305,10 +8973,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11344,19 +9008,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11381,14 +9040,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11397,14 +9048,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11457,10 +9100,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11473,18 +9112,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11497,14 +9124,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11545,26 +9164,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11592,10 +9199,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11606,36 +9209,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11672,10 +9245,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11740,18 +9309,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11816,10 +9373,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11840,10 +9393,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11860,10 +9409,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11872,10 +9417,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11888,10 +9429,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11916,16 +9453,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "நண்பர்களை செயல்பாட்டிற்கு அழைக்கவும்", - "inviteFriendsToActivityCourse": "நண்பர்களை செயல்பாட்டுக்கும் பாடத்திற்கும் அழைக்கவும்", "feedbackRespDesc": "நாளை மீண்டும் செயல்பாட்டின் புதுப்பிப்புகளுக்காக சரிபார்க்கவும்.", "activityDropdownDesc": "இந்த செயல்பாட்டை முடித்தவுடன், கீழே கிளிக் செய்யவும்", - "activityAnalyticsListBody": "இவை உங்கள் முடித்த செயல்பாடுகள்! செயல்பாடுகளை முடித்த பிறகு, அவற்றை இங்கே பார்க்கலாம்.", "languageMismatchTitle": "மொழி பொருந்தாமை", "languageMismatchDesc": "உங்கள் இலக்கு மொழி இந்த செயல்பாட்டின் மொழியுடன் பொருந்தவில்லை. உங்கள் இலக்கு மொழியை புதுப்பிக்க விரும்புகிறீர்களா?", "reportWordIssueTooltip": "வார்த்தை தகவல் பிரச்சனையை அறிக்கையிடவும்", "tokenInfoFeedbackDialogTitle": "வார்த்தை தகவல் கருத்து", - "tokenInfoFeedbackDialogDesc": "AI தவறுகள் செய்கிறது. மேலே உள்ள தகவலுடன் நீங்கள் கண்டுபிடித்த எந்த பிரச்சனைகளையும் விவரிக்கவும்.", "noPublicCoursesFound": "பொது பாடத்திட்டங்கள் கண்டுபிடிக்கப்படவில்லை. நீங்கள் ஒரு பாடத்திட்டத்தை உருவாக்க விரும்புகிறீர்களா?", "noCourseTemplatesFound": "உங்கள் இலக்கு மொழிக்கான எந்த பாடத்திட்டங்களும் கண்டுபிடிக்கப்படவில்லை. அதற்காக, நீங்கள் பாங்கியா பாட்டுடன் உரையாடலாம், மேலும் பிற பாடத்திட்டங்களுக்கு பின்னர் மீண்டும் சரிபார்க்கலாம்.", "botActivityJoinFailMessage": "பாங்கியா பாட்டின் பதில் கொடுக்க சில நேரம் ஆகும். தயவுசெய்து பின்னர் மீண்டும் முயற்சிக்கவும், அல்லது நண்பரை அழைக்கவும்.", @@ -11933,14 +9466,6 @@ "leaveDesc": "இந்த இடத்தையும் அதில் உள்ள அனைத்து உரையாடல்களையும் விட்டு செல்லவும்", "selectAll": "அனைத்தையும் தேர்வு செய்யவும்", "deselectAll": "அனைத்தையும் தேர்வு நீக்கவும்", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11949,10 +9474,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11969,10 +9490,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12006,7 +9523,6 @@ "newMessageInPangeaChat": "💬 பாங்கியா சாட்டில் புதிய செய்தி", "shareCourse": "பாடத்தைக் பகிரவும்", "addCourse": "பாடத்தைச் சேர்க்கவும்", - "joinCourseWithCode": "குறியீடு கொண்டு பாடத்தில் சேரவும்", "joinPublicCourse": "பொது பாடத்தில் சேரவும்", "vocabLevelsDesc": "நீங்கள் அவற்றை மேம்படுத்தியபின் சொற்பொருள் வார்த்தைகள் இங்கே செல்லும்!", "highlightVocabTooltip": "சாட் மூலம் அனுப்புவதன் மூலம் அல்லது அவற்றுடன் பயிற்சி செய்வதன் மூலம் கீழே உள்ள இலக்கு சொற்களை வண்ணமயமாக்கவும்", @@ -12030,10 +9546,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12042,7 +9554,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "DMs அல்லது உரையாடல்கள் எதுவும் கிடைக்கவில்லை. உங்கள் தேடல் சரியாக எழுத்துப்பிழையின்றி உள்ளது என்பதை உறுதி செய்யவும்.", + "activityAnalyticsTooltipBody": "இவை உங்கள் மதிப்பீடு மற்றும் பயிற்சிக்கான சேமிக்கப்பட்ட செயல்பாடுகள்.", + "numSavedActivities": "சேமிக்கப்பட்ட செயல்பாடுகளின் எண்ணிக்கை", + "saveActivityTitle": "செயல்பாட்டை சேமிக்கவும்", + "saveActivityDesc": "சிறந்த வேலை! இந்த செயல்பாட்டை பின்னர் மதிப்பீடு மற்றும் பயிற்சிக்காக சேமிக்கவும்", + "levelInfoTooltip": "இங்கு நீங்கள் பெற்ற அனைத்து புள்ளிகளையும் எப்படி பெற்றீர்கள் என்பதையும் காணலாம்!", + "alreadyInCourseWithID": "இந்த திட்டத்துடன் நீங்கள் ஏற்கனவே ஒரு பாடத்தில் உள்ளீர்கள். அதே திட்டத்துடன் ஒரு பாடத்தை உருவாக்க விரும்புகிறீர்களா, அல்லது உள்ள பாடத்திற்கு செல்ல விரும்புகிறீர்களா?", + "goToExistingCourse": "உள்ள பாடத்திற்கு செல்லவும்", + "emojiView": "எமோஜி காட்சி", + "feedbackDialogDesc": "நான் தவறுகள் செய்கிறேன்! என்னால் மேம்பட உதவுவதற்கான எதுவும்?", + "contactHasBeenInvitedToTheCourse": "தொடர்பு கற்கைநெறிக்கு அழைக்கப்பட்டுள்ளது", + "activityStatsButtonTooltip": "செயல்பாட்டு தகவல்", + "allow": "அனுமதிக்கவும்", + "deny": "மறுக்கவும்", + "enabledRenewal": "சந்தா புதுப்பிப்பை செயல்படுத்தவும்", + "subscriptionEndsOn": "சந்தா முடிவடைகிறது", + "subscriptionRenewsOn": "சந்தா புதுப்பிக்கப்படுகிறது", + "waitForSubscriptionChanges": "உங்கள் சந்தாவிற்கு மாற்றங்கள் செயலியில் பிரதிபலிக்க சில நேரம் ஆகலாம்.", + "subscribeReadingAssistance": "செய்தி கருவிகளை திறக்க சந்தா செய்யவும்", + "aceDisplayName": "அசினீஸ்", + "achDisplayName": "அகோலி", + "afDisplayName": "ஆபிரிக்கான்ஸ்", + "akDisplayName": "அகான்", + "alzDisplayName": "அலூர்", + "amDisplayName": "அம்ஹாரிக்", + "arDisplayName": "அரபு", + "asDisplayName": "அசாமி", + "awaDisplayName": "அவாதி", + "ayDisplayName": "அய்மரா", + "azDisplayName": "அசர்பைஜானி", + "baDisplayName": "பாஷ்கிர்", + "banDisplayName": "பலினேசிய", + "bbcDisplayName": "படக் தொபா", + "beDisplayName": "பெலாருசியன்", + "bemDisplayName": "பெம்பா", + "bewDisplayName": "பெட்டாவி", + "bgDisplayName": "புல்கேரியன்", + "bhoDisplayName": "போஜ்பூரி", + "bikDisplayName": "பிகோல்", + "bmDisplayName": "பம்பரா", + "bnDisplayName": "பங்காளா", + "bnBDDisplayName": "பெங்காலி (பங்காளா)", + "bnINDisplayName": "பெங்காலி (இந்தியா)", + "brDisplayName": "பிரெட்டான்", + "bsDisplayName": "போஸ்னியன்", + "btsDisplayName": "படக் சிமலுங்குன்", + "btxDisplayName": "படக் காரோ", + "buaDisplayName": "பூரியட்", + "caDisplayName": "கடலான்", + "cebDisplayName": "செபுவானோ", + "cggDisplayName": "சிகா", + "chmDisplayName": "மரி", + "ckbDisplayName": "மைய குர்திஷ்", + "cnhDisplayName": "ஹகா சின்", + "coDisplayName": "கோர்சிகன்", + "crhDisplayName": "கிரீமியன் துருக்கி", + "crsDisplayName": "செசெல்வா கிரியோல் பிரெஞ்சு", + "csDisplayName": "செக்", + "cvDisplayName": "சுவாஷ்", + "cyDisplayName": "வெல்ஷ்", + "daDisplayName": "டேனிஷ்", + "deDisplayName": "ஜெர்மன்", + "dinDisplayName": "டிங்கா", + "doiDisplayName": "டோகிரி", + "dovDisplayName": "டொம்பே", + "dzDisplayName": "த்சொங்க்கா", + "eeDisplayName": "எவ்", + "enDisplayName": "ஆங்கிலம்", + "enAUDisplayName": "ஆங்கிலம் (ஆஸ்திரேலியா)", + "enGBDisplayName": "ஆங்கிலம் (யூகே)", + "enINDisplayName": "ஆங்கிலம் (இந்தியா)", + "enUSDisplayName": "ஆங்கிலம் (அமெரிக்கா)", + "eoDisplayName": "எஸ்பராண்டோ", + "esDisplayName": "ஸ்பானிஷ்", + "esESDisplayName": "ஸ்பானிஷ் (ஸ்பெயின்)", + "esMXDisplayName": "ஸ்பானிஷ் (மெக்சிகோ)", + "euDisplayName": "பாஸ்க்", + "faDisplayName": "பர்சியன்", + "ffDisplayName": "ஃபுலா", + "fiDisplayName": "பின்னிஷ்", + "filDisplayName": "பிலிப்பினோ", + "fjDisplayName": "ஃபிஜியன்", + "foDisplayName": "ஃபரோய்ஸ்", + "frDisplayName": "பிரெஞ்சு", + "frCADisplayName": "பிரெஞ்சு (கனடா)", + "frFRDisplayName": "பிரெஞ்சு (பிரான்ஸ்)", + "fyDisplayName": "மேற்கு ஃபிரிசியன்", + "gaDisplayName": "ஐரிஷ்", + "gaaDisplayName": "கா", + "gdDisplayName": "ஸ்காடிஷ் கேலிக்", + "glDisplayName": "கலிசியன்", + "gnDisplayName": "குவாரனி", + "gomDisplayName": "கோயன் காங்கனி", + "guDisplayName": "குஜராத்தி", + "haDisplayName": "ஹவ்சா", + "hawDisplayName": "ஹவாயியன்", + "heDisplayName": "ஹீப்ரு", + "hiDisplayName": "இந்தி", + "hilDisplayName": "ஹிலிகாய்னான்", + "hmnDisplayName": "ஹ்மோங்", + "hneDisplayName": "சட்டீஸ்கர்", + "hrDisplayName": "குரோஷியன்", + "hrxDisplayName": "ஹன்ஸ்ரிக்", + "htDisplayName": "ஹைட்டியன் கிரியோல்", + "huDisplayName": "ஹங்கேரியன்", + "hyDisplayName": "ஆர்மேனியன்", + "idDisplayName": "இந்தோனேசியன்", + "igDisplayName": "இக்போ", + "iloDisplayName": "இலோக்கோ", + "isDisplayName": "ஐஸ்லாந்து", + "itDisplayName": "இத்தாலிய", + "jaDisplayName": "ஜப்பானிய", + "jvDisplayName": "ஜாவானீஸ்", + "kaDisplayName": "ஜார்ஜியன்", + "kkDisplayName": "கசாக்", + "kmDisplayName": "கெமர்", + "knDisplayName": "கன்னட", + "koDisplayName": "கொரியன்", + "kokDisplayName": "கொங்கனி", + "kriDisplayName": "கிரியோ", + "ksDisplayName": "காஷ்மீரி", + "ktuDisplayName": "கிடுபா (டெமோகிராடிக் குடியரசு காங்கோ)", + "kuDisplayName": "குர்திஷ்", + "kyDisplayName": "கிர்கிஸ்", + "laDisplayName": "லத்தீன்", + "lbDisplayName": "லக்சம்பர்கிஷ்", + "lgDisplayName": "காண்டா", + "liDisplayName": "லிம்பர்கிஷ்", + "lijDisplayName": "லிகூரியன்", + "lmoDisplayName": "லொம்பார்ட்", + "lnDisplayName": "லிங்காலா", + "loDisplayName": "லாவோ", + "ltDisplayName": "லிதுவேனியன்", + "ltgDisplayName": "லாட்கேலியன்", + "luoDisplayName": "லூஒ (கென்யா மற்றும் தான்சானியா)", + "lusDisplayName": "மிசோ", + "lvDisplayName": "லாட்வியன்", + "maiDisplayName": "மைதிலி", + "makDisplayName": "மகாசர்", + "mgDisplayName": "மலாகசி", + "miDisplayName": "மாவோரி", + "minDisplayName": "மினங்க்கபவ்", + "mkDisplayName": "மகேதோனியன்", + "mlDisplayName": "மலையாளம்", + "mnDisplayName": "மங்கோலியன்", + "mniDisplayName": "மணிப்பூரி", + "mrDisplayName": "மராத்தி", + "msDisplayName": "மலாய்", + "msArabDisplayName": "மலாய் (அரபு)", + "msMYDisplayName": "மலாய் (மலேசியா)", + "mtDisplayName": "மால்டீசு", + "mwrDisplayName": "மர்வாரி", + "myDisplayName": "புர்மீசு", + "nanDisplayName": "மின் நான்", + "nbDisplayName": "நோர்வேயிய (பொக்மால்)", + "neDisplayName": "நேபாளி", + "newDisplayName": "நியூவாரி", + "nlDisplayName": "டச்சு", + "nlBEDisplayName": "ஃபிளெமிஷ்", + "noDisplayName": "நோர்வேயிய", + "nrDisplayName": "தெற்கு ந்டெபெலே", + "nsoDisplayName": "வடக்கு சொதோ", + "nusDisplayName": "நூயர்", + "nyDisplayName": "ந்யாஞ்சா", + "ocDisplayName": "ஒசிடேன்டு", + "omDisplayName": "ஓரோமோ", + "orDisplayName": "ஒடியா", + "paDisplayName": "பஞ்சாபி", + "paArabDisplayName": "பஞ்சாபி (ஷாஹ்முகி)", + "paINDisplayName": "பஞ்சாபி (குர்முகி)", + "pagDisplayName": "பங்காசினான்", + "pamDisplayName": "பம்பாங்கா", + "papDisplayName": "பாபியமெண்டோ", + "plDisplayName": "போலிஷ்", + "psDisplayName": "பஷ்தோ", + "ptDisplayName": "போர்ச்சுகீசு", + "ptBRDisplayName": "போர்ச்சுகீசு (பிரேசில்)", + "ptPTDisplayName": "போர்ச்சுகீசு (போர்த்துகல்)", + "quDisplayName": "கெச்சுவா", + "rajDisplayName": "ராஜஸ்தானி", + "rnDisplayName": "ருந்தி", + "roDisplayName": "ரோமானியன்", + "roMDDisplayName": "மோல்டோவியன்", + "romDisplayName": "ரோமனி", + "ruDisplayName": "ரஷ்யன்", + "rwDisplayName": "கின்யார்வாண்டா", + "saDisplayName": "சம்ஸ்கிருதம்", + "satDisplayName": "சந்தாலி", + "scnDisplayName": "சிசிலியன்", + "sdDisplayName": "சிந்தி", + "sgDisplayName": "சாங்கோ", + "shnDisplayName": "ஷான்", + "siDisplayName": "சிங்களம்", + "skDisplayName": "ஸ்லோவாக்", + "slDisplayName": "ஸ்லோவேனியன்", + "smDisplayName": "சாமோவான்", + "snDisplayName": "ஷோனா", + "soDisplayName": "சோமாலி", + "sqDisplayName": "அல்பேனியன்", + "srDisplayName": "செர்பியன்", + "srMEDisplayName": "மொன்டெனெக்ரின்", + "ssDisplayName": "ஸ்வாட்டி", + "stDisplayName": "தெற்கு சொத்தோ", + "suDisplayName": "சுந்தானீஸ்", + "svDisplayName": "ஸ்வீடிஷ்", + "swDisplayName": "ஸ்வாஹிலி", + "szlDisplayName": "சிலேசியன்", + "taDisplayName": "தமிழ்", + "teDisplayName": "தெலுங்கு", + "tetDisplayName": "டெட்டம்", + "tgDisplayName": "தாஜிக்", + "thDisplayName": "தாய்", + "tiDisplayName": "டிகிரின்யா", + "tkDisplayName": "துர்க்மென்", + "tlDisplayName": "தகாலோக்", + "tnDisplayName": "ட்வானா", + "trDisplayName": "துருக்கி", + "tsDisplayName": "ட்சோங்கா", + "ttDisplayName": "ததார்", + "ugDisplayName": "உய்கூர்", + "ukDisplayName": "உக்ரைனியன்", + "urDisplayName": "உருது", + "urINDisplayName": "உருது (இந்தியா)", + "urPKDisplayName": "உருது (பாகிஸ்தான்)", + "uzDisplayName": "உஸ்பெக்", + "viDisplayName": "வியட்நாமியன்", + "wuuDisplayName": "வூ", + "xhDisplayName": "க்சோசா", + "yiDisplayName": "யிடிஷ்", + "yoDisplayName": "யொருபா", + "yuaDisplayName": "யுகடெக்கோ", + "yueDisplayName": "காந்தோனீஸ்", + "yueCNDisplayName": "காந்தோனீஸ் (சீனா)", + "yueHKDisplayName": "காந்தோனீஸ் (ஹாங்காங்)", + "zhDisplayName": "சீனம்", + "zhCNDisplayName": "சீனம் (எளிமைப்படுத்தப்பட்டது)", + "zhTWDisplayName": "சீனம் (பாரம்பரிய)", + "zuDisplayName": "ஜுலு", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12109,6 +10807,7 @@ "notStartedActivitiesTitle": "திறந்த அமர்வுகள் ({num})", "inProgressActivitiesTitle": "இப்போது நடைபெற்று வருகிறது ({num})", "completedActivitiesTitle": "முடிந்தது ({num})", + "pickDifferentActivity": "மற்றொரு செயல்பாட்டை தேர்ந்தெடுக்கவும்", "inOngoingActivity": "உங்களுக்கு ஒரு தொடர்ந்த செயல்பாடு உள்ளது!", "@notStartedActivitiesTitle": { "type": "String", @@ -12134,10 +10833,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "உங்கள் இலக்கு மொழி இந்த செய்தியுடன் பொருந்தவில்லை. உங்கள் இலக்கு மொழியை புதுப்பிக்கவா?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "இந்த பாடத்தில் உள்ள அனைவரும் இதுவே. எந்த பயனரின் அவதாரில் கிளிக் செய்து \"சரசரி உரையாடலை தொடங்கு\" என்பதன் மூலம் ஒரு நேரடி செய்தி அனுப்பவும்.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "இந்த சொல் உங்கள் பகுப்பாய்வில் நிரந்தரமாக நீக்கப்படும்", + "woman": "பெண்", + "man": "ஆண்", + "otherGender": "மற்றவை", + "unselectedGender": "ஒரு பாலின விருப்பத்தை தேர்வு செய்யவும்", + "gender": "பாலினம்", + "chatParticipantTooltip": "இந்த உரையாடலில் உள்ள அனைவரும் இதுவே. எந்த பயனரின் உருவத்தை கிளிக் செய்து \"உரையாடலை தொடங்கவும்\" என்பதன் மூலம் ஒரு நேரடி செய்தி அனுப்பவும்.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "உங்கள் இலக்கு மொழியில் இல்லாத செய்திகளுக்கான கற்றல் கருவிகள் முடக்கப்பட்டுள்ளது.", + "vocabEmoji": "வெகாப் எமோஜி", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "மறுசீரமைப்பை கோருங்கள்", + "optionalRegenerateReason": "(விருப்பம்) காரணம்", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "{lemma} க்கான எமோஜியை நீங்கள் அமைத்துள்ளீர்கள்! எதிர்காலத்தில் பயிற்சி செயல்களில் அந்த சொல்லை பிரதிநிதித்துவப்படுத்த எமோஜியை நாங்கள் பயன்படுத்துவோம்.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "உள்நுழைவுக்கு காத்திருக்கிறேன்", + "ssoDialogDesc": "நாங்கள் நீங்கள் பாதுகாப்பாக உள்நுழைய புதிய தாவலை திறந்துள்ளோம்.", + "ssoDialogHelpText": "🤔 புதிய தாவலை நீங்கள் காணவில்லை என்றால், தயவுசெய்து உங்கள் பாப்-அப் தடுப்பை சரிபார்க்கவும்.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "மொழி கருவிகளை முடக்கு", + "disableLanguageToolsDesc": "தானாக மொழி உதவியை முடக்க விரும்புகிறீர்களா?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "அனுமதி மறுக்கப்பட்டது. ஒலி செய்திகளை பதிவு செய்ய பதிவு அனுமதிகளை இயக்கவும்.", + "genericWebRecordingError": "எதோ தவறு நடந்தது. செய்திகளை பதிவு செய்ய Chrome உலாவியை பயன்படுத்த பரிந்துரைக்கிறோம்.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "இந்த பயன்பாட்டைப் பயன்படுத்துவதற்கான சிறந்த அனுபவத்திற்காக, உங்கள் திரை அளவை விரிவாக்கவும்.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "அடுத்த தலைப்பை திறக்க செயல்பாடுகள்", "activitiesToUnlockTopicDesc": "அடுத்த பாடத்தொகுப்பை திறக்க செயல்பாடுகளின் எண்ணிக்கையை அமைக்கவும்", "@activitiesToUnlockTopicTitle": { @@ -12147,5 +10964,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "சரியான சொல் வரையறை பயிற்சி", + "constructUseIncLMDesc": "தவறான சொல் வரையறை பயிற்சி", + "constructUseCorLADesc": "சரியான சொல் ஒலிப்பதிவு பயிற்சி", + "constructUseIncLADesc": "தவறான சொல் ஒலிப்பதிவு பயிற்சி", + "constructUseBonus": "சொல் பயிற்சியின் போது போனஸ்", + "practiceVocab": "சொற்களை பயிற்சி செய்யுங்கள்", + "selectMeaning": "அர்த்தத்தை தேர்ந்தெடுக்கவும்", + "selectAudio": "ஒலியை தேர்ந்தெடுக்கவும்", + "congratulations": "வாழ்த்துகள்!", + "anotherRound": "மற்றொரு சுற்று", + "noActivityRequest": "தற்போதைய செயல்பாட்டுக்கான கோரிக்கை இல்லை.", + "quit": "விலகுங்கள்", + "congratulationsYouveCompletedPractice": "வாழ்த்துகள்! நீங்கள் பயிற்சி அமர்வை முடித்துவிட்டீர்கள்.", + "mustHave10Words": "நீங்கள் பயிற்சிக்காக குறைந்தது 10 சொற்களை வைத்திருக்க வேண்டும். மேலும் கண்டுபிடிக்க நண்பருடன் அல்லது பாஙோ பாட்டுடன் பேச முயற்சிக்கவும்!", + "botSettings": "பாடல் அமைப்புகள்", + "activitySettingsOverrideWarning": "செயல்பாட்டு திட்டத்தால் நிர்ணயிக்கப்பட்ட மொழி மற்றும் மொழி நிலை", + "voice": "குரல்", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index 612bedbcd..64aa04147 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -787,28 +787,16 @@ "commandHint_logoutall": "అన్ని క్రియాశీల పరికరాలను లాగౌట్ చేయండి", "displayNavigationRail": "మొబైల్‌పై నావిగేషన్ రైలు చూపించండి", "customReaction": "అనుకూల ప్రతిక్రియ", - "accountInformation": "ఖాతా సమాచారం", - "addGroupDescription": "చాట్ వివరణను జోడించండి", - "addNewFriend": "కొత్త స్నేహితుని జోడించండి", - "alreadyHaveAnAccount": "ఇప్పటికే ఖాతా ఉందా?", - "createNewGroup": "కొత్త చాట్ సృష్టించండి", - "editChatPermissions": "చాట్ అనుమతులను సవరించండి", "ignore": "అడ్డుకోండి", "ignoredUsers": "అడ్డుకున్న వినియోగదారులు", "writeAMessageLangCodes": "{l1} లేదా {l2}లో టైప్ చేయండి...", "requests": "అభ్యర్థనలు", - "allCorrect": "అది నేను చెప్పే విధానం! బాగుంది!", - "newWayAllGood": "అది నేను చెప్పే విధానం కాదు కానీ ఇది బాగుంది!", - "othersAreBetter": "హ్మ్, అది చెప్పడానికి మరింత మంచి మార్గం ఉండవచ్చు.", "holdForInfo": "పద సమాచారం కోసం క్లిక్ చేసి ఉంచండి.", "greenFeedback": "అది నేను పెట్టేది!", "yellowFeedback": "హ్మ్, మీరు అది ప్రయత్నించవచ్చు మరియు పనిచేస్తుందో చూడండి! ఈ పదాన్ని ఉపయోగించడానికి, దాన్ని మళ్లీ క్లిక్ చేయండి.", "redFeedback": "అది సరైనది అనుకుంటున్నాను కాదు...", "itInstructionsTitle": "నేను మీకు అనువాదంలో సహాయం చేయగలను!", "itInstructionsBody": "పద సమాచారం కోసం ఎంపికలను క్లిక్ చేసి ఉంచవచ్చు.", - "oneday": "గత 24 గంటలు", - "oneweek": "గత 7 రోజులు", - "onemonth": "గత నెల", "gaTooltip": "వ్యాకరణ సహాయంతో L2 ఉపయోగించండి", "taTooltip": "అనువాద సహాయంతో L2 ఉపయోగించండి", "unTooltip": "ఇతర", @@ -818,58 +806,27 @@ "interactiveTranslatorAllowed": "విద్యార్థి ఎంపిక", "interactiveTranslatorRequired": "అవసరం", "notYetSet": "ఇప్పటికే సెట్ చేయలేదు", - "myLearning": "నా విశ్లేషణలు", "waTooltip": "సహాయం లేకుండా L2 ఉపయోగం", - "changeDateRange": "తేదీ పరిధిని మార్చండి", - "classDescription": "వివరణ", - "addStudents": "లింక్ లేదా కోడ్ ద్వారా వినియోగదారులను ఆహ్వానించండి", - "copyClassLink": "ఆహ్వాన లింక్ కాపీ చేయండి", - "copyClassCode": "ఆహ్వాన కోడ్ కాపీ చేయండి", - "inviteStudentByUserName": "వినియోగదారు పేరుతో విద్యార్థులను ఆహ్వానించండి", "languageSettings": "భాష సెట్టింగులు", "interactiveTranslator": "అనువాద సహాయం", - "shareVideo": "వీడియోను పంచుకోండి", - "shareVideoDesc": "విద్యార్థులు చాట్‌లో వీడియోలను పంచుకోవడానికి దీన్ని ఆన్ చేయండి.", - "shareFiles": "ఫైళ్లను పంచుకోండి", - "selectLanguageLevel": "భాష స్థాయిని ఎంచుకోండి", "noIdenticalLanguages": "దయచేసి వేర్వేరు బేస్ మరియు టార్గెట్ భాషలను ఎంచుకోండి", - "iWantALanguagePartnerFrom": "అనుకుంటున్నాను:", - "worldWide": "ప్రపంచవ్యాప్తంగా", - "noResults": "ఫలితాలు లేవు! మీ శోధనను విస్తరించండి.", "searchBy": "దేశం మరియు భాషల ద్వారా శోధించండి", - "iWantAConversationPartner": "నేను సంభాషణ భాగస్వామిని కోరుకుంటున్నాను", - "iWantALanguagePartnerWhoSpeaks": "మాట్లాడేవారు:", - "iWantALanguagePartnerWhoIsLearning": "శిక్షణ పొందుతున్నవారు:", "joinWithClassCode": "కోర్సులో చేరండి", - "joinWithClassCodeHint": "ఆహ్వాన కోడ్‌ను నమోదు చేయండి", - "languageLevelPreA1": "నిజమైన ప్రారంభికుడు (Pre A1)", - "languageLevelA1": "ప్రారంభికుడు (A1)", - "languageLevelA2": "ప్రాథమిక (A2)", - "languageLevelB1": "మధ్యస్థ (B1)", - "languageLevelB2": "అపురూప మధ్యస్థ (B2)", - "languageLevelC1": "అధిక స్థాయి (C1)", - "languageLevelC2": "నైపుణ్యము (C2)", + "languageLevelPreA1": "నవీన్ తక్కువ (ప్రి A1)", + "languageLevelA1": "నవీన్ మిడ్ (A1)", + "languageLevelA2": "ప్రారంభం ఉన్నత (A2)", + "languageLevelB1": "మధ్యస్థ మిడ్ (B1)", + "languageLevelB2": "అధిక నిమ్న (B2)", + "languageLevelC1": "అధిక మిడ్ (C1)", + "languageLevelC2": "ఉన్నత (C2)", "changeTheNameOfTheClass": "పేరు మార్చండి", "changeTheNameOfTheChat": "చాట్ పేరును మార్చండి", - "askPangeaBot": "పాంజియా బాట్‌ను ప్రశ్నించండి, సందర్భానుసార వివరణ కోసం.", "sorryNoResults": "క్షమించండి, ఫలితాలు లేవు.", "ignoreInThisText": "అవగలిగే", - "helpMeTranslate": "అవును!", - "needsItShortMessage": "లక్ష్యానికి బాహ్యంగా", "needsItMessage": "అంచనా వేయండి, అది {targetLanguage} కాదు! మీరు అనువాదంలో సహాయం కావాలా?", - "needsIgcMessage": "ఈ సందేశంలో వ్యాకరణ దోషం ఉంది.", - "tokenTranslationTitle": "ఒక పదం మీ బేస్ భాషలో ఉంది.", - "spanTranslationDesc": "క్రింద సంభావ్య అనువాదాలను చూడండి.", - "spanTranslationTitle": "కొన్ని పదాలు మీ బేస్ భాషలో ఉన్నాయి.", - "l1SpanAndGrammarTitle": "లక్ష్య భాషకు బాహ్యంగా", - "l1SpanAndGrammarDesc": "ఇది మీ బేస్ భాషలో ఉండవచ్చు లేదా ఇది వ్యాకరణ దోషం కావచ్చు.", - "otherTitle": "మీకు దోషం ఉంది.", - "otherDesc": "క్రింద సంభావ్య సవరింపులను చూడండి.", "countryInformation": "నా దేశం", - "myLanguages": "నా బేస్ మరియు లక్ష్య భాషలు", "targetLanguage": "లక్ష్య భాష", "sourceLanguage": "బేస్ భాష", - "languagesISpeak": "నేను మాట్లాడే భాషలు", "updateLanguage": "నా భాషలు", "whatLanguageYouWantToLearn": "మీరు ఏ భాష నేర్చుకోవాలనుకుంటున్నారు?", "whatIsYourBaseLanguage": "మీ ప్రాథమిక భాష ఏమిటి?", @@ -884,13 +841,8 @@ "errorDisableLanguageAssistanceUserDesc": "అనువాద సహాయం మరియు వ్యాకరణ సహాయం సెట్టింగులను నవీకరించడానికి ఇక్కడ క్లిక్ చేయండి", "errorDisableITClassDesc": "ఈ చాట్ ఉన్న కోర్సుకు అనువాద సహాయం ఆఫ్ చేయబడింది.", "errorDisableIGCClassDesc": "ఈ చాట్ ఉన్న కోర్సుకు వ్యాకరణ సహాయం ఆఫ్ చేయబడింది.", - "itIsDisabled": "ఇంటరాక్టివ్ అనువాదం ఆఫ్ చేయబడింది", - "igcIsDisabled": "ఇంటరాక్టివ్ వ్యాకరణ తనిఖీ ఆఫ్ చేయబడింది", - "goToLearningSettings": "శిక్షణ సెట్టింగులకు వెళ్లండి", "error405Title": "భాషలు సెట్ చేయబడలేదు", "error405Desc": "దయచేసి మీ భాషలను ప్రధాన మెనూ > శిక్షణ సెట్టింగుల్లో సెట్ చేయండి.", - "loginOrSignup": "లాగిన్ చేయండి", - "iAgreeToThe": "నేను అంగీకరిస్తున్నాను", "termsAndConditions": "నిబంధనలు మరియు షరతులు", "andCertifyIAmAtLeast13YearsOfAge": "మరియు నేను కనీసం 16 సంవత్సరాల వయస్సు ఉన్నానని ధృవీకరిస్తున్నాను.", "error502504Title": "వావ్, ఆన్‌లైన్‌లో చాలా మంది విద్యార్థులు ఉన్నారు!", @@ -898,40 +850,21 @@ "error404Title": "అనువాద లోపం!", "error404Desc": "పాంజియా బాట్ దాన్ని ఎలా అనువదించాలో తెలియదు...", "errorPleaseRefresh": "మేము దీని గురించి చూస్తున్నాము! దయచేసి పేజీని రిఫ్రెష్ చేసి మళ్లీ ప్రయత్నించండి.", - "toggleIT": "ఇంటరాక్టివ్ అనువాదం", - "toggleIGC": "ఇంటరాక్టివ్ వ్యాకరణ తనిఖీ", - "toggleToolSettingsDescription": "ఇక్కడ మీరు మీ వ్యక్తిగత భాష సాధనాల సెట్టింగులను టోగుల్ చేయవచ్చు.", "connectedToStaging": "స్టేజింగ్‌కు కనెక్ట్ అయ్యింది", "learningSettings": "శిక్షణ సెట్టింగులు", - "sendVoiceNotes": "వాయిస్ నోట్లు పంపండి", - "sendVoiceNotesDesc": "వాయిస్ నోట్లు చాట్‌లో పంపడానికి ఇది ఆన్ చేయండి.", - "chatTopic": "చాట్ విషయం", - "chatTopicDesc": "చాట్ విషయాన్ని సెట్ చేయండి", - "inviteStudentByUserNameDesc": "మీ విద్యార్థికి ఇప్పటికే ఖాతా ఉంటే, మీరు వారిని శోధించవచ్చు.", "participants": "పాల్గొనేవారు", - "almostPerfect": "అది సరైనట్లే! నేను చెప్పేది ఇది ఉండేది.", - "prettyGood": "చాలా బాగుంది! నేను చెప్పేది ఇది ఉండేది.", - "letMeThink": "హ్మ్, మీరు ఎలా చేసారో చూద్దాం!", "clickMessageTitle": "సహాయం కావాలా?", "clickMessageBody": "అనువాదం, ప్లేబ్యాక్ మరియు మరిన్ని వంటి భాషా సాధనాల కోసం సందేశాన్ని క్లిక్ చేయండి!", - "understandingMessagesTitle": "వ్యాఖ్యానాలు మరియు అనువాదాలు!", - "understandingMessagesBody": "వ్యాఖ్యానాల కోసం అండర్‌లైన్ చేసిన పదాలను క్లిక్ చేయండి. సందేశ ఎంపికలతో అనువదించండి (ఎడమ పై భాగం).", "allDone": "అన్నీ పూర్తయ్యాయి!", "vocab": "పదకోశం", "low": "ఈ పదాలను వినియోగదారు అర్థం చేసుకోకపోవడాన్ని మనకు ఆధారాలు ఉన్నాయి.", "medium": "ఈ పదాలు ఉపయోగించబడ్డాయి. పదాలు పూర్తిగా అర్థం చేసుకున్నారా లేదా అనేది స్పష్టంగా లేదు.", "high": "ఈ పదాలను వినియోగదారు అర్థం చేసుకున్నాడని మనకు ఆధారాలు ఉన్నాయి.", - "unknownProficiency": "ఈ పదాలు పాంజియా చాట్‌లో ఉపయోగించబడలేదు.", - "changeView": "మాట్లాడే దృశ్యాలను మార్చండి.", - "clearAll": "అన్ని పదాలను క్లియర్ చేయాలా?", - "generateVocabulary": "శీర్షిక మరియు వివరణ నుండి పదకోశాన్ని రూపొందించండి", - "generatePrompts": "ప్రాంప్ట్‌లను రూపొందించండి", "subscribe": "చందా తీసుకోండి", "getAccess": "ఇప్పుడు చందా తీసుకోండి!", "subscriptionDesc": "మెసేజింగ్ ఉచితం! ఇంటరాక్టివ్ అనువాదం, వ్యాకరణ తనిఖీ మరియు అభ్యాస విశ్లేషణలను అన్లాక్ చేయడానికి చందా తీసుకోండి.", "subscriptionManagement": "చందా నిర్వహణ", "currentSubscription": "ప్రస్తుతం ఉన్న చందా", - "changeSubscription": "మీ చందాను మార్చండి", "cancelSubscription": "మీ సభ్యత్వాన్ని రద్దు చేయండి", "selectYourPlan": "మీ ప్లాన్‌ను ఎంచుకోండి", "subsciptionPlatformTooltip": "మీ సభ్యత్వ ప్లాన్‌ను నిర్వహించడానికి మీ అసలు పరికరంలో లాగిన్ అవ్వండి", @@ -940,9 +873,6 @@ "paymentHistory": "చెల్లింపు చరిత్ర", "emptyChatDownloadWarning": "ఖాళీ చాట్‌ను డౌన్లోడ్ చేయలేరు", "update": "నవీకరణ", - "updateDesc": "మీరు ఇప్పుడు ఈ యాప్‌ను {localVersion} నుండి {storeVersion} కు నవీకరించవచ్చు", - "maybeLater": "కానీ తర్వాత", - "mainMenu": "ప్రధాన మెనూ", "toggleImmersionMode": "అవగాహన మోడ్", "toggleImmersionModeDesc": "సక్రియం చేస్తే, అన్ని సందేశాలు మీ లక్ష్య భాషలో ప్రదర్శించబడతాయి. ఈ సెట్టింగ్ భాష మార్పిడి సమయంలో అత్యంత ఉపయోగకరంగా ఉంటుంది.", "itToggleDescription": "ఈ భాషా అభ్యాస సాధనం మీ బేస్ భాషలోని పదాలను గుర్తించి, వాటిని మీ లక్ష్య భాషకు అనువదించడంలో సహాయపడుతుంది. అరుదుగా, AI అనువాద లోపాలు చేయవచ్చు.", @@ -957,212 +887,13 @@ "definitionsToolDescription": "సక్రియం చేసినప్పుడు, నీలం రంగులో అండర్‌లైన్ చేయబడిన పదాలను నిర్వచనాల కోసం క్లిక్ చేయవచ్చు. నిర్వచనాలను పొందడానికి సందేశాలను క్లిక్ చేయండి.", "translationsToolDescrption": "సక్రియం చేసినప్పుడు, సందేశాన్ని క్లిక్ చేసి అనువాద చిహ్నాన్ని నొక్కండి, మీ ప్రాథమిక భాషలో సందేశాన్ని చూడండి.", "welcomeBack": "మళ్లీ స్వాగతం! మీరు 2023-2024 పైలట్‌లో భాగమైతే, మీ ప్రత్యేక పైలట్ సబ్‌స్క్రిప్షన్ కోసం మమ్మల్ని సంప్రదించండి. మీరు టీచర్ అయితే (లేదా మీ సంస్థ తరగతి కోసం లైసెన్సులు కొనుగోలు చేసిందైతే), మీ టీచర్ సబ్‌స్క్రిప్షన్ కోసం మమ్మల్ని సంప్రదించండి.", - "kickAllStudents": "అన్ని విద్యార్థులను తొలగించండి", - "kickAllStudentsConfirmation": "మీరు నిజంగా అన్ని విద్యార్థులను తొలగించాలనుకుంటున్నారా?", - "inviteAllStudents": "అన్ని విద్యార్థులను ఆహ్వానించండి", - "inviteAllStudentsConfirmation": "మీరు నిజంగా అన్ని విద్యార్థులను ఆహ్వానించాలనుకుంటున్నారా?", - "inviteUsersFromPangea": "అడ్మిన్లను జోడించండి", - "redeemPromoCode": "ప్రచార కోడ్‌ను రీడీమ్ చేయండి", - "enterPromoCode": "ప్రచార కోడ్‌ను నమోదు చేయండి", "downloadTxtFile": "టెక్స్ట్ ఫైల్ డౌన్లోడ్ చేయండి", "downloadCSVFile": "CSV ఫైల్ డౌన్లోడ్ చేయండి", "promotionalSubscriptionDesc": "మీకు ప్రస్తుతం జీవితకాల ప్రచార సబ్‌స్క్రిప్షన్ ఉంది. మీ సబ్‌స్క్రిప్షన్ మార్చడానికి support@pangea.chat కు సందేశం పంపండి.", "originalSubscriptionPlatform": "{purchasePlatform} ద్వారా కొనుగోలు చేసిన సబ్‌స్క్రిప్షన్", "oneWeekTrial": "ఒక వారపు ట్రయల్", "downloadXLSXFile": "ఎక్సెల్ ఫైల్ డౌన్లోడ్ చేయండి", - "abDisplayName": "అబఖాజ్", - "aaDisplayName": "ఆఫార్", - "afDisplayName": "ఆఫ్రికాన్స్", - "akDisplayName": "అకాన్", - "sqDisplayName": "అల్బేనియన్", - "amDisplayName": "అమహారిక్", - "arDisplayName": "అరబిక్", - "anDisplayName": "అరగోనీస్", - "hyDisplayName": "ఆర్మేనియన్", - "asDisplayName": "అస్సామీస్", - "avDisplayName": "అవారిక్", - "aeDisplayName": "అవెస్టన్", - "ayDisplayName": "అయమారా", - "azDisplayName": "అజర్బైజానీ", - "bmDisplayName": "బాంబారా", - "baDisplayName": "బాష్కిర్", - "euDisplayName": "బాస్క్", - "beDisplayName": "బెలారుషియన్", - "bnDisplayName": "బంగాలీ", - "bhDisplayName": "బిహారీ", - "biDisplayName": "బిస్లామా", - "bsDisplayName": "బోస్నియన్", - "brDisplayName": "బ్రెటన్", - "bgDisplayName": "బల్గేరియన్", - "myDisplayName": "బర్మీస్", - "caDisplayName": "కాటలాన్, వాలెన్షియన్", - "chDisplayName": "చమొర్రో", - "ceDisplayName": "చెచెన్", - "nyDisplayName": "చిచేవా, చెవా, న్యాంజా", - "zhDisplayName": "చైనీస్", - "cvDisplayName": "చువాష్", - "kwDisplayName": "కొర్నిష్", - "coDisplayName": "కార్సికన్", - "crDisplayName": "క్రీ", - "hrDisplayName": "క్రొయేషియన్", - "csDisplayName": "చెక్", - "daDisplayName": "డానిష్", - "dvDisplayName": "డివేహి; ధివేహి; మాల్దీవియన్;", - "nlDisplayName": "డచ్", - "enDisplayName": "ఆంగ్లం", - "eoDisplayName": "ఎస్పెరాంటో", - "etDisplayName": "ఎస్టోనియన్", - "eeDisplayName": "ఈవే", - "foDisplayName": "ఫారోయీస్", - "fjDisplayName": "ఫిజియన్", - "fiDisplayName": "ఫిన్నిష్", - "frDisplayName": "ఫ్రెంచ్", - "ffDisplayName": "ఫులా; ఫులాహ్; పులార; పులార్", - "glDisplayName": "గాలిసియన్", - "kaDisplayName": "జార్జియన్", - "deDisplayName": "జర్మన్", - "elDisplayName": "గ్రీక్, ఆధునిక", - "gnDisplayName": "గురానీ", - "guDisplayName": "గుజరాతీ", - "htDisplayName": "హైటియన్, హైటియన్ క్రియోల్", - "haDisplayName": "హౌసా", - "heDisplayName": "హిబ్రూ (ఆధునిక)", - "hzDisplayName": "హెరెరో", - "hiDisplayName": "హిందీ", - "hoDisplayName": "హిరి మోటు", - "huDisplayName": "హంగేరియన్", - "iaDisplayName": "ఇంటర్లింగ్వా", - "idDisplayName": "ఇండోనేషియన్", - "ieDisplayName": "ఇంటర్లింగ్యూ", - "gaDisplayName": "అయిరిష్", - "igDisplayName": "ఇగ్బో", - "ikDisplayName": "ఇనుపియాక్", - "ioDisplayName": "ఇడో", - "isDisplayName": "ఐస్‌లాండ్ భాష", - "itDisplayName": "ఇటాలియన్", - "iuDisplayName": "ఇనుక్టిటుట్", - "jaDisplayName": "జపనీస్", - "jvDisplayName": "జావనీస్", - "klDisplayName": "కలాలిసుట్, గ్రీన్లాండ్ భాష", - "knDisplayName": "కన్నడ", - "krDisplayName": "కనురి", - "ksDisplayName": "కశ్మీరీ", - "kkDisplayName": "కజఖ్", - "kmDisplayName": "ఖ్మేర్", - "kiDisplayName": "కికుయు, గికుయు", - "rwDisplayName": "కిన్యార్వాండా", - "kyDisplayName": "కిర్గిజ్, కిర్గిజ్", - "kvDisplayName": "కొమి", - "kgDisplayName": "కొంగో", - "koDisplayName": "కొరియన్", - "kuDisplayName": "కుర్దిష్", - "kjDisplayName": "క్వాన్యామా, క్వాన్యామా", - "laDisplayName": "లాటిన్", - "lbDisplayName": "లక్సంబర్గిష్, లెట్జుబుర్గ్", - "lgDisplayName": "లుగాండా", - "liDisplayName": "లింబుర్గిష్, లింబుర్బన్, లింబర్గర్", - "lnDisplayName": "లింగాలా", - "loDisplayName": "లావో", - "ltDisplayName": "లిథువేనియన్", - "luDisplayName": "లూబా-కాటంగా", - "lvDisplayName": "లాట్వియన్", - "gvDisplayName": "మ్యానక్స్", - "mkDisplayName": "మాసెడోనియన్", - "mgDisplayName": "మాలగాసీ", - "msDisplayName": "మలయ్", - "mlDisplayName": "మలయాళం", - "mtDisplayName": "మాల్టీస్", - "miDisplayName": "మావోరి", - "mrDisplayName": "మరాఠీ (మారాఢీ)", - "mhDisplayName": "మార్షలీస్", - "mnDisplayName": "మంగోలియన్", - "naDisplayName": "నౌరూ", - "nvDisplayName": "నవాజో, నవాహో", - "nbDisplayName": "నార్వేజియన్ బొక్మాల్", - "ndDisplayName": "ఉత్తర న్డెబెలే", - "neDisplayName": "నేపాలీ", - "ngDisplayName": "నోడొంగా", - "nnDisplayName": "నార్వేజియన్ నినోర్స్క్", - "noDisplayName": "నార్వేజియన్", - "iiDisplayName": "నూసూ", - "nrDisplayName": "దక్షిణ న్డెబెలే", - "ocDisplayName": "ఆక్సిటాన్", - "ojDisplayName": "ఒజిబ్వే, ఒజిబ్వా", - "cuDisplayName": "పాత చర్చి స్లావోనిక్, చర్చి స్లావిక్, చర్చి స్లావోనిక్, పాత బల్గేరియన్, పాత స్లావోనిక్", - "omDisplayName": "ఒరోమో", - "orDisplayName": "ఒరియా", - "osDisplayName": "అస్సెటియన్, అస్సెటిక్", - "paDisplayName": "పంజాబీ, పంజాబీ", - "piDisplayName": "పాళీ", - "faDisplayName": "పర్షియన్", - "plDisplayName": "పోలిష్", - "psDisplayName": "పాష్టో, పుష్టో", - "ptDisplayName": "పోర్చుగీసు", - "quDisplayName": "క్వెచువా", - "rmDisplayName": "రోమాన్ష్", - "rnDisplayName": "కిరుండి", - "roDisplayName": "రోమేనియన్, మోల్డావియన్, మోల్డోవన్", - "ruDisplayName": "రష్యన్", - "saDisplayName": "సంస్కృతం (సంస్కృత)", - "scDisplayName": "సార్డినియన్", - "sdDisplayName": "సింధీ", - "seDisplayName": "ఉత్తర సామి", - "smDisplayName": "సమోఅన్", - "sgDisplayName": "సాంగో", - "srDisplayName": "సెర్బియన్", - "gdDisplayName": "స్కాటిష్ గేలిక్, గేలిక్", - "snDisplayName": "షోనా", - "siDisplayName": "සිංහල, සිංහල", - "skDisplayName": "ස්ලෝවක්", - "slDisplayName": "ස්ලෝවීන", - "soDisplayName": "සෝමාලි", - "stDisplayName": "දකුණු සොතෝ", - "esDisplayName": "ස්පාඤ්ඤ", - "suDisplayName": "සුන්දනිස්", - "swDisplayName": "ස්වහීලි", - "ssDisplayName": "ස්වාටි", - "svDisplayName": "ස්වීඩන්", - "taDisplayName": "තමල්", - "teDisplayName": "తెలుగు", - "tgDisplayName": "තাজিক", - "thDisplayName": "තායි", - "tiDisplayName": "ටිග්‍රිනය", - "boDisplayName": "තීබැති සම්මත, තීබැති, මධ්‍යම", - "tkDisplayName": "ටර්ක්මන්", - "tlDisplayName": "ටගාලෝග්", - "tnDisplayName": "ට්වනා", - "toDisplayName": "ටොංගා (ටොංගා දූපත්)", - "trDisplayName": "టర్కిష్", - "tsDisplayName": "Tsonga", - "ttDisplayName": "టాటర్", - "twDisplayName": "ట్వీ", - "tyDisplayName": "టాహితియన్", - "ugDisplayName": "ఉయ్గుర్, ఉయ్గుర్", - "ukDisplayName": "ఉక్రేనియన్", - "urDisplayName": "ఉర్దూ", - "uzDisplayName": "ఉజ్బెక్", - "veDisplayName": "వెండా", - "viDisplayName": "వియత్నామీస్", - "voDisplayName": "వోలాపుక్", - "waDisplayName": "వాలూన్", - "cyDisplayName": "వెల్ష్", - "woDisplayName": "వోలఫ్", - "fyDisplayName": "పశ్చిమ ఫ్రిసియన్", - "xhDisplayName": "ఖోసా", - "yiDisplayName": "యిడిష్", - "yoDisplayName": "యోరుబా", - "zaDisplayName": "జువాంగ్, చువాంగ్", "unkDisplayName": "అజ్ఞాతం", - "zuDisplayName": "జులూ", - "hawDisplayName": "హవాయియన్", - "hmnDisplayName": "హ్మాంగ్", - "multiDisplayName": "బహుళ", - "cebDisplayName": "సేబూఅనో", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "హిబ్రూ", - "jwDisplayName": "జావనీస్", - "moDisplayName": "మోల్డేవియన్", - "shDisplayName": "సెర్బో-క్రొయేషియన్", "wwCountryDisplayName": "ప్రపంచవ్యాప్తంగా", "afCountryDisplayName": "అఫ్గానిస్తాన్", "axCountryDisplayName": "ఆలాండ్ దీవులు", @@ -1410,41 +1141,25 @@ "yeCountryDisplayName": "యెమెన్", "zmCountryDisplayName": "జాంబియా", "zwCountryDisplayName": "జింబాబ్వే", - "pay": "చెల్లించండి", - "allPrivateChats": "నేరుగా చాట్లు", - "unknownPrivateChat": "అజ్ఞాత ప్రైవేట్ చాట్", + "pay": "Checkout", "invitedToSpace": "{user} మీరు కోర్సులో చేరేందుకు ఆహ్వానించారు: {space}! మీరు అంగీకరించాలనుకుంటున్నారా?", - "declinedInvitation": "ఆహ్వానాన్ని తిరస్కరించారు", - "acceptedInvitation": "ఆహ్వానాన్ని అంగీకరించారు", "youreInvited": "📩 మీరు ఆహ్వానించబడ్డారు!", "invitedToChat": "{user} మీరు చాట్‌లో చేరేందుకు ఆహ్వానించారు: {name}! మీరు అంగీకరించాలనుకుంటున్నారా?", "monthlySubscription": "నెలవారీ", "yearlySubscription": "వార్షిక", "defaultSubscription": "పాంజియా చాట్ సబ్‌స్క్రిప్షన్", "freeTrial": "ఉచిత ట్రయల్", - "grammarAnalytics": "వ్యాకరణ విశ్లేషణలు", "total": "మొత్తం: ", "noDataFound": "డేటా కనుగొనబడలేదు", - "promoSubscriptionExpirationDesc": "మీ ప్రస్తుత సబ్‌స్క్రిప్షన్ ప్రమోషనల్‌గా ఉంది మరియు {expiration} నాటికి ముగుస్తుంది. సాయం కోసం support@pangea.chat కు సందేశం పంపండి.", - "emptyChatNameWarning": "దయచేసి ఈ చాట్‌కు పేరు ఇవ్వండి", "blurMeansTranslateTitle": "సందేశం ముదిరిన కారణం ఏమిటి?", "blurMeansTranslateBody": "ఇమర్షన్ మోడ్ ఆన్ ఉన్నప్పుడు, మీ బేస్ భాషలో పంపిన సందేశాలు ముదిరి ఉంటాయి, Pangea బాట్ వాటిని మీ లక్ష్య భాషగా అనువదిస్తుంది. ఇమర్షన్ మోడ్‌ను వ్యక్తిగత మరియు కోర్సు సెట్టింగ్స్‌లో టోగుల్ చేయవచ్చు.", - "someErrorTitle": "హ్మ్, ఏదో సరైనది కాదు", - "someErrorBody": "అది ఒక లోపం కావచ్చు లేదా మీ బేస్ భాషలో ఏదో తప్పు ఉండవచ్చు.", "bestCorrectionFeedback": "అది సరిగ్గా ఉంది!", "distractorFeedback": "అది సరిగ్గా కాదు.", "bestAnswerFeedback": "అది సరైనది!", "definitionDefaultPrompt": "ఈ పదం అంటే ఏమిటి?", "practiceDefaultPrompt": "అత్యుత్తమ సమాధానం ఏది?", "correctionDefaultPrompt": "అత్యుత్తమ ప్రత్యామ్నాయం ఏది?", - "itStartDefaultPrompt": "అనువాదంలో సహాయం కావాలా?", - "lockedChatWarning": "🔒 ఈ చాట్ లాక్ చేయబడింది", - "lockChat": "చాట్ లాక్ చేయండి", - "suggestToChat": "ఈ చాట్‌ను సూచించండి", - "suggestToChatDesc": "సూచించబడిన చాట్‌లు చాట్ జాబితాల్లో కనిపిస్తాయి", "acceptSelection": "సవరణను అంగీకరించండి", - "acceptSelectionAnyway": "అది ఏమైనా ఉపయోగించండి", - "makingActivity": "చర్య చేయడం", "why": "ఎందుకు?", "definition": "వ్యాఖ్యానం", "exampleSentence": "ఉదాహరణ వాక్యం", @@ -1452,128 +1167,55 @@ "reportMessageTitle": "{reportingUserId} చాట్ {roomName}లో {reportedUserId} నుండి సందేశాన్ని నివేదించారు", "reportMessageBody": "సందేశం: {reportedMessage}\nకారణం: {reason}", "noTeachersFound": "నివేదించడానికి టీచర్లు కనుగొనబడలేదు", - "viewArchive": "ఆర్కైవ్‌ను చూడండి", "trialExpiration": "మీ ఉచిత ట్రయల్ {expiration} నాటికి ముగుస్తుంది", "freeTrialDesc": "కొత్త వినియోగదారులు పాంజియా చాట్ యొక్క ఒక వారపు ఉచిత ట్రయల్ పొందుతారు", "activateTrial": "ఉచిత 7-రోజుల ట్రయల్", "successfullySubscribed": "మీరు విజయవంతంగా సభ్యత్వం తీసుకున్నారు!", "clickToManageSubscription": "మీ సభ్యత్వాన్ని నిర్వహించడానికి ఇక్కడ క్లిక్ చేయండి.", - "errorGettingAudio": "ఆడియో పొందడంలో లోపం. దయచేసి రిఫ్రెష్ చేసి మళ్లీ ప్రయత్నించండి.", "signUp": "నమోదు చేయండి", "pleaseChooseAtLeastChars": "దయచేసి కనీసం {min} అక్షరాలు ఎంచుకోండి.", "noEmailWarning": "దయచేసి సరైన ఇమెయిల్ చిరునామా నమోదు చేయండి. లేకపోతే మీరు మీ పాస్వర్డ్‌ను రీసెట్ చేయలేరు. మీరు చేయాలనుకుంటే, కొనసాగడానికి మళ్లీ బటన్‌పై ట్యాప్ చేయండి.", "pleaseEnterValidEmail": "దయచేసి సరైన ఇమెయిల్ చిరునామా నమోదు చేయండి.", "pleaseChooseAUsername": "దయచేసి యూజర్‌నేమ్ ఎంచుకోండి", - "chooseAUsername": "యూజర్‌నేమ్ ఎంచుకోండి", "define": "నిర్వచించండి", "listen": "వినండి", - "addConversationBot": "సంభాషణ బాట్‌ను చేర్చండి", - "addConversationBotDesc": "ఈ చాట్‌లో బాట్‌ను చేర్చండి", - "convoBotSettingsDescription": "సంభాషణ విషయాన్ని మరియు కష్టం స్థాయిని సవరించండి", - "enterAConversationTopic": "సంభాషణ విషయాన్ని నమోదు చేయండి", - "conversationTopic": "సంభాషణ విషయం", - "enableModeration": "మార్గదర్శకత్వాన్ని సక్రియం చేయండి", - "enableModerationDesc": "పైగా సందేశాలను పంపేముందు స్వయంచాలక మార్గదర్శకత్వాన్ని సక్రియం చేయండి", - "conversationLanguageLevel": "ఈ సంభాషణ యొక్క భాషా స్థాయి ఏమిటి?", - "showDefinition": "వ్యాఖ్యను చూపించు", - "subscriptionPopupTitle": "ఈ వాక్యం వ్యాకరణ దోషం ఉండవచ్చు...", - "subscriptionPopupDesc": "అనువాదం మరియు వ్యాకరణ సవరణలను అన్లాక్ చేయడానికి ఈ రోజు సభ్యత్వం పొందండి!", - "seeOptions": "అప్షన్లను చూడండి", - "continuedWithoutSubscription": "సభ్యత్వం లేకుండా కొనసాగించండి", "trialPeriodExpired": "మీ ట్రయల్ కాలం ముగిసింది", - "selectToDefine": "ఏదైనా పదాన్ని క్లిక్ చేసి దాని నిర్వచనాన్ని చూడండి!", "translations": "అనువాదాలు", "messageAudio": "సందేశ ఆడియో", "definitions": "నిర్వచనాలు", "subscribedToUnlockTools": "ఇంటరాక్టివ్ అనువాదం మరియు వ్యాకరణ తనిఖీ, ఆడియో ప్లేబ్యాక్, వ్యక్తిగత అభ్యాస కార్యకలాపాలు, మరియు అభ్యాస విశ్లేషణలను అన్లాక్ చేయడానికి సభ్యత్వం పొందండి!", "translationTooltip": "అనువాదం", - "audioTooltip": "ఆడియో ప్లే చేయండి", "speechToTextTooltip": "ట్రాన్స్క్రిప్ట్", - "certifyAge": "నేను {age} సంవత్సరాల వయస్సు దాటినవాడిని అని ధృవీకరిస్తున్నాను", "kickBotWarning": "పాంజియా బాట్‌ను తొలగించడం ఈ చాట్ నుండి సంభాషణ బాట్‌ను తీసివేస్తుంది.", - "joinToView": "వివరాలను చూడటానికి ఈ గదిలో చేరండి", "refresh": "పునఃప్రారంభించండి", - "autoPlayTitle": "ఆటో ప్లే సందేశాలు", - "autoPlayDesc": "సక్రియం చేసినప్పుడు, సందేశాల టెక్స్ట్-టు-స్పీచ్ ఆడియో స్వయంచాలకంగా ప్లే అవుతుంది.", "messageAnalytics": "సందేశ విశ్లేషణలు", "words": "పదాలు", "score": "అంకెలు", "accuracy": "ఖచ్చితత్వం", "points": "పాయింట్లు", "noPaymentInfo": "చెల్లింపు సమాచారం అవసరం లేదు!", - "conversationBotModeSelectDescription": "చాట్ కార్యకలాపం", - "conversationBotModeSelectOption_discussion": "చర్చ", - "conversationBotModeSelectOption_custom": "అనుకూలీకరించబడినది", - "conversationBotModeSelectOption_conversation": "సంభాషణ", - "conversationBotModeSelectOption_textAdventure": "పాఠ్య సాహసికుడు", - "conversationBotModeSelectOption_storyGame": "కథ గేమ్", - "conversationBotDiscussionZone_title": "చర్చ సెట్టింగులు", - "conversationBotDiscussionZone_discussionTopicLabel": "చర్చ విషయము", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "చర్చ విషయాన్ని సెట్ చేయండి", - "conversationBotDiscussionZone_discussionKeywordsLabel": "చర్చ కీలకపదాలు", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "చర్చ కీలకపదాలను సెట్ చేయండి", - "conversationBotDiscussionZone_discussionKeywordsHintText": "చర్చను మార్గనిర్దేశం చేయడానికి కీ వర్డ్ల జాబితా, కామా తో వేరు చేయండి", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "షెడ్యూల్ పై చర్చ ప్రాంప్ట్ పంపండి", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "చర్చ ప్రాంప్ట్ మధ్య గంటలు", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "ప్రతిక్రియపై స్పందించండి ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "చర్చ ప్రాంప్ట్ పంపడానికి ప్రతిక్రియ", - "conversationBotCustomZone_title": "అనుకూల సెట్టింగ్స్", - "conversationBotCustomZone_customSystemPromptLabel": "సిస్టమ్ ప్రాంప్ట్", - "conversationBotCustomZone_customSystemPromptPlaceholder": "అనుకూల సిస్టమ్ ప్రాంప్ట్ సెట్ చేయండి", - "conversationBotCustomZone_customSystemPromptEmptyError": "అనుకూల సిస్టమ్ ప్రాంప్ట్ లేనే లేదు", - "botConfig": "బాట్ మరియు కార్యకలాప సెట్టింగ్స్", - "botConfigNoPermissionTitle": "అనుమతి లేదు", - "botConfigNoPermissionMessage": "బాట్ కాన్ఫిగరేషన్ మార్చడానికి రూమ్ అడ్మిన్ తో సంప్రదించండి", - "addConversationBotDialogTitleInvite": "చర్చ బాట్ ఆహ్వానించడాన్ని నిర్ధారించండి", - "addConversationBotButtonInvite": "ఆహ్వానించండి", - "addConversationBotDialogInviteConfirmation": "ఆహ్వానించండి", - "addConversationBotButtonTitleRemove": "చర్చ బాట్ తొలగించడాన్ని నిర్ధారించండి", - "addConversationBotButtonRemove": "తొలగించండి", - "addConversationBotDialogRemoveConfirmation": "తొలగించండి", - "conversationBotConfigConfirmChange": "నిర్ధారించండి", - "conversationBotStatus": "బాట్ ఆహ్వానించండి", - "conversationBotTextAdventureZone_title": "పాఠ్య సాహసాలు", - "conversationBotTextAdventureZone_instructionLabel": "గేమ్ మాస్టర్ సూచనలు", - "conversationBotTextAdventureZone_instructionPlaceholder": "గేమ్ మాస్టర్ సూచనలు సెట్ చేయండి", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "గేమ్ మాస్టర్ సూచనలు లేవు", - "studentAnalyticsNotAvailable": "విద్యార్థుల డేటా ప్రస్తుతం అందుబాటులో లేదు", - "roomDataMissing": "మీ సభ్యురాలిగా లేని గదుల్లో కొంత డేటా లేమి ఉండవచ్చు.", "updatePhoneOS": "మీ డివైస్ యొక్క OS వెర్షన్‌ను నవీకరించాల్సి ఉండవచ్చు.", "wordsPerMinute": "నిమిషానికి పదాలు", "autoIGCToolName": "పాంజియా రాయడం సహాయాన్ని స్వయంచాలకంగా నడపండి", "autoIGCToolDescription": "నా సందేశాన్ని పంపేముందు స్వయంచాలకంగా పాంజియా చాట్ వ్యాకరణం మరియు అనువాద రాయడం సహాయాన్ని నడపండి.", - "runGrammarCorrection": "సందేశాన్ని తనిఖీ చేయండి", - "grammarCorrectionFailed": "పరిష్కరించాల్సిన సమస్యలు", - "grammarCorrectionComplete": "బాగుంది!", "tooltipInstructionsTitle": "అది ఏమిటో తెలియదా?", "tooltipInstructionsMobileBody": "టూల్‌టిప్‌లను చూడటానికి అంశాలను నొక్కి ఉంచండి.", "tooltipInstructionsBrowserBody": "టూల్‌టిప్‌లను చూడటానికి అంశాలపై హోవర్ చేయండి.", "chatCapacity": "చాట్ సామర్థ్యం", "roomFull": "ఈ గది ఇప్పటికే సామర్థ్యానికి చేరుకుంది.", - "topicNotSet": "విషయం సెట్ చేయబడలేదు.", - "chatCapacityNotSet": "ఈ చాట్‌కు సామర్థ్య పరిమితి లేదు.", "chatCapacityHasBeenChanged": "చాట్ సామర్థ్యం మార్చబడింది", "chatCapacitySetTooLow": "చాట్ సామర్థ్యం కనీసం {count} ఉండాలి.", "chatCapacityExplanation": "చాట్ సామర్థ్యం అనేది చాట్‌లో అనుమతించబడిన సభ్యుల సంఖ్యను పరిమితం చేస్తుంది.", - "chatExceedsCapacity": "ఈ చాట్ దాని సామర్థ్యాన్ని మించిపోయింది.", "tooManyRequest": "అధిక అభ్యర్థనలు, దయచేసి తర్వాత ప్రయత్నించండి.", "enterNumber": "దయచేసి మొత్తం సంఖ్య విలువను నమోదు చేయండి.", "buildTranslation": "పై ఎంపికల నుండి మీ అనువాదాన్ని నిర్మించండి", - "nonexistentSelection": "ఎంపిక ఇకపై ఉండదు.", - "changeAnalyticsLanguage": "అనాలిటిక్స్ భాషను మార్చండి", "practice": "అభ్యాసం", "noLanguagesSet": "ఏ భాషలు సెట్ చేయలేదు", - "noActivitiesFound": "ఇది ఇప్పటివరకు సరిపోతుంది! మరింత కోసం తర్వాత తిరిగి రండి.", - "hintTitle": "సూచన:", "speechToTextBody": "వాయిస్ సందేశాల కోసం, మీరు ట్రాన్స్క్రిప్ట్‌ను చూడవచ్చు అలాగే స్పీకర్ యొక్క పదాల ప్రతి నిమిషం స్కోర్‌ను.", "versionNotFound": "వర్షన్ కనుగొనబడలేదు", "fetchingVersion": "వర్షన్‌ను పొందడం...", "versionFetchError": "వర్షన్ పొందడంలో లోపం", "versionText": "వర్షన్: {version}+{buildNumber}", - "languageButtonLabel": "భాష: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "ఆటోప్లే అనువాదం", - "interactiveTranslatorAutoPlayDesc": "ఇంటరాక్టివ్ అనువాదకుని ఆడిపోవడం అడగకుండా ప్రారంభిస్తుంది.", - "changeAnalyticsView": "అనలిటిక్స్ వీక్షణను మార్చండి", "l1TranslationBody": "మీ బేస్ భాషలో సందేశాలు అనువాదం చేయబడవు.", "deleteSubscriptionWarningTitle": "మీకు క్రియాశీల సబ్‌స్క్రిప్షన్ ఉంది", "deleteSubscriptionWarningBody": "మీ ఖాతాను తొలగించడం స్వయంచాలకంగా మీ సబ్‌స్క్రిప్షన్‌ను రద్దు చేయదు.", @@ -1581,9 +1223,7 @@ "error520Title": "దయచేసి మళ్లీ ప్రయత్నించండి.", "error520Desc": "క్షమించండి, మీ సందేశాన్ని మనం అర్థం చేసుకోలేకపోయాము...", "wordsUsed": "పదాలు ఉపయోగించబడ్డాయి", - "errorTypes": "పొరపాటుల రకాలు", "level": "స్థాయి", - "canceledSend": "రద్దు చేయబడిన పంపకం", "morphsUsed": "మార్ఫ్స్ ఉపయోగించబడ్డాయి", "translationChoicesBody": "ఒక ఎంపికపై క్లిక్ చేసి హోల్డ్ చేయండి సూచన కోసం.", "grammar": "వ్యాకరణం", @@ -1593,7 +1233,6 @@ "reportContentIssueTitle": "విషయ సమస్యను నివేదించండి", "feedback": "ఐచ్ఛిక అభిప్రాయం", "reportContentIssueDescription": "అయ్యో! AI వ్యక్తిగతీకరించిన అభ్యాస అనుభవాలను సులభతరం చేయగలదు కానీ... కూడా హల్యూసినేట్ చేస్తుంది. దయచేసి మీ అభిప్రాయాలను అందించండి, మేము మళ్లీ ప్రయత్నిస్తాము.", - "changeContent": "అయ్యో! AI వ్యక్తిగతీకరించిన అభ్యాస అనుభవాలను సులభతరం చేయగలదు కానీ... కూడా హల్యూసినేట్ చేస్తుంది. ఇది ఏది కావాలి?", "clickTheWordAgainToDeselect": "ఎంచుకున్న పదాన్ని తిరిగి క్లిక్ చేసి దాన్ని డిసెలెక్ట్ చేయండి.", "l2SupportNa": "అందుబాటులో లేదు", "l2SupportAlpha": "అల్ఫా", @@ -1827,7 +1466,6 @@ "grammarCopySPC": "నిర్దిష్టత", "grammarCopyPARTTYPE": "భాగాల రకం", "grammarCopyINTREL": "ప్రశ్న-సంబంధిత", - "grammarCopyNUMFORMpsor": "పొందిన వారి సంఖ్య", "grammarCopyUNKNOWN": "అజ్ఞాత", "grammarCopyNUMBERPSOR": "పొందిన వారి సంఖ్య", "grammarCopyPOSS": "సంపత్తి", @@ -1873,28 +1511,14 @@ "grammarCopyVOICEdir": "నేరుగా", "grammarCopyVOICEinv": "విరుద్ధ", "grammarCopyVOICErcp": "పరిసర", - "enterPrompt": "దయచేసి సిస్టమ్ ప్రాంప్ట్‌ను నమోదు చేయండి", - "selectBotLanguage": "బాట్ భాషను ఎంచుకోండి", - "chooseVoice": "ఓ వాయిస్‌ను ఎంచుకోండి", - "enterLanguageLevel": "దయచేసి భాష స్థాయిని నమోదు చేయండి", - "enterDiscussionTopic": "దయచేసి చర్చ విషయాన్ని నమోదు చేయండి", - "selectBotChatMode": "చాట్ మోడ్‌ను ఎంచుకోండి", - "messageNotInTargetLang": "సందేశం లక్ష్య భాషలో లేదు", "other": "ఇతర", "levelShort": "LvL {level}", - "botModeValidation": "దయచేసి చాట్ మోడ్‌ను ఎంచుకోండి", "clickBestOption": "మీ సందేశాన్ని అనువదించడానికి ఉత్తమ ఎంపికలను ఎంచుకోండి!", "completeActivitiesToUnlock": "అనువాదాన్ని అన్లాక్ చేయడానికి కనీసం ఒక కార్యకలాపాన్ని పూర్తి చేయండి!", - "botSettingsSubtitle": "చాట్ కార్యకలాపాలను నిర్వహించడానికి బాట్‌ను ఆహ్వానించండి", - "invitePeople": "వినియోగదారులను ఆహ్వానించండి", "noCapacityLimit": "సామర్థ్య పరిమితి లేదు", "downloadGroupText": "గుంపు టెక్స్ట్‌ను డౌన్లోడ్ చేయండి", "notificationsOn": "అధిష్టానాలు ఆన్", "notificationsOff": "అధిష్టానాలు ఆఫ్", - "chatCanBeFoundViaSearch": "సందేశం శోధన ద్వారా కనుగొనబడుతుంది", - "requireCodeToJoin": "కోడ్ అవసరం చేరడానికి", - "canFindInSearch": "శోధనలో కనుగొనవచ్చు", - "addChatToSpace": "చాట్ జోడించండి", "createChatAndInviteUsers": "చాట్ సృష్టించండి మరియు వినియోగదారులను ఆహ్వానించండి", "updatedNewSpaceDescription": "కోర్సులు మీ చాట్లను సమీకరించడానికి మరియు ప్రైవేట్ లేదా పబ్లిక్ కమ్యూనిటీలను నిర్మించడానికి అనుమతిస్తాయి.", "joinWithCode": "కోడ్‌తో చేరండి", @@ -1930,39 +1554,19 @@ "constructUseCollected": "చాట్‌లో సేకరించబడింది", "constructUseNanDesc": "అన్వయించదు", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "యూజర్‌నేమ్ మరియు పాస్వర్డ్‌తో సైన్ ఇన్ చేయండి", - "registrationEmailMessage": "దయచేసి అక్కడ పంపిన లింక్‌తో మీ ఇమెయిల్‌ను ధృవీకరించండి. కొన్ని సందర్భాల్లో, ఇమెయిల్ 5 నిమిషాలు వరకు రావచ్చు. దయచేసి మీ స్పామ్ ఫోల్డర్‌ను కూడా తనిఖీ చేయండి.", "enableTTSToolName": "టెక్స్ట్-టు-స్పీచ్ సదుపాయం ప్రారంభించబడింది", "enableTTSToolDescription": "మీ లక్ష్య భాషలో భాగాల టెక్స్ట్-టు-స్పీచ్ అవుట్పుట్ ఉత్పత్తి చేయడానికి యాప్‌కు అనుమతి ఇవ్వండి.", - "couldNotFindTTS": "మీ ప్రస్తుత లక్ష్య భాషకు టెక్స్ట్-టు-స్పీచ్ ఇంజిన్ కనుగొనలేకపోయాము.", - "ttsInstructionsHyperlink": "మీ డివైస్‌లో కొత్త వాయిస్ డౌన్లోడ్ చేయడానికి సూచనలను చూడటానికి ఇక్కడ క్లిక్ చేయండి.", - "createAnAccount": "ఖాతా సృష్టించండి", - "signIn": "ప్రవేశించండి", - "signUpWithEmail": "ఇమెయిల్‌తో సైన్ అప్ చేయండి", - "signUpWithGoogle": "గూగుల్‌తో సైన్ అప్ చేయండి", - "signUpWithApple": "ఆపిల్‌తో సైన్ అప్ చేయండి", "yourUsername": "మీ వినియోగదారు పేరు", "yourEmail": "మీ ఇమెయిల్", - "pleaseEnterAnEmail": "దయచేసి ఒక ఇమెయిల్ చిరునామాను నమోదు చేయండి", - "signInWithGoogle": "గూగుల్‌తో ప్రవేశించండి", - "signInWithApple": "ఆపిల్‌తో ప్రవేశించండి", - "chooseYourAvatar": "మీ అవతార్‌ను ఎంచుకోండి", "iWantToLearn": "నేను నేర్చుకోవాలనుకుంటున్నాను", - "letsStart": "మనం ప్రారంభిద్దాం", - "pleaseAgreeToTOS": "దయచేసి నిబంధనలు మరియు షరతులకు అంగీకరించండి", "pleaseEnterEmail": "దయచేసి సరైన ఇమెయిల్ చిరునామాను నమోదు చేయండి.", - "pleaseSelectALanguage": "దయచేసి ఒక భాషను ఎంచుకోండి", "myBaseLanguage": "నా ప్రాథమిక భాష", - "clickWordsInstructions": "ఏదైనా పదంపై క్లిక్ చేయండి వివరాల కోసం. 🤐", - "chooseBestDefinition": "ఈ పదానికి అర్థం ఏమిటి?", "meaningSectionHeader": "అర్థం:", "formSectionHeader": "చాట్‌లలో ఉపయోగించిన రూపాలు:", - "noEmojiSelectedTooltip": "ఎమోజీ ఎంచుకోబడలేదు", "writingExercisesTooltip": "రాయడం", "listeningExercisesTooltip": "వినడం", "readingExercisesTooltip": "చదవడం", "meaningNotFound": "అర్థం కనుగొనబడలేదు.", - "formsNotFound": "రూపాలు కనుగొనబడలేదు.", "chooseBaseForm": "ప్రాథమిక రూపాన్ని ఎంచుకోండి", "notTheCodeError": "క్షమించండి, అది కోడ్ కాదు!", "totalXP": "మొత్తం XP", @@ -2002,9 +1606,6 @@ "pickAnEmoji": "'{lemma}' కోసం మీకు ఇష్టమైన ఎమోజీ ఏది?", "chooseLemmaMeaningInstructionsBody": "సందేశంలో ఉన్న పదాలతో అర్థాలను సరిపోల్చండి!", "doubleClickToEdit": "సవరించడానికి డబుల్ క్లిక్ చేయండి.", - "removeFeature": "{feature}ని తీసివేయండి", - "chooseCorrectLabel": "సరైన లేబుల్‌ను ఎంచుకోండి.", - "levelPopupTitle": "అభినందనలు, మీరు {level} స్థాయిని చేరుకున్నారు", "activityPlannerTitle": "చర్యా ప్రణాళికకర్త", "topicLabel": "విషయం", "topicPlaceholder": "ఒక విషయం ఎంచుకోండి...", @@ -2012,7 +1613,6 @@ "modePlaceholder": "ఒక మోడ్ ఎంచుకోండి...", "learningObjectiveLabel": "అధ్యయన లక్ష్యం", "learningObjectivePlaceholder": "ఒక అధ్యయన లక్ష్యాన్ని ఎంచుకోండి...", - "mediaLabel": "మీడియా అభ్యాసకులు పంచుకోవాలి", "languageOfInstructionsLabel": "చర్యల సూచనల భాష", "targetLanguageLabel": "లక్ష్య భాష", "cefrLevelLabel": "CEFR స్థాయి", @@ -2027,20 +1627,15 @@ "instructions": "సూచనలు", "numberOfLearners": "అభ్యాసకుల సంఖ్య", "mustBeInteger": "ఇది ఒక పూర్తి సంఖ్యగా ఉండాలి ఉదా: 1, 2, 3, ...", - "noLemmasFound": "{xp} XP కంటే ఎక్కువ ఉన్న శబ్దకోశం లేదు. సాధన కొనసాగించండి!", "constructUsePvmDesc": "శబ్ద సందేశంలో ఉత్పత్తి చేయబడింది", - "lockedMorphFeature": "అన్లాక్ చేయడానికి వేచివున్నది", "leaveSpaceDescription": "కోర్సును వదిలితే, మీరు అందులో ఉన్న అన్ని చాట్‌లను వదులుతారు. ఇతర వినియోగదారులు మీరు కోర్సును వదిలినట్లు చూడగలరు.", - "whatIsLemma": "లెమ్మా అంటే ఏమిటి?", "constructUseCorMmDesc": "సరైన సందేశ అర్థం", "constructUseIncMmDesc": "తప్పు సందేశ అర్థం", "constructUseIgnMmDesc": "అవగలిగే సందేశ అర్థం", "clickForMeaningActivity": "అర్థం ఛాలెంజ్ కోసం ఇక్కడ క్లిక్ చేయండి", "meaning": "అర్థం", "chatWith": "{displayname} తో గ్రూప్", - "slightlyOffensive": "కొంచెం దుర్భాషా", "clickOnEmailLink": "దయచేసి ఇమెయిల్ లింక్ పై క్లిక్ చేసి కొనసాగండి.\n\nఇమెయిల్ రాలేదంటే స్పామ్ ఫోల్డర్‌ను తనిఖీ చేయండి.", - "whoIsAllowedToJoinThisChat": "ఈ చాట్‌లో చేరడానికి ఎవరు అనుమతించబడ్డారు", "dontForgetPassword": "మీ పాస్వర్డ్ మర్చిపోకండి!", "enableAutocorrectToolName": "డివైస్ ఆటోకరెక్ట్ ను సక్రియం చేయండి", "enableAutocorrectDescription": "మీ డివైస్ మీరు నేర్చుకుంటున్న భాషను మద్దతిస్తే, మీరు టైప్ చేస్తున్నప్పుడు సాధారణ తప్పులను సరిదిద్దడానికి డివైస్ ఆటోకరెక్ట్ ను సక్రియం చేయవచ్చు.", @@ -2068,48 +1663,26 @@ "autocorrectNotAvailable": "దురదృష్టవశాత్తు, మీ ప్లాట్‌ఫారమ్ ప్రస్తుతం ఈ ఫీచర్‌కు మద్దతు ఇవ్వదు. మరింత అభివృద్ధి కోసం ఎదురుచూడండి!", "pleaseUpdateApp": "దయచేసి కొనసాగించడానికి యాప్‌ను నవీకరించండి.", "chooseEmojiInstructionsBody": "ఎమోజీలను వాటి ఉత్తమ ప్రతినిధులైన పదాలతో సరిపోల్చండి. ఆందోళన చెందవద్దు! విరుద్ధంగా ఉన్నందుకు పాయింట్లు తగ్గవు. 😅", - "pickAnEmojiFor": "{lemma} కోసం ఒక ఎమోజీ ఎంచుకోండి", "analyticsVocabListBody": "ఇది మీ అన్ని పదకోశం! మీరు ప్రతి పదానికి XP సంపాదించగానే, అవి విత్తనంలా నుండి పూర్తి పుష్పం వరకు మారతాయి. మరిన్ని వివరాలు చూడటానికి ఏదైనా పదంపై క్లిక్ చేయండి.", "morphAnalyticsListBody": "ఇవి మీరు నేర్చుకుంటున్న భాషలోని అన్ని వ్యాకరణ భావనలు! మీరు వాటిని చాట్ చేస్తూ ఎదుర్కొనగలుగుతారు. వివరాల కోసం క్లిక్ చేయండి.", "knockSpaceSuccess": "మీరు ఈ కోర్సులో చేరాలని కోరుకున్నారు! మీరు దాన్ని పొందినప్పుడు అడ్మిన్ మీకు స్పందిస్తారు 😃", - "joinByCode": "కోడ్ ద్వారా చేరండి", "chooseWordAudioInstructionsBody": "పూర్తి సందేశాన్ని వినండి. తర్వాత ఆడియోలను పదాలతో సరిపోల్చండి.", "chooseMorphsInstructionsBody": "వ్యాకరణ ప్రశ్నలకు పజిల్ భాగాలను క్లిక్ చేయండి!", - "inviteAndLaunch": "ఆహ్వానించండి మరియు ప్రారంభించండి", - "createOwnChat": "మీ స్వంత చాట్ సృష్టించండి", "pleaseEnterInt": "దయచేసి సంఖ్యను నమోదు చేయండి", "home": "హోమ్", "join": "చేరండి", "readingAssistanceOverviewBody": "ఎమోజీలు, ఆడియోలు, పదాల అర్థాలు, వ్యాకరణ భావనలపై మినీ-గేమ్స్ కోసం దిగువ బటన్లను క్లిక్ చేయండి. లేదా ఏదైనా పదంపై క్లిక్ చేసి వివరాలు తెలుసుకోండి.", - "learnByTexting": "టెక్స్ట్ ద్వారా నేర్చుకోండి", - "levelSummaryTrigger": "సారాంశం చూడండి", "levelSummaryPopupTitle": "స్థాయి {level} సారాంశం", - "referFriends": "మిత్రులను సూచించండి", - "referFriendDialogTitle": "మీ సంభాషణకు మిత్రుని ఆహ్వానించండి", - "referFriendDialogDesc": "మీకు కొత్త భాష నేర్చుకోవడానికి ఉత్సాహంగా ఉన్న మిత్రుడు ఉన్నారా? అప్పుడు ఈ ఆహ్వాన లింక్‌ను కాపీ చేసి పంపండి, తద్వారా మీరు చాట్ ప్రారంభించవచ్చు.", - "youUnlocked": "మీరు అన్లాక్ చేశారు", "resetInstructionTooltipsTitle": "నిర్దేశన టూల్‌టిప్స్ రీసెట్ చేయండి", "resetInstructionTooltipsDesc": "కొత్త వినియోగదారుని కోసం నిర్దేశన టూల్‌టిప్స్ చూపించడానికి క్లిక్ చేయండి.", "selectForGrammar": "కార్యాచరణలు మరియు వివరాల కోసం వ్యాకరణ చిహ్నాన్ని ఎంచుకోండి.", - "newChatActivityTitle": "మరొక సరదా కార్యకలాపం జోడించాలనుకుంటున్నారా?", - "newChatActivityDesc": "ప్రతి గ్రూప్ చాట్‌ను యాక్టివిటీ ప్లానర్‌తో సాహసంగా మార్చండి! గ్రూప్ కోసం ఆకర్షణీయమైన విషయాలు మరియు లక్ష్యాలను సెట్ చేయండి, మరియు అద్భుత చిత్రాలతో సంభాషణలను జీవితం చేయండి. కల్పనాత్మక చర్చలను ప్రేరేపించండి మరియు సరదా సులభంగా కొనసాగించండి!", - "exploreMore": "మరింత అన్వేషించండి", "randomize": "యాదృచ్ఛికం చేయండి", "clear": "తొలగించండి", "makeYourOwnActivity": "మీ స్వంత కార్యకలాపాన్ని సృష్టించండి", "featuredActivities": "ప్రధాన", - "goToChat": "చాట్‌కు వెళ్లండి", "save": "సేవ్ చేయండి", - "selectActivity": "కార్యకలాపాన్ని ఎంచుకోండి", - "wordFocusListeningMultipleChoice": "ఏ ఆడియో పదంతో సరిపోతుంది?", "startChat": "చాట్ ప్రారంభించండి", "translationProblem": "అనువాద సమస్య", - "perfectTranslation": "పూర్తి అనువాదం!", - "greatJobTranslation": "ఈ అనువాదంలో గొప్ప పని!", - "goodJobTranslation": "ఈ అనువాదంపై మంచి పని.", - "makingProgress": "మీరు పురోగతి సాధిస్తున్నారు!", - "keepPracticing": "అభ్యాసం కొనసాగించండి!", - "niceJob": "అద్భుతం!", "askToJoin": "చేరడానికి అడగండి", "emptyChatWarningTitle": "చాట్ ఖాళీగా ఉంది", "emptyChatWarningDesc": "మీరు ఎవ్వరినీ మీ చాట్‌కు ఆహ్వానించలేదు. సంప్రదింపులు లేదా బాట్‌ను ఆహ్వానించడానికి చాట్ సెట్టింగ్స్‌కు వెళ్లండి. మీరు దీన్ని తర్వాత కూడా చేయవచ్చు.", @@ -2128,8 +1701,6 @@ "languageLevelC2Desc": "నేను వాస్తవానికి వినే లేదా చదివే ప్రతి విషయాన్ని అర్థం చేసుకోవచ్చు మరియు స్వచ్ఛందంగా మరియు ఖచ్చితంగా వ్యక్తం చేయగలుగుతాను.", "newVocab": "కొత్త పదజాల", "newGrammar": "కొత్త వ్యాకరణ భావనలు", - "congratulationsOnReaching": "మీరు స్థాయి {level} చేరారు!", - "seeDetails": "వివరాలు చూడండి", "choosePracticeMode": "పై బటన్లలో ఒకదాన్ని క్లిక్ చేసి ప్రాక్టీస్ కార్యకలాపాన్ని ప్రారంభించండి", "ban": "నిషేధించండి", "unban": "అన్‌బ్యాన్ చేయండి", @@ -2143,8 +1714,6 @@ "timesUsedWithAssistance": "సహాయం తో ఉపయోగించిన సమయాలు", "shareInviteCode": "ఆహ్వాన కోడ్ పంచుకోండి: {code}", "leaderboard": "నాయకుల పట్టిక", - "welcomeUser": "{user} కు స్వాగతం", - "joinSpaceOnboardingDesc": "మీకు పబ్లిక్ కోర్సుకు ఆహ్వాన కోడ్ లేదా లింక్ ఉందా?", "skipForNow": "ఇప్పుడే దాటవేయండి", "permissions": "అనుమతులు", "spaceChildPermission": "ఈ కోర్సుకు కొత్త చాట్‌లను ఎవరు జోడించగలరు", @@ -2152,12 +1721,8 @@ "defaultOption": "డిఫాల్ట్", "deleteChatDesc": "మీకు ఈ చాట్‌ను తొలగించాలనుకుంటున్నారా? ఇది అన్ని పాల్గొనేవారికి తొలగించబడుతుంది మరియు చాట్‌లోని అన్ని సందేశాలు ఇకపై అభ్యాసం లేదా నేర్చుకునే విశ్లేషణలకు అందుబాటులో ఉండవు.", "deleteSpaceDesc": "కోర్సు మరియు ఎంచుకున్న చాట్‌లు అన్ని పాల్గొనేవారికి తొలగించబడతాయి మరియు చాట్‌లోని అన్ని సందేశాలు ఇకపై అభ్యాసం లేదా నేర్చుకునే విశ్లేషణలకు అందుబాటులో ఉండవు. ఈ చర్యను తిరిగి చేయలేరు.", - "chatWithActivities": "చర్యలతో చాట్ చేయండి", "launch": "ప్రారంభించండి", - "launchActivityToChats": "చాట్‌లకు కార్యకలాపాన్ని ప్రారంభించండి", "searchChats": "చాట్‌లను శోధించండి", - "selectChats": "చాట్‌లను ఎంచుకోండి", - "selectChatToStart": "పూర్తయింది! ప్రారంభించడానికి ఒక చాట్‌ను ఎంచుకోండి", "maxFifty": "గరిష్ట 50", "configureSpace": "కోర్సును కాన్ఫిగర్ చేయండి", "pinMessages": "సందేశాలను పిన్ చేయండి", @@ -2171,9 +1736,7 @@ "announcements": "ప్రకటనలు", "activities": "చర్యలు", "access": "ప్రవేశం", - "botSettings": "బాట్ సెట్టింగులు", "activitySuggestionTimeoutMessage": "మేము మీ కోసం మరిన్ని కార్యకలాపాలను సృష్టించడానికి కష్టపడుతున్నాము, దయచేసి ఒక నిమిషం తర్వాత తిరిగి చెక్ చేయండి", - "accessSettingsWarning": "అయ్యనాడు! ఈ గదిలో యాక్సెస్ నియమాలను సెట్ చేయడానికి మీకు అనుమతి లేదు అని కనిపిస్తోంది. మీరు అవి మీ అవసరాలకు సరిపోయేలా ఉన్నాయో లేదో నిర్ధారించుకోవడానికి ఈ నియమాలను తనిఖీ చేయాలి మరియు మార్చాల్సిన అవసరం ఉంటే గది అడ్మిన్‌తో మాట్లాడండి", "howSpaceCanBeFound": "ఈ కోర్సును ఎలా కనుగొనవచ్చు", "private": "ప్రైవేట్", "cannotBeFoundInSearch": "శోధనలో కనుగొనలేరు", @@ -2186,16 +1749,6 @@ "canBeFoundViaKnock": "• చేరడానికి అభ్యర్థన మరియు అడ్మిన్ ఆమోదం", "youHaveLeveledUp": "మీరు స్థాయి పెరిగారు!", "sendActivities": "కార్యకలాపాలను పంపండి", - "getStarted": "ప్రారంభించండి", - "getStartedBotChatDesc": "AIతో చాట్ చేయడం ప్రారంభించడానికి గొప్ప స్థలం మరియు Pangea చదవడం, వ్రాయడం, వినడం మరియు మాట్లాడడం సాధనాలు దాన్ని సులభతరం చేస్తాయి!", - "getStartedCommunitiesDesc": "సముదాయంతో నేర్చుకోవడం Pangea చాట్ యొక్క ప్రత్యేకత! మీరు మీ తరగతిలో చేరవచ్చు, కోర్సును కనుగొనవచ్చు, లేదా మీ స్వంత కోర్సును సృష్టించవచ్చు!", - "getStartedFriendsDesc": "మీకు మీతో నేర్చుకోవాలనుకునే స్నేహితుడు ఉన్నారా?", - "getStartedBotChatComplete": "బాగుంది! మీరు బాట్‌తో చాట్ చేస్తున్నారు!", - "getStartedCommunitiesComplete": "అద్భుతం, మీరు కోర్సులో చేరారు!", - "getStartedComplete": "మీరు ఈ విభాగాన్ని పూర్తి చేసారు!\nమిత్రులతో చాట్ చేయడం ద్వారా మా అద్భుతమైన ఫీచర్లను అన్వేషించండి!", - "getStartedFriendsComplete": "వావ్! మీకు మిత్రులు ఉన్నారు! 😉", - "getStartedBotChatButton": "చాట్ ప్రారంభించండి!", - "getStartedFriendsButton": "మిత్రుడితో చాట్ చేయండి", "groupChat": "గుంపు చాట్", "directMessage": "నేరుగా సందేశం", "newDirectMessage": "కొత్త నేరుగా సందేశం", @@ -2211,7 +1764,6 @@ "mySavedActivities": "నా సేవ్ చేసిన కార్యకలాపాలు", "noSavedActivities": "ఏ సేవ్ చేసిన కార్యకలాపాలు లేవు", "saveActivity": "ఈ కార్యకలాపాన్ని సేవ్ చేయండి", - "yourSavedActivities": "మీ సేవ్ చేసిన కార్యకలాపాలు", "failedToPlayVideo": "వీడియో ప్లే చేయడంలో విఫలమైంది", "done": "పూర్తయింది", "inThisSpace": "ఈ కోర్సులో", @@ -2250,37 +1802,27 @@ "maximumActivityParticipants": "ప్రతి క్రియకు గరిష్టంగా {count} పాల్గొనేవారు ఉండవచ్చు.", "pending": "వేచి ఉంది", "inactive": "చురుకైనది కాదు", - "unjoinedActivityMessage": "మీరు పాల్గొనాలనుకుంటున్నారా? ఓపెన్ పాత్రను ఎంచుకోండి!\nలేదా బయటకు వెళ్లి షోను చూడండి!", - "fullActivityMessage": "షోను చూడటానికి స్వేచ్ఛగా ఉండండి! పాల్గొనడానికి ఓపెన్ పాత్రలు లేవు, మీరు చాట్‌ను చూడవచ్చు!", "confirmRole": "పాత్రను నిర్ధారించండి", "openRoleLabel": "తెరవుట", "joinedTheActivity": "👋 {username} పాత్రగా చేరారు", "finishedTheActivity": "🎯 {username} ఈ కార్యకలాపాన్ని ముగించారు", - "endActivityTitle": "నేను ముగించాను", - "endActivityDesc": "మీరు లక్ష్యాలను పూర్తి చేసారా?\nఇది మీ నిర్ధారణ, మీరు టెక్స్ట్ చేయడం నుంచి వెనక్కి తగ్గుతున్నారని. కానీ ఆందోళనకరమైంది, చాట్‌లో సరదా కొనసాగుతుంది! అందరూ 'ముగించాను' అని క్లిక్ చేసే వరకు బయటకు తిరగండి మరియు షోను ఆస్వాదించండి.", "archiveToAnalytics": "నా పూర్తి చేసిన కార్యకలాపాలలో జోడించండి", "activitySummaryError": "కార్యకలాప సారాంశాలు అందుబాటులో లేవు", "requestSummaries": "సారాంశాలను అభ్యర్థించండి", - "loadingActivitySummary": "కార్యకలాప సారాంశం లోడ్ అవుతోంది...", "generatingNewActivities": "మీరు ఈ భాష జత యొక్క మొదటి వినియోగదారు! దయచేసి ఒక నిమిషం ఇవ్వండి, మేము మీ కోసం మాత్రమే కార్యకలాపాలను సిద్ధం చేస్తున్నాము.", - "requestAccessTitle": "విశ్లేషణ వీక్షణ యాక్సెస్ కోసం అభ్యర్థించాలనుకుంటున్నారా?", + "requestAccessTitle": "విశ్లేషణ యాక్సెస్‌ను అభ్యర్థించాలా?", "requestAccessDesc": "పాల్గొనేవారి విశ్లేషణలను చూడటానికి యాక్సెస్ కోరాలనుకుంటున్నారా?\n\nపాల్గొనేవారు అంగీకరిస్తే, ఈ కోర్సు అడ్మిన్స్ వారి వీక్షణ సాధ్యమవుతుంది:\n • మొత్తం పదజాలం\n • మొత్తం వ్యాకరణ భావనలు\n • మొత్తం కార్యకలాప సెషన్లు పూర్తి చేయబడినవి\n • ఉపయోగించిన, సరిగా మరియు తప్పుగా ఉన్న ప్రత్యేక వ్యాకరణ భావనలు\n\nఅవి వీక్షించలేవు:\n • కోర్సు వెలుపల చాట్ సందేశాలు\n • పదజాల జాబితా", "requestAccess": "అభ్యర్థన చేయండి ({count})", "analyticsInactiveTitle": "చర్యలేని వినియోగదారులకు అభ్యర్థనలు పంపలేరు", "analyticsInactiveDesc": "ఈ ఫీచర్ ప్రవేశపెట్టినప్పటి నుండి లాగిన్ కాలేదని చర్యలేని వినియోగదారులు మీ అభ్యర్థనను చూడలేరు.\n\nవారు తిరిగి వచ్చినప్పుడు, రిక్వెస్ట్ బటన్ కనిపిస్తుంది. అందుబాటులో ఉన్నప్పుడు వారి పేరుపై క్లిక్ చేసి మీరు తర్వాత కూడా అభ్యర్థనను పంపవచ్చు.", "accessRequestedTitle": "విశ్లేషణ యాక్సెస్ అభ్యర్థన", - "accessRequestedDesc": "\"{space}\" యొక్క అడ్మిన్స్ మీ అభ్యర్థనను చూస్తున్నారు.\n\nమీరు అంగీకరిస్తే, ఈ కోర్సు అడ్మిన్స్ మీ:\n • మొత్తం పదజాలం\n • మొత్తం వ్యాకరణ భావనలు\n • మొత్తం కార్యకలాప సెషన్లు\n • ఉపయోగించిన, సరిగా మరియు తప్పుగా ఉన్న ప్రత్యేక వ్యాకరణ భావనలు\n\nవారు చూడలేరు:\n • కోర్సు వెలుపల చాట్ సందేశాలు\n • పదజాల జాబితా", - "allowAccess": "అనుమతించండి", - "denyAccess": "నిరాకరించండి", + "accessRequestedDesc": "అభ్యర్థిస్తున్న యాజమాన్యాలు: {admin} \n\n“{space}” నుండి యాజమాన్యాలు మీ అభ్యాస విశ్లేషణలను చూడటానికి అభ్యర్థిస్తున్నారు.\n\nమీరు అంగీకరిస్తే, వారు మీ:\n • మొత్తం పదకోశం\n • మొత్తం వ్యాకరణ భావనలు\n • పూర్తి చేసిన మొత్తం కార్యకలాప సెషన్లు\n • సరైన మరియు తప్పు గా ఉపయోగించిన ప్రత్యేక వ్యాకరణ భావనలు చూడగలరు\n\nవారు మీ:\n • కోర్సు వెలుపల చాట్లలో సందేశాలను చూడలేరు\n • పదకోశ జాబితా", "adminRequestedAccess": "అడ్మిన్లు మీ విశ్లేషణలను చూడాలని కోరారు.", "lastUpdated": "అప్డేట్ చేయబడింది\n{time}", "activityFinishedMessage": "అన్ని ముగిసాయి!", "endForAll": "అందరికీ ముగించు", "newCourse": "కొత్త కోర్సు", - "newCourseSubtitle": "మీరు ఏ కోర్సు ప్లాన్ ఉపయోగించాలనుకుంటున్నారు?", - "failedToLoadCourses": "కోర్సులను లోడ్ చేయడంలో విఫలమైంది", "numModules": "{num} మాడ్యూల్స్", - "numActivityPlans": "{num} కార్యకలాప ప్రణాళికలు", "coursePlan": "కోర్సు ప్రణాళిక", "editCourseLater": "మీరు టెంప్లేట్ శీర్షిక, వివరణలు, మరియు కోర్సు చిత్రాన్ని తర్వాత సవరించవచ్చు.", "newCourseAccess": "డిఫాల్ట్‌గా, కోర్సులు ప్రైవేట్‌గా ఉంటాయి మరియు చేరడానికి అడ్మిన్ ఆమోదం అవసరం. మీరు ఈ సెట్టింగులను ఎప్పుడైనా సవరించవచ్చు.", @@ -2294,17 +1836,11 @@ "accessDesc": "మీ కోర్సును ప్రపంచానికి తెరవవచ్చు! లేదా, మీ కోర్సును ప్రైవేట్ చేసి భద్రపరచవచ్చు.", "createGroupChatDesc": "అభ్యాస సెషన్లు ప్రారంభమై ముగిసే సమయంలో, గుంపు చాట్‌లు సాధారణ కమ్యూనికేషన్ కోసం తెరవబడతాయి.", "deleteDesc": "కేవలం అడ్మిన్లు మాత్రమే కోర్సును తొలగించగలరు. ఇది ఒక ధ్వంసక చర్యగా ఉంటుంది, ఇది అన్ని వినియోగదారులను తొలగిస్తుంది మరియు కోర్సులోని అన్ని ఎంపిక చేసిన చాట్‌లను డిలీట్ చేస్తుంది. జాగ్రత్తగా ముందుకు పోవండి.", - "failedToLoadCourseInfo": "కోర్సు సమాచారం లోడ్ చేయడంలో విఫలమైంది", "noCourseFound": "అయ్యనది, ఈ కోర్సుకు ఒక ప్రణాళిక అవసరం!\n\nకోర్సు ప్రణాళికలు విషయాల శ్రేణి మరియు సంభాషణ కార్యకలాపాల సమూహం.", "additionalParticipants": "+ {num} ఇతరులు", - "activityNotFoundForCourse": "ఈ కార్యకలాపం కోర్సులో కనుగొనబడలేదు", - "courseChats": "కోర్సు చాట్‌లు", - "myActivitySessions": "నా కార్యకలాప సెషన్లు", "directMessages": "నేరుగా సందేశాలు", "whatNow": "ఇప్పుడు ఏమి చేయాలి?", "chooseNextActivity": "మీ తదుపరి కార్యకలాపాన్ని ఎంచుకోండి!", - "seeInstructions": "సూచనలను చూడండి", - "hideInstructions": "సూచనలను దాచండి", "letsGo": "చెళ్దాం", "chooseRole": "ఒక పాత్రను ఎంచుకోండి!", "chooseRoleToParticipate": "పాల్గొనడానికి ఒక పాత్రను ఎంచుకోండి!", @@ -2314,23 +1850,15 @@ "inviteFriends": "స్నేహితులను ఆహ్వానించండి", "waitNotDone": "అడిగండి నేను పూర్తి చేయలేదు!", "waitingForOthersToFinish": "మిగతావారు ముగించడానికి వేచివున్నారు...", - "saveToCompletedActivities": "పూర్తయిన కార్యకలాపాలలో సేవ్ చేయండి", "generatingSummary": "చాట్‌ను విశ్లేషించి ఫలితాలను సృష్టించడం", - "instructionsLanguage": "నిర్దేశాల భాష", "findCourse": "కోర్సును కనుగొనండి", - "activityCompletedDesc": "మీ పూర్తి చేసిన కార్యకలాపం విశ్లేషణకు జోడించబడింది, మీరు ఉపయోగించిన భాషను సమీక్షించవచ్చు మరియు అభ్యాసం చేయవచ్చు.", "pingParticipantsNotification": "{user} {room}లో కార్యకలాప సెషన్‌లో చేరడానికి వినియోగదారులను చూస్తున్నారు", "course": "కోర్సు", "courses": "కోర్సులు", "courseName": "కోర్సు పేరు", "createNewCourse": "కొత్త కోర్సు", - "publicCourses": "ప్రజా కోర్సులు", "goToCourse": "కోర్సుకు వెళ్లండి: {course}", "activityComplete": "ఈ కార్యకలాపం పూర్తయింది. క్రింద కార్యకలాప సారాంశం అందుబాటులో ఉండాలి.", - "haventChattedMuch": "మీరు ఎక్కువగా చాట్ చేయలేదని కనిపిస్తోంది, మరిన్ని పదజాల పదాలు ఉపయోగించడానికి ప్రయత్నించండి! మీరు మీ లక్ష్యాన్ని పూర్తి చేసుకున్నట్లయితే, క్రింద కార్యకలాపాన్ని ముగించవచ్చు.", - "haveChatted": "మీరు కొంతకాలంగా చాట్ చేస్తున్నట్లు కనిపిస్తోంది! మీరు మీ లక్ష్యాన్ని పూర్తి చేసుకున్నట్లయితే, కార్యకలాపాన్ని ముగించండి మరియు మేము చాట్‌లో మీకు సారాంశం సృష్టిస్తాము!", - "userDoneAndWaiting": "{num1}/{num2} పాల్గొనేవారు ముగించారు. అందరూ ముగించడానికి వేచివుండండి, మేము చాట్‌లో మీకు సారాంశం సృష్టిస్తాము! \n\nమరింత చర్చలో చేరాలనుకుంటే, చాట్‌లో కొనసాగింపు బటన్‌ను క్లిక్ చేయండి.", - "othersDoneAndWaiting": "{num1}/{num2} ముగించారు. మీరు మీ లక్ష్యాన్ని పూర్తి చేసుకున్నారా?", "startNewSession": "కొత్త సెషన్ ప్రారంభించండి", "joinOpenSession": "ఓపెన్ సెషన్‌లో చేరండి", "less": "తక్కువ", @@ -2340,7 +1868,6 @@ "openToJoin": "చేరడానికి తెరవబడింది", "results": "ఫలితాలు", "activityDone": "చర్య పూర్తయింది!", - "moreLabel": "మరింత", "promoCodeInfo": "ప్రోమో కోడ్లు తదుపరి పేజీలో నమోదు చేయవచ్చు", "editsComingSoon": "నగరాలు మరియు కార్యకలాపాలను సవరించగల సామర్థ్యం త్వరలో రానుంది.", "editing": "సవరించడం", @@ -2356,13 +1883,10 @@ "courseSavedSuccessfully": "కోర్సు విజయవంతంగా సేవ్ చేయబడింది", "addCoursePlan": "కోర్సు ప్రణాళికను జోడించండి", "activityStatsButtonInstruction": "మీ కార్యకలాప గణాంకాలను చూడడానికి ఇక్కడ క్లిక్ చేయండి మరియు పూర్తి చేసినప్పుడు కార్యకలాపాన్ని మూసివేయండి", - "readingAnalyticsDesc": "పఠన కార్యకలాపాల కోసం ప్రతి సందేశంపై అభ్యాసం క్లిక్ చేయండి.", - "speakingAnalyticsDesc": "మాట్లాడే అభ్యాసం కోసం వాయిస్ సందేశాలను రికార్డ్ చేయండి.", - "audioAnalyticsDesc": "శ్రవణ కార్యకలాపాల కోసం ప్రతి సందేశంపై అభ్యాసం క్లిక్ చేయండి.", "loginToAccount": "నా ఖాతాలో లాగిన్ అవ్వండి", "appDescription": "భాష నేర్చుకోండి\nమీ స్నేహితులతో సందేశాలు పంపుతూ.", "languages": "భాషలు", - "chooseLanguage": "ఒక భాషను ఎంచుకోండి.", + "chooseLanguage": "ఒక లక్ష్య భాషను ఎంచుకోండి.", "planTrip": "మీ ప్రయాణాన్ని ప్రణాళిక చేయండి", "howAreYouTraveling": "మీరు ఎలా ప్రయాణిస్తున్నారు?", "unlockPrivateTrip": "ప్రైవేట్ ట్రిప్‌ను అన్లాక్ చేయండి", @@ -2375,25 +1899,20 @@ "courseCode": "ఏమిటి రహస్య పాస్వర్డ్?", "courseCodeHint": "ట్రిప్ కోడ్ లేదా లింక్", "unlockMyTrip": "నా ట్రిప్‌ను అన్లాక్ చేయండి", - "anyLevel": "ఏదైనా స్థాయి", "signupOption": "మీరు ఎలా సైన్ అప్ చేయాలనుకుంటున్నారు?", "withApple": "ఆపిల్‌తో", "withGoogle": "గూగుల్‌తో", "withEmail": "ఇమెయిల్‌తో", "createAccount": "ఖాతా సృష్టించండి", - "noCoursesFound": "కోర్సులు కనుగొనబడలేదు", "loginWithEmail": "ఇమెయిల్‌తో లాగిన్ చేయండి", "usernameOrEmail": "యూజర్‌నేమ్ లేదా ఇమెయిల్", "email": "ఇమెయిల్", "forgotPassword": "పాస్వర్డ్ మర్చిపోయారా?", - "writingAnalyticsDesc": "రాయడం సాధన కోసం సందేశాలు పంపండి.", "endActivity": "చర్యను ముగించండి", "allLanguages": "అన్ని భాషలు", - "allCefrLevels": "అన్ని CEFR స్థాయిలు", "chatListTooltip": "ఇక్కడ మీరు మీ ప్రత్యక్ష సందేశాలను కనుగొంటారు! ఏదైనా యూజర్ యొక్క అవతారంపై క్లిక్ చేసి \"సంభాషణ ప్రారంభించండి\" అని క్లిక్ చేయండి.", "directMessageBotTitle": "డైరెక్ట్ మెసేజ్ పాంజియా బాట్", "feedbackTitle": "క్రియాకలాప ఫీడ్బ్యాక్", - "feedbackDesc": "క్రియాకలాపాన్ని ఎలా మెరుగుపరచాలి? మీరు కొన్ని వివరాలు అందిస్తే, మేము మార్పును చేస్తాము!", "feedbackHint": "మీ ఫీడ్బ్యాక్", "feedbackButton": "ఫీడ్బ్యాక్ సమర్పించండి", "directMessageBotDesc": "మానవులతో మాట్లాడడం మరింత సరదాగా ఉంటుంది కానీ... AI ఎప్పుడూ సిద్ధంగా ఉంటుంది!", @@ -2401,7 +1920,7 @@ "playWithAI": "ఇప్పుడే AI తో ఆడండి", "courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!", "@@locale": "te", - "@@last_modified": "2026-01-06 13:02:11.522520", + "@@last_modified": "2026-01-07 14:27:24.330788", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -6089,30 +5608,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -6136,18 +5631,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6172,18 +5655,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6220,38 +5691,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6260,62 +5703,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6352,10 +5751,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6364,14 +5759,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6380,46 +5767,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6428,10 +5779,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6488,18 +5835,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6508,14 +5843,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6544,18 +5871,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6564,42 +5879,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6608,14 +5891,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6636,26 +5911,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6676,10 +5931,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6712,25 +5963,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6787,34 +6019,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6843,778 +6047,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8607,14 +7043,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8626,14 +7054,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8665,10 +7085,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8677,18 +7093,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8697,14 +7101,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8729,38 +7125,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8806,10 +7174,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8834,10 +7198,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8862,10 +7222,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8874,66 +7230,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8954,42 +7254,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -9014,154 +7290,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9178,18 +7306,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9210,14 +7326,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9234,10 +7342,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9250,14 +7354,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9266,14 +7362,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9301,26 +7389,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9349,18 +7417,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9397,10 +7457,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10333,10 +8389,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10517,34 +8569,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10557,10 +8581,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10569,14 +8589,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10593,22 +8605,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10756,14 +8752,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10772,34 +8760,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10808,54 +8768,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10864,10 +8788,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10884,10 +8804,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11059,26 +8975,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11107,10 +9003,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11167,30 +9059,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11219,18 +9095,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11347,14 +9215,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11367,10 +9227,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11379,14 +9235,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11403,14 +9251,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11419,22 +9259,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11447,18 +9271,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11475,22 +9287,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11499,30 +9299,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11595,18 +9371,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11663,18 +9427,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11703,30 +9455,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11779,18 +9515,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11839,46 +9567,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11943,10 +9631,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12118,14 +9802,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12150,14 +9826,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12170,10 +9838,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12209,19 +9873,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12246,14 +9905,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12262,14 +9913,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12322,10 +9965,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12338,18 +9977,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12362,14 +9989,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12410,26 +10029,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12457,10 +10064,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12471,36 +10074,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12537,10 +10110,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12605,18 +10174,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12681,10 +10238,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12705,10 +10258,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12725,10 +10274,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12737,10 +10282,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12753,10 +10294,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12781,16 +10318,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "స్నేహితులను క్రియాశీలతకు ఆహ్వానించండి", - "inviteFriendsToActivityCourse": "స్నేహితులను క్రియాశీలత మరియు కోర్సుకు ఆహ్వానించండి", "feedbackRespDesc": "క్రియాశీలత నవీకరణల కోసం రేపు తిరిగి చెక్ చేయండి.", "activityDropdownDesc": "మీరు ఈ క్రియాశీలతతో ముగించాక, క్రింద క్లిక్ చేయండి", - "activityAnalyticsListBody": "ఇవి మీ పూర్తి చేసిన క్రియాశీలతలు! క్రియాశీలతలను ముగించిన తర్వాత, మీరు వాటిని ఇక్కడ చూడవచ్చు.", "languageMismatchTitle": "భాష మిస్మ్యాచ్", "languageMismatchDesc": "మీ లక్ష్య భాష ఈ క్రియాశీలత భాషతో సరిపోలడం లేదు. మీ లక్ష్య భాషను నవీకరించాలనుకుంటున్నారా?", "reportWordIssueTooltip": "పద సమాచారం సమస్యను నివేదించండి", "tokenInfoFeedbackDialogTitle": "పద సమాచారం అభిప్రాయం", - "tokenInfoFeedbackDialogDesc": "AI తప్పులు చేస్తుంది. పై సమాచారం గురించి మీరు కనుగొన్న ఏవైనా సమస్యలను వివరిస్తారా?", "noPublicCoursesFound": "పబ్లిక్ కోర్సులు కనుగొనబడలేదు. మీరు ఒకటి సృష్టించాలనుకుంటున్నారా?", "noCourseTemplatesFound": "మీ లక్ష్య భాషకు సంబంధించిన ఏ కోర్సులు కూడా మనకు కనుగొనబడలేదు. మీరు ఈ మధ్య Pangea బాట్‌తో చాట్ చేయవచ్చు, మరియు తర్వాత మరిన్ని కోర్సుల కోసం తిరిగి చూడవచ్చు.", "botActivityJoinFailMessage": "Pangea బాట్ స్పందించడంలో కొంత సమయం తీసుకుంటోంది. దయచేసి తర్వాత ప్రయత్నించండి, లేదా స్నేహితుడిని ఆహ్వానించండి.", @@ -12798,14 +10331,6 @@ "leaveDesc": "ఈ స్థలం మరియు దాని అంతర్గత అన్ని చాట్‌లను విడిచిపెట్టండి", "selectAll": "అన్ని ఎంచుకోండి", "deselectAll": "అన్ని తొలగించండి", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12814,10 +10339,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12834,10 +10355,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12871,7 +10388,6 @@ "newMessageInPangeaChat": "💬 పాంగియా చాట్‌లో కొత్త సందేశం", "shareCourse": "కోర్సును పంచుకోండి", "addCourse": "కోర్సును జోడించండి", - "joinCourseWithCode": "కోడ్‌తో కోర్సులో చేరండి", "joinPublicCourse": "పబ్లిక్ కోర్సులో చేరండి", "vocabLevelsDesc": "మీరు వాటిని లెవెల్ చేయగానే ఇది వాక్యబోధన పదాలు అక్కడికి పోతాయి!", "highlightVocabTooltip": "చాట్‌లో వాటిని పంపడం లేదా వాటితో ప్రాక్టీస్ చేయడం ద్వారా కింద లక్ష్య పదజాల పదాలను హైలైట్ చేయండి", @@ -12895,10 +10411,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12907,7 +10419,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "DMలు లేదా చాట్లు కనుగొనబడలేదు. మీ శోధన సరిగ్గా ఉచ్చరించబడిందని నిర్ధారించుకోండి.", + "activityAnalyticsTooltipBody": "ఇవి సమీక్ష మరియు అభ్యాసం కోసం మీ సేవ్ చేసిన కార్యకలాపాలు.", + "numSavedActivities": "సేవ్ చేసిన కార్యకలాపాల సంఖ్య", + "saveActivityTitle": "కార్యకలాపాన్ని సేవ్ చేయండి", + "saveActivityDesc": "మంచి పని! ఈ కార్యకలాపాన్ని తరువాత సమీక్ష మరియు అభ్యాసం కోసం సేవ్ చేయండి", + "levelInfoTooltip": "మీరు సంపాదించిన అన్ని పాయింట్లు మరియు ఎలా పొందారో ఇక్కడ చూడవచ్చు!", + "alreadyInCourseWithID": "మీరు ఇప్పటికే ఈ ప్రణాళికతో ఒక కోర్సులో ఉన్నారు. అదే ప్రణాళికతో కోర్సు సృష్టించాలా, లేదా ఉన్న కోర్సుకు వెళ్లాలా?", + "goToExistingCourse": "ఉన్న కోర్సుకు వెళ్లండి", + "emojiView": "ఇమోజీ వీక్షణ", + "feedbackDialogDesc": "నేను కూడా తప్పులు చేస్తాను! నాకు మెరుగుపరచడానికి ఏదైనా సహాయం చేయగలరా?", + "contactHasBeenInvitedToTheCourse": "సంప్రదింపును కోర్సుకు ఆహ్వానించారు", + "activityStatsButtonTooltip": "చర్య సమాచారం", + "allow": "అనుమతించు", + "deny": "అంగీకరించు", + "enabledRenewal": "సబ్‌స్క్రిప్షన్ పునరుద్ధరణను ప్రారంభించు", + "subscriptionEndsOn": "సబ్‌స్క్రిప్షన్ ముగుస్తుంది", + "subscriptionRenewsOn": "సబ్‌స్క్రిప్షన్ పునరుద్ధరించబడుతుంది", + "waitForSubscriptionChanges": "మీ సబ్‌స్క్రిప్షన్‌లో మార్పులు యాప్‌లో ప్రతిబింబించడానికి కొంత సమయం పడవచ్చు.", + "subscribeReadingAssistance": "సందేశం సాధనాలను అన్లాక్ చేయడానికి సబ్‌స్క్రైబ్ చేయండి", + "aceDisplayName": "అచినీస్", + "achDisplayName": "అకోలి", + "afDisplayName": "ఆఫ్రికాన్స్", + "akDisplayName": "అకాన్", + "alzDisplayName": "అలూర్", + "amDisplayName": "అమ్హారిక్", + "arDisplayName": "అరబిక్", + "asDisplayName": "అస్సామీ", + "awaDisplayName": "అవధీ", + "ayDisplayName": "అయ్మారా", + "azDisplayName": "అజర్‌బైజానీ", + "baDisplayName": "బాష్కిర్", + "banDisplayName": "బాలినీస్", + "bbcDisplayName": "బటక్ టోబా", + "beDisplayName": "బెలారుసియన్", + "bemDisplayName": "బెంబా", + "bewDisplayName": "బెటావి", + "bgDisplayName": "బుల్గేరియన్", + "bhoDisplayName": "భోజ్‌పురి", + "bikDisplayName": "బికోల్", + "bmDisplayName": "బాంబారా", + "bnDisplayName": "బంగ్లా", + "bnBDDisplayName": "బెంగాలీ (బంగ్లాదేశ్)", + "bnINDisplayName": "బెంగాలీ (భారతదేశం)", + "brDisplayName": "బ్రెటన్", + "bsDisplayName": "బోస్నియన్", + "btsDisplayName": "బటక్ సిమలుంగున్", + "btxDisplayName": "బటక్ కరో", + "buaDisplayName": "బురియాట్", + "caDisplayName": "కాటలాన్", + "cebDisplayName": "సెబువానో", + "cggDisplayName": "చిగా", + "chmDisplayName": "మరి", + "ckbDisplayName": "కేంద్ర కుర్దిష్", + "cnhDisplayName": "హఖా చిన్", + "coDisplayName": "కోర్సికన్", + "crhDisplayName": "క్రిమియన్ టర్కిష్", + "crsDisplayName": "సెసెల్వా క్రియోల్ ఫ్రెంచ్", + "csDisplayName": "చెక్", + "cvDisplayName": "చువాష్", + "cyDisplayName": "వెల్ష్", + "daDisplayName": "డానిష్", + "deDisplayName": "జర్మన్", + "dinDisplayName": "డింకా", + "doiDisplayName": "డోగ్రి", + "dovDisplayName": "డొంబే", + "dzDisplayName": "జొంగ్ఖా", + "eeDisplayName": "ఈవే", + "enDisplayName": "ఇంగ్లీష్", + "enAUDisplayName": "ఇంగ్లీష్ (ఆస్ట్రేలియా)", + "enGBDisplayName": "ఇంగ్లీష్ (యూకే)", + "enINDisplayName": "ఇంగ్లీష్ (భారతదేశం)", + "enUSDisplayName": "ఇంగ్లీష్ (అమెరికా)", + "eoDisplayName": "ఎస్పెరాంటో", + "esDisplayName": "స్పానిష్", + "esESDisplayName": "స్పానిష్ (స్పెయిన్)", + "esMXDisplayName": "స్పానిష్ (మెక్సికో)", + "euDisplayName": "బాస్క్", + "faDisplayName": "పర్షియన్", + "ffDisplayName": "ఫులా", + "fiDisplayName": "ఫిన్నిష్", + "filDisplayName": "ఫిలిపినో", + "fjDisplayName": "ఫిజియన్", + "foDisplayName": "ఫారోఈజ్", + "frDisplayName": "ఫ్రెంచ్", + "frCADisplayName": "ఫ్రెంచ్ (కెనడా)", + "frFRDisplayName": "ఫ్రెంచ్ (ఫ్రాన్స్)", + "fyDisplayName": "పశ్చిమ ఫ్రిజియన్", + "gaDisplayName": "ఐరిష్", + "gaaDisplayName": "గా", + "gdDisplayName": "స్కాటిష్ గేలిక్", + "glDisplayName": "గాలిషియన్", + "gnDisplayName": "గ్వారాని", + "gomDisplayName": "గోవా కొంకణి", + "guDisplayName": "గుజరాతీ", + "haDisplayName": "హౌసా", + "hawDisplayName": "హవాయియన్", + "heDisplayName": "హిబ్రూ", + "hiDisplayName": "హిందీ", + "hilDisplayName": "హిలిగాయ్నాన్", + "hmnDisplayName": "హ్మాంగ్", + "hneDisplayName": "ఛత్తీస్‌గఢి", + "hrDisplayName": "క్రొయేషియన్", + "hrxDisplayName": "హన్స్‌రిక్", + "htDisplayName": "హైటియన్ క్రియోల్", + "huDisplayName": "హంగేరియన్", + "hyDisplayName": "ఆర్మేనియన్", + "idDisplayName": "ఇండోనేషియన్", + "igDisplayName": "ఇగ్బో", + "iloDisplayName": "ఇలోకో", + "isDisplayName": "ఐస్లాండిక్", + "itDisplayName": "ఇటాలియన్", + "jaDisplayName": "జపనీస్", + "jvDisplayName": "జావా", + "kaDisplayName": "జార్జియన్", + "kkDisplayName": "కజాక్", + "kmDisplayName": "ఖ్మేర్", + "knDisplayName": "కన్నడ", + "koDisplayName": "కొరియన్", + "kokDisplayName": "కొంకణి", + "kriDisplayName": "క్రియో", + "ksDisplayName": "కశ్మీరీ", + "ktuDisplayName": "కిటుబా (డెమోక్రటిక్ రిపబ్లిక్ ఆఫ్ కాంగో)", + "kuDisplayName": "కుర్దిష్", + "kyDisplayName": "కిర్గిజ్", + "laDisplayName": "లాటిన్", + "lbDisplayName": "లక్సెంబర్గిష్", + "lgDisplayName": "గాండా", + "liDisplayName": "లింబర్గిష్", + "lijDisplayName": "లిగూరియన్", + "lmoDisplayName": "లొంబార్డ్", + "lnDisplayName": "లింగాలా", + "loDisplayName": "లావో", + "ltDisplayName": "లిథువేనియన్", + "ltgDisplayName": "లాట్గాలియన్", + "luoDisplayName": "లువో (కెన్యా మరియు టాంజానియా)", + "lusDisplayName": "మిజో", + "lvDisplayName": "లాట్వియన్", + "maiDisplayName": "మైతిలి", + "makDisplayName": "మకాసర్", + "mgDisplayName": "మలగాసీ", + "miDisplayName": "మావోరి", + "minDisplayName": "మినంగ్కబౌ", + "mkDisplayName": "మాసెడోనియన్", + "mlDisplayName": "మలయాళం", + "mnDisplayName": "మంగోలియన్", + "mniDisplayName": "మణిపురి", + "mrDisplayName": "మరాఠీ", + "msDisplayName": "మలయ్", + "msArabDisplayName": "మలయ్ (అరబిక్)", + "msMYDisplayName": "మలయ్ (మలేషియా)", + "mtDisplayName": "మాల్టీస్", + "mwrDisplayName": "మార్వారీ", + "myDisplayName": "బర్మీస్", + "nanDisplayName": "మిన్ నాన్", + "nbDisplayName": "నార్వేజియన్ (బోక్‌మాల్)", + "neDisplayName": "నేపాలీ", + "newDisplayName": "న్యువారీ", + "nlDisplayName": "డచ్", + "nlBEDisplayName": "ఫ్లెమిష్", + "noDisplayName": "నార్వేజియన్", + "nrDisplayName": "దక్షిణ న్డెబెలే", + "nsoDisplayName": "ఉత్తర సోతో", + "nusDisplayName": "న్యూర్", + "nyDisplayName": "న్యాంజా", + "ocDisplayName": "ఒసిటాన్", + "omDisplayName": "ఒరోమో", + "orDisplayName": "ఒడియా", + "paDisplayName": "పంజాబీ", + "paArabDisplayName": "పంజాబీ (షహ్ముఖి)", + "paINDisplayName": "పంజాబీ (గుర్ముఖి)", + "pagDisplayName": "పంగాసినాన్", + "pamDisplayName": "పాంపంగా", + "papDisplayName": "పాపియమెంటో", + "plDisplayName": "పోలిష్", + "psDisplayName": "పాష్టో", + "ptDisplayName": "పోర్చుగీస్", + "ptBRDisplayName": "పోర్చుగీస్ (బ్రెజిల్)", + "ptPTDisplayName": "పోర్చుగీస్ (పోర్చుగల్)", + "quDisplayName": "కెచ్‌వా", + "rajDisplayName": "రాజస్థానీ", + "rnDisplayName": "రుండి", + "roDisplayName": "రోమానియన్", + "roMDDisplayName": "మోల్డోవన్", + "romDisplayName": "రోమనీ", + "ruDisplayName": "రష్యన్", + "rwDisplayName": "కిన్యార్వాండా", + "saDisplayName": "సంస్కృతం", + "satDisplayName": "సంతాలి", + "scnDisplayName": "సిసిలియన్", + "sdDisplayName": "సిందీ", + "sgDisplayName": "సంగో", + "shnDisplayName": "షాన్", + "siDisplayName": "సింహళ", + "skDisplayName": "స్లోవాక్", + "slDisplayName": "స్లోవేనియన్", + "smDisplayName": "సామోనియన్", + "snDisplayName": "షోనా", + "soDisplayName": "సోమాలీ", + "sqDisplayName": "అల్బేనియన్", + "srDisplayName": "సెర్బియన్", + "srMEDisplayName": "మొంటెనెగ్రిన్", + "ssDisplayName": "స్వాతి", + "stDisplayName": "దక్షిణ సోతో", + "suDisplayName": "సుందనీస్", + "svDisplayName": "స్వీడిష్", + "swDisplayName": "స్వాహిలీ", + "szlDisplayName": "సిలేషియన్", + "taDisplayName": "తమిళం", + "teDisplayName": "తెలుగు", + "tetDisplayName": "టెటమ్", + "tgDisplayName": "తాజిక్", + "thDisplayName": "థాయ్", + "tiDisplayName": "టిగ్రిన్యా", + "tkDisplayName": "టర్క్మెన్", + "tlDisplayName": "టాగలాగ్", + "tnDisplayName": "ట్వానా", + "trDisplayName": "టర్కిష్", + "tsDisplayName": "ట్సోంగా", + "ttDisplayName": "టాటార్", + "ugDisplayName": "ఉయ్గూర్", + "ukDisplayName": "ఉక్రెయిన్", + "urDisplayName": "ఉర్దూ", + "urINDisplayName": "ఉర్దూ (భారతదేశం)", + "urPKDisplayName": "ఉర్దూ (పాకిస్తాన్)", + "uzDisplayName": "ఉజ్బెక్", + "viDisplayName": "వియత్నామీస్", + "wuuDisplayName": "వు", + "xhDisplayName": "క్సోసా", + "yiDisplayName": "యిడ్దిష్", + "yoDisplayName": "యోరుబా", + "yuaDisplayName": "యుకాటెకో", + "yueDisplayName": "కాంటోనీస్", + "yueCNDisplayName": "కాంటోనీస్ (చైనా)", + "yueHKDisplayName": "కాంటోనీస్ (హాంకాంగ్)", + "zhDisplayName": "చైనీస్", + "zhCNDisplayName": "చైనీస్ (సరళీకృత)", + "zhTWDisplayName": "చైనీస్ (సాంప్రదాయ)", + "zuDisplayName": "జులూ", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12974,6 +11672,7 @@ "notStartedActivitiesTitle": "ఓపెన్ సెషన్స్ ({num})", "inProgressActivitiesTitle": "ఇప్పుడు జరుగుతోంది ({num})", "completedActivitiesTitle": "చేయబడింది ({num})", + "pickDifferentActivity": "ఇంకొక కార్యకలాపాన్ని ఎంచుకోండి", "inOngoingActivity": "మీకు ఒక కొనసాగుతున్న కార్యకలాపం ఉంది!", "@notStartedActivitiesTitle": { "type": "String", @@ -12999,10 +11698,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "మీ లక్ష్య భాష ఈ సందేశానికి సరిపోలడం లేదు. మీ లక్ష్య భాషను నవీకరించాలా?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "ఈ కోర్సులో ఉన్న అందరూ ఇక్కడ ఉన్నారు. ఏ వినియోగదారుడి అవతారంపై క్లిక్ చేసి \"సంభాషణ ప్రారంభించండి\" అని నేరుగా సందేశం పంపండి.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "ఈ పదం మీ విశ్లేషణల నుండి శాశ్వతంగా తొలగించబడుతుంది", + "woman": "మహిళ", + "man": "పురుషుడు", + "otherGender": "ఇతర", + "unselectedGender": "ఒక లింగ ఎంపికను ఎంచుకోండి", + "gender": "లింగం", + "chatParticipantTooltip": "ఈ చాట్లో ఉన్న అందరే. ఏ వినియోగదారుడి అవతారంపై క్లిక్ చేసి \"సంభాషణ ప్రారంభించండి\" అని నేరుగా సందేశం పంపండి.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "మీ లక్ష్య భాషలో లేని సందేశాల కోసం అభ్యాస సాధనాలు అచ్ఛుతం చేయబడ్డాయి.", + "vocabEmoji": "వాక్యములు ఎమోజీ", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "పునఃసృష్టి అభ్యర్థించండి", + "optionalRegenerateReason": "(ఐచ్ఛికం) కారణం", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "{lemma} కోసం మీరు ఈ ఎమోజీని సెట్ చేసారు! మేము ఈ ఎమోజీని ప్రాక్టీస్ కార్యకలాపాలలో పదాన్ని ప్రాతినిధ్యం వహించడానికి ఉపయోగిస్తాము.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "సైన్ ఇన్ పూర్తి కావడానికి వేచి ఉంది", + "ssoDialogDesc": "మీరు సురక్షితంగా సైన్ ఇన్ కావడానికి మేము కొత్త టాబ్‌ను తెరిచాము.", + "ssoDialogHelpText": "🤔 మీరు కొత్త టాబ్‌ను చూడకపోతే, దయచేసి మీ పాప్-అప్ బ్లాకర్‌ను తనిఖీ చేయండి.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "భాషా సాధనాలను నిలిపివేయండి", + "disableLanguageToolsDesc": "మీరు ఆటోమేటిక్ భాషా సహాయాన్ని నిలిపివేయాలనుకుంటున్నారా?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "అనుమతి నిరాకరించబడింది. ఆడియో సందేశాలను రికార్డ్ చేయడానికి రికార్డింగ్ అనుమతులను ప్రారంభించండి.", + "genericWebRecordingError": "ఏదో తప్పు జరిగింది. సందేశాలను రికార్డ్ చేయడానికి Chrome బ్రౌజర్‌ను ఉపయోగించడం సిఫారసు చేస్తాము.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "ఈ అనువర్తనం ఉపయోగించడానికి ఉత్తమ అనుభవం కోసం, దయచేసి మీ స్క్రీన్ పరిమాణాన్ని విస్తరించండి.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "తరువాతి అంశాన్ని అన్లాక్ చేయడానికి కార్యకలాపాలు", "activitiesToUnlockTopicDesc": "తరువాతి కోర్సు అంశాన్ని అన్లాక్ చేయడానికి కార్యకలాపాల సంఖ్యను సెట్ చేయండి", "@activitiesToUnlockTopicTitle": { @@ -13012,5 +11829,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "సరైన పదకోశ నిర్వచన అభ్యాసం", + "constructUseIncLMDesc": "తప్పు పదకోశ నిర్వచన అభ్యాసం", + "constructUseCorLADesc": "సరైన పదకోశ ఆడియో అభ్యాసం", + "constructUseIncLADesc": "తప్పు పదకోశ ఆడియో అభ్యాసం", + "constructUseBonus": "పదకోశ అభ్యాసం సమయంలో బోనస్", + "practiceVocab": "పదకోశాన్ని అభ్యాసం చేయండి", + "selectMeaning": "అర్థాన్ని ఎంచుకోండి", + "selectAudio": "సమానమైన ఆడియోను ఎంచుకోండి", + "congratulations": "అభినందనలు!", + "anotherRound": "మరొక రౌండ్", + "noActivityRequest": "ప్రస్తుతం ఎలాంటి కార్యకలాపం అభ్యర్థన లేదు.", + "quit": "విడుదల", + "congratulationsYouveCompletedPractice": "అభినందనలు! మీరు అభ్యాస సెషన్‌ను పూర్తి చేశారు.", + "mustHave10Words": "మీరు వాటిని అభ్యాసం చేయడానికి కనీసం 10 పదాలను కలిగి ఉండాలి. మరింత తెలుసుకోవడానికి మీ స్నేహితుడితో లేదా పాంజియా బాట్‌తో మాట్లాడండి!", + "botSettings": "బాట్ సెట్టింగులు", + "activitySettingsOverrideWarning": "కార్యకలాపం ప్రణాళిక ద్వారా నిర్ణయించబడిన భాష మరియు భాష స్థాయి", + "voice": "శబ్దం", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index a5ed06ea7..d810730a4 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -3323,28 +3323,16 @@ "commandHint_logoutall": "ออกจากอุปกรณ์ทั้งหมดที่ใช้งานอยู่", "displayNavigationRail": "แสดงแถบการนำทางบนมือถือ", "customReaction": "ปฏิกิริยาที่กำหนดเอง", - "accountInformation": "ข้อมูลบัญชี", - "addGroupDescription": "เพิ่มคำอธิบายแชท", - "addNewFriend": "เพิ่มเพื่อนใหม่", - "alreadyHaveAnAccount": "มีบัญชีอยู่แล้ว?", - "createNewGroup": "สร้างแชทใหม่", - "editChatPermissions": "แก้ไขสิทธิ์การแชท", "ignore": "บล็อก", "ignoredUsers": "ผู้ใช้ที่ถูกบล็อก", "writeAMessageLangCodes": "พิมพ์ใน {l1} หรือ {l2}...", "requests": "คำขอ", - "allCorrect": "แบบนั้นแหละที่ฉันจะพูด! เยี่ยม!", - "newWayAllGood": "นั่นไม่ใช่วิธีที่ฉันจะพูด แต่ดูดี!", - "othersAreBetter": "อืม อาจมีวิธีที่ดีกว่านั้นในการพูด", "holdForInfo": "คลิกและกดค้างเพื่อดูข้อมูลคำ", "greenFeedback": "นั่นคือสิ่งที่ฉันจะใส่!", "yellowFeedback": "อืม คุณสามารถลองดูและดูว่ามันใช้งานได้ไหม! เพื่อใช้คำนี้ เพียงคลิกอีกครั้ง", "redFeedback": "ฉันไม่คิดว่านั่นถูกต้อง...", "itInstructionsTitle": "ฉันสามารถช่วยคุณแปลได้!", "itInstructionsBody": "คุณสามารถคลิกและกดค้างตัวเลือกเพื่อดูข้อมูลคำ", - "oneday": "24 ชั่วโมงที่ผ่านมา", - "oneweek": "7 วันที่ผ่านมา", - "onemonth": "เดือนที่ผ่านมา", "gaTooltip": "ใช้ L2 พร้อมความช่วยเหลือด้านไวยากรณ์", "taTooltip": "ใช้ L2 พร้อมความช่วยเหลือด้านการแปล", "unTooltip": "อื่น ๆ", @@ -3354,58 +3342,27 @@ "interactiveTranslatorAllowed": "ตัวเลือกของนักเรียน", "interactiveTranslatorRequired": "จำเป็น", "notYetSet": "ยังไม่ได้ตั้งค่า", - "myLearning": "วิเคราะห์ข้อมูลของฉัน", "waTooltip": "ใช้ L2 โดยไม่ต้องความช่วยเหลือ", - "changeDateRange": "เปลี่ยนช่วงวันที่", - "classDescription": "คำอธิบาย", - "addStudents": "เชิญผู้ใช้โดยลิงก์หรือรหัส", - "copyClassLink": "คัดลอกลิงก์เชิญ", - "copyClassCode": "คัดลอกโค้ดเชิญ", - "inviteStudentByUserName": "เชิญผู้ใช้โดยชื่อผู้ใช้", "languageSettings": "การตั้งค่าภาษา", "interactiveTranslator": "ความช่วยเหลือในการแปล", - "shareVideo": "แชร์วิดีโอ", - "shareVideoDesc": "เปิดใช้งานเพื่อให้ผู้เรียนสามารถแชร์วิดีโอในแชทได้", - "shareFiles": "แชร์ไฟล์", - "selectLanguageLevel": "เลือกระดับภาษา", "noIdenticalLanguages": "โปรดเลือกภาษาพื้นฐานและภาษาปลายทางที่แตกต่างกัน", - "iWantALanguagePartnerFrom": "มาจาก:", - "worldWide": "ทั่วโลก", - "noResults": "ไม่พบผลลัพธ์! ลองขยายการค้นหา", "searchBy": "ค้นหาตามประเทศและภาษา", - "iWantAConversationPartner": "ฉันต้องการคู่สนทนาที่", - "iWantALanguagePartnerWhoSpeaks": "พูดภาษา:", - "iWantALanguagePartnerWhoIsLearning": "กำลังเรียนรู้:", "joinWithClassCode": "เข้าร่วมคอร์ส", - "joinWithClassCodeHint": "ป้อนรหัสเชิญ", - "languageLevelPreA1": "ผู้เริ่มต้นจริง (Pre A1)", - "languageLevelA1": "ผู้เริ่มต้น (A1)", - "languageLevelA2": "ระดับพื้นฐาน (A2)", - "languageLevelB1": "ระดับกลาง (B1)", - "languageLevelB2": "ระดับกลางขั้นสูง (B2)", - "languageLevelC1": "ระดับสูง (C1)", - "languageLevelC2": "เชี่ยวชาญ (C2)", + "languageLevelPreA1": "ระดับเริ่มต้นต่ำ (Pre A1)", + "languageLevelA1": "มือใหม่ ระดับกลาง (A1)", + "languageLevelA2": "ระดับเริ่มต้นสูง (A2)", + "languageLevelB1": "ระดับกลางกลาง (B1)", + "languageLevelB2": "ระดับสูงต่ำ (B2)", + "languageLevelC1": "ระดับสูงกลาง (C1)", + "languageLevelC2": "ระดับสูงสุด (C2)", "changeTheNameOfTheClass": "เปลี่ยนชื่อ", "changeTheNameOfTheChat": "เปลี่ยนชื่อแชท", - "askPangeaBot": "ถาม Pangea Bot เพื่อคำจำกัดความตามบริบท", "sorryNoResults": "ขออภัย ไม่มีผลลัพธ์", "ignoreInThisText": "ละเว้น", - "helpMeTranslate": "ใช่!", - "needsItShortMessage": "อยู่นอกเป้าหมาย", "needsItMessage": "รอเดี๋ยว นั่นไม่ใช่ {targetLanguage}! คุณต้องการความช่วยเหลือในการแปลไหม?", - "needsIgcMessage": "ข้อความนี้มีข้อผิดพลาดด้านไวยากรณ์", - "tokenTranslationTitle": "คำในภาษาหลักของคุณ", - "spanTranslationDesc": "ดูคำแปลที่เป็นไปได้ด้านล่าง", - "spanTranslationTitle": "คำบางคำอยู่ในภาษาหลักของคุณ", - "l1SpanAndGrammarTitle": "นอกภาษาปลายทาง", - "l1SpanAndGrammarDesc": "อาจเป็นในภาษาหลักของคุณหรืออาจเป็นข้อผิดพลาดด้านไวยากรณ์", - "otherTitle": "คุณมีข้อผิดพลาด", - "otherDesc": "ดูคำแนะนำที่เป็นไปได้ด้านล่าง", "countryInformation": "ประเทศของฉัน", - "myLanguages": "ภาษาหลักและภาษาปลายทางของฉัน", "targetLanguage": "ภาษาปลายทาง", "sourceLanguage": "ภาษาหลัก", - "languagesISpeak": "ภาษาที่ฉันพูด", "updateLanguage": "ภาษาของฉัน", "whatLanguageYouWantToLearn": "คุณต้องการเรียนรู้ภาษาอะไร", "whatIsYourBaseLanguage": "ภาษาหลักของคุณคืออะไร", @@ -3420,13 +3377,8 @@ "errorDisableLanguageAssistanceUserDesc": "คลิกที่นี่เพื่ออัปเดตการตั้งค่าการช่วยเหลือด้านการแปลและไวยากรณ์", "errorDisableITClassDesc": "การช่วยเหลือด้านการแปลถูกปิดใช้งานสำหรับหลักสูตรที่แชทนี้อยู่", "errorDisableIGCClassDesc": "การช่วยเหลือด้านไวยากรณ์ถูกปิดใช้งานสำหรับหลักสูตรที่แชทนี้อยู่", - "itIsDisabled": "การแปลแบบโต้ตอบถูกปิดใช้งาน", - "igcIsDisabled": "การตรวจสอบไวยากรณ์แบบโต้ตอบถูกปิดใช้งาน", - "goToLearningSettings": "ไปที่การตั้งค่าการเรียนรู้", "error405Title": "ภาษายังไม่ได้ตั้งค่า", "error405Desc": "กรุณาตั้งค่าภาษาของคุณในเมนหลัก > การตั้งค่าการเรียนรู้", - "loginOrSignup": "เข้าสู่ระบบด้วย", - "iAgreeToThe": "ฉันยอมรับ ", "termsAndConditions": "ข้อกำหนดและเงื่อนไข", "andCertifyIAmAtLeast13YearsOfAge": " และรับรองว่าฉันมีอายุอย่างน้อย 16 ปี", "error502504Title": "ว้าว มีนักเรียนออนไลน์จำนวนมาก!", @@ -3434,40 +3386,21 @@ "error404Title": "เกิดข้อผิดพลาดในการแปล!", "error404Desc": "Pangea Bot ไม่แน่ใจว่าจะจะแปลอย่างไร...", "errorPleaseRefresh": "เรากำลังตรวจสอบอยู่! กรุณารีเฟรชหน้าและลองใหม่อีกครั้ง", - "toggleIT": "การแปลแบบโต้ตอบ", - "toggleIGC": "การตรวจไวยากรณ์แบบโต้ตอบ", - "toggleToolSettingsDescription": "ที่นี่คุณสามารถเปิดปิดการตั้งค่าของเครื่องมือภาษาของคุณแต่ละภาษา", "connectedToStaging": "เชื่อมต่อกับสเตจ", "learningSettings": "การตั้งค่าการเรียนรู้", - "sendVoiceNotes": "ส่งบันทึกเสียง", - "sendVoiceNotesDesc": "เปิดใช้งานเพื่ออนุญาตให้นักเรียนส่งบันทึกเสียงในแชท", - "chatTopic": "หัวข้อแชท", - "chatTopicDesc": "ตั้งหัวข้อแชท", - "inviteStudentByUserNameDesc": "ถ้านักเรียนของคุณมีบัญชีอยู่แล้ว คุณสามารถค้นหาพวกเขาได้", "participants": "ผู้เข้าร่วม", - "almostPerfect": "ดูเหมือนจะถูกต้อง! นี่คือสิ่งที่ฉันจะพูด", - "prettyGood": "ค่อนข้างดี! นี่คือสิ่งที่ฉันจะพูด", - "letMeThink": "อืม ลองดูว่าคุณทำได้ดีแค่ไหน!", "clickMessageTitle": "ต้องการความช่วยเหลือไหม?", "clickMessageBody": "คลิกข้อความเพื่อเครื่องมือภาษาต่าง ๆ เช่น การแปล การเล่นซ้ำ และอื่น ๆ!", - "understandingMessagesTitle": "คำจำกัดความและการแปล!", - "understandingMessagesBody": "คลิกคำที่ขีดเส้นใต้เพื่อดูคำจำกัดความ แปลด้วยตัวเลือกข้อความ (ด้านบนขวา)", "allDone": "เสร็จแล้ว!", "vocab": "คำศัพท์", "low": "เราพบหลักฐานว่าผู้ใช้ไม่เข้าใจคำเหล่านี้", "medium": "คำเหล่านี้ถูกใช้ไปแล้ว ยังไม่ชัดเจนว่าผู้ใช้เข้าใจคำเหล่านี้เต็มที่หรือไม่", "high": "เราพบหลักฐานว่าผู้ใช้เข้าใจคำเหล่านี้", - "unknownProficiency": "คำเหล่านี้ยังไม่เคยถูกใช้ใน Pangea Chat", - "changeView": "เปลี่ยนมุมมอง", - "clearAll": "ลบคำทั้งหมด?", - "generateVocabulary": "สร้างคำศัพท์จากหัวข้อและคำอธิบาย", - "generatePrompts": "สร้างคำแนะนำ", "subscribe": "สมัครสมาชิก", "getAccess": "สมัครสมาชิกตอนนี้!", "subscriptionDesc": "การส่งข้อความฟรี! สมัครสมาชิกเพื่อปลดล็อกการแปลแบบโต้ตอบ การตรวจสอบไวยากรณ์ และวิเคราะห์การเรียนรู้", "subscriptionManagement": "การจัดการการสมัครสมาชิก", "currentSubscription": "การสมัครสมาชิกปัจจุบัน", - "changeSubscription": "เปลี่ยนการสมัครสมาชิกของคุณ", "cancelSubscription": "ยกเลิกการสมัครสมาชิกของคุณ", "selectYourPlan": "เลือกแผนของคุณ", "subsciptionPlatformTooltip": "โปรดเข้าสู่ระบบอุปกรณ์เดิมของคุณเพื่อจัดการแผนการสมัครสมาชิก", @@ -3476,9 +3409,6 @@ "paymentHistory": "ประวัติการชำระเงิน", "emptyChatDownloadWarning": "ไม่สามารถดาวน์โหลดแชทว่างเปล่า", "update": "อัปเดต", - "updateDesc": "ตอนนี้คุณสามารถอัปเดตแอปนี้จาก {localVersion} เป็น {storeVersion}", - "maybeLater": "อาจจะภายหลัง", - "mainMenu": "เมนูหลัก", "toggleImmersionMode": "โหมดการจมอยู่", "toggleImmersionModeDesc": "เมื่อเปิดใช้งาน ข้อความทั้งหมดจะแสดงในภาษาที่คุณตั้งเป้าหมายไว้ การตั้งค่านี้มีประโยชน์มากที่สุดในการแลกเปลี่ยนภาษา", "itToggleDescription": "เครื่องมือนี้จะระบุคำในภาษาพื้นฐานของคุณและช่วยแปลเป็นภาษาที่คุณตั้งเป้าหมายไว้ แม้จะพบได้น้อย แต่ AI อาจทำผิดพลาดในการแปล", @@ -3493,212 +3423,13 @@ "definitionsToolDescription": "เมื่อเปิดใช้งาน คำที่ขีดเส้นใต้เป็นสีน้ำเงินสามารถคลิกเพื่อดูคำจำกัดความ คลิกที่ข้อความเพื่อเข้าถึงคำจำกัดความ", "translationsToolDescrption": "เมื่อเปิดใช้งาน คลิกที่ข้อความและไอคอนการแปลเพื่อดูข้อความในภาษาพื้นฐานของคุณ", "welcomeBack": "ยินดีต้อนรับกลับ! หากคุณเป็นส่วนหนึ่งของโครงการนำร่อง 2023-2024 กรุณาติดต่อเราเพื่อรับการสมัครสมาชิกพิเศษ หากคุณเป็นครูที่ได้ซื้อใบอนุญาตสำหรับชั้นเรียนของคุณ ติดต่อเราเพื่อรับสมัครสมาชิกครู", - "kickAllStudents": "เตะนักเรียนทั้งหมด", - "kickAllStudentsConfirmation": "คุณแน่ใจหรือว่าต้องการเตะนักเรียนทั้งหมด?", - "inviteAllStudents": "เชิญชื่อนักเรียนทั้งหมด", - "inviteAllStudentsConfirmation": "คุณแน่ใจหรือว่าต้องการเชิญชื่อนักเรียนทั้งหมด?", - "inviteUsersFromPangea": "เพิ่มผู้ดูแลระบบ", - "redeemPromoCode": "แลกโค้ดโปรโมชั่น", - "enterPromoCode": "ป้อนโค้ดโปรโมชั่น", "downloadTxtFile": "ดาวน์โหลดไฟล์ข้อความ", "downloadCSVFile": "ดาวน์โหลดไฟล์ CSV", "promotionalSubscriptionDesc": "คุณมีการสมัครสมาชิกโปรโมชั่นตลอดชีพในปัจจุบัน ติดต่อ support@pangea.chat เพื่อขอความช่วยเหลือในการเปลี่ยนแปลงการสมัครสมาชิกของคุณ", "originalSubscriptionPlatform": "การสมัครสมาชิกที่ซื้อผ่าน {purchasePlatform}", "oneWeekTrial": "ทดลองใช้หนึ่งสัปดาห์", "downloadXLSXFile": "ดาวน์โหลดไฟล์ Excel", - "abDisplayName": "อับฮาซ", - "aaDisplayName": "อาฟาร์", - "afDisplayName": "อาฟริกันส์", - "akDisplayName": "อาคัน", - "sqDisplayName": "แอลเบเนีย", - "amDisplayName": "อัมฮาริก", - "arDisplayName": "อาหรับ", - "anDisplayName": "อารากอน", - "hyDisplayName": "อาร์เมเนีย", - "asDisplayName": "อัสสัม", - "avDisplayName": "อาวาเรียน", - "aeDisplayName": "อีแวนเซียน", - "ayDisplayName": "ไอมารา", - "azDisplayName": "อาเซอร์ไบจาน", - "bmDisplayName": "บามบารา", - "baDisplayName": "บาชkir", - "euDisplayName": "บาสก์", - "beDisplayName": "เบลารุส", - "bnDisplayName": "เบงกาลี", - "bhDisplayName": "ภารี", - "biDisplayName": "บิสลามา", - "bsDisplayName": "บอสเนีย", - "brDisplayName": "เบรตัน", - "bgDisplayName": "บัลแกเรีย", - "myDisplayName": "พม่า", - "caDisplayName": "คาตาลัน, วาลานเซีย", - "chDisplayName": "ชามอร์โร", - "ceDisplayName": "เชชเนีย", - "nyDisplayName": "เชวา, เชวา, นิยันจา", - "zhDisplayName": "จีน", - "cvDisplayName": "ชูวาช", - "kwDisplayName": "คอร์นิช", - "coDisplayName": "คอร์ซิกา", - "crDisplayName": "ครี", - "hrDisplayName": "โครเอเชีย", - "csDisplayName": "เช็ก", - "daDisplayName": "เดนมาร์ก", - "dvDisplayName": "ดีวีฮิ; ดีวีฮี; มัลดีฟ", - "nlDisplayName": "ดัตช์", - "enDisplayName": "อังกฤษ", - "eoDisplayName": "เอสเปรันโต", - "etDisplayName": "เอสโตเนีย", - "eeDisplayName": "เอเว", - "foDisplayName": "ฟาโรese", - "fjDisplayName": "ฟิจิ", - "fiDisplayName": "ฟินแลนด์", - "frDisplayName": "ฝรั่งเศส", - "ffDisplayName": "ฟูลา; ฟูลาห์; พูลาอาร์; พูลาร์", - "glDisplayName": "กาลิเซีย", - "kaDisplayName": "จอร์เจีย", - "deDisplayName": "เยอรมัน", - "elDisplayName": "กรีก, สมัยใหม่", - "gnDisplayName": "กัวรานี", - "guDisplayName": "คุชราฏ", - "htDisplayName": "เฮติ, ครีโอลเฮติ", - "haDisplayName": "ฮาวซา", - "heDisplayName": "ฮีบรู (สมัยใหม่)", - "hzDisplayName": "เฮโรโร", - "hiDisplayName": "ฮินดี", - "hoDisplayName": "ฮิริ โมตู", - "huDisplayName": "ฮังการี", - "iaDisplayName": "อินเทอร์ลิงกวา", - "idDisplayName": "อินโดนีเซีย", - "ieDisplayName": "อินเทอร์ลิงกวี", - "gaDisplayName": "ไอริช", - "igDisplayName": "อิกโบ", - "ikDisplayName": "อินูเปียก", - "ioDisplayName": "อิโด", - "isDisplayName": "ไอซ์แลนด์", - "itDisplayName": "อิตาลี", - "iuDisplayName": "อินุกทิตุต", - "jaDisplayName": "ญี่ปุ่น", - "jvDisplayName": "ชวา", - "klDisplayName": "กาลาอัลลิสุต, กรีนแลนด์", - "knDisplayName": "คันนาดา", - "krDisplayName": "คานูรี", - "ksDisplayName": "คาชิเมรี", - "kkDisplayName": "คาซัค", - "kmDisplayName": "เขมร", - "kiDisplayName": "คิคุยู, กิกุยู", - "rwDisplayName": "คินยาร์วานดา", - "kyDisplayName": "คีร์กีซ, คีร์กีซสถาน", - "kvDisplayName": "โคมี", - "kgDisplayName": "คองโก", - "koDisplayName": "เกาหลี", - "kuDisplayName": "เคิร์ด", - "kjDisplayName": "ควานยามา, ควานยามา", - "laDisplayName": "ละติน", - "lbDisplayName": "ลักเซมเบิร์ก, เลทเซอร์เบิร์ก", - "lgDisplayName": "ลากันดา", - "liDisplayName": "ลิมบูร์ก, ลิมบูร์กัน, ลิมบูร์เกอร์", - "lnDisplayName": "ลิงกาลา", - "loDisplayName": "ภาษาลาว", - "ltDisplayName": "ภาษาลิทัวเนีย", - "luDisplayName": "ลูบา-คังตากา", - "lvDisplayName": "ภาษาลัตเวีย", - "gvDisplayName": "แมนน์", - "mkDisplayName": "มาซิโดเนีย", - "mgDisplayName": "มาลากาซี", - "msDisplayName": "ภาษามาเลย์", - "mlDisplayName": "ภาษามาลายาลัม", - "mtDisplayName": "มอลตา", - "miDisplayName": "มาโอรี", - "mrDisplayName": "ภาษามราฐี (มาราธี)", - "mhDisplayName": "มาร์แชลลี", - "mnDisplayName": "ภาษามองโกเลีย", - "naDisplayName": "นาวูรู", - "nvDisplayName": "นาวาโจ, นาวาโฮ", - "nbDisplayName": "นอร์เวย์บ็อกมอล", - "ndDisplayName": "นอร์ท Ndebele", - "neDisplayName": "เนปาลี", - "ngDisplayName": "Ndonga", - "nnDisplayName": "นอร์เวย์นินอร์สก์", - "noDisplayName": "นอร์เวย์", - "iiDisplayName": "Nuosu", - "nrDisplayName": "เซาท์ Ndebele", - "ocDisplayName": "อ็อกซิตัน", - "ojDisplayName": "โอจิเบ, โอจิบวา", - "cuDisplayName": "ภาษาสลาวิกโบราณในโบสถ์, สลาวิกในคริสตจักร, สลาวิกในคริสตจักร, บัลแกเรียโบราณ, สลาวิกโบราณ", - "omDisplayName": "โอโรโม", - "orDisplayName": "โอริยะ", - "osDisplayName": "อ็อเซติก, อ็อเซติก", - "paDisplayName": "ปัญจาบี, ปัญจาบ", - "piDisplayName": "ภาษาปาลี", - "faDisplayName": "เปอร์เซีย", - "plDisplayName": "โปแลนด์", - "psDisplayName": "ปัชโต, ปุชโต", - "ptDisplayName": "โปรตุเกส", - "quDisplayName": "คุชูรา", - "rmDisplayName": "โรมาเนีย", - "rnDisplayName": "คิรุนดี", - "roDisplayName": "โรมาเนีย, มอลโดวา, มอลโดวา", - "ruDisplayName": "รัสเซีย", - "saDisplayName": "สันสกฤต (สัศกฤตา)", - "scDisplayName": "ซาร์ดิเนีย", - "sdDisplayName": "ซินธี", - "seDisplayName": "ซามีเหนือ", - "smDisplayName": "ซาโมอาน", - "sgDisplayName": "ซังโก", - "srDisplayName": "เซอร์เบีย", - "gdDisplayName": "กอลิกสก็อตแลนด์, กอลิก", - "snDisplayName": "โอนา", - "siDisplayName": "ซินหาลา, ซินหาลา", - "skDisplayName": "สโลวัก", - "slDisplayName": "สโลวีเนีย", - "soDisplayName": "โซมาเลีย", - "stDisplayName": "โซโทใต้", - "esDisplayName": "สเปน", - "suDisplayName": "ซุนดานese", - "swDisplayName": "สวาฮิลี", - "ssDisplayName": "สวาติ", - "svDisplayName": "สวีเดน", - "taDisplayName": "ทมิฬ", - "teDisplayName": "เตลูกู", - "tgDisplayName": "ทาจิก", - "thDisplayName": "ไทย", - "tiDisplayName": "ทิกรีนา", - "boDisplayName": "ทิเบตมาตรฐาน, ทิเบต, กลาง", - "tkDisplayName": "เติร์กเมนิสถาน", - "tlDisplayName": "แทกาล็อก", - "tnDisplayName": "ซวานา", - "toDisplayName": " Tonga (หมู่เกาะ Tonga)", - "trDisplayName": "ตุรกี", - "tsDisplayName": "ซองกา", - "ttDisplayName": "ทาทาร์", - "twDisplayName": "ทไว", - "tyDisplayName": "ตาฮีเตียน", - "ugDisplayName": "อุยกูร์, อุยกูร์", - "ukDisplayName": "ยูเครน", - "urDisplayName": "อูรดู", - "uzDisplayName": "อุซเบก", - "veDisplayName": "เวนดา", - "viDisplayName": "เวียดนาม", - "voDisplayName": "โวลาปุก", - "waDisplayName": "วาลลูน", - "cyDisplayName": "เวลส์", - "woDisplayName": "วอลอฟ", - "fyDisplayName": "เฟรนช์ตะวันตก", - "xhDisplayName": "โซซา", - "yiDisplayName": "ยิดดิช", - "yoDisplayName": "โยรูบา", - "zaDisplayName": "จ้วง, จวง", "unkDisplayName": "ไม่ทราบ", - "zuDisplayName": "ซูลู", - "hawDisplayName": "ฮาวาย", - "hmnDisplayName": "ม้ง", - "multiDisplayName": "หลายภาษา", - "cebDisplayName": "เซบูโน", - "dzDisplayName": "ภาษาจองกะ", - "iwDisplayName": "ภาษาฮิบรู", - "jwDisplayName": "ภาษาจาวา", - "moDisplayName": "ภาษามอลโดวา", - "shDisplayName": "เซอร์โบ-โครเอเชีย", "wwCountryDisplayName": "ทั่วโลก", "afCountryDisplayName": "อัฟกานิสถาน", "axCountryDisplayName": "หมู่เกาะอันลันด์", @@ -3946,41 +3677,25 @@ "yeCountryDisplayName": "เยเมน", "zmCountryDisplayName": "แซมเบีย", "zwCountryDisplayName": "ซิมบับเว", - "pay": "ชำระเงิน", - "allPrivateChats": "แชทส่วนตัวทั้งหมด", - "unknownPrivateChat": "แชทส่วนตัวที่ไม่รู้จัก", + "pay": "Checkout", "invitedToSpace": "{user} ได้เชิญคุณเข้าร่วมคอร์ส: {space}! คุณต้องการยอมรับไหม?", - "declinedInvitation": "ปฏิเสธคำเชิญ", - "acceptedInvitation": "ยอมรับคำเชิญแล้ว", "youreInvited": "📩 คุณได้รับเชิญ!", "invitedToChat": "{user} ได้เชิญคุณเข้าร่วมแชท: {name}! คุณต้องการยอมรับไหม?", "monthlySubscription": "รายเดือน", "yearlySubscription": "รายปี", "defaultSubscription": "การสมัครสมาชิก Pangea Chat", "freeTrial": "ทดลองใช้ฟรี", - "grammarAnalytics": "วิเคราะห์ข้อผิดพลาด", "total": "รวม: ", "noDataFound": "ไม่พบข้อมูล", - "promoSubscriptionExpirationDesc": "การสมัครสมาชิกปัจจุบันของคุณเป็นโปรโมชั่นและหมดอายุใน {expiration}. ส่งข้อความไปที่ support@pangea.chat เพื่อขอความช่วยเหลือในการเปลี่ยนแปลงการสมัครสมาชิกของคุณ", - "emptyChatNameWarning": "กรุณาใส่ชื่อสำหรับแชทนี้", "blurMeansTranslateTitle": "ทำไมข้อความถึงเบลอ?", "blurMeansTranslateBody": "ในขณะที่เปิดโหมด Immersion ข้อความที่ส่งในภาษาหลักของคุณจะถูกเบลอในขณะที่ Pangea Bot แปลเป็นภาษาที่คุณเลือก โหมด Immersion สามารถเปิดหรือปิดได้ในการตั้งค่ารายบุคคลและหลักสูตร", - "someErrorTitle": "อ๊ะ มีบางอย่างไม่ถูกต้อง", - "someErrorBody": "อาจเป็นข้อผิดพลาดหรือบางอย่างในภาษาหลักของคุณ", "bestCorrectionFeedback": "ถูกต้องแล้ว!", "distractorFeedback": "ไม่ค่อยถูกต้องเท่าไหร่", "bestAnswerFeedback": "ถูกต้องแล้ว!", "definitionDefaultPrompt": "คำนี้หมายความว่าอะไร?", "practiceDefaultPrompt": "คำตอบที่ดีที่สุดคืออะไร?", "correctionDefaultPrompt": "คำทดแทนที่ดีที่สุดคืออะไร?", - "itStartDefaultPrompt": "คุณต้องการความช่วยเหลือในการแปลไหม?", - "lockedChatWarning": "🔒 แชทนี้ถูกล็อกแล้ว", - "lockChat": "ล็อกแชท", - "suggestToChat": "แนะนำแชทนี้", - "suggestToChatDesc": "แชทที่แนะนำจะปรากฏในรายการแชท", "acceptSelection": "ยอมรับการแก้ไข", - "acceptSelectionAnyway": "ใช้สิ่งนี้อยู่ดี", - "makingActivity": "กำลังทำกิจกรรม", "why": "ทำไม?", "definition": "คำจำกัดความ", "exampleSentence": "ประโยคตัวอย่าง", @@ -3988,128 +3703,55 @@ "reportMessageTitle": "{reportingUserId} ได้รายงานข้อความจาก {reportedUserId} ในแชท {roomName}", "reportMessageBody": "ข้อความ: {reportedMessage}\nเหตุผล: {reason}", "noTeachersFound": "ไม่พบครูที่จะรายงาน", - "viewArchive": "ดูไฟล์เก่า", "trialExpiration": "การทดลองใช้งานฟรีของคุณจะหมดอายุใน {expiration}", "freeTrialDesc": "ผู้ใช้ใหม่จะได้รับการทดลองใช้งานฟรีหนึ่งสัปดาห์ของ Pangea Chat", "activateTrial": "ทดลองใช้งานฟรี 7 วัน", "successfullySubscribed": "คุณได้สมัครสมาชิกเรียบร้อยแล้ว!", "clickToManageSubscription": "คลิกที่นี่เพื่อจัดการการสมัครสมาชิกของคุณ", - "errorGettingAudio": "เกิดข้อผิดพลาดในการดึงเสียง กรุณารีเฟรชและลองใหม่อีกครั้ง", "signUp": "สมัครสมาชิก", "pleaseChooseAtLeastChars": "โปรดเลือกอย่างน้อย {min} ตัวอักษร", "noEmailWarning": "โปรดป้อนที่อยู่อีเมลที่ถูกต้อง มิฉะนั้นคุณจะไม่สามารถรีเซ็ตรหัสผ่านได้ หากไม่ต้องการก็แตะอีกครั้งที่ปุ่มเพื่อดำเนินการต่อ", "pleaseEnterValidEmail": "โปรดป้อนที่อยู่อีเมลที่ถูกต้อง", "pleaseChooseAUsername": "โปรดเลือกชื่อผู้ใช้", - "chooseAUsername": "เลือกชื่อผู้ใช้", "define": "กำหนด", "listen": "ฟัง", - "addConversationBot": "เปิดใช้งานบอทสนทนา", - "addConversationBotDesc": "เพิ่มบอทในแชทนี้", - "convoBotSettingsDescription": "แก้ไขหัวข้อและความยากของการสนทนา", - "enterAConversationTopic": "ป้อนหัวข้อสนทนา", - "conversationTopic": "หัวข้อสนทนา", - "enableModeration": "เปิดใช้งานการกลั่นกรอง", - "enableModerationDesc": "เปิดใช้งานการกลั่นกรองอัตโนมัติเพื่อทบทวนข้อความก่อนส่ง", - "conversationLanguageLevel": "ระดับภาษาของการสนทนานี้คืออะไร?", - "showDefinition": "แสดงคำจำกัดความ", - "subscriptionPopupTitle": "ประโยคนี้อาจมีข้อผิดพลาดด้านไวยากรณ์...", - "subscriptionPopupDesc": "สมัครสมาชิกวันนี้เพื่อปลดล็อกการแปลและการแก้ไขไวยากรณ์!", - "seeOptions": "ดูตัวเลือก", - "continuedWithoutSubscription": "ดำเนินการต่อโดยไม่สมัครสมาชิก", "trialPeriodExpired": "ระยะทดลองใช้งานของคุณหมดอายุแล้ว", - "selectToDefine": "คลิกคำใดก็ได้เพื่อดูคำจำกัดความ!", "translations": "คำแปล", "messageAudio": "เสียงข้อความ", "definitions": "คำจำกัดความ", "subscribedToUnlockTools": "สมัครสมาชิกเพื่อปลดล็อกการแปลแบบโต้ตอบและการตรวจสอบไวยากรณ์ การเล่นเสียง การฝึกฝนแบบส่วนตัว และวิเคราะห์การเรียนรู้!", "translationTooltip": "แปล", - "audioTooltip": "เล่นเสียง", "speechToTextTooltip": "ถอดเสียง", - "certifyAge": "ฉันรับรองว่าฉันมีอายุเกิน {age} ปี", "kickBotWarning": "การเตะบอท Pangea จะเป็นการลบบอทสนทนาออกจากแชทนี้", - "joinToView": "เข้าร่วมห้องนี้เพื่อดูรายละเอียด", "refresh": "รีเฟรช", - "autoPlayTitle": "เล่นอัตโนมัติข้อความ", - "autoPlayDesc": "เมื่อเปิดใช้งาน เสียงข้อความจากข้อความจะเล่นโดยอัตโนมัติเมื่อเลือก", "messageAnalytics": "วิเคราะห์ข้อความ", "words": "คำ", "score": "คะแนน", "accuracy": "ความถูกต้อง", "points": "คะแนน", "noPaymentInfo": "ไม่จำเป็นต้องมีข้อมูลการชำระเงิน!", - "conversationBotModeSelectDescription": "กิจกรรมแชท", - "conversationBotModeSelectOption_discussion": "การอภิปราย", - "conversationBotModeSelectOption_custom": "กำหนดเอง", - "conversationBotModeSelectOption_conversation": "การสนทนา", - "conversationBotModeSelectOption_textAdventure": "การผจญภัยในข้อความ", - "conversationBotModeSelectOption_storyGame": "เกมเรื่องราว", - "conversationBotDiscussionZone_title": "การตั้งค่าการอภิปราย", - "conversationBotDiscussionZone_discussionTopicLabel": "หัวข้อการอภิปราย", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "ตั้ง หัวข้อการอภิปราย", - "conversationBotDiscussionZone_discussionKeywordsLabel": "คำสำคัญในการอภิปราย", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "ตั้งคำสำคัญในการอภิปราย", - "conversationBotDiscussionZone_discussionKeywordsHintText": "รายการคำสำคัญคั่นด้วยเครื่องหมายจุลภาคเพื่อแนะนำการอภิปราย", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "ส่งคำกระตุ้นการอภิปรายตามกำหนดเวลา", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "ชั่วโมงระหว่างคำกระตุ้นการอภิปราย", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "ตอบสนองต่อปฏิกิริยา ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "ปฏิกิริยาเพื่อส่งคำกระตุ้นการอภิปราย", - "conversationBotCustomZone_title": "การตั้งค่ากำหนดเอง", - "conversationBotCustomZone_customSystemPromptLabel": "คำสั่งระบบ", - "conversationBotCustomZone_customSystemPromptPlaceholder": "ตั้งค่าคำสั่งระบบแบบกำหนดเอง", - "conversationBotCustomZone_customSystemPromptEmptyError": "ขาดคำสั่งระบบแบบกำหนดเอง", - "botConfig": "การตั้งค่าบอทและกิจกรรม", - "botConfigNoPermissionTitle": "ไม่มีสิทธิ์", - "botConfigNoPermissionMessage": "ติดต่อผู้ดูแลห้องเพื่อเปลี่ยนการตั้งค่าบอท", - "addConversationBotDialogTitleInvite": "ยืนยันการเชิญบอทสนทนา", - "addConversationBotButtonInvite": "เชิญ", - "addConversationBotDialogInviteConfirmation": "เชิญ", - "addConversationBotButtonTitleRemove": "ยืนยันการลบบอทสนทนา", - "addConversationBotButtonRemove": "ลบ", - "addConversationBotDialogRemoveConfirmation": "ลบ", - "conversationBotConfigConfirmChange": "ยืนยัน", - "conversationBotStatus": "เชิญบอท", - "conversationBotTextAdventureZone_title": "การผจญภัยในข้อความ", - "conversationBotTextAdventureZone_instructionLabel": "คำแนะนำของผู้ควบคุมเกม", - "conversationBotTextAdventureZone_instructionPlaceholder": "ตั้งค่าคำแนะนำของผู้ควบคุมเกม", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "ขาดคำแนะนำของผู้ควบคุมเกม", - "studentAnalyticsNotAvailable": "ข้อมูลนักเรียนในปัจจุบันไม่พร้อมใช้งาน", - "roomDataMissing": "ข้อมูลบางส่วนอาจขาดหายไปจากห้องที่คุณไม่ได้เป็นสมาชิก", "updatePhoneOS": "คุณอาจจำเป็นต้องอัปเดตเวอร์ชันระบบปฏิบัติการของอุปกรณ์ของคุณ", "wordsPerMinute": "คำต่อนาที", "autoIGCToolName": "เรียกใช้เครื่องมือช่วยเขียน Pangea อัตโนมัติ", "autoIGCToolDescription": "เรียกใช้การช่วยเขียนไวยากรณ์และการแปลของ Pangea Chat อัตโนมัติก่อนส่งข้อความของฉัน", - "runGrammarCorrection": "ตรวจสอบข้อความ", - "grammarCorrectionFailed": "มีปัญหาให้แก้ไข", - "grammarCorrectionComplete": "ดูดีแล้ว!", "tooltipInstructionsTitle": "ไม่แน่ใจว่าสิ่งนั้นทำอะไร?", "tooltipInstructionsMobileBody": "กดค้างไว้เพื่อดูคำแนะนำเครื่องมือ", "tooltipInstructionsBrowserBody": "วางเมาส์เหนือรายการเพื่อดูคำแนะนำเครื่องมือ", "chatCapacity": "ความจุแชท", "roomFull": "ห้องนี้เต็มแล้ว", - "topicNotSet": "ยังไม่ได้ตั้งหัวข้อ", - "chatCapacityNotSet": "แชทนี้ไม่มีขีดจำกัดความจุ", "chatCapacityHasBeenChanged": "ความจุแชทได้เปลี่ยนแปลงแล้ว", "chatCapacitySetTooLow": "ความจุแชทต้องอย่างน้อย {count}", "chatCapacityExplanation": "ความจุแชทจำกัดจำนวนสมาชิกที่อนุญาตในแชท", - "chatExceedsCapacity": "แชทนี้เกินความจุ", "tooManyRequest": "คำขอมากเกินไป กรุณาลองใหม่ภายหลัง", "enterNumber": "กรุณาใส่ค่าตัวเลขเต็ม", "buildTranslation": "สร้างคำแปลของคุณจากตัวเลือกด้านบน", - "nonexistentSelection": "การเลือกนี้ไม่มีอยู่แล้ว", - "changeAnalyticsLanguage": "เปลี่ยนภาษาแอนะล็อกส์", "practice": "ฝึกฝน", "noLanguagesSet": "ไม่ได้ตั้งค่าภาษาใด ๆ", - "noActivitiesFound": "พอแค่นี้ก่อนนะ! กลับมาทีหลังเพื่อดูเพิ่มเติม", - "hintTitle": "คำแนะนำ:", "speechToTextBody": "สำหรับข้อความเสียง คุณสามารถดูถอดความพร้อมกับคะแนนคำต่อนาทีของผู้พูด", "versionNotFound": "ไม่พบเวอร์ชัน", "fetchingVersion": "กำลังดึงเวอร์ชัน...", "versionFetchError": "เกิดข้อผิดพลาดในการดึงเวอร์ชัน", "versionText": "เวอร์ชัน: {version}+{buildNumber}", - "languageButtonLabel": "ภาษา: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "เล่นอัตโนมัติคำแปล", - "interactiveTranslatorAutoPlayDesc": "เปิดตัวแปลแบบโต้ตอบโดยไม่ถาม", - "changeAnalyticsView": "เปลี่ยนมุมมองแอนะล็อกส์", "l1TranslationBody": "ข้อความในภาษาหลักของคุณจะไม่ถูกแปล", "deleteSubscriptionWarningTitle": "คุณมีการสมัครสมาชิกที่ใช้งานอยู่", "deleteSubscriptionWarningBody": "การลบบัญชีของคุณจะไม่ยกเลิกการสมัครสมาชิกโดยอัตโนมัติ", @@ -4117,9 +3759,7 @@ "error520Title": "โปรดลองอีกครั้ง", "error520Desc": "ขออภัย เราไม่เข้าใจข้อความของคุณ...", "wordsUsed": "คำที่ใช้แล้ว", - "errorTypes": "ประเภทของข้อผิดพลาด", "level": "ระดับ", - "canceledSend": "ส่งยกเลิกแล้ว", "morphsUsed": "โมฟส์ที่ใช้แล้ว", "translationChoicesBody": "คลิกและกดค้างตัวเลือกเพื่อดูคำแนะนำ", "grammar": "ไวยากรณ์", @@ -4129,7 +3769,6 @@ "reportContentIssueTitle": "รายงานปัญหาเนื้อหา", "feedback": "คำติชมทางเลือก", "reportContentIssueDescription": "โอ๊ะโอ! AI สามารถอำนวยความสะดวกในการเรียนรู้แบบส่วนตัวได้ แต่... ก็อาจสร้างภาพ hallucinate ได้ กรุณาให้คำติชมของคุณ แล้วเราจะลองใหม่อีกครั้ง", - "changeContent": "โอ๊ะโอ! AI สามารถอำนวยความสะดวกในการเรียนรู้แบบส่วนตัวได้ แต่... ก็อาจสร้างภาพ hallucinate ได้ แล้วมันควรเป็นอะไร?", "clickTheWordAgainToDeselect": "คลิกคำที่เลือกเพื่อยกเลิกการเลือก", "l2SupportNa": "ไม่มีให้บริการ", "l2SupportAlpha": "อัลฟ่า", @@ -4364,7 +4003,6 @@ "grammarCopySPC": "ความเฉพาะเจาะจง", "grammarCopyPARTTYPE": "ประเภทคำแบ่งส่วน", "grammarCopyINTREL": "คำถาม-คำอธิบาย", - "grammarCopyNUMFORMpsor": "จำนวนเจ้าของ", "grammarCopyUNKNOWN": "ไม่ทราบ", "grammarCopyNUMBERPSOR": "จำนวนเจ้าของ", "grammarCopyPOSS": "ความเป็นเจ้าของ", @@ -4410,28 +4048,14 @@ "grammarCopyVOICEdir": "โดยตรง", "grammarCopyVOICEinv": "กลับด้าน", "grammarCopyVOICErcp": "ตอบรับกัน", - "enterPrompt": "กรุณาใส่คำสั่งระบบ", - "selectBotLanguage": "เลือกภาษาของบอท", - "chooseVoice": "เลือกเสียง", - "enterLanguageLevel": "กรุณาใส่ระดับภาษา", - "enterDiscussionTopic": "กรุณาใส่หัวข้อการสนทนา", - "selectBotChatMode": "เลือกโหมดแชท", - "messageNotInTargetLang": "ข้อความไม่อยู่ในภาษาปลายทาง", "other": "อื่น ๆ", "levelShort": "LVL {level}", - "botModeValidation": "โปรดเลือกโหมดแชท", "clickBestOption": "เลือกตัวเลือกที่ดีที่สุดเพื่อแปลข้อความของคุณ!", "completeActivitiesToUnlock": "ทำกิจกรรมอย่างน้อยหนึ่งรายการเพื่อปลดล็อคการแปล!", - "botSettingsSubtitle": "เชิญบอทเพื่อดูแลกิจกรรมแชท", - "invitePeople": "เชิญผู้ใช้", "noCapacityLimit": "ไม่มีขีดจำกัดความจุ", "downloadGroupText": "ดาวน์โหลดข้อความกลุ่ม", "notificationsOn": "เปิดการแจ้งเตือน", "notificationsOff": "ปิดการแจ้งเตือน", - "chatCanBeFoundViaSearch": "สามารถค้นหาแชทได้ผ่านการค้นหา", - "requireCodeToJoin": "ต้องใช้รหัสเข้าร่วม", - "canFindInSearch": "สามารถค้นหาได้ในค้นหา", - "addChatToSpace": "เพิ่มแชท", "createChatAndInviteUsers": "สร้างแชทและเชิญผู้ใช้", "updatedNewSpaceDescription": "คอร์สเรียนช่วยให้คุณรวมแชทของคุณและสร้างชุมชนส่วนตัวหรือสาธารณะ", "joinWithCode": "เข้าร่วมด้วยรหัส", @@ -4467,39 +4091,19 @@ "constructUseCollected": "เก็บรวบรวมในแชท", "constructUseNanDesc": "ไม่สามารถใช้ได้", "xpIntoLevel": "{currentXP} / {maxXP} คะแนนประสบการณ์", - "signInWithUsername": "เข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่าน", - "registrationEmailMessage": "กรุณายืนยันอีเมลของคุณด้วยลิงก์ที่ส่งไปที่นั่น ในบางกรณี อีเมลอาจใช้เวลาถึง 5 นาทีในการมาถึง กรุณาตรวจสอบโฟลเดอร์สแปมของคุณด้วย", "enableTTSToolName": "เปิดใช้งานการแปลงข้อความเป็นเสียง", "enableTTSToolDescription": "อนุญาตให้แอปพลิเคชันสร้างผลลัพธ์การแปลงข้อความเป็นเสียงสำหรับส่วนของข้อความในภาษาที่คุณตั้งเป้าไว้", - "couldNotFindTTS": "เราไม่พบเครื่องมือแปลงข้อความเป็นเสียงสำหรับภาษาที่คุณตั้งเป้าไว้ในปัจจุบัน", - "ttsInstructionsHyperlink": "คลิกที่นี่เพื่อดูคำแนะนำในการดาวน์โหลดเสียงใหม่บนอุปกรณ์ของคุณ", - "createAnAccount": "สร้างบัญชีผู้ใช้", - "signIn": "เข้าสู่ระบบ", - "signUpWithEmail": "สมัครด้วยอีเมล", - "signUpWithGoogle": "สมัครด้วย Google", - "signUpWithApple": "สมัครด้วย Apple", "yourUsername": "ชื่อผู้ใช้ของคุณ", "yourEmail": "อีเมลของคุณ", - "pleaseEnterAnEmail": "กรุณาใส่อีเมล", - "signInWithGoogle": "เข้าสู่ระบบด้วย Google", - "signInWithApple": "เข้าสู่ระบบด้วย Apple", - "chooseYourAvatar": "เลือกอวาตาร์ของคุณ", "iWantToLearn": "ฉันต้องการเรียนรู้", - "letsStart": "เริ่มกันเลย", - "pleaseAgreeToTOS": "กรุณายอมรับข้อกำหนดและเงื่อนไข", "pleaseEnterEmail": "กรุณาใส่อีเมลที่ถูกต้อง", - "pleaseSelectALanguage": "กรุณาเลือกภาษา", "myBaseLanguage": "ภาษาหลักของฉัน", - "clickWordsInstructions": "🧻 คลิกคำใดก็ได้เพื่อดูรายละเอียด. 🤐", - "chooseBestDefinition": "คำนี้หมายความว่าอะไร?", "meaningSectionHeader": "ความหมาย:", "formSectionHeader": "รูปแบบที่ใช้ในแชท:", - "noEmojiSelectedTooltip": "ไม่ได้เลือกอีโมจิ", "writingExercisesTooltip": "การเขียน", "listeningExercisesTooltip": "การฟัง", "readingExercisesTooltip": "การอ่าน", "meaningNotFound": "ไม่พบความหมาย", - "formsNotFound": "ไม่พบรูปแบบ", "chooseBaseForm": "เลือกรูปแบบพื้นฐาน", "notTheCodeError": "ขออภัย นั่นไม่ใช่รหัส!", "totalXP": "ประสบการณ์รวม", @@ -4539,9 +4143,6 @@ "pickAnEmoji": "อิโมจิที่คุณชอบสำหรับ '{lemma}' คืออะไร?", "chooseLemmaMeaningInstructionsBody": "จับคู่ความหมายกับคำในข้อความ!", "doubleClickToEdit": "ดับเบิลคลิกเพื่อแก้ไข.", - "removeFeature": "ลบ {feature}", - "chooseCorrectLabel": "เลือกป้ายกำกับที่ถูกต้อง.", - "levelPopupTitle": "ยินดีด้วยที่คุณได้ถึง\nระดับ {level}", "activityPlannerTitle": "แผนกิจกรรม", "topicLabel": "หัวข้อ", "topicPlaceholder": "เลือกหัวข้อ...", @@ -4549,7 +4150,6 @@ "modePlaceholder": "เลือกโหมด...", "learningObjectiveLabel": "วัตถุประสงค์การเรียนรู้", "learningObjectivePlaceholder": "เลือกวัตถุประสงค์การเรียนรู้...", - "mediaLabel": "สื่อที่ผู้เรียนควรแชร์", "languageOfInstructionsLabel": "ภาษาของคำแนะนำกิจกรรม", "targetLanguageLabel": "ภาษาปลายทาง", "cefrLevelLabel": "ระดับ CEFR", @@ -4564,20 +4164,15 @@ "instructions": "คำแนะนำ", "numberOfLearners": "จำนวนผู้เรียน", "mustBeInteger": "ต้องเป็นจำนวนเต็ม เช่น 1, 2, 3, ...", - "noLemmasFound": "ไม่พบคำศัพท์ที่มี XP มากกว่า {xp}. กรุณาฝึกฝนต่อไป!", "constructUsePvmDesc": "ผลิตในรูปแบบข้อความเสียง", - "lockedMorphFeature": "รอปลดล็อค", "leaveSpaceDescription": "เมื่อออกจากคอร์ส คุณจะออกจากแชททั้งหมดภายในคอร์สนั้น ผู้ใช้อื่นจะเห็นว่าคุณได้ออกจากคอร์สแล้ว", - "whatIsLemma": "คำว่าอะไรคือเลมมา?", "constructUseCorMmDesc": "ความหมายของข้อความถูกต้อง", "constructUseIncMmDesc": "ความหมายของข้อความไม่ถูกต้อง", "constructUseIgnMmDesc": "ความหมายของข้อความถูกละเว้น", "clickForMeaningActivity": "คลิกที่นี่เพื่อท้าทายความหมาย", "meaning": "ความหมาย", "chatWith": "กลุ่มกับ {displayname}", - "slightlyOffensive": "เล็กน้อยที่ไม่เหมาะสม", "clickOnEmailLink": "กรุณาคลิกที่ลิงก์ในอีเมลแล้วดำเนินการต่อ\n\nตรวจสอบโฟลเดอร์สแปมของคุณหากอีเมลยังไม่มา", - "whoIsAllowedToJoinThisChat": "ใครได้รับอนุญาตให้เข้าร่วมแชทนี้", "dontForgetPassword": "อย่าลืมรหัสผ่านของคุณ!", "enableAutocorrectToolName": "เปิดใช้งานการแก้ไขอัตโนมัติของอุปกรณ์", "enableAutocorrectDescription": "หากอุปกรณ์ของคุณรองรับภาษาที่คุณกำลังเรียนรู้ คุณสามารถเปิดใช้งานการแก้ไขอัตโนมัติของอุปกรณ์เพื่อแก้ไขข้อผิดพลาดทั่วไปขณะพิมพ์", @@ -4605,48 +4200,26 @@ "autocorrectNotAvailable": "น่าเสียดายที่แพลตฟอร์มของคุณในปัจจุบันไม่รองรับคุณสมบัตินี้ โปรดติดตามการพัฒนาต่อไป!", "pleaseUpdateApp": "กรุณาอัปเดตแอปเพื่อดำเนินการต่อ", "chooseEmojiInstructionsBody": "จับคู่อีโมจิกับคำที่พวกมันแทนได้ดีที่สุด ไม่ต้องกังวล! ไม่มีการหักคะแนนหากไม่เห็นด้วย 😅", - "pickAnEmojiFor": "เลือกอีโมจิสำหรับ {lemma}", "analyticsVocabListBody": "นี่คือคำศัพท์ทั้งหมดของคุณ! เมื่อคุณสะสม XP สำหรับแต่ละคำ คำเหล่านั้นจะเปลี่ยนจากต้นกล้าเป็นดอกบานเต็มที่ คลิกที่คำใดก็ได้เพื่อดูรายละเอียดเพิ่มเติม", "morphAnalyticsListBody": "นี่คือแนวคิดทางไวยากรณ์ทั้งหมดในภาษาที่คุณกำลังเรียนรู้! คุณจะปลดล็อกมันเมื่อคุณพบเจอในขณะสนทนา คลิกเพื่อดูรายละเอียด", "knockSpaceSuccess": "คุณได้ส่งคำขอเข้าร่วมคอร์สนี้! ผู้ดูแลระบบจะตอบสนองคำขอของคุณเมื่อได้รับ 😀", - "joinByCode": "เข้าร่วมโดยใช้รหัส", "chooseWordAudioInstructionsBody": "ฟังข้อความให้ครบถ้วน จากนั้นจับคู่เสียงกับคำ", "chooseMorphsInstructionsBody": "คลิกชิ้นส่วนจิ๊กซอว์สำหรับคำถามทางไวยากรณ์!", - "inviteAndLaunch": "เชิญและเริ่มต้น", - "createOwnChat": "สร้างแชทของคุณเอง", "pleaseEnterInt": "กรุณาใส่หมายเลข", "home": "หน้าแรก", "join": "เข้าร่วม", "readingAssistanceOverviewBody": "คลิกที่ปุ่มด้านล่างเพื่อเล่นเกมเล็ก ๆ เกี่ยวกับการจับคู่ไอคอนอิโมจิ เสียง ความหมายของคำ และแนวคิดทางไวยากรณ์ หรือคลิกที่คำใดก็ได้เพื่อดูรายละเอียด", - "learnByTexting": "เรียนรู้โดยการส่งข้อความ", - "levelSummaryTrigger": "ดูสรุป", "levelSummaryPopupTitle": "สรุประดับ {level}", - "referFriends": "แนะนำเพื่อน", - "referFriendDialogTitle": "เชิญเพื่อนเข้าร่วมสนทนาของคุณ", - "referFriendDialogDesc": "คุณมีเพื่อนที่ตื่นเต้นที่จะเรียนรู้ภาษาใหม่กับคุณไหม? จากนั้นคัดลอกและส่งลิงก์เชิญนี้เพื่อเข้าร่วมและเริ่มสนทนากับคุณวันนี้", - "youUnlocked": "คุณปลดล็อกแล้ว", "resetInstructionTooltipsTitle": "รีเซ็ตคำแนะนำเครื่องมือช่วย", "resetInstructionTooltipsDesc": "คลิกเพื่อแสดงคำแนะนำเครื่องมือช่วย เช่นเดียวกับผู้ใช้ใหม่", "selectForGrammar": "เลือกไอคอนไวยากรณ์สำหรับกิจกรรมและรายละเอียด", - "newChatActivityTitle": "เพิ่มกิจกรรมสนุก ๆ ไหม?", - "newChatActivityDesc": "ทำให้การสนทนากลุ่มทุกครั้งเป็นการผจญภัยด้วยแผนกิจกรรม! ตั้งหัวข้อและเป้าหมายที่น่าดึงดูดสำหรับกลุ่ม และนำการสนทนาให้มีชีวิตชีวาด้วยภาพที่น่าทึ่ง กระตุ้นการสนทนาเชิงจินตนาการและรักษาความสนุกให้ไหลลื่น!", - "exploreMore": "สำรวจเพิ่มเติม", "randomize": "สุ่ม", "clear": "ล้าง", "makeYourOwnActivity": "สร้างกิจกรรมของคุณเอง", "featuredActivities": "กิจกรรมเด่น", - "goToChat": "ไปที่แชท", "save": "บันทึก", - "selectActivity": "เลือกกิจกรรม", - "wordFocusListeningMultipleChoice": "เสียงใดตรงกับคำ?", "startChat": "เริ่มแชท", "translationProblem": "ปัญหาการแปล", - "perfectTranslation": "การแปลที่สมบูรณ์แบบ!", - "greatJobTranslation": "ทำได้ดีมากกับการแปลนี้!", - "goodJobTranslation": "ทำงานได้ดีในการแปลนี้.", - "makingProgress": "คุณกำลังพัฒนา!", - "keepPracticing": "ฝึกฝนต่อไป!", - "niceJob": "ทำได้ดี!", "askToJoin": "ขอเข้าร่วม", "emptyChatWarningTitle": "แชทว่างเปล่า", "emptyChatWarningDesc": "คุณยังไม่ได้เชิญใครเข้าร่วมแชทของคุณ ไปที่การตั้งค่าแชทเพื่อเชิญรายชื่อติดต่อของคุณหรือบอท คุณยังสามารถทำได้ในภายหลัง", @@ -4665,8 +4238,6 @@ "languageLevelC2Desc": "ฉันสามารถเข้าใจแทบทุกอย่างที่ได้ยินหรืออ่านและแสดงออกได้อย่างคล่องแคล่วและแม่นยำ", "newVocab": "คำศัพท์ใหม่", "newGrammar": "แนวคิดไวยากรณ์ใหม่", - "congratulationsOnReaching": "คุณได้บรรลุระดับ {level} แล้ว!", - "seeDetails": "ดูรายละเอียด", "choosePracticeMode": "คลิกที่หนึ่งในปุ่มด้านบนเพื่อเริ่มกิจกรรมฝึกฝน", "ban": "แบน", "unban": "ปลดแบน", @@ -4680,8 +4251,6 @@ "timesUsedWithAssistance": "จำนวนครั้งที่ใช้ร่วมกับความช่วยเหลือ", "shareInviteCode": "แชร์รหัสเชิญ: {code}", "leaderboard": "กระดานผู้นำ", - "welcomeUser": "ยินดีต้อนรับ {user}", - "joinSpaceOnboardingDesc": "คุณมีรหัสเชิญหรือลิงก์ไปยังหลักสูตรสาธารณะหรือไม่?", "skipForNow": "ข้ามก่อน", "permissions": "สิทธิ์", "spaceChildPermission": "ใครสามารถเพิ่มแชทใหม่ในหลักสูตรนี้ได้", @@ -4689,12 +4258,8 @@ "defaultOption": "ค่าเริ่มต้น", "deleteChatDesc": "คุณแน่ใจหรือไม่ว่าต้องการลบแชทนี้? มันจะถูกลบสำหรับผู้เข้าร่วมทุกคนและข้อความทั้งหมดในแชทจะไม่สามารถใช้งานได้อีกต่อไปสำหรับการฝึกฝนหรือวิเคราะห์การเรียนรู้", "deleteSpaceDesc": "หลักสูตรและแชทที่เลือกจะถูกลบสำหรับผู้เข้าร่วมทุกคนและข้อความทั้งหมดในแชทจะไม่สามารถใช้งานได้อีกต่อไปสำหรับการฝึกฝนหรือวิเคราะห์การเรียนรู้ การดำเนินการนี้ไม่สามารถย้อนกลับได้", - "chatWithActivities": "แชทพร้อมกิจกรรม", "launch": "เปิดตัว", - "launchActivityToChats": "เปิดตัวกิจกรรมไปยังแชท", "searchChats": "ค้นหาแชท", - "selectChats": "เลือกแชท", - "selectChatToStart": "เสร็จสิ้น! เลือกแชทเพื่อเริ่มต้น", "maxFifty": "สูงสุด 50", "configureSpace": "กำหนดค่าห้องเรียน", "pinMessages": "ปักหมุดข้อความ", @@ -4708,9 +4273,7 @@ "announcements": "ประกาศ", "activities": "กิจกรรม", "access": "การเข้าถึง", - "botSettings": "การตั้งค่าบอท", "activitySuggestionTimeoutMessage": "เรากำลังทำงานอย่างหนักเพื่อสร้างกิจกรรมเพิ่มเติมสำหรับคุณ กรุณาตรวจสอบอีกครั้งในหนึ่งนาที", - "accessSettingsWarning": "โอ๊ะ! ดูเหมือนว่าคุณไม่มีสิทธิ์ในการตั้งกฎการเข้าถึงของห้องนี้ คุณควรตรวจสอบให้แน่ใจว่ากฎเหล่านี้ตรงกับความต้องการของคุณ และพูดคุยกับผู้ดูแลห้องหากคุณต้องการเปลี่ยนแปลง", "howSpaceCanBeFound": "วิธีที่สามารถค้นหาห้องนี้ได้", "private": "ส่วนตัว", "cannotBeFoundInSearch": "ไม่สามารถค้นหาได้ในผลการค้นหา", @@ -4723,16 +4286,6 @@ "canBeFoundViaKnock": "• คำขอเข้าร่วมและการอนุมัติจากผู้ดูแลระบบ", "youHaveLeveledUp": "คุณได้เลเวลอัปแล้ว!", "sendActivities": "ส่งกิจกรรม", - "getStarted": "เริ่มต้น", - "getStartedBotChatDesc": "การแชทกับ AI เป็นจุดเริ่มต้นที่ดี และเครื่องมืออ่าน เขียน ฟัง และพูดของ Pangea ทำให้มันง่าย!", - "getStartedCommunitiesDesc": "การเรียนรู้กับชุมชนคือจุดเด่นของ Pangea Chat!\nคุณสามารถเข้าร่วมชั้นเรียน ค้นหาคอร์ส หรือแม้แต่สร้างของคุณเอง!", - "getStartedFriendsDesc": "คุณมีเพื่อนที่อยากเรียนรู้ไปด้วยกันไหม?", - "getStartedBotChatComplete": "ทำได้ดี! คุณกำลังแชทกับบอท!", - "getStartedCommunitiesComplete": "ยอดเยี่ยม คุณได้เข้าร่วมคอร์สแล้ว!", - "getStartedComplete": "คุณทำส่วนนี้เสร็จแล้ว!\nสำรวจคุณสมบัติที่น่าทึ่งของเราโดยการแชทกับเพื่อน!", - "getStartedFriendsComplete": "ว้าว! คุณมีเพื่อนแล้ว! 😉", - "getStartedBotChatButton": "เริ่มแชทเลย!", - "getStartedFriendsButton": "แชทกับเพื่อน", "groupChat": "แชทกลุ่ม", "directMessage": "ข้อความส่วนตัว", "newDirectMessage": "ข้อความส่วนตัวใหม่", @@ -4748,7 +4301,6 @@ "mySavedActivities": "กิจกรรมที่บันทึกไว้ของฉัน", "noSavedActivities": "ไม่มีการบันทึกกิจกรรม", "saveActivity": "บันทึกกิจกรรมนี้", - "yourSavedActivities": "กิจกรรมที่บันทึกไว้", "failedToPlayVideo": "ไม่สามารถเล่นวิดีโอได้", "done": "เสร็จสิ้น", "inThisSpace": "ในหลักสูตรนี้", @@ -4786,37 +4338,27 @@ "maximumActivityParticipants": "กิจกรรมแต่ละรายการสามารถมีผู้เข้าร่วมสูงสุด {count} คน", "pending": "รอดำเนินการ", "inactive": "ไม่ทำงาน", - "unjoinedActivityMessage": "คุณต้องการเข้าร่วมไหม? เลือกบทบาทที่เปิดอยู่!\nหรือจะพักผ่อนและชมการแสดง!", - "fullActivityMessage": "รู้สึกอิสระที่จะชมการแสดง! ในขณะที่ไม่มีบทบาทเปิดให้เข้าร่วม คุณสามารถดูแชทได้!", "confirmRole": "ยืนยันบทบาท", "openRoleLabel": "เปิด", "joinedTheActivity": "👋 {username} เข้าร่วมเป็น {role}", "finishedTheActivity": "🎯 {username} สรุปกิจกรรมนี้", - "endActivityTitle": "ฉันเสร็จแล้ว", - "endActivityDesc": "คุณทำวัตถุประสงค์เสร็จหรือยัง?\nนี่คือการยืนยันว่าคุณกำลังหยุดส่งข้อความ แต่ไม่ต้องกังวล ความสนุกยังคงดำเนินต่อไปในแชท! รู้สึกอิสระที่จะพักผ่อนและเพลิดเพลินกับการแสดงจนกว่าทุกคนจะคลิก 'เสร็จแล้ว'", "archiveToAnalytics": "เพิ่มไปยังกิจกรรมที่เสร็จสมบูรณ์ของฉัน", "activitySummaryError": "ไม่สามารถดูสรุปกิจกรรมได้", "requestSummaries": "ขอสรุปข้อมูล", - "loadingActivitySummary": "กำลังโหลดสรุปกิจกรรม...", "generatingNewActivities": "คุณเป็นผู้ใช้รายแรกของกลุ่มภาษานี้! กรุณารอสักครู่ เรากำลังเตรียมกิจกรรมสำหรับคุณโดยเฉพาะ", - "requestAccessTitle": "ขอเข้าถึงการดูข้อมูลวิเคราะห์?", + "requestAccessTitle": "ขอเข้าถึงการวิเคราะห์หรือไม่?", "requestAccessDesc": "คุณต้องการขอเข้าถึงเพื่อดูข้อมูลวิเคราะห์ผู้เข้าร่วมใช่ไหม?\n\nถ้าผู้เข้าร่วมยอมรับ ผู้ดูแลหลักสูตรนี้จะสามารถดูข้อมูลของพวกเขาได้:\n • คำศัพท์ทั้งหมด\n • แนวคิดไวยากรณ์ทั้งหมด\n • จำนวนเซสชันกิจกรรมที่ทำเสร็จ\n • แนวคิดไวยากรณ์เฉพาะที่ใช้ ทั้งถูกต้องและผิด\n\nพวกเขาจะไม่สามารถดูได้:\n • ข้อความในแชทนอกหลักสูตร\n • รายการคำศัพท์", "requestAccess": "ขอเข้าถึง ({count})", "analyticsInactiveTitle": "ไม่สามารถส่งคำขอไปยังผู้ใช้ที่ไม่ใช้งานได้", "analyticsInactiveDesc": "ผู้ใช้ที่ไม่ได้เข้าสู่ระบบตั้งแต่เปิดใช้งานคุณสมบัตินี้จะไม่เห็นคำขอของคุณ\n\nปุ่มขอจะปรากฏเมื่อพวกเขากลับมา คุณสามารถส่งคำขออีกครั้งได้โดยคลิกปุ่มขอภายใต้ชื่อของพวกเขาเมื่อพร้อมใช้งาน", "accessRequestedTitle": "คำขอเข้าถึงข้อมูลวิเคราะห์", - "accessRequestedDesc": "ผู้ดูแลของ “{space}” ขอเข้าดูข้อมูลวิเคราะห์การเรียนรู้ของคุณ\n\nถ้าคุณยอมรับ ผู้ดูแลหลักสูตรนี้จะสามารถดูข้อมูลของคุณได้:\n • คำศัพท์ทั้งหมด\n • แนวคิดไวยากรณ์ทั้งหมด\n • จำนวนเซสชันกิจกรรมที่ทำเสร็จ\n • แนวคิดไวยากรณ์เฉพาะที่ใช้ ทั้งถูกต้องและผิด\n\nพวกเขาจะไม่สามารถดูได้:\n • ข้อความในแชทนอกหลักสูตร\n • รายการคำศัพท์", - "allowAccess": "อนุญาตให้เข้าถึง", - "denyAccess": "ปฏิเสธการเข้าถึง", + "accessRequestedDesc": "ผู้ดูแลที่ขอ: {admin} \n\nผู้ดูแลจาก “{space}” กำลังขอให้ดูการวิเคราะห์การเรียนรู้ของคุณ。\n\nหากคุณเห็นด้วย พวกเขาจะสามารถดู:\n • คำศัพท์ทั้งหมด\n • แนวคิดไวยากรณ์ทั้งหมด\n • จำนวนเซสชันกิจกรรมทั้งหมดที่เสร็จสิ้น\n • แนวคิดไวยากรณ์เฉพาะที่ใช้ ทั้งที่ถูกต้องและไม่ถูกต้อง\n\nพวกเขาจะไม่สามารถดู:\n • ข้อความในแชทนอกหลักสูตร\n • รายการคำศัพท์", "adminRequestedAccess": "ผู้ดูแลขอเข้าดูข้อมูลวิเคราะห์ของคุณ", "lastUpdated": "อัปเดต\n{time}", "activityFinishedMessage": "เสร็จสิ้นทั้งหมด!", "endForAll": "สิ้นสุดสำหรับทุกคน", "newCourse": "หลักสูตรใหม่", - "newCourseSubtitle": "คุณต้องการใช้แผนหลักสูตรใด?", - "failedToLoadCourses": "ไม่สามารถโหลดหลักสูตรได้", "numModules": "{num} โมดูล", - "numActivityPlans": "{num} แผนกิจกรรม", "coursePlan": "แผนหลักสูตร", "editCourseLater": "คุณสามารถแก้ไขชื่อเทมเพลต คำอธิบาย และภาพหลักสูตรในภายหลัง", "newCourseAccess": "โดยค่าเริ่มต้น หลักสูตรเป็นส่วนตัวและต้องได้รับการอนุมัติจากผู้ดูแลระบบเพื่อเข้าร่วม คุณสามารถแก้ไขการตั้งค่าเหล่านี้ได้ทุกเมื่อ", @@ -4830,17 +4372,11 @@ "accessDesc": "คุณสามารถทำให้หลักสูตรของคุณเปิดสู่โลก หรือ ทำให้เป็นส่วนตัวและปลอดภัย", "createGroupChatDesc": "ในขณะที่เซสชันกิจกรรมเริ่มและสิ้นสุด กลุ่มแชทจะเปิดอยู่เพื่อการสื่อสารประจำวัน", "deleteDesc": "เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถลบหลักสูตรได้ นี่เป็นการดำเนินการที่ทำลายล้าง ซึ่งจะลบผู้ใช้ทั้งหมดและลบแชทที่เลือกภายในหลักสูตร โปรดดำเนินการด้วยความระมัดระวัง", - "failedToLoadCourseInfo": "ไม่สามารถโหลดข้อมูลหลักสูตรได้", "noCourseFound": "โอ้ หลักสูตรนี้ต้องการแผน!\n\nแผนหลักสูตรเป็นลำดับของหัวข้อและกิจกรรมสนทนา", "additionalParticipants": "+ {num} คนอื่นๆ", - "activityNotFoundForCourse": "ไม่พบกิจกรรมนี้ในหลักสูตร", - "courseChats": "แชทคอร์ส", - "myActivitySessions": "เซสชันกิจกรรมของฉัน", "directMessages": "ข้อความส่วนตัว", "whatNow": "ตอนนี้ทำอะไรดี?", "chooseNextActivity": "เลือกกิจกรรมถัดไปของคุณ!", - "seeInstructions": "ดูคำแนะนำ", - "hideInstructions": "ซ่อนคำแนะนำ", "letsGo": "ไปกันเลย", "chooseRole": "เลือกบทบาท!", "chooseRoleToParticipate": "เลือกบทบาทเพื่อเข้าร่วม!", @@ -4850,23 +4386,15 @@ "inviteFriends": "เชิญเพื่อน", "waitNotDone": "รอฉันยังไม่เสร็จ!", "waitingForOthersToFinish": "รอให้คนอื่นเสร็จสิ้น...", - "saveToCompletedActivities": "บันทึกเป็นกิจกรรมที่เสร็จแล้ว", "generatingSummary": "วิเคราะห์แชทและสร้างผลลัพธ์", - "instructionsLanguage": "ภาษาคำแนะนำ", "findCourse": "ค้นหาคอร์ส", - "activityCompletedDesc": "กิจกรรมที่คุณทำเสร็จแล้วได้ถูกเพิ่มเข้าไปในวิเคราะห์ข้อมูล ซึ่งคุณสามารถตรวจสอบและฝึกฝนภาษาที่ใช้ได้", "pingParticipantsNotification": "{user} กำลังมองหาผู้ใช้เพื่อเข้าร่วมเซสชันกิจกรรมใน {room}", "course": "หลักสูตร", "courses": "หลักสูตร", "courseName": "ชื่อหลักสูตร", "createNewCourse": "สร้างหลักสูตรใหม่", - "publicCourses": "หลักสูตรสาธารณะ", "goToCourse": "ไปที่หลักสูตร: {course}", "activityComplete": "กิจกรรมนี้เสร็จสมบูรณ์แล้ว สรุปกิจกรรมควรพร้อมใช้งานด้านล่าง", - "haventChattedMuch": "ดูเหมือนว่าคุณยังไม่ได้แชทมากนัก ลองใช้คำศัพท์เพิ่มเติมดูสิ! หากคุณรู้สึกว่าทำตามเป้าหมายเสร็จแล้ว คุณสามารถจบกิจกรรมด้านล่าง", - "haveChatted": "ดูเหมือนว่าคุณได้แชทมาสักพักแล้ว! หากคุณรู้สึกว่าทำตามเป้าหมายเสร็จแล้ว ให้สรุปเพื่อจบกิจกรรม แล้วเราจะสร้างสรุปให้คุณในแชท!", - "userDoneAndWaiting": "{num1}/{num2} ผู้เข้าร่วมได้จบแล้ว รอให้ทุกคนเสร็จ แล้วเราจะสร้างสรุปให้คุณในแชท! \n\nถ้าคุณต้องการเข้าร่วมสนทนาอีกครั้ง คลิกปุ่มดำเนินการต่อในแชท", - "othersDoneAndWaiting": "{num1}/{num2} เสร็จแล้ว คุณได้ทำตามเป้าหมายของคุณแล้วหรือยัง?", "startNewSession": "เริ่มเซสชันใหม่", "joinOpenSession": "เข้าร่วมเซสชันเปิด", "less": "น้อยลง", @@ -4876,7 +4404,6 @@ "openToJoin": "เปิดให้เข้าร่วม", "results": "ผลลัพธ์", "activityDone": "กิจกรรมเสร็จสิ้น!", - "moreLabel": "เพิ่มเติม", "promoCodeInfo": "สามารถกรอกรหัสโปรโมชั่นในหน้าถัดไป", "editsComingSoon": "ความสามารถในการแก้ไขเมืองและกิจกรรมจะมาในเร็ว ๆ นี้", "editing": "กำลังแก้ไข", @@ -4892,13 +4419,10 @@ "courseSavedSuccessfully": "บันทึกคอร์สเรียบร้อยแล้ว", "addCoursePlan": "เพิ่มแผนคอร์ส", "activityStatsButtonInstruction": "คลิกที่นี่เพื่อดูสถิติกิจกรรมของคุณและปิดกิจกรรมเมื่อเสร็จสิ้น", - "readingAnalyticsDesc": "คลิกฝึกฝนในแต่ละข้อความสำหรับกิจกรรมการอ่าน", - "speakingAnalyticsDesc": "บันทึกข้อความเสียงเพื่อฝึกพูด", - "audioAnalyticsDesc": "คลิกฝึกฝนในแต่ละข้อความเพื่อกิจกรรมการฟัง", "loginToAccount": "เข้าสู่ระบบบัญชีของฉัน", "appDescription": "เรียนรู้ภาษา\nในขณะส่งข้อความถึงเพื่อนของคุณ", "languages": "ภาษา", - "chooseLanguage": "เลือกภาษา", + "chooseLanguage": "เลือกภาษาที่ต้องการ", "planTrip": "วางแผนการเดินทาง", "howAreYouTraveling": "คุณเดินทางอย่างไร", "unlockPrivateTrip": "ปลดล็อคการเดินทางส่วนตัว", @@ -4911,25 +4435,20 @@ "courseCode": "รหัสลับคืออะไร", "courseCodeHint": "รหัสทริปหรือ ลิงก์", "unlockMyTrip": "ปลดล็อคการเดินทางของฉัน", - "anyLevel": "ทุกระดับ", "signupOption": "คุณต้องการสมัครอย่างไร", "withApple": "ด้วย Apple", "withGoogle": "ด้วย Google", "withEmail": "ด้วยอีเมล", "createAccount": "สร้างบัญชี", - "noCoursesFound": "ไม่พบหลักสูตร", "loginWithEmail": "เข้าสู่ระบบด้วยอีเมล", "usernameOrEmail": "ชื่อผู้ใช้หรืออีเมล", "email": "อีเมล", "forgotPassword": "ลืมรหัสผ่าน?", - "writingAnalyticsDesc": "ส่งข้อความเพื่อฝึกฝนการเขียน", "endActivity": "สิ้นสุดกิจกรรม", "allLanguages": "ทุกภาษา", - "allCefrLevels": "ทุกระดับ CEFR", "chatListTooltip": "ที่นี่คุณจะพบข้อความส่วนตัวของคุณ! คลิกที่อวาตาร์ของผู้ใช้ใดก็ได้และ \"เริ่มสนทนา\" เพื่อส่งข้อความส่วนตัว", "directMessageBotTitle": "ข้อความโดยตรงกับ Pangea Bot", "feedbackTitle": "ความคิดเห็นเกี่ยวกับกิจกรรม", - "feedbackDesc": "กิจกรรมควรได้รับการปรับปรุงอย่างไร? หากคุณสามารถให้รายละเอียดได้ เราจะทำการเปลี่ยนแปลง!", "feedbackHint": "ความคิดเห็นของคุณ", "feedbackButton": "ส่งความคิดเห็น", "directMessageBotDesc": "คุยกับมนุษย์สนุกกว่า แต่... AI พร้อมเสมอ!", @@ -4937,7 +4456,7 @@ "playWithAI": "เล่นกับ AI ชั่วคราว", "courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!", "@@locale": "th", - "@@last_modified": "2026-01-06 13:01:57.436131", + "@@last_modified": "2026-01-07 14:26:38.383329", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -6063,30 +5582,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -6102,18 +5597,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -6138,18 +5621,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -6186,38 +5657,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -6226,62 +5669,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -6318,10 +5717,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -6330,14 +5725,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -6346,46 +5733,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6394,10 +5745,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6454,18 +5801,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6474,14 +5809,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6510,18 +5837,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6530,42 +5845,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6574,14 +5857,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6602,26 +5877,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6642,10 +5897,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6678,25 +5929,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6753,34 +5985,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6809,778 +6013,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8573,14 +7009,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8592,14 +7020,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8631,10 +7051,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8643,18 +7059,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8663,14 +7067,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8695,38 +7091,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8772,10 +7140,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8800,10 +7164,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8828,10 +7188,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8840,66 +7196,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8920,42 +7220,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8980,154 +7256,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -9144,18 +7272,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -9176,14 +7292,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -9200,10 +7308,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -9216,14 +7320,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -9232,14 +7328,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -9267,26 +7355,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -9315,18 +7383,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9363,10 +7423,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -10299,10 +8355,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10483,34 +8535,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10523,10 +8547,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10535,14 +8555,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10559,22 +8571,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10722,14 +8718,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10738,34 +8726,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10774,54 +8734,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10830,10 +8754,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10850,10 +8770,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -11025,26 +8941,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -11073,10 +8969,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -11133,30 +9025,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -11185,18 +9061,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -11313,14 +9181,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -11333,10 +9193,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -11345,14 +9201,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11369,14 +9217,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11385,22 +9225,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11413,18 +9237,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11441,22 +9253,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11465,30 +9265,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11561,18 +9337,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11629,18 +9393,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11669,30 +9421,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11745,18 +9481,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11805,46 +9533,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11909,10 +9597,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -12084,14 +9768,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -12119,14 +9795,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -12139,10 +9807,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -12178,19 +9842,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -12215,14 +9874,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -12231,14 +9882,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -12291,10 +9934,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -12307,18 +9946,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -12331,14 +9958,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12379,26 +9998,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12426,10 +10033,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12440,36 +10043,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12506,10 +10079,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12574,18 +10143,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12650,10 +10207,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12674,10 +10227,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12694,10 +10243,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12706,10 +10251,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12722,10 +10263,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -12750,16 +10287,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "เชิญเพื่อนเข้าร่วมกิจกรรม", - "inviteFriendsToActivityCourse": "เชิญเพื่อนเข้าร่วมกิจกรรมและคอร์สเรียน", "feedbackRespDesc": "ตรวจสอบอีกครั้งในวันพรุ่งนี้เพื่ออัปเดตกิจกรรม", "activityDropdownDesc": "เมื่อคุณทำกิจกรรมนี้เสร็จแล้ว ให้คลิกด้านล่าง", - "activityAnalyticsListBody": "นี่คือกิจกรรมที่คุณทำเสร็จแล้ว! หลังจากเสร็จสิ้นกิจกรรม คุณสามารถดูได้ที่นี่", "languageMismatchTitle": "ภาษาที่ไม่ตรงกัน", "languageMismatchDesc": "ภาษาที่คุณตั้งเป้าหมายไม่ตรงกับภาษาของกิจกรรมนี้ ต้องการอัปเดตภาษาที่ตั้งเป้าหมายไหม?", "reportWordIssueTooltip": "รายงานปัญหาข้อมูลคำศัพท์", "tokenInfoFeedbackDialogTitle": "คำติชมข้อมูลคำศัพท์", - "tokenInfoFeedbackDialogDesc": "AI อาจทำผิดพลาด กรุณาอธิบายปัญหาที่คุณพบกับข้อมูลด้านบน", "noPublicCoursesFound": "ไม่พบคอร์สสาธารณะ ต้องการสร้างคอร์สใหม่ไหม?", "noCourseTemplatesFound": "เราไม่พบคอร์สสำหรับภาษาที่คุณตั้งเป้าหมาย คุณสามารถแชทกับ Pangea Bot ได้ในระหว่างนี้ และตรวจสอบอีกครั้งในภายหลังสำหรับคอร์สเพิ่มเติม", "botActivityJoinFailMessage": "Pangea Bot กำลังตอบสนองช้า กรุณาลองใหม่อีกครั้งในภายหลัง หรือเชิญเพื่อนเข้าร่วม", @@ -12767,14 +10300,6 @@ "leaveDesc": "ออกจากพื้นที่นี้และแชททั้งหมดภายใน", "selectAll": "เลือกทั้งหมด", "deselectAll": "ยกเลิกเลือกทั้งหมด", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12783,10 +10308,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12803,10 +10324,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12840,7 +10357,6 @@ "newMessageInPangeaChat": "📩 ข้อความใหม่ใน Pangea Chat", "shareCourse": "แชร์หลักสูตร", "addCourse": "เพิ่มหลักสูตร", - "joinCourseWithCode": "เข้าร่วมหลักสูตรด้วยรหัส", "joinPublicCourse": "เข้าร่วมหลักสูตรสาธารณะ", "vocabLevelsDesc": "นี่คือที่ที่คำศัพท์จะไปเมื่อคุณเลเวลอัปมันแล้ว!", "highlightVocabTooltip": "เน้นคำศัพท์เป้าหมายด้านล่างโดยการส่งหรือฝึกฝนกับพวกเขาในแชท", @@ -12864,10 +10380,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12876,7 +10388,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "ไม่พบข้อความส่วนตัวหรือการสนทนา ตรวจสอบให้แน่ใจว่าการค้นหาของคุณสะกดถูกต้อง", + "activityAnalyticsTooltipBody": "นี่คือกิจกรรมที่คุณบันทึกไว้สำหรับการตรวจสอบและฝึกฝน", + "numSavedActivities": "จำนวนกิจกรรมที่บันทึกไว้", + "saveActivityTitle": "บันทึกกิจกรรม", + "saveActivityDesc": "ทำได้ดี! บันทึกกิจกรรมนี้เพื่อการตรวจสอบและฝึกฝนในภายหลัง", + "levelInfoTooltip": "ที่นี่คุณสามารถดูคะแนนทั้งหมดที่คุณได้รับและวิธีการ!", + "alreadyInCourseWithID": "คุณอยู่ในหลักสูตรที่มีแผนนี้อยู่แล้ว คุณต้องการสร้างหลักสูตรที่มีแผนเดียวกันหรือไปยังหลักสูตรที่มีอยู่แล้ว?", + "goToExistingCourse": "ไปยังหลักสูตรที่มีอยู่", + "emojiView": "มุมมองอีโมจิ", + "feedbackDialogDesc": "ฉันก็ทำผิดพลาดเหมือนกัน! มีอะไรที่จะช่วยให้ฉันพัฒนาขึ้นไหม?", + "contactHasBeenInvitedToTheCourse": "ติดต่อได้รับเชิญเข้าร่วมหลักสูตร", + "activityStatsButtonTooltip": "ข้อมูลกิจกรรม", + "allow": "อนุญาต", + "deny": "ปฏิเสธ", + "enabledRenewal": "เปิดใช้งานการต่ออายุการสมัครสมาชิก", + "subscriptionEndsOn": "การสมัครสมาชิกสิ้นสุดในวันที่", + "subscriptionRenewsOn": "การสมัครสมาชิกต่ออายุในวันที่", + "waitForSubscriptionChanges": "การเปลี่ยนแปลงการสมัครสมาชิกของคุณอาจใช้เวลาสักครู่ในการสะท้อนในแอป", + "subscribeReadingAssistance": "สมัครสมาชิกเพื่อปลดล็อกเครื่องมือข้อความ", + "aceDisplayName": "Achinese", + "achDisplayName": "อาคอลี", + "afDisplayName": "แอฟริคานส์", + "akDisplayName": "อากัน", + "alzDisplayName": "อาลูร์", + "amDisplayName": "อัมฮาริก", + "arDisplayName": "อาหรับ", + "asDisplayName": "อัสสัม", + "awaDisplayName": "อวาธี", + "ayDisplayName": "อายมารา", + "azDisplayName": "อาเซอร์ไบจานี", + "baDisplayName": "บาชเคียร์", + "banDisplayName": "บาหลี", + "bbcDisplayName": "บาตักโทบา", + "beDisplayName": "เบลารุส", + "bemDisplayName": "เบ็มบา", + "bewDisplayName": "เบตาวี", + "bgDisplayName": "บัลแกเรีย", + "bhoDisplayName": "โบชปุรี", + "bikDisplayName": "บิโคล", + "bmDisplayName": "บัมบารา", + "bnDisplayName": "บังกลา", + "bnBDDisplayName": "เบงกาลี (บังกลาเทศ)", + "bnINDisplayName": "เบงกาลี (อินเดีย)", + "brDisplayName": "เบรอตง", + "bsDisplayName": "บอสเนีย", + "btsDisplayName": "บาตักซิมาลุงกัน", + "btxDisplayName": "บาตักคาโร", + "buaDisplayName": "บูเรียต", + "caDisplayName": "คาตาลัน", + "cebDisplayName": "เซบูอาโน", + "cggDisplayName": "ชิกา", + "chmDisplayName": "มาริ", + "ckbDisplayName": "เคอร์ดิสกลาง", + "cnhDisplayName": "ฮาคฮา ชิน", + "coDisplayName": "คอร์ซิกัน", + "crhDisplayName": "ตุรกีไครเมีย", + "crsDisplayName": "เซเซลวา เครโอล ฝรั่งเศส", + "csDisplayName": "เช็ก", + "cvDisplayName": "ชูวาช", + "cyDisplayName": "เวลช์", + "daDisplayName": "เดนมาร์ก", + "deDisplayName": "เยอรมัน", + "dinDisplayName": "ดินก้า", + "doiDisplayName": "โดกรี", + "dovDisplayName": "โดมเบ", + "dzDisplayName": "ซองคา", + "eeDisplayName": "อีเว", + "enDisplayName": "อังกฤษ", + "enAUDisplayName": "อังกฤษ (ออสเตรเลีย)", + "enGBDisplayName": "อังกฤษ (สหราชอาณาจักร)", + "enINDisplayName": "ภาษาอังกฤษ (อินเดีย)", + "enUSDisplayName": "ภาษาอังกฤษ (สหรัฐอเมริกา)", + "eoDisplayName": "เอสเปอแรนโต", + "esDisplayName": "ภาษาสเปน", + "esESDisplayName": "ภาษาสเปน (สเปน)", + "esMXDisplayName": "ภาษาสเปน (เม็กซิโก)", + "euDisplayName": "บาสก์", + "faDisplayName": "เปอร์เซีย", + "ffDisplayName": "ฟูลาห์", + "fiDisplayName": "ฟินแลนด์", + "filDisplayName": "ฟิลิปปินส์", + "fjDisplayName": "ฟิจิ", + "foDisplayName": "ฟาโรอีส", + "frDisplayName": "ฝรั่งเศส", + "frCADisplayName": "ฝรั่งเศส (แคนาดา)", + "frFRDisplayName": "ฝรั่งเศส (ฝรั่งเศส)", + "fyDisplayName": "ฟริเซียนตะวันตก", + "gaDisplayName": "ไอริช", + "gaaDisplayName": "ก้า", + "gdDisplayName": "สก็อตติชเกลิก", + "glDisplayName": "กาลิเซียน", + "gnDisplayName": "กัวรานี", + "gomDisplayName": "โกอัน คอนคานี", + "guDisplayName": "คุชราตี", + "haDisplayName": "ฮาวซา", + "hawDisplayName": "ฮาวาย", + "heDisplayName": "ฮิบรู", + "hiDisplayName": "ฮินดี", + "hilDisplayName": "ฮิลิกายโน", + "hmnDisplayName": "ฮมง", + "hneDisplayName": "ชัตติสการี", + "hrDisplayName": "โครเอเชีย", + "hrxDisplayName": "ฮุนส์ริก", + "htDisplayName": "เฮติครีโอล", + "huDisplayName": "ฮังการี", + "hyDisplayName": "อาร์เมเนีย", + "idDisplayName": "อินโดนีเซีย", + "igDisplayName": "อิกโบ", + "iloDisplayName": "อิโลโก", + "isDisplayName": "ไอซ์แลนด์", + "itDisplayName": "อิตาลี", + "jaDisplayName": "ญี่ปุ่น", + "jvDisplayName": "ชวา", + "kaDisplayName": "จอร์เจีย", + "kkDisplayName": "คาซัค", + "kmDisplayName": "เขมร", + "knDisplayName": "กันนาดา", + "koDisplayName": "เกาหลี", + "kokDisplayName": "คอนคานี", + "kriDisplayName": "ครีโอ", + "ksDisplayName": "คาชมิรี", + "ktuDisplayName": "คิตูบา (สาธารณรัฐประชาธิปไตยคองโก)", + "kuDisplayName": "เคิร์ด", + "kyDisplayName": "คีร์กีซ", + "laDisplayName": "ละติน", + "lbDisplayName": "ลักเซมเบิร์ก", + "lgDisplayName": "กันดา", + "liDisplayName": "ลิมบูร์ก", + "lijDisplayName": "ลิกูเรียน", + "lmoDisplayName": "ลอมบาร์ด", + "lnDisplayName": "ลิงกาลา", + "loDisplayName": "ลาว", + "ltDisplayName": "ลิทัวเนีย", + "ltgDisplayName": "ลัตกาลี", + "luoDisplayName": "ลูโอ (เคนยาและแทนซาเนีย)", + "lusDisplayName": "มิโซ", + "lvDisplayName": "ลัตเวีย", + "maiDisplayName": "ไมธีลี", + "makDisplayName": "มาคาซาร์", + "mgDisplayName": "มาลากาซี", + "miDisplayName": "มาวรี", + "minDisplayName": "มินังกาเบา", + "mkDisplayName": "มาซิโดเนีย", + "mlDisplayName": "มลายาลัม", + "mnDisplayName": "มองโกเลีย", + "mniDisplayName": "มานิปูรี", + "mrDisplayName": "มาราธี", + "msDisplayName": "มลายู", + "msArabDisplayName": "มลายู (อาหรับ)", + "msMYDisplayName": "มลายู (มาเลเซีย)", + "mtDisplayName": "มอลตา", + "mwrDisplayName": "มาร์วารี", + "myDisplayName": "พม่า", + "nanDisplayName": "มินนาน", + "nbDisplayName": "นอร์เวย์ (Bokmål)", + "neDisplayName": "เนปาลี", + "newDisplayName": "นิวารี", + "nlDisplayName": "ดัตช์", + "nlBEDisplayName": "ฟลามิช", + "noDisplayName": "นอร์เวย์", + "nrDisplayName": "เซาท์เอนเดเบล", + "nsoDisplayName": "นอร์เทิร์นโซโท", + "nusDisplayName": "นูเออร์", + "nyDisplayName": "นยานจา", + "ocDisplayName": "ออกซิทัน", + "omDisplayName": "โอโรโม", + "orDisplayName": "โอเดีย", + "paDisplayName": "ปัญจาบี", + "paArabDisplayName": "ปัญจาบี (ชาห์มุกห์)", + "paINDisplayName": "ปัญจาบี (กุรมุกห์)", + "pagDisplayName": "ปังกาซินัน", + "pamDisplayName": "ปัมปังกา", + "papDisplayName": "ปาปีอาเมนโต", + "plDisplayName": "โปแลนด์", + "psDisplayName": "ปาชตู", + "ptDisplayName": "โปรตุเกส", + "ptBRDisplayName": "โปรตุเกส (บราซิล)", + "ptPTDisplayName": "โปรตุเกส (โปรตุเกส)", + "quDisplayName": "เคชัว", + "rajDisplayName": "ราชสถานี", + "rnDisplayName": "รูนดี", + "roDisplayName": "โรมาเนีย", + "roMDDisplayName": "มอลโดวา", + "romDisplayName": "โรมานี", + "ruDisplayName": "รัสเซีย", + "rwDisplayName": "คินยาร์วันดา", + "saDisplayName": "สันสกฤต", + "satDisplayName": "ซานตาลี", + "scnDisplayName": "ซิซิลี", + "sdDisplayName": "ซินด์hi", + "sgDisplayName": "ซังโก", + "shnDisplayName": "ชาน", + "siDisplayName": "ซินฮาลา", + "skDisplayName": "สโลวัก", + "slDisplayName": "สโลวีเนีย", + "smDisplayName": "ซามัว", + "snDisplayName": "โชนา", + "soDisplayName": "โซมาลี", + "sqDisplayName": "อัลเบเนีย", + "srDisplayName": "เซอร์เบีย", + "srMEDisplayName": "มอนเตเนกริน", + "ssDisplayName": "สวาตี", + "stDisplayName": "เซาท์เทิร์นโซโซ", + "suDisplayName": "ซุนดานีส", + "svDisplayName": "สวีเดน", + "swDisplayName": "สวาฮิลี", + "szlDisplayName": "ซิลีเซียน", + "taDisplayName": "ทมิฬ", + "teDisplayName": "เตลูกู", + "tetDisplayName": "เตตัม", + "tgDisplayName": "ทาจิก", + "thDisplayName": "ไทย", + "tiDisplayName": "ทิกรีเนีย", + "tkDisplayName": "เติร์กเมน", + "tlDisplayName": "ตากาล็อก", + "tnDisplayName": "ซวานา", + "trDisplayName": "ตุรกี", + "tsDisplayName": "ซองกา", + "ttDisplayName": "ตาตาร์", + "ugDisplayName": "อุยกูร์", + "ukDisplayName": "ยูเครน", + "urDisplayName": "อูรดู", + "urINDisplayName": "อูรดู (อินเดีย)", + "urPKDisplayName": "อูรดู (ปากีสถาน)", + "uzDisplayName": "อุซเบก", + "viDisplayName": "เวียดนาม", + "wuuDisplayName": "อู", + "xhDisplayName": "ซอสา", + "yiDisplayName": "อิดดิช", + "yoDisplayName": "โยรูบา", + "yuaDisplayName": "ยูคาเตโก", + "yueDisplayName": "กวางตุ้ง", + "yueCNDisplayName": "กวางตุ้ง (จีน)", + "yueHKDisplayName": "กวางตุ้ง (ฮ่องกง)", + "zhDisplayName": "จีน", + "zhCNDisplayName": "จีน (ตัวย่อ)", + "zhTWDisplayName": "จีน (ตัวเต็ม)", + "zuDisplayName": "ซูลู", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12941,6 +11639,7 @@ "placeholders": {} }, "notStartedActivitiesTitle": "เปิดเซสชัน ({num})", + "pickDifferentActivity": "เลือกกิจกรรมอื่น", "inProgressActivitiesTitle": "กำลังดำเนินการอยู่ ({num})", "completedActivitiesTitle": "เสร็จสิ้น ({num})", "inOngoingActivity": "คุณมีการดำเนินการที่กำลังเกิดขึ้น!", @@ -12968,10 +11667,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "ภาษาที่คุณเลือกไม่ตรงกับข้อความนี้ ต้องการอัปเดตภาษาที่คุณเลือกหรือไม่?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "นี่คือทุกคนในหลักสูตรนี้ คลิกที่อวาตาร์ของผู้ใช้ใด ๆ และ \"เริ่มการสนทนา\" เพื่อส่งข้อความส่วนตัว", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "คำศัพท์นี้จะถูกลบออกจากการวิเคราะห์ของคุณอย่างถาวร", + "woman": "ผู้หญิง", + "man": "ผู้ชาย", + "otherGender": "อื่นๆ", + "unselectedGender": "เลือกตัวเลือกเพศ", + "gender": "เพศ", + "chatParticipantTooltip": "นี่คือทุกคนในแชทนี้ คลิกที่อวาตาร์ของผู้ใช้ใด ๆ และ \"เริ่มการสนทนา\" เพื่อส่งข้อความส่วนตัว", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "เครื่องมือการเรียนรู้ถูกปิดใช้งานสำหรับข้อความที่ไม่ใช่ภาษาที่คุณต้องการ", + "vocabEmoji": "อีโมจิคำศัพท์", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "ขอการสร้างใหม่", + "optionalRegenerateReason": "(ไม่บังคับ) เหตุผล", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "คุณได้ตั้งค่าอีโมจิสำหรับ {lemma} แล้ว! เราจะใช้อีโมจินี้เพื่อแทนคำในกิจกรรมการฝึกฝนต่อไป", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "รอการลงชื่อเข้าใช้ให้เสร็จสิ้น", + "ssoDialogDesc": "เราได้เปิดแท็บใหม่เพื่อให้คุณลงชื่อเข้าใช้ได้อย่างปลอดภัย", + "ssoDialogHelpText": "🤔 หากคุณไม่เห็นแท็บใหม่ โปรดตรวจสอบตัวบล็อกป๊อปอัปของคุณ", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "ปิดเครื่องมือภาษา", + "disableLanguageToolsDesc": "คุณต้องการปิดการช่วยเหลือภาษาอัตโนมัติหรือไม่?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "การอนุญาตถูกปฏิเสธ เปิดใช้งานการอนุญาตการบันทึกเพื่อบันทึกข้อความเสียง", + "genericWebRecordingError": "เกิดข้อผิดพลาดบางอย่าง เราขอแนะนำให้ใช้เบราว์เซอร์ Chrome เมื่อบันทึกข้อความ", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "เพื่อประสบการณ์ที่ดีที่สุดในการใช้แอปพลิเคชันนี้ โปรดขยายขนาดหน้าจอของคุณ.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "กิจกรรมเพื่อปลดล็อกหัวข้อถัดไป", "activitiesToUnlockTopicDesc": "กำหนดจำนวนกิจกรรมเพื่อปลดล็อกหัวข้อหลักสูตรถัดไป", "@activitiesToUnlockTopicTitle": { @@ -12981,5 +11798,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "การฝึกฝนความหมายคำศัพท์ที่ถูกต้อง", + "constructUseIncLMDesc": "การฝึกฝนความหมายคำศัพท์ที่ไม่ถูกต้อง", + "constructUseCorLADesc": "การฝึกฝนเสียงคำศัพท์ที่ถูกต้อง", + "constructUseIncLADesc": "การฝึกฝนเสียงคำศัพท์ที่ไม่ถูกต้อง", + "constructUseBonus": "โบนัสระหว่างการฝึกคำศัพท์", + "practiceVocab": "ฝึกคำศัพท์", + "selectMeaning": "เลือกความหมาย", + "selectAudio": "เลือกเสียงที่ตรงกัน", + "congratulations": "ขอแสดงความยินดี!", + "anotherRound": "อีกหนึ่งรอบ", + "noActivityRequest": "ไม่มีคำขอทำกิจกรรมในขณะนี้", + "quit": "ออก", + "congratulationsYouveCompletedPractice": "ขอแสดงความยินดี! คุณได้เสร็จสิ้นการฝึกฝนแล้ว", + "mustHave10Words": "คุณต้องมีคำศัพท์อย่างน้อย 10 คำเพื่อฝึกฝน ลองพูดคุยกับเพื่อนหรือ Pangea Bot เพื่อค้นพบเพิ่มเติม!", + "botSettings": "การตั้งค่า Bot", + "activitySettingsOverrideWarning": "ภาษาและระดับภาษาที่กำหนดโดยแผนกิจกรรม", + "voice": "เสียง", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index e1f7b19b9..392af0e8a 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -1,6 +1,6 @@ { "@@locale": "tr", - "@@last_modified": "2026-01-06 13:02:09.596458", + "@@last_modified": "2026-01-07 14:27:16.503973", "about": "Hakkında", "@about": { "type": "String", @@ -3261,26 +3261,14 @@ "commandHint_logoutall": "Tüm aktif cihazlardan çıkış yap", "displayNavigationRail": "Mobilde gezinme rayını göster", "customReaction": "Özel tepki", - "accountInformation": "Hesap bilgisi", - "addGroupDescription": "Bir sohbet açıklaması ekle", - "addNewFriend": "Yeni arkadaş ekle", - "alreadyHaveAnAccount": "Zaten hesabınız var mı?", - "createNewGroup": "Yeni bir sohbet oluştur", - "editChatPermissions": "Sohbet izinlerini düzenle", "writeAMessageLangCodes": "{l1} veya {l2} ile yaz...", "requests": "İstekler", - "allCorrect": "Böyle söyleyebilirdim! Güzel!", - "newWayAllGood": "Böyle söylemezdim ama iyi görünüyor!", - "othersAreBetter": "Hm, daha iyi bir yol olabilir.", "holdForInfo": "Kelime bilgisi için tıklayıp basılı tut.", "greenFeedback": "Benim koyacağım bu olurdu!", "yellowFeedback": "Hm, deneyebilir ve işe yarayıp yaramadığını görebilirsin! Bu kelimeyi kullanmak için tekrar tıkla.", "redFeedback": "Sanmıyorum ki bu doğru...", "itInstructionsTitle": "Çeviri konusunda yardımcı olabilirim!", "itInstructionsBody": "Kelime bilgisi için seçimlere tıklayıp basılı tutabilirsin.", - "oneday": "Son 24 saat", - "oneweek": "Son 7 gün", - "onemonth": "Geçen ay", "gaTooltip": "Dilbilgisi yardımıyla L2 kullanımı", "taTooltip": "Çeviri yardımıyla L2 kullanımı", "unTooltip": "Diğer", @@ -3290,58 +3278,27 @@ "interactiveTranslatorAllowed": "Öğrenci Seçimi", "interactiveTranslatorRequired": "Gerekli", "notYetSet": "Henüz ayarlanmadı", - "myLearning": "Analitiklerim", "waTooltip": "Yardım olmadan L2 kullanımı", - "changeDateRange": "Tarih aralığını değiştir", - "classDescription": "Açıklama", - "addStudents": "Bağlantı veya kod ile kullanıcı davet et", - "copyClassLink": "Davet bağlantısını kopyala", - "copyClassCode": "Davet kodunu kopyala", - "inviteStudentByUserName": "Kullanıcı adıyla kullanıcı davet et", "languageSettings": "Dil Ayarları", "interactiveTranslator": "Çeviri yardımı", - "shareVideo": "Video Paylaş", - "shareVideoDesc": "Öğrencilerin sohbetlerde video paylaşmasına izin vermek için bunu etkinleştirin.", - "shareFiles": "Dosya Paylaş", - "selectLanguageLevel": "Dil seviyesini seçin", "noIdenticalLanguages": "Lütfen farklı temel ve hedef diller seçin", - "iWantALanguagePartnerFrom": "İstiyorum ki:", - "worldWide": "Dünya çapında", - "noResults": "Sonuç yok! Aramanızı genişletmeyi deneyin.", "searchBy": "Ülke ve dillerle ara", - "iWantAConversationPartner": "Bir sohbet partneri istiyorum ki", - "iWantALanguagePartnerWhoSpeaks": "Konuşan:", - "iWantALanguagePartnerWhoIsLearning": "Öğrenen:", "joinWithClassCode": "Derse katıl", - "joinWithClassCodeHint": "Davet kodunu girin", - "languageLevelPreA1": "Gerçek Başlangıç (Pre A1)", - "languageLevelA1": "Başlangıç (A1)", - "languageLevelA2": "Temel (A2)", - "languageLevelB1": "Orta Seviye (B1)", - "languageLevelB2": "Üst Orta (B2)", - "languageLevelC1": "İleri (C1)", - "languageLevelC2": "Ustalık (C2)", + "languageLevelPreA1": "Acemi Düşük (Pre A1)", + "languageLevelA1": "Acemi Orta (A1)", + "languageLevelA2": "Yeni Başlayan Yüksek (A2)", + "languageLevelB1": "Orta Seviye Orta (B1)", + "languageLevelB2": "İleri Seviye Düşük (B2)", + "languageLevelC1": "İleri Seviye Orta (C1)", + "languageLevelC2": "Üst Düzey (C2)", "changeTheNameOfTheClass": "İsmi değiştir", "changeTheNameOfTheChat": "Sohbetin adını değiştir", - "askPangeaBot": "Pangea Bot'tan bağlam tanımı isteyin.", "sorryNoResults": "Üzgünüz, sonuç yok.", "ignoreInThisText": "Yoksay", - "helpMeTranslate": "Evet!", - "needsItShortMessage": "Hedef dışı", "needsItMessage": "Bekle, bu {targetLanguage} değil! Çeviri yardımına ihtiyacın var mı?", - "needsIgcMessage": "Bu mesajda dilbilgisi hatası var.", - "tokenTranslationTitle": "Bir kelime temel dilinizde.", - "spanTranslationDesc": "Aşağıda olası çevirilere bakın.", - "spanTranslationTitle": "Bazı kelimeler temel dilinizde.", - "l1SpanAndGrammarTitle": "Hedef dilin dışında", - "l1SpanAndGrammarDesc": "Bu, temel dilinizde olabilir veya dilbilgisi hatası olabilir.", - "otherTitle": "Bir hatanız var.", - "otherDesc": "Aşağıda olası düzeltmelere bakın.", "countryInformation": "Ülkem", - "myLanguages": "Ana ve hedef dillerim", "targetLanguage": "Hedef Dil", "sourceLanguage": "Ana dil", - "languagesISpeak": "Konuştuğum diller", "updateLanguage": "Dillerim", "whatLanguageYouWantToLearn": "Hangi dili öğrenmek istiyorsunuz?", "whatIsYourBaseLanguage": "Ana diliniz nedir?", @@ -3356,13 +3313,8 @@ "errorDisableLanguageAssistanceUserDesc": "Çeviri ve dilbilgisi yardımı ayarlarını güncellemek için buraya tıklayın", "errorDisableITClassDesc": "Bu sohbetin bulunduğu kursta çeviri yardımı devre dışı bırakılmıştır.", "errorDisableIGCClassDesc": "Bu sohbetin bulunduğu kursta dilbilgisi yardımı devre dışı bırakılmıştır.", - "itIsDisabled": "İnteraktif Çeviri devre dışı", - "igcIsDisabled": "İnteraktif Dilbilgisi Kontrolü devre dışı", - "goToLearningSettings": "Öğrenme Ayarlarına Git", "error405Title": "Diller ayarlanmamış", "error405Desc": "Lütfen Ana Menü > Öğrenme Ayarları'ndan dillerinizi ayarlayın.", - "loginOrSignup": "Giriş yap veya kaydol", - "iAgreeToThe": "Şunları kabul ediyorum ", "termsAndConditions": "Şartlar ve Koşullar", "andCertifyIAmAtLeast13YearsOfAge": " ve en az 16 yaşında olduğumu onaylıyorum.", "error502504Title": "Vay canına, çok sayıda öğrenci çevrimiçi!", @@ -3370,40 +3322,21 @@ "error404Title": "Çeviri hatası!", "error404Desc": "Pangea Bot bunun nasıl çevrileceğinden emin değil...", "errorPleaseRefresh": "Bunu inceliyoruz! Lütfen sayfayı yeniden yükleyin ve tekrar deneyin.", - "toggleIT": "Etkileşimli Çeviri", - "toggleIGC": "Etkileşimli Dilbilgisi Kontrolü", - "toggleToolSettingsDescription": "Burada bireysel dil aracı ayarlarınızı değiştirebilirsiniz.", "connectedToStaging": "Test ortamına bağlı", "learningSettings": "Öğrenme ayarları", - "sendVoiceNotes": "Sesli Notlar Gönder", - "sendVoiceNotesDesc": "Öğrencilerin sohbetlerde sesli not göndermesine izin vermek için bunu açın.", - "chatTopic": "Sohbet konusu", - "chatTopicDesc": "Bir sohbet konusu belirleyin", - "inviteStudentByUserNameDesc": "Öğrencinizin zaten bir hesabı varsa, onları arayabilirsiniz.", "participants": "Katılımcılar", - "almostPerfect": "Bu doğru görünüyor! İşte söyleyeceğim şey.", - "prettyGood": "Oldukça iyi! İşte söyleyeceğim şey.", - "letMeThink": "Hmm, nasıl yaptığını görelim!", "clickMessageTitle": "Yardıma mı ihtiyacınız var?", "clickMessageBody": "Çeviri, oynatma ve daha fazlası gibi dil araçları için bir mesaja tıklayın!", - "understandingMessagesTitle": "Tanımlar ve çeviriler!", - "understandingMessagesBody": "Tanımlar için altı çizili kelimelere tıklayın. Mesaj seçenekleriyle çevirin (sağ üstte).", "allDone": "Hepsi tamam!", "vocab": "Kelimeler", "low": "Kullanıcının bu kelimeleri anlamadığına dair kanıtlarımız var.", "medium": "Bu kelimeler kullanıldı. Kelimelerin tamamen anlaşılıp anlaşılmadığı belirsiz.", "high": "Kullanıcının bu kelimeleri anladığına dair kanıtlarımız var.", - "unknownProficiency": "Bu kelimeler Pangea Chat'te kullanılmadı.", - "changeView": "Görünümleri değiştir.", - "clearAll": "Tüm kelimeleri temizle mi?", - "generateVocabulary": "Başlık ve açıklamadan kelime dağarcığı oluştur", - "generatePrompts": "İpucu oluştur", "subscribe": "Abone Ol", "getAccess": "Hemen Abone Ol!", "subscriptionDesc": "Mesajlaşma ücretsizdir! Etkileşimli çeviri, dilbilgisi kontrolü ve öğrenme analizlerini açmak için abone olun.", "subscriptionManagement": "Abonelik Yönetimi", "currentSubscription": "Mevcut Abonelik", - "changeSubscription": "Aboneliğinizi Değiştirin", "cancelSubscription": "Aboneliğinizi İptal Edin", "selectYourPlan": "Planınızı Seçin", "subsciptionPlatformTooltip": "Lütfen abonelik planınızı yönetmek için orijinal cihazınıza giriş yapın", @@ -3412,9 +3345,6 @@ "paymentHistory": "Ödeme Geçmişi", "emptyChatDownloadWarning": "Boş sohbet indirilemez", "update": "Güncelle", - "updateDesc": "Artık bu uygulamayı {localVersion} sürümünden {storeVersion} sürümüne güncelleyebilirsiniz", - "maybeLater": "Belki Sonra", - "mainMenu": "Ana Menü", "toggleImmersionMode": "Daldırma Modu", "toggleImmersionModeDesc": "Etkinleştirildiğinde, tüm mesajlar hedef dilinizde gösterilir. Bu ayar dil değişimleri için en kullanışlıdır.", "itToggleDescription": "Bu dil öğrenme aracı, temel dilinizdeki kelimeleri tanımlar ve onları hedef dilinize çevirmenize yardımcı olur. Nadiren de olsa, yapay zeka çeviri hataları yapabilir.", @@ -3429,212 +3359,13 @@ "definitionsToolDescription": "Etkinleştirildiğinde, mavi ile altı çizili kelimelere tıklayarak tanımlarına ulaşabilirsiniz. Tanımlara erişmek için mesajlara tıklayın.", "translationsToolDescrption": "Etkinleştirildiğinde, bir mesajı ve çeviri simgesine tıklayarak temel dilinizde bir mesaj görebilirsiniz.", "welcomeBack": "Tekrar hoş geldiniz! 2023-2024 pilotunun bir parçasıysanız, lütfen özel pilot aboneliğiniz için bizimle iletişime geçin. Bir öğretmen veya kurumunuzun sınıfınız için lisans satın aldıysa, öğretmen aboneliğiniz için bizimle iletişime geçin.", - "kickAllStudents": "Tüm Öğrencileri At", - "kickAllStudentsConfirmation": "Tüm öğrencileri atmak istediğinizden emin misiniz?", - "inviteAllStudents": "Tüm Öğrencileri Davet Et", - "inviteAllStudentsConfirmation": "Tüm öğrencileri davet etmek istediğinizden emin misiniz?", - "inviteUsersFromPangea": "Yöneticileri Ekle", - "redeemPromoCode": "Promosyon Kodu Kullan", - "enterPromoCode": "Promosyon Kodu Gir", "downloadTxtFile": "Metin Dosyası İndir", "downloadCSVFile": "CSV Dosyası İndir", "promotionalSubscriptionDesc": "Şu anda ömür boyu promosyon aboneliğiniz var. Aboneliğinizi değiştirmek için support@pangea.chat adresine mesaj gönderin.", "originalSubscriptionPlatform": "Abonelik {purchasePlatform} üzerinden satın alındı", "oneWeekTrial": "Bir Haftalık Deneme", "downloadXLSXFile": "Excel Dosyasını İndir", - "abDisplayName": "Abhazca", - "aaDisplayName": "Afarca", - "afDisplayName": "Afrikanca", - "akDisplayName": "Akan", - "sqDisplayName": "Arnavutça", - "amDisplayName": "Amharca", - "arDisplayName": "Arapça", - "anDisplayName": "Aragonca", - "hyDisplayName": "Ermenice", - "asDisplayName": "Assamca", - "avDisplayName": "Avarca", - "aeDisplayName": "Avestanca", - "ayDisplayName": "Aymara", - "azDisplayName": "Azerice", - "bmDisplayName": "Bambara", - "baDisplayName": "Başkirsçe", - "euDisplayName": "Bask", - "beDisplayName": "Belarusça", - "bnDisplayName": "Bengali", - "bhDisplayName": "Bihari", - "biDisplayName": "Bislama", - "bsDisplayName": "Boşnakça", - "brDisplayName": "Bretonca", - "bgDisplayName": "Bulgarca", - "myDisplayName": "Birmanca", - "caDisplayName": "Katalanca, Valencian", - "chDisplayName": "Chamorro", - "ceDisplayName": "Çeçence", - "nyDisplayName": "Çichewa, Chewa, Nyanja", - "zhDisplayName": "Çince", - "cvDisplayName": "Çuvaşça", - "kwDisplayName": "Kornişçe", - "coDisplayName": "Korsikaca", - "crDisplayName": "Cree", - "hrDisplayName": "Hırvatça", - "csDisplayName": "Çekçe", - "daDisplayName": "Danimarka", - "dvDisplayName": "Divehi; Dhivehi; Maldivian;", - "nlDisplayName": "Hollanda", - "enDisplayName": "İngilizce", - "eoDisplayName": "Esperanto", - "etDisplayName": "Estonca", - "eeDisplayName": "Ewe", - "foDisplayName": "Faroe Adaları", - "fjDisplayName": "Fiji", - "fiDisplayName": "Fince", - "frDisplayName": "Fransızca", - "ffDisplayName": "Fula; Fulah; Pulaar; Pular", - "glDisplayName": "Galicia", - "kaDisplayName": "Gürcüce", - "deDisplayName": "Almanca", - "elDisplayName": "Yunanca, Modern", - "gnDisplayName": "Güarani", - "guDisplayName": "Gujarati", - "htDisplayName": "Haiti Kreol", - "haDisplayName": "Hausa", - "heDisplayName": "İbranice (modern)", - "hzDisplayName": "Herero", - "hiDisplayName": "Hintçe", - "hoDisplayName": "Hiri Motu", - "huDisplayName": "Macarca", - "iaDisplayName": "Interlingua", - "idDisplayName": "Endonezce", - "ieDisplayName": "Interlingue", - "gaDisplayName": "İrlandaca", - "igDisplayName": "İgbo", - "ikDisplayName": "Inupiaq", - "ioDisplayName": "Ido", - "isDisplayName": "İzlandaca", - "itDisplayName": "İtalyanca", - "iuDisplayName": "Inuktitut", - "jaDisplayName": "Japonca", - "jvDisplayName": "Javanese", - "klDisplayName": "Kalaallisut, Grönland Dili", - "knDisplayName": "Kannada", - "krDisplayName": "Kanuri", - "ksDisplayName": "Kashmiri", - "kkDisplayName": "Kazakça", - "kmDisplayName": "Khmers", - "kiDisplayName": "Kikuyu, Gikuyu", - "rwDisplayName": "Kinyarwanda", - "kyDisplayName": "Kırgızca, Kyrgyzce", - "kvDisplayName": "Komi", - "kgDisplayName": "Kongo", - "koDisplayName": "Korece", - "kuDisplayName": "Kürtçe", - "kjDisplayName": "Kwanyama, Kuanyama", - "laDisplayName": "Latince", - "lbDisplayName": "Lüksemburgca, Letzeburgesch", - "lgDisplayName": "Ganda", - "liDisplayName": "Limburgca, Limburgan, Limburger", - "lnDisplayName": "Lingala", - "loDisplayName": "Laosça", - "ltDisplayName": "Litvanca", - "luDisplayName": "Luba-Katanga", - "lvDisplayName": "Letonca", - "gvDisplayName": "Manx", - "mkDisplayName": "Makedonca", - "mgDisplayName": "Malagasi", - "msDisplayName": "Malay", - "mlDisplayName": "Malayalam", - "mtDisplayName": "Malta", - "miDisplayName": "Maori", - "mrDisplayName": "Marathi (Marāṭhī)", - "mhDisplayName": "Marshallese", - "mnDisplayName": "Moğolca", - "naDisplayName": "Nauru", - "nvDisplayName": "Navajo, Navaho", - "nbDisplayName": "Norveççe Bokmål", - "ndDisplayName": "Kuzey Ndebele", - "neDisplayName": "Nepali", - "ngDisplayName": "Ndonga", - "nnDisplayName": "Norveççe Nynorsk", - "noDisplayName": "Norveççe", - "iiDisplayName": "Nuosu", - "nrDisplayName": "Güney Ndebele", - "ocDisplayName": "Okçitan", - "ojDisplayName": "Ojibwe, Ojibwa", - "cuDisplayName": "Eski Kilise Slavcası, Kilise Slavcası, Eski Bulgarca, Eski Slavca", - "omDisplayName": "Oromo", - "orDisplayName": "Oriya", - "osDisplayName": "Osetçe, Osetik", - "paDisplayName": "Pencabi, Punjabi", - "piDisplayName": "Pāli", - "faDisplayName": "Farsça", - "plDisplayName": "Lehçe", - "psDisplayName": "Peştuca, Pushtu", - "ptDisplayName": "Portekizce", - "quDisplayName": "Quechua", - "rmDisplayName": "Romansh", - "rnDisplayName": "Kirundi", - "roDisplayName": "Rumence, Moldovya, Moldovalı", - "ruDisplayName": "Rusça", - "saDisplayName": "Sanskritçe (Saṃskṛta)", - "scDisplayName": "Sardinya", - "sdDisplayName": "Sindhi", - "seDisplayName": "Kuzey Sami", - "smDisplayName": "Samoan", - "sgDisplayName": "Sango", - "srDisplayName": "Sırpça", - "gdDisplayName": "İskoç Gaelic, Gaelic", - "snDisplayName": "Shona", - "siDisplayName": "Sinhala, Sinhalese", - "skDisplayName": "Slovakça", - "slDisplayName": "Slovence", - "soDisplayName": "Somali", - "stDisplayName": "Güney Sotho", - "esDisplayName": "İspanyolca", - "suDisplayName": "Sundanese", - "swDisplayName": "Swahili", - "ssDisplayName": "Swati", - "svDisplayName": "İsveççe", - "taDisplayName": "Tamil", - "teDisplayName": "Telugu", - "tgDisplayName": "Tacikçe", - "thDisplayName": "Tayca", - "tiDisplayName": "Tigrinya", - "boDisplayName": "Tibet Standard, Tibetçe, Merkezi", - "tkDisplayName": "Türkmen", - "tlDisplayName": "Tagalog", - "tnDisplayName": "Tswana", - "toDisplayName": "Tonga (Tonga Adaları)", - "trDisplayName": "Türkçe", - "tsDisplayName": "Tsonga", - "ttDisplayName": "Tatar", - "twDisplayName": "Twi", - "tyDisplayName": "Tahitian", - "ugDisplayName": "Uygur, Uygurca", - "ukDisplayName": "Ukraynaca", - "urDisplayName": "Urdu", - "uzDisplayName": "Özbekçe", - "veDisplayName": "Venda", - "viDisplayName": "Vietnamca", - "voDisplayName": "Volapük", - "waDisplayName": "Wallon", - "cyDisplayName": "Welsh", - "woDisplayName": "Wolof", - "fyDisplayName": "Batı Frisian", - "xhDisplayName": "Xhosa", - "yiDisplayName": "Yidiş", - "yoDisplayName": "Yoruba", - "zaDisplayName": "Zhuang, Chuang", "unkDisplayName": "Bilinmeyen", - "zuDisplayName": "Zulu", - "hawDisplayName": "Hawaiian", - "hmnDisplayName": "Hmong", - "multiDisplayName": "Çoklu", - "cebDisplayName": "Cebuano", - "dzDisplayName": "Dzongkha", - "iwDisplayName": "İbranice", - "jwDisplayName": "Javanese", - "moDisplayName": "Moldovalı", - "shDisplayName": "Sırp-Hırvat", "wwCountryDisplayName": "Dünya Çapında", "afCountryDisplayName": "Afganistan", "axCountryDisplayName": "Aland Adaları", @@ -3882,41 +3613,25 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambiya", "zwCountryDisplayName": "Zimbabve", - "pay": "Öde", - "allPrivateChats": "Özel mesajlar", - "unknownPrivateChat": "Bilinmeyen özel sohbet", + "pay": "Ödeme", "invitedToSpace": "{user} sizi {space} adlı kursa katılmaya davet etti! Kabul etmek istiyor musunuz?", - "declinedInvitation": "Davet reddedildi", - "acceptedInvitation": "Davet kabul edildi", "youreInvited": "📩 Davet edildiniz!", "invitedToChat": "{user} sizi {name} adlı sohbete katılmaya davet etti! Kabul etmek istiyor musunuz?", "monthlySubscription": "Aylık", "yearlySubscription": "Yıllık", "defaultSubscription": "Pangea Sohbet Aboneliği", "freeTrial": "Ücretsiz Deneme", - "grammarAnalytics": "Hata Analitiği", "total": "Toplam: ", "noDataFound": "Veri bulunamadı", - "promoSubscriptionExpirationDesc": "Mevcut aboneliğiniz promosyonel olup {expiration} tarihinde sona erecek. Aboneliğinizi değiştirmek için support@pangea.chat adresine mesaj gönderin.", - "emptyChatNameWarning": "Lütfen bu sohbet için bir isim girin", "blurMeansTranslateTitle": "Neden mesaj bulanık görünüyor?", "blurMeansTranslateBody": "Kapsam Modu açıkken, ana dilinizde gönderilen mesajlar bulanık görünürken, Pangea Bot onları hedef dilinize çevirir. Kapsam Modu, bireysel ve kurs ayarlarında açılıp kapatılabilir.", - "someErrorTitle": "Hm, bir şeyler yanlış gitti", - "someErrorBody": "Bu bir hata olabilir veya ana dilinizde bir sorun olabilir.", "bestCorrectionFeedback": "Doğru!", "distractorFeedback": "Bu pek doğru değil.", "bestAnswerFeedback": "Doğru!", "definitionDefaultPrompt": "Bu kelimenin anlamı nedir?", "practiceDefaultPrompt": "En iyi cevap nedir?", "correctionDefaultPrompt": "En iyi yerine koyma nedir?", - "itStartDefaultPrompt": "Çeviri yardımına mı ihtiyacınız var?", - "lockedChatWarning": "🔒 Bu sohbet kilitlendi", - "lockChat": "Sohbeti Kilitle", - "suggestToChat": "Bu sohbeti öner", - "suggestToChatDesc": "Önerilen sohbetler sohbet listelerinde görünecek", "acceptSelection": "Düzeltmeyi Kabul Et", - "acceptSelectionAnyway": "Bunu yine de kullan", - "makingActivity": "Etkinlik yapılıyor", "why": "Neden?", "definition": "Tanım", "exampleSentence": "Örnek Cümle", @@ -3924,128 +3639,55 @@ "reportMessageTitle": "{reportingUserId} kullanıcısı, {roomName} sohbetinde {reportedUserId} kullanıcısının mesajını bildirdi", "reportMessageBody": "Mesaj: {reportedMessage}\nNeden: {reason}", "noTeachersFound": "Bildirilmek üzere öğretmen bulunamadı", - "viewArchive": "Arşivi Görüntüle", "trialExpiration": "Ücretsiz deneme süreniz {expiration} tarihinde sona eriyor", "freeTrialDesc": "Yeni kullanıcılar Pangea Chat'te bir hafta ücretsiz deneme süresi kazanır", "activateTrial": "Ücretsiz 7 Günlük Deneme", "successfullySubscribed": "Başarıyla abone oldunuz!", "clickToManageSubscription": "Aboneliğinizi yönetmek için buraya tıklayın.", - "errorGettingAudio": "Ses alınırken hata oluştu. Lütfen yenileyin ve tekrar deneyin.", "signUp": "Kayıt Ol", "pleaseChooseAtLeastChars": "Lütfen en az {min} karakter seçin.", "noEmailWarning": "Lütfen geçerli bir e-posta adresi girin. Aksi takdirde şifrenizi sıfırlayamazsınız. İsterseniz, devam etmek için tekrar butonuna dokunun.", "pleaseEnterValidEmail": "Lütfen geçerli bir e-posta adresi girin.", "pleaseChooseAUsername": "Lütfen bir kullanıcı adı seçin", - "chooseAUsername": "Bir kullanıcı adı seçin", "define": "Tanımla", "listen": "Dinle", - "addConversationBot": "Konuşma Botunu Etkinleştir", - "addConversationBotDesc": "Bu sohbete bir bot ekle", - "convoBotSettingsDescription": "Konuşma konusu ve zorluk seviyesini düzenle", - "enterAConversationTopic": "Bir konuşma konusu girin", - "conversationTopic": "Konuşma konusu", - "enableModeration": "Moderasyonu etkinleştir", - "enableModerationDesc": "Mesajlar gönderilmeden önce otomatik moderasyonu etkinleştir", - "conversationLanguageLevel": "Bu konuşmanın dil seviyesi nedir?", - "showDefinition": "Tanımı Göster", - "subscriptionPopupTitle": "Bu cümlede dilbilgisi hatası olabilir...", - "subscriptionPopupDesc": "Çeviri ve dilbilgisi düzeltmesini açmak için bugün abone olun!", - "seeOptions": "Seçenekleri gör", - "continuedWithoutSubscription": "Abone olmadan devam et", "trialPeriodExpired": "Deneme süreniz sona erdi", - "selectToDefine": "Herhangi bir kelimeye tıklayarak tanımını görün!", "translations": "çeviriler", "messageAudio": "mesaj sesi", "definitions": "tanımlar", "subscribedToUnlockTools": "Etkileşimli çeviri ve dilbilgisi kontrolü, ses oynatma, kişiselleştirilmiş pratik aktiviteleri ve öğrenme analizlerini açmak için abone olun!", "translationTooltip": "Çeviri", - "audioTooltip": "Ses Çal", "speechToTextTooltip": "Transkript", - "certifyAge": "Yaşımın {age} üzerinde olduğunu onaylıyorum", "kickBotWarning": "Pangea Bot'u uzaklaştırmak bu sohbetteki sohbet botunu kaldıracaktır.", - "joinToView": "Detayları görmek için bu odaya katılın", "refresh": "Yenile", - "autoPlayTitle": "Mesajları Otomatik Oynat", - "autoPlayDesc": "Etkinleştirildiğinde, mesajların metin-konuşma sesleri seçildiğinde otomatik olarak çalacaktır.", "messageAnalytics": "Mesaj Analitiği", "words": "Kelimeler", "score": "Puan", "accuracy": "Doğruluk", "points": "Puanlar", "noPaymentInfo": "Ödeme bilgisi gerekmez!", - "conversationBotModeSelectDescription": "Sohbet etkinliği", - "conversationBotModeSelectOption_discussion": "Tartışma", - "conversationBotModeSelectOption_custom": "Özel", - "conversationBotModeSelectOption_conversation": "Görüşme", - "conversationBotModeSelectOption_textAdventure": "Metin Macerası", - "conversationBotModeSelectOption_storyGame": "Hikaye Oyunu", - "conversationBotDiscussionZone_title": "Tartışma Ayarları", - "conversationBotDiscussionZone_discussionTopicLabel": "Tartışma Konusu", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Tartışma konusunu belirle", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Tartışma Anahtar Kelimeleri", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Tartışma anahtar kelimelerini belirle", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Tartışmayı yönlendirecek virgülle ayrılmış anahtar kelime listesi", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Tartışma isteğini zamanlamayla gönder", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Tartışma istekleri arasındaki saatler", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "↪ Tepkiyle yanıtla", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Tartışma isteği göndermek için tepki", - "conversationBotCustomZone_title": "Özel Ayarlar", - "conversationBotCustomZone_customSystemPromptLabel": "Sistem istemi", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Özel sistem istemini belirle", - "conversationBotCustomZone_customSystemPromptEmptyError": "Özel sistem istemi eksik", - "botConfig": "Bot ve etkinlik ayarları", - "botConfigNoPermissionTitle": "İzin yok", - "botConfigNoPermissionMessage": "Bot yapılandırmasını değiştirmek için oda yöneticisiyle iletişime geçin", - "addConversationBotDialogTitleInvite": "Konuşma botunu davet etmeyi onayla", - "addConversationBotButtonInvite": "Davet et", - "addConversationBotDialogInviteConfirmation": "Davet et", - "addConversationBotButtonTitleRemove": "Konuşma botunu kaldırmayı onayla", - "addConversationBotButtonRemove": "Kaldır", - "addConversationBotDialogRemoveConfirmation": "Kaldır", - "conversationBotConfigConfirmChange": "Onayla", - "conversationBotStatus": "Bot davet et", - "conversationBotTextAdventureZone_title": "Metin Macerası", - "conversationBotTextAdventureZone_instructionLabel": "Oyun Ustası Talimatları", - "conversationBotTextAdventureZone_instructionPlaceholder": "Oyun ustası talimatlarını ayarla", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Oyun ustası talimatları eksik", - "studentAnalyticsNotAvailable": "Öğrenci verileri şu anda mevcut değil", - "roomDataMissing": "Üyeliğiniz olmayan odalardan bazı veriler eksik olabilir.", "updatePhoneOS": "Cihazınızın işletim sistemi sürümünü güncellemeniz gerekebilir.", "wordsPerMinute": "Dakikada kelime", "autoIGCToolName": "Pangea yazma yardımını otomatik çalıştır", "autoIGCToolDescription": "Mesajımı göndermeden önce Pangea Sohbet dilbilgisi ve çeviri yazma yardımını otomatik olarak çalıştır.", - "runGrammarCorrection": "Mesajı kontrol et", - "grammarCorrectionFailed": "Düzeltilmesi gereken sorunlar", - "grammarCorrectionComplete": "İyi görünüyor!", "tooltipInstructionsTitle": "Bu ne işe yarar bilmiyor musun?", "tooltipInstructionsMobileBody": "Öğe üzerine basılı tutarak ipuçlarını görüntüleyin.", "tooltipInstructionsBrowserBody": "İpuçlarını görüntülemek için öğeler üzerinde fare ile durun.", "chatCapacity": "Sohbet kapasitesi", "roomFull": "Bu oda zaten kapasiteye ulaşmış durumda.", - "topicNotSet": "Konu belirlenmemiş.", - "chatCapacityNotSet": "Bu sohbetin kapasite sınırı yok.", "chatCapacityHasBeenChanged": "Sohbet kapasitesi değiştirildi", "chatCapacitySetTooLow": "Sohbet kapasitesi en az {count} olmalıdır.", "chatCapacityExplanation": "Sohbet kapasitesi, bir sohbette izin verilen üye sayısını sınırlar.", - "chatExceedsCapacity": "Bu sohbet kapasitesini aşıyor.", "tooManyRequest": "Çok fazla istek var, lütfen daha sonra tekrar deneyin.", "enterNumber": "Lütfen tam sayı değeri girin.", "buildTranslation": "Yukarıdaki seçeneklerden çevirinizi oluşturun", - "nonexistentSelection": "Seçim artık mevcut değil.", - "changeAnalyticsLanguage": "Analitik Dili Değiştir", "practice": "Pratik yap", "noLanguagesSet": "Dil ayarı yapılmamış", - "noActivitiesFound": "Şimdilik bu kadar! Daha fazlası için sonra tekrar gelin.", - "hintTitle": "İpucu:", "speechToTextBody": "Sesli mesajlar için, hem transkripti görebilir hem de konuşmacının Dakika Başına Kelime (WPM) puanını görebilirsiniz.", "versionNotFound": "Sürüm Bulunamadı", "fetchingVersion": "Sürüm alınmaya çalışılıyor...", "versionFetchError": "Sürüm alınırken hata oluştu", "versionText": "Sürüm: {version}+{buildNumber}", - "languageButtonLabel": "Dil: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Otomatik Çeviri", - "interactiveTranslatorAutoPlayDesc": "İnteraktif çeviriciyi sormadan başlatır.", - "changeAnalyticsView": "Analitik Görünümünü Değiştir", "l1TranslationBody": "Temel dilinizdeki mesajlar çevrilmeyecektir.", "deleteSubscriptionWarningTitle": "Aktif bir aboneliğiniz var", "deleteSubscriptionWarningBody": "Hesabınızı silmek aboneliğinizi otomatik olarak iptal etmez.", @@ -4053,9 +3695,7 @@ "error520Title": "Lütfen tekrar deneyin.", "error520Desc": "Üzgünüz, mesajınızı anlayamadık...", "wordsUsed": "Kullanılan Kelimeler", - "errorTypes": "Hata Türleri", "level": "Seviye", - "canceledSend": "Gönderim İptal Edildi", "morphsUsed": "Kullanılan Morfler", "translationChoicesBody": "İpucu almak için bir seçeneğe tıklayın ve basılı tutun.", "grammar": "Dilbilgisi", @@ -4065,7 +3705,6 @@ "reportContentIssueTitle": "İçerik Sorunu Bildir", "feedback": "İsteğe bağlı geri bildirim", "reportContentIssueDescription": "Aman Tanrım! Yapay zeka kişiselleştirilmiş öğrenme deneyimleri sağlayabilir ama... aynı zamanda halüsinasyon da görebilir. Lütfen herhangi bir geri bildiriminizi sağlayın, tekrar deneyelim.", - "changeContent": "Aman Tanrım! Yapay zeka kişiselleştirilmiş öğrenme deneyimleri sağlayabilir ama... aynı zamanda halüsinasyon da görebilir. Ne olmalı?", "clickTheWordAgainToDeselect": "Seçili kelimeyi kaldırmak için tekrar tıklayın.", "l2SupportNa": "Mevcut Değil", "l2SupportAlpha": "Alfa", @@ -4299,7 +3938,6 @@ "grammarCopySPC": "Özellik", "grammarCopyPARTTYPE": "Kısmi Tür", "grammarCopyINTREL": "Soru-İlişki", - "grammarCopyNUMFORMpsor": "Sahibin Numarası", "grammarCopyUNKNOWN": "Bilinmeyen", "grammarCopyNUMBERPSOR": "Sahibin Numarası", "grammarCopyPOSS": "İyelik", @@ -4345,28 +3983,14 @@ "grammarCopyVOICEdir": "Doğrudan", "grammarCopyVOICEinv": "Tersine", "grammarCopyVOICErcp": "Karşılıklı", - "enterPrompt": "Lütfen bir sistem istemi girin", - "selectBotLanguage": "Bot dilini seçin", - "chooseVoice": "Bir ses seçin", - "enterLanguageLevel": "Lütfen bir dil seviyesi girin", - "enterDiscussionTopic": "Lütfen bir tartışma konusu girin", - "selectBotChatMode": "Sohbet modunu seçin", - "messageNotInTargetLang": "Mesaj hedef dilde değil", "other": "Diğer", "levelShort": "Seviy {level}", - "botModeValidation": "Lütfen bir sohbet modu seçin", "clickBestOption": "Mesajınızı çevirmek için en iyi seçenekleri seçin!", "completeActivitiesToUnlock": "Çeviriyi açmak için en az bir etkinliği tamamlayın!", - "botSettingsSubtitle": "Botu sohbet etkinliğini denetlemek için davet edin", - "invitePeople": "Kullanıcıları Davet Et", "noCapacityLimit": "Kapasite sınırı yok", "downloadGroupText": "Grup metnini indir", "notificationsOn": "Bildirimler açık", "notificationsOff": "Bildirimler kapalı", - "chatCanBeFoundViaSearch": "Sohbet arama ile bulunabilir", - "requireCodeToJoin": "Katılmak için kod gereklidir", - "canFindInSearch": "Aramada bulunabilir", - "addChatToSpace": "Sohbet ekle", "createChatAndInviteUsers": "Sohbet oluştur ve kullanıcıları davet et", "updatedNewSpaceDescription": "Kurslar, sohbetlerinizi pekiştirmenize ve özel veya genel topluluklar oluşturmanıza olanak tanır.", "joinWithCode": "Kodu kullanarak katıl", @@ -4402,39 +4026,19 @@ "constructUseCollected": "Sohbette toplandı", "constructUseNanDesc": "Uygulanamaz", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Kullanıcı adı ve şifre ile giriş yap", - "registrationEmailMessage": "Lütfen oraya gönderilen bağlantı ile e-postanızı doğrulayın. Bazı durumlarda, e-postanın ulaşması 5 dakikaya kadar sürebilir. Lütfen spam klasörünüzü de kontrol edin.", "enableTTSToolName": "Metinden sese özelliği etkinleştirildi", "enableTTSToolDescription": "Uygulamanın hedef dilinizdeki metin parçaları için metinden sese çıkış üretmesine izin verin.", - "couldNotFindTTS": "Mevcut hedef diliniz için bir metinden sese motoru bulamadık.", - "ttsInstructionsHyperlink": "Cihazınıza yeni bir ses indirmeniz için talimatları görmek üzere buraya tıklayın.", - "createAnAccount": "Hesap oluştur", - "signIn": "Giriş yap", - "signUpWithEmail": "E-posta ile kaydol", - "signUpWithGoogle": "Google ile kaydol", - "signUpWithApple": "Apple ile kaydol", "yourUsername": "Kullanıcı adınız", "yourEmail": "E-posta adresiniz", - "pleaseEnterAnEmail": "Lütfen bir e-posta adresi girin", - "signInWithGoogle": "Google ile giriş yap", - "signInWithApple": "Apple ile giriş yap", - "chooseYourAvatar": "Avatarınızı seçin", "iWantToLearn": "Öğrenmek istiyorum", - "letsStart": "Hadi başlayalım", - "pleaseAgreeToTOS": "Lütfen Şartlar ve Koşulları kabul edin", "pleaseEnterEmail": "Lütfen geçerli bir e-posta adresi girin.", - "pleaseSelectALanguage": "Lütfen bir dil seçin", "myBaseLanguage": "Temel dilim", - "clickWordsInstructions": "🧻 Her kelimeye tıklayarak detaylara ulaşın. 🤐", - "chooseBestDefinition": "Bu kelimenin anlamı nedir?", "meaningSectionHeader": "Anlam:", "formSectionHeader": "Sohbetlerde kullanılan biçimler:", - "noEmojiSelectedTooltip": "Emoji seçilmedi", "writingExercisesTooltip": "Yazma", "listeningExercisesTooltip": "Dinleme", "readingExercisesTooltip": "Okuma", "meaningNotFound": "Anlam bulunamadı.", - "formsNotFound": "Biçimler bulunamadı.", "chooseBaseForm": "Temel formu seçin", "notTheCodeError": "Üzgünüz, bu kod değil!", "totalXP": "Toplam XP", @@ -4474,9 +4078,6 @@ "pickAnEmoji": "{lemma} için en sevdiğiniz emoji nedir?", "chooseLemmaMeaningInstructionsBody": "Mesajdaki kelimelerle anlamları eşleştir!", "doubleClickToEdit": "Düzenlemek için çift tıklayın.", - "removeFeature": "{feature} kaldır", - "chooseCorrectLabel": "Doğru etiketi seçin.", - "levelPopupTitle": "Başarıyla seviyeye ulaştınız\nSeviye {level}", "activityPlannerTitle": "Etkinlik Planlayıcı", "topicLabel": "Konu", "topicPlaceholder": "Bir konu seçin...", @@ -4484,7 +4085,6 @@ "modePlaceholder": "Bir mod seçin...", "learningObjectiveLabel": "Öğrenme Hedefi", "learningObjectivePlaceholder": "Bir öğrenme hedefi seçin...", - "mediaLabel": "Öğrencilerin paylaşması gereken medya", "languageOfInstructionsLabel": "Etkinlik talimatlarının dili", "targetLanguageLabel": "Hedef dil", "cefrLevelLabel": "CEFR seviyesi", @@ -4499,20 +4099,15 @@ "instructions": "Talimatlar", "numberOfLearners": "Öğrenci sayısı", "mustBeInteger": "Bir tam sayı olmalı, örn. 1, 2, 3, ...", - "noLemmasFound": "{xp} XP'den fazla kelime bulunmamaktadır. Pratik yapmaya devam edin!", "constructUsePvmDesc": "Sesli mesajda üretilmiştir", - "lockedMorphFeature": "Açılmayı bekliyor", "leaveSpaceDescription": "Kursu terk ederek, içindeki tüm sohbetleri terk etmiş olacaksınız. Diğer kullanıcılar kursu terk ettiğinizi görecektir.", - "whatIsLemma": "Lemma nedir?", "constructUseCorMmDesc": "Doğru mesaj anlamı", "constructUseIncMmDesc": "Yanlış mesaj anlamı", "constructUseIgnMmDesc": "Yoksayılmış mesaj anlamı", "clickForMeaningActivity": "Anlam Mücadelesi için buraya tıklayın", "meaning": "Anlam", "chatWith": "{displayname} ile Grup", - "slightlyOffensive": "Biraz saldırgan", "clickOnEmailLink": "Lütfen e-postadaki bağlantıya tıklayın ve devam edin.\n\nE-posta gelmediyse spam klasörünüzü kontrol edin.", - "whoIsAllowedToJoinThisChat": "Bu sohbete kimlerin katılmasına izin verilir", "dontForgetPassword": "Şifrenizi unutmayın!", "enableAutocorrectToolName": "Cihaz otomatik düzeltmeyi etkinleştir", "enableAutocorrectDescription": "Öğrenmekte olduğunuz dili destekliyorsa, yaygın hataları yazarken düzeltmek için cihaz otomatik düzeltmeyi etkinleştirebilirsiniz.", @@ -4540,48 +4135,26 @@ "autocorrectNotAvailable": "Maalesef, bu özellik şu anda platformunuzda desteklenmemektedir. Daha fazla geliştirme için bizi izlemeye devam edin!", "pleaseUpdateApp": "Devam etmek için lütfen uygulamayı güncelleyin.", "chooseEmojiInstructionsBody": "Emojileri en iyi temsil ettikleri kelimelerle eşleştirin. Endişelenmeyin! Anlaşmazlıklar için puan kesilmez. 😅", - "pickAnEmojiFor": "{lemma} için bir emoji seçin", "analyticsVocabListBody": "İşte tüm kelime hazineniz! Her kelime için XP kazandıkça, tohumdan tam çiçek açmaya geçecekler. Daha fazla detay görmek için herhangi bir kelimeye tıklayın.", "morphAnalyticsListBody": "İşte öğrendiğiniz dildeki tüm dilbilgisi kavramları! Sohbet ederken karşılaştıkça bunları açacaksınız. Detaylar için tıklayın.", "knockSpaceSuccess": "Bu kursa katılmak istediğinizi belirttiniz! Bir yönetici, talebinizi aldığında yanıt verecek 😄", - "joinByCode": "Kodu kullanarak katıl", "chooseWordAudioInstructionsBody": "Tam mesajı dinleyin. Ardından sesleri kelimelerle eşleştirin.", "chooseMorphsInstructionsBody": "Dilbilgisi soruları için yapboz parçalarına tıklayın!", - "inviteAndLaunch": "Başlat ve davet et", - "createOwnChat": "Kendi sohbetinizi oluşturun", "pleaseEnterInt": "Lütfen bir sayı girin", "home": "Ana Sayfa", "join": "Katıl", "readingAssistanceOverviewBody": "Emojiler, sesler, kelime anlamları ve dilbilgisi kavramlarını eşleştirmek için aşağıdaki düğmelere tıklayın. Veya detaylar için herhangi bir kelimeye tıklayın.", - "learnByTexting": "Mesajlaşarak öğren", - "levelSummaryTrigger": "Özetleri görüntüle", "levelSummaryPopupTitle": "Seviye {level} Özeti", - "referFriends": "Arkadaşlarını yönlendir", - "referFriendDialogTitle": "Bir arkadaşını sohbetine davet et", - "referFriendDialogDesc": "Bir arkadaşınız sizinle yeni bir dil öğrenmek için heyecanlı mı? O zaman bu davet bağlantısını kopyalayın ve bugün sizinle sohbet etmeye başlayın.", - "youUnlocked": "Açtınız", "resetInstructionTooltipsTitle": "Talimat ipuçlarını sıfırla", "resetInstructionTooltipsDesc": "Yeni bir kullanıcı gibi talimat ipuçlarını göstermek için tıklayın.", "selectForGrammar": "Etkinlikler ve detaylar için bir dilbilgisi simgesi seçin.", - "newChatActivityTitle": "Eğlenceli bir etkinlik eklemek ister misiniz?", - "newChatActivityDesc": "Activity Planner ile her grup sohbetini bir maceraya dönüştürün! Grup için etkileyici konular ve hedefler belirleyin ve sohbetleri muhteşem görsellerle canlandırın. Hayal gücünü harekete geçiren tartışmalar başlatın ve eğlenceyi sorunsuzca sürdürün!", - "exploreMore": "Daha fazla keşfet", "randomize": "Rastgeleleştir", "clear": "Temizle", "makeYourOwnActivity": "Kendi etkinliğinizi oluşturun", "featuredActivities": "Öne çıkanlar", - "goToChat": "Sohbete git", "save": "Kaydet", - "selectActivity": "Etkinlik seç", - "wordFocusListeningMultipleChoice": "Hangi ses kelimeyle eşleşiyor?", "startChat": "Sohbet başlat", "translationProblem": "Çeviri sorunu", - "perfectTranslation": "Mükemmel çeviri!", - "greatJobTranslation": "Bu çeviride harika iş çıkardınız!", - "goodJobTranslation": "Bu çeviride iyi iş çıkardın.", - "makingProgress": "İlerleme kaydediyorsun!", - "keepPracticing": "Pratik yapmaya devam et!", - "niceJob": "İyi iş!", "askToJoin": "Katılmak için sor", "emptyChatWarningTitle": "Sohbet boş", "emptyChatWarningDesc": "Kimseyi sohbetine davet etmedin. Kişilerini veya Bot'u davet etmek için Sohbet ayarlarına git. Ayrıca bunu daha sonra da yapabilirsin.", @@ -4600,8 +4173,6 @@ "languageLevelC2Desc": "Neredeyse duyduğum veya okuduğum her şeyi anlayabilir ve kendimi akıcı ve kesin bir şekilde ifade edebilirim.", "newVocab": "Yeni kelime hazinesi", "newGrammar": "Yeni dilbilgisi kavramları", - "congratulationsOnReaching": "Seviyeniz {level}'e ulaştı!", - "seeDetails": "Detayları Görüntüle", "choosePracticeMode": "Bir uygulama etkinliği başlatmak için yukarıdaki düğmelerden birine tıklayın", "ban": "Yasakla", "unban": "Yasaklamayı Kaldır", @@ -4615,8 +4186,6 @@ "timesUsedWithAssistance": "Yardımla kullanımlar", "shareInviteCode": "Davet kodunu paylaş: {code}", "leaderboard": "Liderlik Tablosu", - "welcomeUser": "Hoşgeldiniz {user}", - "joinSpaceOnboardingDesc": "Bir davet kodunuz veya genel bir kurs bağlantınız var mı?", "skipForNow": "Şimdilik atla", "permissions": "İzinler", "spaceChildPermission": "Bu derse yeni sohbetler ekleyebilecek kişiler", @@ -4624,12 +4193,8 @@ "defaultOption": "Varsayılan", "deleteChatDesc": "Bu sohbeti silmek istediğinizden emin misiniz? Tüm katılımcılar için silinecek ve sohbet içindeki tüm mesajlar artık pratik veya öğrenme analitiği için kullanılabilir olmayacaktır.", "deleteSpaceDesc": "Ders ve seçilen sohbetler tüm katılımcılar için silinecek ve sohbet içindeki tüm mesajlar artık pratik veya öğrenme analitiği için kullanılabilir olmayacaktır. Bu işlem geri alınamaz.", - "chatWithActivities": "Etkinliklerle sohbet", "launch": "Başlat", - "launchActivityToChats": "Etkinliği sohbetlere başlat", "searchChats": "Sohbetleri ara", - "selectChats": "Sohbetleri seç", - "selectChatToStart": "Tamam! Başlamak için bir sohbet seçin", "maxFifty": "Maksimum 50", "configureSpace": "Dersi yapılandır", "pinMessages": "Mesajları sabitle", @@ -4643,9 +4208,7 @@ "announcements": "Duyurular", "activities": "Aktiviteler", "access": "Erişim", - "botSettings": "Bot ayarları", "activitySuggestionTimeoutMessage": "Daha fazla aktivite oluşturmak için çok çalışıyoruz, lütfen bir dakika içinde tekrar kontrol edin", - "accessSettingsWarning": "Üzgünüz! Bu odanın Erişim kurallarını ayarlama izniniz yok gibi görünüyor. Bunların ihtiyaçlarınıza uygun olup olmadığını kontrol etmeli ve değiştirmek istiyorsanız oda yöneticisiyle iletişime geçmelisiniz", "howSpaceCanBeFound": "Bu kurs nasıl bulunabilir", "private": "Özel", "cannotBeFoundInSearch": "Aramada bulunamaz", @@ -4658,16 +4221,6 @@ "canBeFoundViaKnock": "• katılma isteği ve yönetici onayı", "youHaveLeveledUp": "Seviyeniz yükseldi!", "sendActivities": "Aktiviteleri gönder", - "getStarted": "Başlarken", - "getStartedBotChatDesc": "Yapay zeka ile sohbet etmek başlamak için harika bir yerdir ve Pangea'nın okuma, yazma, dinleme ve konuşma araçları bunu kolaylaştırır!", - "getStartedCommunitiesDesc": "Bir toplulukla öğrenmek Pangea Chat'in parladığı yerdir!\nSınıfınıza katılabilir, bir kurs bulabilir veya kendi kursunuzu oluşturabilirsiniz!", - "getStartedFriendsDesc": "Seninle öğrenmek isteyen bir arkadaşın mı var?", - "getStartedBotChatComplete": "Aferin! Bot ile sohbet ediyorsun!", - "getStartedCommunitiesComplete": "Harika, bir kursa katıldın!", - "getStartedComplete": "Bu bölümü tamamladın!\nHarika özelliklerimizi arkadaşlarınla sohbet ederek keşfetmeye devam et!", - "getStartedFriendsComplete": "Vay canına! Arkadaşların oldu! 😉", - "getStartedBotChatButton": "Sohbete başla!", - "getStartedFriendsButton": "Bir arkadaşınla sohbet et", "groupChat": "Grup Sohbeti", "directMessage": "Özel Mesaj", "newDirectMessage": "Yeni özel mesaj", @@ -4683,7 +4236,6 @@ "mySavedActivities": "Kaydedilen Aktivitelerim", "noSavedActivities": "Kaydedilen aktivite yok", "saveActivity": "Bu aktiviteyi kaydet", - "yourSavedActivities": "Kaydedilen Aktiviteler", "failedToPlayVideo": "Videoyu oynatamadı", "done": "Tamamlandı", "inThisSpace": "Bu kursta", @@ -4722,37 +4274,27 @@ "maximumActivityParticipants": "Her Etkinlik en fazla {count} katılımcıya sahip olabilir.", "pending": "Beklemede", "inactive": "Pasif", - "unjoinedActivityMessage": "Katılmak istiyor musunuz? Açık rolü seçin!\nVeya takılın ve gösteriyi izleyin!", - "fullActivityMessage": "Gösteriyi izlemekten çekinmeyin! Katılacak açık rol olmadığında, sohbeti görüntüleyebilirsiniz!", "confirmRole": "Rolü onayla", "openRoleLabel": "AÇIK", "joinedTheActivity": "👋 {username} {role} olarak katıldı", "finishedTheActivity": "🎯 {username} bu etkinliği tamamladı", - "endActivityTitle": "Bitti", - "endActivityDesc": "Hedefleri tamamladınız mı?\nBu, mesajlaşmadan geri çekildiğinize dair onayınızdır. Ama merak etmeyin, eğlence sohbetle devam ediyor! Herkes 'Bitti'ye tıklayana kadar takılın ve gösterinin tadını çıkarın.", "archiveToAnalytics": "Tamamlanan Etkinliklerime Ekle", "activitySummaryError": "Etkinlik özetleri kullanılamıyor", "requestSummaries": "Özetleri talep et", - "loadingActivitySummary": "Etkinlik özeti yükleniyor...", "generatingNewActivities": "Bu dil çifti için ilk kullanıcı sizsiniz! Lütfen bir dakika verin, sizin için etkinlikler hazırlıyoruz.", - "requestAccessTitle": "Analitik görüntüleme erişimi talep edilsin mi?", + "requestAccessTitle": "Analitik erişimi talep edilsin mi?", "requestAccessDesc": "Katılımcıların analitiklerini görüntüleme erişimi talep etmek ister misiniz?\n\nKatılımcılar kabul ederse, bu kursun yöneticileri:\n • toplam kelime dağarcığını\n • toplam dilbilgisi kavramlarını\n • tamamlanan toplam etkinlik oturumlarını\n • doğru ve yanlış kullanılan belirli dilbilgisi kavramlarını görebilecekler.\n\nGörme imkanları olmayacak:\n • kurs dışındaki sohbetlerdeki mesajlar\n • kelime listesi", "requestAccess": "Erişim iste ({count})", "analyticsInactiveTitle": "Etkin olmayan kullanıcılara yapılan istekler gönderilemedi", "analyticsInactiveDesc": "Bu özellik tanıtıldıktan sonra giriş yapmamış etkin olmayan kullanıcılar isteğinizi görmeyecek.\n\nKullanıcı geri döndüğünde İstek düğmesi görünecek. Kullanıcı adlarının altındaki İstek düğmesine tıklayarak isteği daha sonra yeniden gönderebilirsiniz.", "accessRequestedTitle": "Analitik Erişim Talebi", - "accessRequestedDesc": "“{space}” yöneticileri, öğrenme analitiklerinizi görüntülemek istiyor.\n\nKabul ederseniz, bu kursun yöneticileri şunları görebilecektir:\n • toplam kelime dağarcığı\n • toplam dilbilgisi kavramları\n • tamamlanan toplam etkinlik oturumu\n • kullanılan, doğru ve yanlış dilbilgisi kavramları\n\nAyrıca, aşağıdaki bilgileri göremeyeceklerdir:\n • kurs dışındaki sohbetlerdeki mesajlar\n • kelime listesi", - "allowAccess": "Erişime İzin Ver", - "denyAccess": "Erişimi Reddet", + "accessRequestedDesc": "Yönetici(ler) talep ediliyor: {admin} \n\n“{space}” alanından yöneticiler, öğrenme analitiklerinizi görüntülemek istiyor.\n\nKabul ederseniz, şunları görüntüleyebilecekler:\n • toplam kelime dağarcığı\n • toplam dilbilgisi kavramları\n • tamamlanan toplam etkinlik oturumları\n • doğru ve yanlış kullanılan belirli dilbilgisi kavramları\n\nŞunları görüntüleyemeyecekler:\n • kurs dışındaki sohbetlerdeki mesajlar\n • kelime listesi", "adminRequestedAccess": "Yöneticiler, analitiklerinizi görüntülemek istiyor.", "lastUpdated": "Güncellendi\n{time}", "activityFinishedMessage": "Hepsi Tamamlandı!", "endForAll": "Herkes İçin Sonlandır", "newCourse": "Yeni kurs", - "newCourseSubtitle": "Hangi kurs planını kullanmak istersiniz?", - "failedToLoadCourses": "Kurslar yüklenemedi", "numModules": "{num} modül", - "numActivityPlans": "{num} etkinlik planı", "coursePlan": "Kurs Planı", "editCourseLater": "Şablon başlığı, açıklamalar ve kurs resmi daha sonra düzenleyebilirsiniz.", "newCourseAccess": "Varsayılan olarak, kurslar özeldir ve katılmak için yönetici onayı gerekir. Bu ayarları istediğiniz zaman değiştirebilirsiniz.", @@ -4766,17 +4308,11 @@ "accessDesc": "Kursunuzu dünyaya açık hale getirebilirsiniz! Ya da, kursunuzu özel ve güvenli yapabilirsiniz.", "createGroupChatDesc": "Etkinlik oturumları başlar ve biterken, grup sohbetleri rutin iletişim için açık kalacaktır.", "deleteDesc": "Sadece yöneticiler kursu silebilir. Bu, tüm kullanıcıları kaldıran ve kurs içindeki tüm seçili sohbetleri silen yıkıcı bir işlemdir. Dikkatli ilerleyin.", - "failedToLoadCourseInfo": "Kurs bilgisi yüklenemedi", "noCourseFound": "Ah, bu kursun bir planı olmalı!\n\nKurs planları, konu ve sohbet etkinliklerinin sırasıdır.", "additionalParticipants": "+ {num} diğer", - "activityNotFoundForCourse": "Bu etkinlik kurs içinde bulunamadı", - "courseChats": "Kurs Sohbetleri", - "myActivitySessions": "Benim Etkinlik Oturumlarım", "directMessages": "Doğrudan Mesajlar", "whatNow": "Şimdi ne olacak?", "chooseNextActivity": "Bir sonraki etkinliğinizi seçin!", - "seeInstructions": "Talimatları Gör", - "hideInstructions": "Talimatları Gizle", "letsGo": "Hadi başlayalım", "chooseRole": "Bir rol seçin!", "chooseRoleToParticipate": "Katılmak için bir rol seçin!", @@ -4786,23 +4322,15 @@ "inviteFriends": "Arkadaşları davet et", "waitNotDone": "Bekle, bitirmedim!", "waitingForOthersToFinish": "Diğerlerinin bitirmesini bekliyorum...", - "saveToCompletedActivities": "Tamamlanan etkinliklere kaydet", "generatingSummary": "Sohbeti analiz ediyor ve sonuçlar oluşturuyor", - "instructionsLanguage": "Talimatların dili", "findCourse": "Bir kurs bul", - "activityCompletedDesc": "Tamamladığınız etkinlik, kullandığınız dili gözden geçirebileceğiniz ve pratik yapabileceğiniz analizlere eklendi.", "pingParticipantsNotification": "{user} {room} içindeki etkinlik oturumuna katılacak kullanıcılar arıyor", "course": "Kurs", "courses": "Kurslar", "courseName": "Kurs adı", "createNewCourse": "Yeni kurs", - "publicCourses": "Halka açık kurslar", "goToCourse": "Kursa git: {course}", "activityComplete": "Bu etkinlik tamamlandı. Etkinlik özeti aşağıda bulunabilir.", - "haventChattedMuch": "Görünüşe göre çok fazla sohbet etmediniz, biraz daha kelime kullanmayı deneyin! Amacınızı tamamladığınızı düşünüyorsanız, aşağıda etkinliği sonlandırabilirsiniz.", - "haveChatted": "Bir süredir sohbet ediyorsunuz gibi görünüyor! Amacınızı tamamladığınızı düşünüyorsanız, etkinliği bitirmek için kapatın ve size sohbet özeti oluşturacağız!", - "userDoneAndWaiting": "{num1}/{num2} katılımcı tamamladı. Herkesin bitirmesini bekleyin, size sohbet özeti oluşturacağız! \n\nGörüşmeye yeniden katılmak isterseniz, sohbet içindeki devam düğmesine tıklayın.", - "othersDoneAndWaiting": "{num1}/{num2} tamamladı. Amacınızı tamamladınız mı?", "startNewSession": "Yeni oturum başlat", "joinOpenSession": "Açık oturuma katıl", "less": "daha az", @@ -4812,7 +4340,6 @@ "openToJoin": "Katılmak açık", "results": "Sonuçlar", "activityDone": "Etkinlik Tamamlandı!", - "moreLabel": "daha fazla", "promoCodeInfo": "İndirim kodları bir sonraki sayfada girilebilir", "editsComingSoon": "Şehirleri ve etkinlikleri düzenleme özelliği yakında geliyor.", "editing": "Düzenleniyor", @@ -4828,13 +4355,10 @@ "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", - "chooseLanguage": "Bir dil seçin.", + "chooseLanguage": "Hedef bir dil seçin.", "planTrip": "Seyahatinizi planlayın", "howAreYouTraveling": "Nasıl seyahat ediyorsunuz?", "unlockPrivateTrip": "Özel bir seyahati açın", @@ -4847,25 +4371,20 @@ "courseCode": "Gizli şifre nedir?", "courseCodeHint": "Seyahat kodu veya bağlantı", "unlockMyTrip": "Seyahatimin kilidini aç", - "anyLevel": "Her Seviye", "signupOption": "Nasıl kaydolmak istiyorsunuz?", "withApple": "Apple ile", "withGoogle": "Google ile", "withEmail": "E-posta ile", "createAccount": "Hesap oluştur", - "noCoursesFound": "Kurs bulunamadı", "loginWithEmail": "E-posta ile giriş yap", "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", - "allCefrLevels": "Tüm CEFR seviyeleri", "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.", "directMessageBotTitle": "Pangea Bot ile Doğrudan Mesaj", "feedbackTitle": "Etkinlik Geri Bildirimi", - "feedbackDesc": "Etkinliği nasıl geliştirebiliriz? Birkaç detay sağlayabilirseniz, değişikliği yaparız!", "feedbackHint": "Geri bildiriminiz", "feedbackButton": "Geri bildirim gönder", "directMessageBotDesc": "İnsanlarla konuşmak daha eğlencelidir ama... Yapay zeka her zaman hazır!", @@ -5227,30 +4746,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5266,18 +4761,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5302,18 +4785,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5350,38 +4821,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5390,62 +4833,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5482,10 +4881,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5494,14 +4889,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5510,46 +4897,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5558,10 +4909,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5618,18 +4965,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5638,14 +4973,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5674,18 +5001,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5694,42 +5009,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5738,14 +5021,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5766,26 +5041,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5806,10 +5061,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5842,25 +5093,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5917,34 +5149,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5973,778 +5177,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7737,14 +6173,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7756,14 +6184,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7795,10 +6215,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7807,18 +6223,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7827,14 +6231,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7859,38 +6255,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7936,10 +6304,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7964,10 +6328,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7992,10 +6352,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8004,66 +6360,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8084,42 +6384,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8144,154 +6420,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8308,18 +6436,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8340,14 +6456,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8364,10 +6472,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8380,14 +6484,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8396,14 +6492,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8431,26 +6519,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8479,18 +6547,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8527,10 +6587,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9463,10 +7519,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9647,34 +7699,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9687,10 +7711,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9699,14 +7719,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9723,22 +7735,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9886,14 +7882,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9902,34 +7890,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9938,54 +7898,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9994,10 +7918,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10014,10 +7934,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10189,26 +8105,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10237,10 +8133,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10297,30 +8189,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10349,18 +8225,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10477,14 +8345,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10497,10 +8357,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10509,14 +8365,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10533,14 +8381,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10549,22 +8389,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10577,18 +8401,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10605,22 +8417,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10629,30 +8429,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10725,18 +8501,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10793,18 +8557,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10833,30 +8585,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10909,18 +8645,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10969,46 +8697,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11073,10 +8761,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11248,14 +8932,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11283,14 +8959,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11303,10 +8971,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11342,19 +9006,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11379,14 +9038,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11395,14 +9046,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11455,10 +9098,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11471,18 +9110,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11495,14 +9122,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11543,26 +9162,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11590,10 +9197,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11604,36 +9207,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11670,10 +9243,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11738,18 +9307,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11814,10 +9371,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11838,10 +9391,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11858,10 +9407,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11870,10 +9415,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11886,10 +9427,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11914,16 +9451,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Arkadaşları etkinliğe davet et", - "inviteFriendsToActivityCourse": "Arkadaşları etkinliğe ve kursa davet et", "feedbackRespDesc": "Yarına kadar etkinlik güncellemelerini kontrol edin.", "activityDropdownDesc": "Bu etkinliği tamamladıktan sonra aşağıdaki butona tıklayın", - "activityAnalyticsListBody": "İşte tamamladığınız etkinlikler! Etkinlikleri tamamladıktan sonra burada görebilirsiniz.", "languageMismatchTitle": "Dil uyuşmazlığı", "languageMismatchDesc": "Hedef diliniz, bu etkinliğin diliyle uyuşmuyor. Hedef dilinizi güncellemek ister misiniz?", "reportWordIssueTooltip": "Kelime bilgisi sorununu bildir", "tokenInfoFeedbackDialogTitle": "Kelime Bilgisi Geri Bildirimi", - "tokenInfoFeedbackDialogDesc": "Yapay zeka hatalar yapabilir. Lütfen yukarıdaki bilgilerle ilgili bulduğunuz herhangi bir sorunu açıklayın.", "noPublicCoursesFound": "Hiç kamu kursu bulunamadı. Bir tane oluşturmak ister misiniz?", "noCourseTemplatesFound": "Hedef diliniz için herhangi bir kurs bulamadık. Bu arada Pangea Bot ile sohbet edebilir ve daha fazla kurs için sonra tekrar kontrol edebilirsiniz.", "botActivityJoinFailMessage": "Pangea Bot yanıt vermekte biraz gecikiyor. Lütfen daha sonra tekrar deneyin veya bir arkadaşınızı davet edin.", @@ -11931,14 +9464,6 @@ "leaveDesc": "Bu alanı ve içindeki tüm sohbetleri terk edin", "selectAll": "Tümünü seç", "deselectAll": "Tüm seçimleri kaldır", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11947,10 +9472,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11967,10 +9488,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12004,7 +9521,6 @@ "newMessageInPangeaChat": "🗨️ Pangea Sohbetinde yeni mesaj", "shareCourse": "Kursu paylaş", "addCourse": "Bir kurs ekle", - "joinCourseWithCode": "Kod ile kursa katıl", "joinPublicCourse": "Herkese açık kursa katıl", "vocabLevelsDesc": "Kelime seviyelerini yükselttiğinizde buraya kelimeler gelir!", "highlightVocabTooltip": "Aşağıdaki hedef kelime kelimeleri vurgulamak için bunları sohbet içinde göndererek veya pratik yaparak vurgulayın.", @@ -12028,10 +9544,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12040,7 +9552,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Hiç DM veya sohbet bulunamadı. Aramanızın doğru yazıldığından emin olun.", + "activityAnalyticsTooltipBody": "Bunlar gözden geçirmek ve pratik yapmak için kaydedilmiş aktivitelerinizdir.", + "numSavedActivities": "Kaydedilen aktivitelerin sayısı", + "saveActivityTitle": "Aktiviteyi kaydet", + "saveActivityDesc": "İyi iş! Bu aktiviteyi daha sonra gözden geçirmek ve pratik yapmak için kaydedin", + "levelInfoTooltip": "Burada kazandığınız tüm puanları ve nasıl kazandığınızı görebilirsiniz!", + "alreadyInCourseWithID": "Bu planla zaten bir kurstasınız. Aynı planla yeni bir kurs oluşturmak mı yoksa mevcut kursa gitmek mi istersiniz?", + "goToExistingCourse": "Mevcut kursa git", + "emojiView": "Emoji görünümü", + "feedbackDialogDesc": "Ben de hata yapıyorum! Gelişmeme yardımcı olacak bir şey var mı?", + "contactHasBeenInvitedToTheCourse": "İletişim kişisi kursa davet edildi", + "activityStatsButtonTooltip": "Etkinlik bilgisi", + "allow": "İzin ver", + "deny": "Reddet", + "enabledRenewal": "Abonelik Yenilemeyi Etkinleştir", + "subscriptionEndsOn": "Abonelik Şu Tarihte Sona Eriyor", + "subscriptionRenewsOn": "Abonelik Şu Tarihte Yenileniyor", + "waitForSubscriptionChanges": "Aboneliğinizdeki değişikliklerin uygulamada yansıması biraz zaman alabilir.", + "subscribeReadingAssistance": "Mesaj araçlarını açmak için abone olun", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharca", + "arDisplayName": "Arapça", + "asDisplayName": "Asamca", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerice", + "baDisplayName": "Başkurt", + "banDisplayName": "Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Belarusça", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betavi", + "bgDisplayName": "Bulgarca", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengalce", + "bnBDDisplayName": "Bengalce (Bangladeş)", + "bnINDisplayName": "Bengalce (Hindistan)", + "brDisplayName": "Bretonca", + "bsDisplayName": "Boşnakça", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buryatça", + "caDisplayName": "Katalanca", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Orta Kürtçe", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Korsika Dili", + "crhDisplayName": "Kırım Türkçesi", + "crsDisplayName": "Seselwa Kreol Fransızcası", + "csDisplayName": "Çekçe", + "cvDisplayName": "Çuvaşça", + "cyDisplayName": "Gallerce", + "daDisplayName": "Danca", + "deDisplayName": "Almanca", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "İngilizce", + "enAUDisplayName": "İngilizce (Avustralya)", + "enGBDisplayName": "İngilizce (İngiltere)", + "enINDisplayName": "İngilizce (Hindistan)", + "enUSDisplayName": "İngilizce (ABD)", + "eoDisplayName": "Esperanto", + "esDisplayName": "İspanyolca", + "esESDisplayName": "İspanyolca (İspanya)", + "esMXDisplayName": "İspanyolca (Meksika)", + "euDisplayName": "Baskça", + "faDisplayName": "Farsça", + "ffDisplayName": "Fulah", + "fiDisplayName": "Fince", + "filDisplayName": "Filipin", + "fjDisplayName": "Fijili", + "foDisplayName": "Faroece", + "frDisplayName": "Fransızca", + "frCADisplayName": "Fransızca (Kanada)", + "frFRDisplayName": "Fransızca (Fransa)", + "fyDisplayName": "Batı Frisian", + "gaDisplayName": "İrlandaca", + "gaaDisplayName": "Ga", + "gdDisplayName": "İskoç Gaelic", + "glDisplayName": "Galiçyaca", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gücerati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiian", + "heDisplayName": "İbranice", + "hiDisplayName": "Hintçe", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Çatışgarca", + "hrDisplayName": "Hırvatça", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Haitian Kreolü", + "huDisplayName": "Macarca", + "hyDisplayName": "Ermenice", + "idDisplayName": "Endonezce", + "igDisplayName": "İgbo", + "iloDisplayName": "İloko", + "isDisplayName": "İzlandaca", + "itDisplayName": "İtalyanca", + "jaDisplayName": "Japonca", + "jvDisplayName": "Cava dili", + "kaDisplayName": "Gürcüce", + "kkDisplayName": "Kazakça", + "kmDisplayName": "Kmerce", + "knDisplayName": "Kannada", + "koDisplayName": "Korece", + "kokDisplayName": "Konkani", + "kriDisplayName": "Krio", + "ksDisplayName": "Keşmirce", + "ktuDisplayName": "Kituba (Kongo Demokratik Cumhuriyeti)", + "kuDisplayName": "Kürtçe", + "kyDisplayName": "Kırgızca", + "laDisplayName": "Latince", + "lbDisplayName": "Lüksemburgca", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgca", + "lijDisplayName": "Ligurca", + "lmoDisplayName": "Lombardca", + "lnDisplayName": "Lingala", + "loDisplayName": "Lao", + "ltDisplayName": "Litvanyaca", + "ltgDisplayName": "Latgalca", + "luoDisplayName": "Luo (Kenya ve Tanzanya)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Letonca", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Malgaşça", + "miDisplayName": "Maori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Makedonca", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Moğolca", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malay", + "msArabDisplayName": "Malay (Arapça)", + "msMYDisplayName": "Malay (Malezya)", + "mtDisplayName": "Maltaca", + "mwrDisplayName": "Marwari", + "myDisplayName": "Birmanya", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Norveççe (Bokmål)", + "neDisplayName": "Nepalce", + "newDisplayName": "Newari", + "nlDisplayName": "Flemenkçe", + "nlBEDisplayName": "Flemenkçe", + "noDisplayName": "Norveççe", + "nrDisplayName": "Güney Ndebele", + "nsoDisplayName": "Kuzey Sotho", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Okzitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Pencap", + "paArabDisplayName": "Pencap (Şahmukhi)", + "paINDisplayName": "Pencap (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Lehçe", + "psDisplayName": "Peştu", + "ptDisplayName": "Portekizce", + "ptBRDisplayName": "Portekizce (Brezilya)", + "ptPTDisplayName": "Portekizce (Portekiz)", + "quDisplayName": "Quechua", + "rajDisplayName": "Rajasthan Dili", + "rnDisplayName": "Rundi", + "roDisplayName": "Romence", + "roMDDisplayName": "Moldovca", + "romDisplayName": "Roman", + "ruDisplayName": "Rusça", + "rwDisplayName": "Kinyarwanda", + "saDisplayName": "Sanskrit", + "satDisplayName": "Santali", + "scnDisplayName": "Sicilya", + "sdDisplayName": "Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Şan", + "siDisplayName": "Singhalesce", + "skDisplayName": "Slovakça", + "slDisplayName": "Slovence", + "smDisplayName": "Samoaca", + "snDisplayName": "Şona", + "soDisplayName": "Somalice", + "sqDisplayName": "Arnavutça", + "srDisplayName": "Sırpça", + "srMEDisplayName": "Karadağca", + "ssDisplayName": "Swati", + "stDisplayName": "Güney Sotho", + "suDisplayName": "Sundanca", + "svDisplayName": "İsveççe", + "swDisplayName": "Svahili", + "szlDisplayName": "Silezyaca", + "taDisplayName": "Tamilce", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tacik", + "thDisplayName": "Tay", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Türkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Türkçe", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uygur", + "ukDisplayName": "Ukraynaca", + "urDisplayName": "Urdu", + "urINDisplayName": "Urdu (Hindistan)", + "urPKDisplayName": "Urdu (Pakistan)", + "uzDisplayName": "Özbekçe", + "viDisplayName": "Vietnamca", + "wuuDisplayName": "Wu", + "xhDisplayName": "Xhosa", + "yiDisplayName": "Yidiş", + "yoDisplayName": "Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Kantonca", + "yueCNDisplayName": "Kantonca (Çin)", + "yueHKDisplayName": "Kantonca (Hong Kong)", + "zhDisplayName": "Çince", + "zhCNDisplayName": "Çince (Basitleştirilmiş)", + "zhTWDisplayName": "Çince (Geleneksel)", + "zuDisplayName": "Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12107,6 +10805,7 @@ "notStartedActivitiesTitle": "Açık oturumlar ({num})", "inProgressActivitiesTitle": "Şu anda gerçekleşiyor ({num})", "completedActivitiesTitle": "Tamamlandı ({num})", + "pickDifferentActivity": "Farklı bir etkinlik seç", "inOngoingActivity": "Devam eden bir etkinliğiniz var!", "@notStartedActivitiesTitle": { "type": "String", @@ -12132,10 +10831,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Hedef diliniz bu mesajla eşleşmiyor. Hedef dilinizi güncelleyebilir misiniz?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Bu kurstaki herkes. Herhangi bir kullanıcının avatarına tıklayın ve \"sohbet başlat\" seçeneğini seçerek bir DM gönderin.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Bu kelime analitiklerinizden kalıcı olarak kaldırılacaktır.", + "woman": "Kadın", + "man": "Erkek", + "otherGender": "Diğer", + "unselectedGender": "Bir cinsiyet seçeneği seçin", + "gender": "Cinsiyet", + "chatParticipantTooltip": "Bu sohbetin içindeki herkes. Herhangi bir kullanıcının avatarına tıklayın ve \"sohbet başlat\" seçeneği ile DM gönderin.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Öğrenme araçları, hedef dilinizde olmayan mesajlar için devre dışıdır.", + "vocabEmoji": "Kelime emojisi", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Yeniden oluşturma talep et", + "optionalRegenerateReason": "(Opsiyonel) Sebep", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "{lemma} için emojiyi ayarladınız! Bu emojiyi, pratik aktivitelerde kelimeyi temsil etmek için kullanacağız.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Girişin tamamlanmasını bekliyoruz", + "ssoDialogDesc": "Güvenli bir şekilde giriş yapabilmeniz için yeni bir sekme açtık.", + "ssoDialogHelpText": "🤔 Yeni sekmeyi görmediyseniz, lütfen açılır pencere engelleyicinizi kontrol edin.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Dil araçlarını devre dışı bırak", + "disableLanguageToolsDesc": "Otomatik dil yardımını devre dışı bırakmak ister misiniz?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "İzin reddedildi. Sesli mesajlar kaydetmek için kayıt izinlerini etkinleştirin.", + "genericWebRecordingError": "Bir şeyler yanlış gitti. Mesajları kaydederken Chrome tarayıcısını kullanmanızı öneririz.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Bu uygulamayı en iyi şekilde kullanabilmek için lütfen ekran boyutunuzu genişletin.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Sonraki Konuyu Açmak için Aktiviteler", "activitiesToUnlockTopicDesc": "Sonraki kurs konusunu açmak için aktivite sayısını ayarlayın", "@activitiesToUnlockTopicTitle": { @@ -12145,5 +10962,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Doğru kelime tanımı pratiği", + "constructUseIncLMDesc": "Yanlış kelime tanımı pratiği", + "constructUseCorLADesc": "Doğru kelime ses pratiği", + "constructUseIncLADesc": "Yanlış kelime ses pratiği", + "constructUseBonus": "Kelime pratiği sırasında bonus", + "practiceVocab": "Kelime pratiği yap", + "selectMeaning": "Anlamı seç", + "selectAudio": "Eşleşen sesi seç", + "congratulations": "Tebrikler!", + "anotherRound": "Bir tur daha", + "noActivityRequest": "Şu anda etkinlik talebi yok.", + "quit": "Çık", + "congratulationsYouveCompletedPractice": "Tebrikler! Pratik oturumunu tamamladınız.", + "mustHave10Words": "Pratik yapmak için en az 10 kelimeye sahip olmalısınız. Daha fazla keşfetmek için bir arkadaşınızla veya Pangea Bot ile konuşmayı deneyin!", + "botSettings": "Bot Ayarları", + "activitySettingsOverrideWarning": "Etkinlik planı tarafından belirlenen dil ve dil seviyesi", + "voice": "Ses", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index 90ae479f9..9b8d546e5 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -1,6 +1,6 @@ { "@@locale": "uk", - "@@last_modified": "2026-01-06 13:01:42.034870", + "@@last_modified": "2026-01-07 14:25:54.221263", "about": "Про застосунок", "@about": { "type": "String", @@ -3380,26 +3380,14 @@ "@commandHint_logoutall": {}, "displayNavigationRail": "Показати панель навігації на мобільному", "customReaction": "Користувацька реакція", - "accountInformation": "Інформація облікового запису", - "addGroupDescription": "Додати опис чату", - "addNewFriend": "Додати нового друга", - "alreadyHaveAnAccount": "Вже є обліковий запис?", - "createNewGroup": "Створити новий чат", - "editChatPermissions": "Редагувати дозволи чату", "writeAMessageLangCodes": "Введіть {l1} або {l2}...", "requests": "Запити", - "allCorrect": "Ось як я б це сказав! Чудово!", - "newWayAllGood": "Це не так, як я б сказав, але виглядає добре!", - "othersAreBetter": "Гм, можливо, є кращий спосіб сказати це.", "holdForInfo": "Натисніть і утримуйте для інформації про слово.", "greenFeedback": "Це те, що я б вставив!", "yellowFeedback": "Гм, ви можете спробувати це і побачити, чи працює! Щоб використати це слово, просто натисніть його знову.", "redFeedback": "Я не думаю, що це правильно...", "itInstructionsTitle": "Я можу допомогти вам з перекладом!", "itInstructionsBody": "Ви можете натиснути і утримувати вибір для отримання інформації про слово.", - "oneday": "Останні 24 години", - "oneweek": "Останні 7 днів", - "onemonth": "Минулого місяця", "gaTooltip": "Використання L2 з граматичною допомогою", "taTooltip": "Використання L2 з перекладацькою допомогою", "unTooltip": "Інше", @@ -3409,58 +3397,27 @@ "interactiveTranslatorAllowed": "Вибір студента", "interactiveTranslatorRequired": "Обов’язково", "notYetSet": "Ще не встановлено", - "myLearning": "Моя аналітика", "waTooltip": "Використання L2 без допомоги", - "changeDateRange": "Змінити діапазон дат", - "classDescription": "Опис", - "addStudents": "Запросити користувачів за посиланням або кодом", - "copyClassLink": "Копіювати посилання для запрошення", - "copyClassCode": "Копіювати код запрошення", - "inviteStudentByUserName": "Запросити користувачів за ім’ям користувача", "languageSettings": "Налаштування мови", "interactiveTranslator": "Допомога з перекладом", - "shareVideo": "Поділитися відео", - "shareVideoDesc": "Увімкніть це, щоб дозволити студентам ділитися відео у чатах.", - "shareFiles": "Поділитися файлами", - "selectLanguageLevel": "Виберіть рівень мови", "noIdenticalLanguages": "Будь ласка, оберіть різні мови для бази та цілі", - "iWantALanguagePartnerFrom": "Звідки:", - "worldWide": "Світовий", - "noResults": "Результатів немає! Спробуйте розширити пошук.", "searchBy": "Пошук за країною та мовами", - "iWantAConversationPartner": "Я хочу співрозмовника, який", - "iWantALanguagePartnerWhoSpeaks": "Говорить:", - "iWantALanguagePartnerWhoIsLearning": "Вивчає:", "joinWithClassCode": "Приєднатися до курсу", - "joinWithClassCodeHint": "Введіть код запрошення", - "languageLevelPreA1": "Досвідчений початківець (Pre A1)", - "languageLevelA1": "Початковий (A1)", - "languageLevelA2": "Елементарний (A2)", - "languageLevelB1": "Середній (B1)", - "languageLevelB2": "Вищий середній (B2)", - "languageLevelC1": "Просунутий (C1)", - "languageLevelC2": "Майстерність (C2)", + "languageLevelPreA1": "Новачок Низький (Перед A1)", + "languageLevelA1": "Новачок Середній (A1)", + "languageLevelA2": "Початковий високий (A2)", + "languageLevelB1": "Середній середній (B1)", + "languageLevelB2": "Високий низький (B2)", + "languageLevelC1": "Високий середній (C1)", + "languageLevelC2": "Вищий (C2)", "changeTheNameOfTheClass": "Змінити назву", "changeTheNameOfTheChat": "Змінити назву чату", - "askPangeaBot": "Запитайте у Pangea Bot про контекстуальне визначення.", "sorryNoResults": "Вибачте, результатів немає.", "ignoreInThisText": "Ігнорувати", - "helpMeTranslate": "Так!", - "needsItShortMessage": "Поза ціллю", "needsItMessage": "Зачекайте, це не {targetLanguage}! Вам потрібна допомога з перекладом?", - "needsIgcMessage": "Це повідомлення містить граматичну помилку.", - "tokenTranslationTitle": "Слово знаходиться у вашій базовій мові.", - "spanTranslationDesc": "Дивіться можливі переклади нижче.", - "spanTranslationTitle": "Деякі слова знаходяться у вашій базовій мові.", - "l1SpanAndGrammarTitle": "За межами цільової мови", - "l1SpanAndGrammarDesc": "Це може бути у вашій базовій мові або містити граматичну помилку.", - "otherTitle": "У вас є помилка.", - "otherDesc": "Дивіться можливі виправлення нижче.", "countryInformation": "Моя країна", - "myLanguages": "Мої базова та цільова мови", "targetLanguage": "Мова, яку потрібно вивчити", "sourceLanguage": "Базова мова", - "languagesISpeak": "Мови, якими я володію", "updateLanguage": "Мої мови", "whatLanguageYouWantToLearn": "Яку мову ви хочете вивчити?", "whatIsYourBaseLanguage": "Яка ваша базова мова?", @@ -3475,13 +3432,8 @@ "errorDisableLanguageAssistanceUserDesc": "Натисніть тут, щоб оновити налаштування допомоги з перекладом і граматикою", "errorDisableITClassDesc": "Допомога з перекладом вимкнена для курсу, у якому ведеться цей чат.", "errorDisableIGCClassDesc": "Допомога з граматикою вимкнена для курсу, у якому ведеться цей чат.", - "itIsDisabled": "Інтерактивний переклад вимкнено", - "igcIsDisabled": "Інтерактивна перевірка граматики вимкнена", - "goToLearningSettings": "Перейти до налаштувань навчання", "error405Title": "Мови не налаштовані", "error405Desc": "Будь ласка, налаштуйте свої мови у Головному меню > Налаштування навчання.", - "loginOrSignup": "Увійти або зареєструватися за допомогою", - "iAgreeToThe": "Я погоджуюся з ", "termsAndConditions": "Умовами та положеннями", "andCertifyIAmAtLeast13YearsOfAge": " і підтверджую, що мені щонайменше 16 років.", "error502504Title": "Вау, багато студентів онлайн!", @@ -3489,40 +3441,21 @@ "error404Title": "Помилка перекладу!", "error404Desc": "Бот Pangea не впевнений, як це перекласти...", "errorPleaseRefresh": "Ми цим займаємося! Будь ласка, перезавантажте сторінку та спробуйте ще раз.", - "toggleIT": "Інтерактивний переклад", - "toggleIGC": "Інтерактивна перевірка граматики", - "toggleToolSettingsDescription": "Тут ви можете переключати налаштування індивідуальних мовних інструментів.", "connectedToStaging": "Підключено до тестового середовища", "learningSettings": "Налаштування навчання", - "sendVoiceNotes": "Надсилати голосові нотатки", - "sendVoiceNotesDesc": "Увімкніть це, щоб дозволити студентам надсилати голосові нотатки у чатах.", - "chatTopic": "Тема чату", - "chatTopicDesc": "Встановіть тему чату", - "inviteStudentByUserNameDesc": "Якщо у вашого студента вже є обліковий запис, ви можете його знайти.", "participants": "Учасники", - "almostPerfect": "Здається, все правильно! Ось що я б сказав.", - "prettyGood": "Дуже добре! Ось що я б сказав.", - "letMeThink": "Гм, давайте подивимося, як у вас вийшло!", "clickMessageTitle": "Потрібна допомога?", "clickMessageBody": "Клацніть на повідомлення для мовних інструментів, таких як переклад, відтворення та інше!", - "understandingMessagesTitle": "Визначення та переклади!", - "understandingMessagesBody": "Клацніть на підкреслені слова для отримання визначень. Перекладайте за допомогою опцій повідомлень (правий верхній кут).", "allDone": "Все готово!", "vocab": "Лексика", "low": "Ми маємо докази, що користувач не розуміє ці слова.", "medium": "Ці слова були використані. Неясно, чи повністю їх розуміють.", "high": "Ми маємо докази, що користувач розуміє ці слова.", - "unknownProficiency": "Ці слова не використовувалися у чаті Pangea.", - "changeView": "Змінити вигляд.", - "clearAll": "Очистити всі слова?", - "generateVocabulary": "Генерувати словник з назви та опису", - "generatePrompts": "Генерувати підказки", "subscribe": "Підписатися", "getAccess": "Підпишіться зараз!", "subscriptionDesc": "Обмін повідомленнями безкоштовний! Підпишіться, щоб розблокувати інтерактивний переклад, перевірку граматики та аналітику навчання.", "subscriptionManagement": "Управління підпискою", "currentSubscription": "Поточна підписка", - "changeSubscription": "Змінити підписку", "cancelSubscription": "Скасувати підписку", "selectYourPlan": "Виберіть свій план", "subsciptionPlatformTooltip": "Будь ласка, увійдіть у свій оригінальний пристрій, щоб керувати своїм планом підписки", @@ -3531,9 +3464,6 @@ "paymentHistory": "Історія платежів", "emptyChatDownloadWarning": "Не можна завантажити порожній чат", "update": "Оновити", - "updateDesc": "Тепер ви можете оновити цю програму з {localVersion} до {storeVersion}", - "maybeLater": "Можливо пізніше", - "mainMenu": "Головне меню", "toggleImmersionMode": "Режим занурення", "toggleImmersionModeDesc": "Коли він увімкнений, всі повідомлення відображаються вашою цільовою мовою. Ця налаштування найбільш корисна під час мовних обмінів.", "itToggleDescription": "Цей інструмент для вивчення мов визначатиме слова у вашій базовій мові та допомагатиме перекладати їх на вашу цільову мову. Хоча рідко, AI може робити помилки перекладу.", @@ -3548,212 +3478,13 @@ "definitionsToolDescription": "Коли активовано, слова підкреслені синім можна натиснути для перегляду визначень. Натискайте повідомлення для доступу до визначень.", "translationsToolDescrption": "Коли активовано, натисніть повідомлення та іконку перекладу, щоб побачити повідомлення вашою базовою мовою.", "welcomeBack": "Ласкаво просимо назад! Якщо ви були учасником пілотного проекту 2023-2024 років, будь ласка, зв’яжіться з нами для отримання вашої спеціальної підписки на пілотний проект. Якщо ви вчитель, який (або ваша установа) придбав ліцензії для вашого класу, зв’яжіться з нами для отримання підписки вчителя.", - "kickAllStudents": "Виключити всіх студентів", - "kickAllStudentsConfirmation": "Ви впевнені, що хочете виключити всіх студентів?", - "inviteAllStudents": "Запросити всіх студентів", - "inviteAllStudentsConfirmation": "Ви впевнені, що хочете запросити всіх студентів?", - "inviteUsersFromPangea": "Додати адміністраторів", - "redeemPromoCode": "Використати промо-код", - "enterPromoCode": "Введіть промо-код", "downloadTxtFile": "Завантажити текстовий файл", "downloadCSVFile": "Завантажити CSV-файл", "promotionalSubscriptionDesc": "У вас наразі безстрокова промо-підписка. Напишіть support@pangea.chat для допомоги у зміні підписки.", "originalSubscriptionPlatform": "Підписка, придбана через {purchasePlatform}", "oneWeekTrial": "Тестовий період один тиждень", "downloadXLSXFile": "Завантажити файл Excel", - "abDisplayName": "Абхазька", - "aaDisplayName": "Афарська", - "afDisplayName": "Африкаанс", - "akDisplayName": "Акан", - "sqDisplayName": "Албанська", - "amDisplayName": "Амхарська", - "arDisplayName": "Арабська", - "anDisplayName": "Арагонська", - "hyDisplayName": "Вірменська", - "asDisplayName": "Ассамська", - "avDisplayName": "Аварська", - "aeDisplayName": "Авестійська", - "ayDisplayName": "Аймара", - "azDisplayName": "Азербайджанська", - "bmDisplayName": "Бамбарська", - "baDisplayName": "Башкирська", - "euDisplayName": "Баскська", - "beDisplayName": "Беларуская", - "bnDisplayName": "Бенгальська", - "bhDisplayName": "Біхарі", - "biDisplayName": "Біслама", - "bsDisplayName": "Боснійська", - "brDisplayName": "Бретонська", - "bgDisplayName": "Болгарська", - "myDisplayName": "Бірманська", - "caDisplayName": "Каталонська, Валенсійська", - "chDisplayName": "Чаморро", - "ceDisplayName": "Чеченська", - "nyDisplayName": "Чичева, Чева, Нянджа", - "zhDisplayName": "Китайська", - "cvDisplayName": "Чуваська", - "kwDisplayName": "Корнська", - "coDisplayName": "Корсиканська", - "crDisplayName": "Крії", - "hrDisplayName": "Хорватська", - "csDisplayName": "Чеська", - "daDisplayName": "Данська", - "dvDisplayName": "Дівехі; Дівехі; Мальдівська;", - "nlDisplayName": "Нідерландська", - "enDisplayName": "Англійська", - "eoDisplayName": "Есперанто", - "etDisplayName": "Естонська", - "eeDisplayName": "Еве", - "foDisplayName": "Фарерська", - "fjDisplayName": "Фіджійська", - "fiDisplayName": "Фінська", - "frDisplayName": "Французька", - "ffDisplayName": "Фула; Фула; Пулар; Пулар", - "glDisplayName": "Галісійська", - "kaDisplayName": "Грузинська", - "deDisplayName": "Німецька", - "elDisplayName": "Грецька, сучасна", - "gnDisplayName": "Гуарані", - "guDisplayName": "Гуджараті", - "htDisplayName": "Гаїтянська, гаїтянський креольський", - "haDisplayName": "Хауса", - "heDisplayName": "Іврит (сучасний)", - "hzDisplayName": "Herero", - "hiDisplayName": "Хінді", - "hoDisplayName": "Хірі Моту", - "huDisplayName": "Угорська", - "iaDisplayName": "Інтерлінгва", - "idDisplayName": "Індонезійська", - "ieDisplayName": "Інтерлінгве", - "gaDisplayName": "Ірландська", - "igDisplayName": "Ігбо", - "ikDisplayName": "Інупіак", - "ioDisplayName": "Ідо", - "isDisplayName": "Ісландська", - "itDisplayName": "Італійська", - "iuDisplayName": "Інуктітут", - "jaDisplayName": "Японська", - "jvDisplayName": "Яванська", - "klDisplayName": "Калааллісут, Гренландська", - "knDisplayName": "Каннада", - "krDisplayName": "Канурі", - "ksDisplayName": "Кашмірська", - "kkDisplayName": "Казахська", - "kmDisplayName": "Кхмерська", - "kiDisplayName": "Кікуйю, Гікуйю", - "rwDisplayName": "Кіньяруанда", - "kyDisplayName": "Киргизька, Киргиз", - "kvDisplayName": "Комі", - "kgDisplayName": "Конго", - "koDisplayName": "Корейська", - "kuDisplayName": "Курдська", - "kjDisplayName": "Кваньяма, Куаньяма", - "laDisplayName": "Латинська", - "lbDisplayName": "Люксембурзька, Летзебурґська", - "lgDisplayName": "Лгандська", - "liDisplayName": "Лімбурзька, Лімбурганська, Лімбургер", - "lnDisplayName": "Лінгала", - "loDisplayName": "Лаоська", - "ltDisplayName": "Литовська", - "luDisplayName": "Луба-Катанга", - "lvDisplayName": "Латвійська", - "gvDisplayName": "Манська", - "mkDisplayName": "Македонська", - "mgDisplayName": "Малагасійська", - "msDisplayName": "Малайська", - "mlDisplayName": "Малаялам", - "mtDisplayName": "Мальтійська", - "miDisplayName": "Маорі", - "mrDisplayName": "Маратхі (Марахі)", - "mhDisplayName": "Маршалезька", - "mnDisplayName": "Монгольська", - "naDisplayName": "Науру", - "nvDisplayName": "Навахо, Наво", - "nbDisplayName": "Норвезька букмол", - "ndDisplayName": "Північний Ндебеле", - "neDisplayName": "Непальська", - "ngDisplayName": "Ндонга", - "nnDisplayName": "Норвезька нюнорск", - "noDisplayName": "Норвезька", - "iiDisplayName": "Нуосуу", - "nrDisplayName": "Південний Ндебеле", - "ocDisplayName": "Окситанська", - "ojDisplayName": "Оджибве, Оджибва", - "cuDisplayName": "Старослов'янська, Церковнослов'янська, Староболгарська, Старослов'янська", - "omDisplayName": "Оромо", - "orDisplayName": "Орія", - "osDisplayName": "Осетинська, Осетинська мова", - "paDisplayName": "Пенджабі, Панджабі", - "piDisplayName": "Палі", - "faDisplayName": "Перська", - "plDisplayName": "Польська", - "psDisplayName": "Пушту, Пушту", - "ptDisplayName": "Португальська", - "quDisplayName": "Кечуа", - "rmDisplayName": "Ретороманська", - "rnDisplayName": "Кірунді", - "roDisplayName": "Румунська, Молдавська, Молдовська", - "ruDisplayName": "Російська", - "saDisplayName": "Санскрит (Санскрита)", - "scDisplayName": "Сардинська", - "sdDisplayName": "Сіндхі", - "seDisplayName": "Північна саамська", - "smDisplayName": "Самоанська", - "sgDisplayName": "Санго", - "srDisplayName": "Сербська", - "gdDisplayName": "Шотландська гельська, гельська", - "snDisplayName": "Шона", - "siDisplayName": "Синхальська, сінхальська", - "skDisplayName": "Словацька", - "slDisplayName": "Словенська", - "soDisplayName": "Сомалійська", - "stDisplayName": "Південносото", - "esDisplayName": "Іспанська", - "suDisplayName": "Сунданська", - "swDisplayName": "Суахілі", - "ssDisplayName": "Сваті", - "svDisplayName": "Шведська", - "taDisplayName": "Тамільська", - "teDisplayName": "Телугу", - "tgDisplayName": "Таджицька", - "thDisplayName": "Тайська", - "tiDisplayName": "Тигринья", - "boDisplayName": "Тибетська стандартна, тибетська, центральна", - "tkDisplayName": "Туркменська", - "tlDisplayName": "Тагальська", - "tnDisplayName": "Тсвана", - "toDisplayName": "Тонганська (Острови Тонга)", - "trDisplayName": "Турецька", - "tsDisplayName": "Тсонга", - "ttDisplayName": "Татарська", - "twDisplayName": "Тві", - "tyDisplayName": "Тагітанська", - "ugDisplayName": "Уйгурська, уйгур", - "ukDisplayName": "Українська", - "urDisplayName": "Урду", - "uzDisplayName": "Узбекська", - "veDisplayName": "Венда", - "viDisplayName": "В'єтнамська", - "voDisplayName": "Волапюк", - "waDisplayName": "Волонська", - "cyDisplayName": "Валлійська", - "woDisplayName": "Волоф", - "fyDisplayName": "Західнофризська", - "xhDisplayName": "Коса", - "yiDisplayName": "Їдиш", - "yoDisplayName": "Йоруба", - "zaDisplayName": "Чжуан, Чуанг", "unkDisplayName": "Невідомо", - "zuDisplayName": "Зулу", - "hawDisplayName": "Гавайська", - "hmnDisplayName": "Хмонг", - "multiDisplayName": "Багатоголосий", - "cebDisplayName": "Себуано", - "dzDisplayName": "Дзонгка", - "iwDisplayName": "Іврит", - "jwDisplayName": "Яванська", - "moDisplayName": "Молдовська", - "shDisplayName": "Сербсько-хорватська", "wwCountryDisplayName": "Світовий", "afCountryDisplayName": "Афганістан", "axCountryDisplayName": "Острови Аланд", @@ -4001,41 +3732,25 @@ "yeCountryDisplayName": "Ємен", "zmCountryDisplayName": "Замбія", "zwCountryDisplayName": "Зімбабве", - "pay": "Оплатити", - "allPrivateChats": "Прямі чати", - "unknownPrivateChat": "Невідомий приватний чат", + "pay": "Оформити замовлення", "invitedToSpace": "{user} запросив вас приєднатися до курсу: {space}! Бажаєте прийняти?", - "declinedInvitation": "Запрошення відхилено", - "acceptedInvitation": "Запрошення прийнято", "youreInvited": "📩 Ви запрошені!", "invitedToChat": "{user} запросив вас приєднатися до чату: {name}! Бажаєте прийняти?", "monthlySubscription": "Щомісячна", "yearlySubscription": "Щорічна", "defaultSubscription": "Підписка Pangea Chat", "freeTrial": "Безкоштовний пробний період", - "grammarAnalytics": "Аналіз помилок", "total": "Загалом: ", "noDataFound": "Дані не знайдено", - "promoSubscriptionExpirationDesc": "Ваша поточна підписка є промоційною і закінчується {expiration}. Напишіть support@pangea.chat для допомоги у зміні підписки.", - "emptyChatNameWarning": "Будь ласка, введіть назву для цього чату", "blurMeansTranslateTitle": "Чому повідомлення розмите?", "blurMeansTranslateBody": "Поки режим занурення увімкнено, повідомлення, надіслані вашою базовою мовою, будуть розмиті, поки Pangea Bot перекладає їх на вашу цільову мову. Режим занурення можна вмикати або вимикати в налаштуваннях окремих курсів і профілів.", - "someErrorTitle": "Гм, щось не так", - "someErrorBody": "Це може бути помилка або щось у вашій базовій мові.", "bestCorrectionFeedback": "Це правильно!", "distractorFeedback": "Це не зовсім правильно.", "bestAnswerFeedback": "Це правильно!", "definitionDefaultPrompt": "Що означає це слово?", "practiceDefaultPrompt": "Яка найкраща відповідь?", "correctionDefaultPrompt": "Яка найкраща заміна?", - "itStartDefaultPrompt": "Хочете допомогу з перекладом?", - "lockedChatWarning": "🔒 Цей чат заблоковано", - "lockChat": "Заблокувати чат", - "suggestToChat": "Запропонувати цей чат", - "suggestToChatDesc": "Запропоновані чати з'являться у списках чатів", "acceptSelection": "Прийняти виправлення", - "acceptSelectionAnyway": "Використати це все одно", - "makingActivity": "Створення активності", "why": "Чому?", "definition": "Визначення", "exampleSentence": "Приклад речення", @@ -4043,128 +3758,55 @@ "reportMessageTitle": "{reportingUserId} повідомив повідомлення від {reportedUserId} у чаті {roomName}", "reportMessageBody": "Повідомлення: {reportedMessage}\nПричина: {reason}", "noTeachersFound": "Вчителі не знайдені для повідомлення", - "viewArchive": "Переглянути архів", "trialExpiration": "Ваша безкоштовна пробна версія закінчується {expiration}", "freeTrialDesc": "Нові користувачі отримують тижневу безкоштовну пробну версію Pangea Chat", "activateTrial": "Безкоштовна 7-денна пробна версія", "successfullySubscribed": "Ви успішно підписалися!", "clickToManageSubscription": "Натисніть тут, щоб керувати підпискою.", - "errorGettingAudio": "Помилка при отриманні аудіо. Будь ласка, оновіть сторінку та спробуйте знову.", "signUp": "Зареєструватися", "pleaseChooseAtLeastChars": "Будь ласка, виберіть щонайменше {min} символів.", "noEmailWarning": "Будь ласка, введіть дійсну адресу електронної пошти. Інакше ви не зможете скинути пароль. Якщо не хочете цього робити, натисніть ще раз на кнопку, щоб продовжити.", "pleaseEnterValidEmail": "Будь ласка, введіть дійсну адресу електронної пошти.", "pleaseChooseAUsername": "Будь ласка, виберіть ім'я користувача", - "chooseAUsername": "Виберіть ім'я користувача", "define": "Визначити", "listen": "Слухати", - "addConversationBot": "Увімкнути чат-бот", - "addConversationBotDesc": "Додати бота до цього чату", - "convoBotSettingsDescription": "Редагувати тему розмови та рівень складності", - "enterAConversationTopic": "Введіть тему розмови", - "conversationTopic": "Тема розмови", - "enableModeration": "Увімкнути модерацію", - "enableModerationDesc": "Увімкнути автоматичну модерацію для перегляду повідомлень перед їх відправкою", - "conversationLanguageLevel": "Який рівень мови цієї розмови?", - "showDefinition": "Показати визначення", - "subscriptionPopupTitle": "Це речення може містити граматичну помилку...", - "subscriptionPopupDesc": "Підпишіться сьогодні, щоб розблокувати переклад та виправлення граматики!", - "seeOptions": "Переглянути опції", - "continuedWithoutSubscription": "Продовжити без підписки", "trialPeriodExpired": "Ваш пробний період закінчився", - "selectToDefine": "Клікніть будь-яке слово, щоб побачити його визначення!", "translations": "переклади", "messageAudio": "аудіо повідомлення", "definitions": "визначення", "subscribedToUnlockTools": "Підпишіться, щоб розблокувати інтерактивний переклад і перевірку граматики, відтворення аудіо, персоналізовані вправи та аналітику навчання!", "translationTooltip": "Перекласти", - "audioTooltip": "Відтворити аудіо", "speechToTextTooltip": "Транскрипція", - "certifyAge": "Я засвідчую, що мені понад {age} років", "kickBotWarning": "Вилучення бота Pangea видалить бота для обговорень з цього чату.", - "joinToView": "Приєднайтеся до цієї кімнати, щоб переглянути деталі", "refresh": "Оновити", - "autoPlayTitle": "Автоматичне відтворення повідомлень", - "autoPlayDesc": "Якщо увімкнено, аудіо з тексту в мові повідомлень буде автоматично відтворюватися при виборі.", "messageAnalytics": "Аналіз повідомлень", "words": "Слова", "score": "Результат", "accuracy": "Точність", "points": "Бали", "noPaymentInfo": "Інформація про оплату не потрібна!", - "conversationBotModeSelectDescription": "Активність чату", - "conversationBotModeSelectOption_discussion": "Обговорення", - "conversationBotModeSelectOption_custom": "Користувацький", - "conversationBotModeSelectOption_conversation": "Розмова", - "conversationBotModeSelectOption_textAdventure": "Текстова пригода", - "conversationBotModeSelectOption_storyGame": "Ігри історій", - "conversationBotDiscussionZone_title": "Налаштування обговорення", - "conversationBotDiscussionZone_discussionTopicLabel": "Тема обговорення", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Встановіть тему обговорення", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Ключові слова обговорення", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Встановіть ключові слова обговорення", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Перелік ключових слів через кому для керування обговоренням", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Надсилати підказки для обговорення за розкладом", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Години між підказками для обговорення", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Відповідає на реакцію ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Реакція для надсилання підказки для обговорення", - "conversationBotCustomZone_title": "Користувацькі налаштування", - "conversationBotCustomZone_customSystemPromptLabel": "Системна підказка", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Встановіть користувацьку системну підказку", - "conversationBotCustomZone_customSystemPromptEmptyError": "Відсутня користувацька системна підказка", - "botConfig": "Налаштування бота та активності", - "botConfigNoPermissionTitle": "Немає дозволу", - "botConfigNoPermissionMessage": "Зверніться до адміністратора кімнати для зміни налаштувань бота", - "addConversationBotDialogTitleInvite": "Підтвердіть запрошення бота для обговорення", - "addConversationBotButtonInvite": "Запросити", - "addConversationBotDialogInviteConfirmation": "Запросити", - "addConversationBotButtonTitleRemove": "Підтвердити видалення бота розмови", - "addConversationBotButtonRemove": "Видалити", - "addConversationBotDialogRemoveConfirmation": "Видалити", - "conversationBotConfigConfirmChange": "Підтвердити", - "conversationBotStatus": "Запросити бота", - "conversationBotTextAdventureZone_title": "Текстова пригода", - "conversationBotTextAdventureZone_instructionLabel": "Інструкції майстра гри", - "conversationBotTextAdventureZone_instructionPlaceholder": "Встановіть інструкції майстра гри", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Відсутні інструкції майстра гри", - "studentAnalyticsNotAvailable": "Дані студента наразі недоступні", - "roomDataMissing": "Можливо, деякі дані відсутні у кімнатах, де ви не є учасником.", "updatePhoneOS": "Можливо, потрібно оновити версію ОС вашого пристрою.", "wordsPerMinute": "Слів за хвилину", "autoIGCToolName": "Автоматично запускати допомогу з написання Pangea", "autoIGCToolDescription": "Автоматично запускати допомогу з граматики та перекладу в чаті Pangea перед відправкою мого повідомлення.", - "runGrammarCorrection": "Перевірити повідомлення", - "grammarCorrectionFailed": "Проблеми для вирішення", - "grammarCorrectionComplete": "Виглядає добре!", "tooltipInstructionsTitle": "Не впевнений, що це робить?", "tooltipInstructionsMobileBody": "Натисніть і утримуйте елементи, щоб переглянути підказки.", "tooltipInstructionsBrowserBody": "Наведіть курсор на елементи, щоб переглянути підказки.", "chatCapacity": "Місткість чату", "roomFull": "Ця кімната вже заповнена.", - "topicNotSet": "Тема не встановлена.", - "chatCapacityNotSet": "У цьому чаті немає обмеження місткості.", "chatCapacityHasBeenChanged": "Місткість чату змінена", "chatCapacitySetTooLow": "Місткість чату має бути не менше {count}.", "chatCapacityExplanation": "Місткість чату обмежує кількість учасників, дозволених у чаті.", - "chatExceedsCapacity": "Цей чат перевищує свою місткість.", "tooManyRequest": "Занадто багато запитів, будь ласка, спробуйте пізніше.", "enterNumber": "Будь ласка, введіть ціле число.", "buildTranslation": "Створіть свій переклад з наведених вище варіантів", - "nonexistentSelection": "Вибір більше не існує.", - "changeAnalyticsLanguage": "Змінити мову аналітики", "practice": "Практика", "noLanguagesSet": "Мови не встановлено", - "noActivitiesFound": "Досить на сьогодні! Поверніться пізніше для більшого.", - "hintTitle": "Підказка:", "speechToTextBody": "Для голосових повідомлень ви можете побачити транскрипт, а також оцінку слів за хвилину від спікера.", "versionNotFound": "Версія не знайдена", "fetchingVersion": "Завантаження версії...", "versionFetchError": "Помилка при завантаженні версії", "versionText": "Версія: {version}+{buildNumber}", - "languageButtonLabel": "Мова: {currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "Автоматичний переклад", - "interactiveTranslatorAutoPlayDesc": "Запускає інтерактивний перекладач без запиту.", - "changeAnalyticsView": "Змінити вигляд аналітики", "l1TranslationBody": "Повідомлення вашою базовою мовою не будуть перекладені.", "deleteSubscriptionWarningTitle": "У вас активна підписка", "deleteSubscriptionWarningBody": "Видалення вашого облікового запису не скасує автоматично вашу підписку.", @@ -4172,9 +3814,7 @@ "error520Title": "Будь ласка, спробуйте ще раз.", "error520Desc": "Вибачте, ми не змогли зрозуміти ваше повідомлення...", "wordsUsed": "Використані слова", - "errorTypes": "Типи помилок", "level": "Рівень", - "canceledSend": "Відміна відправлення", "morphsUsed": "Використані морфеми", "translationChoicesBody": "Клікніть і утримуйте опцію для підказки.", "grammar": "Граматика", @@ -4184,7 +3824,6 @@ "reportContentIssueTitle": "Повідомити про проблему з вмістом", "feedback": "Додатковий відгук", "reportContentIssueDescription": "Ой! ШІ може сприяти персоналізованому навчанню, але... також може галюцинувати. Будь ласка, надайте будь-який відгук, і ми спробуємо знову.", - "changeContent": "Ой! ШІ може сприяти персоналізованому навчанню, але... також може галюцинувати. Що це має бути?", "clickTheWordAgainToDeselect": "Клацніть на вибране слово, щоб зняти його з вибору.", "l2SupportNa": "Недоступно", "l2SupportAlpha": "Альфа", @@ -4418,7 +4057,6 @@ "grammarCopySPC": "Специфічність", "grammarCopyPARTTYPE": "Тип частки", "grammarCopyINTREL": "Запитально-відносний", - "grammarCopyNUMFORMpsor": "Номер власника", "grammarCopyUNKNOWN": "Невідомо", "grammarCopyNUMBERPSOR": "Номер власника", "grammarCopyPOSS": "Присвійний", @@ -4464,28 +4102,14 @@ "grammarCopyVOICEdir": "Прямий", "grammarCopyVOICEinv": "Зворотній", "grammarCopyVOICErcp": "Взаємний", - "enterPrompt": "Будь ласка, введіть системний запит", - "selectBotLanguage": "Виберіть мову бота", - "chooseVoice": "Виберіть голос", - "enterLanguageLevel": "Будь ласка, введіть рівень мови", - "enterDiscussionTopic": "Будь ласка, введіть тему обговорення", - "selectBotChatMode": "Виберіть режим чату", - "messageNotInTargetLang": "Повідомлення не на цільовій мові", "other": "Інше", "levelShort": "Рівень {level}", - "botModeValidation": "Будь ласка, виберіть режим чату", "clickBestOption": "Виберіть найкращі варіанти для перекладу вашого повідомлення!", "completeActivitiesToUnlock": "Завершіть хоча б одну активність, щоб розблокувати переклад!", - "botSettingsSubtitle": "Запросіть бота для модерації активності чату", - "invitePeople": "Запросити користувачів", "noCapacityLimit": "Обмежень по місткості немає", "downloadGroupText": "Завантажити текст групи", "notificationsOn": "Сповіщення увімкнено", "notificationsOff": "Сповіщення вимкнено", - "chatCanBeFoundViaSearch": "Чат можна знайти через пошук", - "requireCodeToJoin": "Потрібен код для приєднання", - "canFindInSearch": "Можна знайти у пошуку", - "addChatToSpace": "Додати чат", "createChatAndInviteUsers": "Створити чат і запросити користувачів", "updatedNewSpaceDescription": "Курси дозволяють консолідувати ваші чати та створювати приватні або публічні спільноти.", "joinWithCode": "Приєднатися за кодом", @@ -4521,39 +4145,19 @@ "constructUseCollected": "Зібрано у чаті", "constructUseNanDesc": "Не застосовується", "xpIntoLevel": "{currentXP} / {maxXP} XP", - "signInWithUsername": "Увійти з ім'ям користувача та паролем", - "registrationEmailMessage": "Будь ласка, підтвердіть свою електронну пошту за допомогою посилання, яке надійде туди. У деяких випадках електронна пошта може прийти до 5 хвилин. Також перевірте папку спам.", "enableTTSToolName": "Увімкнено текст у мову", "enableTTSToolDescription": "Дозвольте додатку генерувати вихідний текст у мову для частин тексту вашої цільової мови.", - "couldNotFindTTS": "Ми не змогли знайти движок для перетворення тексту у мову для вашої поточної цільової мови.", - "ttsInstructionsHyperlink": "Натисніть тут, щоб переглянути інструкції щодо завантаження нової голосової моделі на вашому пристрої.", - "createAnAccount": "Створити обліковий запис", - "signIn": "Увійти", - "signUpWithEmail": "Зареєструватися за допомогою електронної пошти", - "signUpWithGoogle": "Зареєструватися через Google", - "signUpWithApple": "Зареєструватися через Apple", "yourUsername": "Ваше ім'я користувача", "yourEmail": "Ваша електронна пошта", - "pleaseEnterAnEmail": "Будь ласка, введіть адресу електронної пошти", - "signInWithGoogle": "Увійти через Google", - "signInWithApple": "Увійти через Apple", - "chooseYourAvatar": "Виберіть свій аватар", "iWantToLearn": "Я хочу навчитися", - "letsStart": "Давайте почнемо", - "pleaseAgreeToTOS": "Будь ласка, погодьтеся з Умовами та положеннями", "pleaseEnterEmail": "Будь ласка, введіть дійсну адресу електронної пошти.", - "pleaseSelectALanguage": "Будь ласка, виберіть мову", "myBaseLanguage": "Моя базова мова", - "clickWordsInstructions": "🧑‍💻 Натисніть будь-яке слово для деталей. 🤐", - "chooseBestDefinition": "Що означає це слово?", "meaningSectionHeader": "Значення:", "formSectionHeader": "Форми, що використовуються у чатах:", - "noEmojiSelectedTooltip": "Емодзі не вибрано", "writingExercisesTooltip": "Письмо", "listeningExercisesTooltip": "Слухання", "readingExercisesTooltip": "Читання", "meaningNotFound": "Значення не знайдено.", - "formsNotFound": "Форми не знайдено.", "chooseBaseForm": "Виберіть базову форму", "notTheCodeError": "Вибачте, це не код!", "totalXP": "Загальний досвід", @@ -4593,9 +4197,6 @@ "pickAnEmoji": "Яке ваше улюблене емодзі для '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "Зіставте значення з словами у повідомленні!", "doubleClickToEdit": "Двічі клацніть для редагування.", - "removeFeature": "Видалити {feature}", - "chooseCorrectLabel": "Виберіть правильну мітку.", - "levelPopupTitle": "Вітаємо з досягненням\nРівень {level}", "activityPlannerTitle": "Планувальник діяльності", "topicLabel": "Тема", "topicPlaceholder": "Обрати тему...", @@ -4603,7 +4204,6 @@ "modePlaceholder": "Обрати режим...", "learningObjectiveLabel": "Мета навчання", "learningObjectivePlaceholder": "Обрати мету навчання...", - "mediaLabel": "Медіа, якими повинні ділитися учні", "languageOfInstructionsLabel": "Мова інструкцій до діяльності", "targetLanguageLabel": "Мова цілі", "cefrLevelLabel": "Рівень CEFR", @@ -4618,20 +4218,15 @@ "instructions": "Інструкції", "numberOfLearners": "Кількість учнів", "mustBeInteger": "Має бути цілим числом, наприклад 1, 2, 3, ...", - "noLemmasFound": "У цьому словнику немає слів з більш ніж {xp} XP. Продовжуйте практикуватися!", "constructUsePvmDesc": "Створено у голосовому повідомленні", - "lockedMorphFeature": "Очікує розблокування", "leaveSpaceDescription": "Залишаючи курс, ви залишаєте всі чати в ньому. Інші користувачі побачать, що ви покинули курс.", - "whatIsLemma": "Що таке лема?", "constructUseCorMmDesc": "Правильне значення повідомлення", "constructUseIncMmDesc": "Некоректне значення повідомлення", "constructUseIgnMmDesc": "Ігнороване значення повідомлення", "clickForMeaningActivity": "Натисніть тут для виклику значення", "meaning": "Значення", "chatWith": "Група з {displayname}", - "slightlyOffensive": "Трохи образливий", "clickOnEmailLink": "Будь ласка, натисніть на посилання в електронній пошті та продовжуйте.\n\nПеревірте папку спам, якщо лист не надійшов.", - "whoIsAllowedToJoinThisChat": "Хто має право приєднатися до цього чату", "dontForgetPassword": "Не забудьте свій пароль!", "enableAutocorrectToolName": "Увімкнути автокорекцію пристрою", "enableAutocorrectDescription": "Якщо ваше пристрій підтримує мову, яку ви вивчаєте, ви можете увімкнути автокорекцію для виправлення поширених помилок під час набору тексту.", @@ -4659,48 +4254,26 @@ "autocorrectNotAvailable": "На жаль, ця функція наразі не підтримується вашою платформою. Залишайтеся з нами для подальшого розвитку!", "pleaseUpdateApp": "Будь ласка, оновіть додаток для продовження.", "chooseEmojiInstructionsBody": "Зіставте емодзі з словами, які вони найкраще представляють. Не хвилюйтеся! Немає штрафних очок за незгоду. 😅", - "pickAnEmojiFor": "Оберіть емодзі для {lemma}", "analyticsVocabListBody": "Це весь ваш словниковий запас! Коли ви заробляєте XP за кожне слово, вони перетворюються з паростка у повний цвіт. Натисніть будь-яке слово, щоб побачити детальніше.", "morphAnalyticsListBody": "Це всі граматичні концепції у мові, яку ви вивчаєте! Ви їх розблокуватимете по мірі їх зустрічі під час спілкування. Натисніть для деталей.", "knockSpaceSuccess": "Ви подали заявку приєднатися до цього курсу! Адміністратор відповість на ваше запитання, коли отримає його 😀", - "joinByCode": "Приєднатися за кодом", "chooseWordAudioInstructionsBody": "Прослухайте повне повідомлення. Потім зіставте аудіо з словами.", "chooseMorphsInstructionsBody": "Натисніть на частини головоломки для граматичних питань!", - "inviteAndLaunch": "Запустити та запросити", - "createOwnChat": "Створити власний чат", "pleaseEnterInt": "Будь ласка, введіть число", "home": "Головна", "join": "Приєднатися", "readingAssistanceOverviewBody": "Натисніть на кнопки нижче для міні-ігор з підбору емодзі, аудіо, значень слів і граматичних концепцій. Або натисніть будь-яке слово для деталей.", - "learnByTexting": "Вчіться, спілкуючись через текст", - "levelSummaryTrigger": "Переглянути підсумок", "levelSummaryPopupTitle": "Підсумок рівня {level}", - "referFriends": "Рекомендувати друзів", - "referFriendDialogTitle": "Запросіть друга до вашої розмови", - "referFriendDialogDesc": "Чи є у вас друг, який з нетерпінням чекає вивчити нову мову з вами? Тоді скопіюйте та надішліть цю посилання-запрошення, щоб приєднатися та почати спілкуватися з вами сьогодні.", - "youUnlocked": "Ви розблокували", "resetInstructionTooltipsTitle": "Скинути підказки інструкцій", "resetInstructionTooltipsDesc": "Натисніть, щоб показати підказки інструкцій, як для нових користувачів.", "selectForGrammar": "Виберіть іконку граматики для дій та деталей.", - "newChatActivityTitle": "Додати цікаву активність?", - "newChatActivityDesc": "Зробіть кожен груповий чат пригодою з Планувальником активностей! Встановіть захоплюючі теми та цілі для групи, і оживіть розмови з приголомшливими зображеннями. Запалюйте уяву та підтримуйте веселощі без зусиль!", - "exploreMore": "Досліджуйте більше", "randomize": "Випадковий порядок", "clear": "Очистити", "makeYourOwnActivity": "Створіть свою активність", "featuredActivities": "Рекомендовані", - "goToChat": "Перейти до чату", "save": "Зберегти", - "selectActivity": "Виберіть активність", - "wordFocusListeningMultipleChoice": "Який аудіо відповідає слову?", "startChat": "Почати чат", "translationProblem": "Проблема з перекладом", - "perfectTranslation": "Ідеальний переклад!", - "greatJobTranslation": "Відмінна робота з цим перекладом!", - "goodJobTranslation": "Добра робота над цим перекладом.", - "makingProgress": "Ви досягаєте прогресу!", - "keepPracticing": "Продовжуйте практикуватися!", - "niceJob": "Гарна робота!", "askToJoin": "Попросити приєднатися", "emptyChatWarningTitle": "Чат порожній", "emptyChatWarningDesc": "Ви не запросили нікого до свого чату. Перейдіть у налаштування чату, щоб запросити свої контакти або бота. Ви також можете зробити це пізніше.", @@ -4719,8 +4292,6 @@ "languageLevelC2Desc": "Я можу розуміти практично все, що чую або читаю, і висловлюватися вільно та точно.", "newVocab": "Нова лексика", "newGrammar": "Нові граматичні концепції", - "congratulationsOnReaching": "Ви досягли рівня {level}!", - "seeDetails": "Переглянути деталі", "choosePracticeMode": "Натисніть одну з кнопок вище, щоб почати практичну діяльність", "ban": "Заборонити", "unban": "Розблокувати", @@ -4734,8 +4305,6 @@ "timesUsedWithAssistance": "Кількість використань з допомогою", "shareInviteCode": "Поділіться кодом запрошення: {code}", "leaderboard": "Таблиця лідерів", - "welcomeUser": "Ласкаво просимо, {user}", - "joinSpaceOnboardingDesc": "У вас є код запрошення або посилання на публічний курс?", "skipForNow": "Пропустити наразі", "permissions": "Дозволи", "spaceChildPermission": "Хто може додавати нові чати до цього курсу", @@ -4743,12 +4312,8 @@ "defaultOption": "За замовчуванням", "deleteChatDesc": "Ви впевнені, що хочете видалити цей чат? Він буде видалений для всіх учасників, і всі повідомлення в чаті більше не будуть доступні для практики або аналітики навчання.", "deleteSpaceDesc": "Курс і будь-які вибрані чати будуть видалені для всіх учасників, і всі повідомлення в чаті більше не будуть доступні для практики або аналітики навчання. Цю дію неможливо скасувати.", - "chatWithActivities": "Чат з активностями", "launch": "Запустити", - "launchActivityToChats": "Запустити активність у чати", "searchChats": "Пошук чатів", - "selectChats": "Вибрати чати", - "selectChatToStart": "Готово! Виберіть чат для початку", "maxFifty": "Максимум 50", "configureSpace": "Налаштувати курс", "pinMessages": "Закріпити повідомлення", @@ -4762,9 +4327,7 @@ "announcements": "Оголошення", "activities": "Діяльність", "access": "Доступ", - "botSettings": "Налаштування бота", "activitySuggestionTimeoutMessage": "Ми наполегливо працюємо над створенням більшої кількості активностей для вас, будь ласка, перевірте знову через хвилину", - "accessSettingsWarning": "Ой! Здається, у вас немає дозволу на встановлення правил доступу до цієї кімнати. Вам слід перевірити їх, щоб переконатися, що вони відповідають вашим потребам, і звернутися до адміністратора кімнати, якщо потрібно їх змінити", "howSpaceCanBeFound": "Як можна знайти цей курс", "private": "Приватний", "cannotBeFoundInSearch": "Не можна знайти у пошуку", @@ -4777,16 +4340,6 @@ "canBeFoundViaKnock": "• запит на приєднання та схвалення адміністратора", "youHaveLeveledUp": "Ви підвищили рівень!", "sendActivities": "Надіслати активності", - "getStarted": "Почати", - "getStartedBotChatDesc": "Спілкування з ШІ — чудове місце для початку, а інструменти для читання, писання, прослуховування та говоріння Pangea роблять це легким!", - "getStartedCommunitiesDesc": "Навчання з спільнотою — це місце, де сяє Pangea Chat!\nВи можете приєднатися до свого класу, знайти курс або навіть створити свій власний!", - "getStartedFriendsDesc": "У вас є друг, який хоче навчатися разом із вами?", - "getStartedBotChatComplete": "Молодець! Ви спілкуєтеся з ботом!", - "getStartedCommunitiesComplete": "Чудово, ви приєдналися до курсу!", - "getStartedComplete": "Ви завершили цей розділ!\nПродовжуйте досліджувати наші дивовижні функції, спілкуючись із друзями!", - "getStartedFriendsComplete": "Ура! У вас є друзі! 😉", - "getStartedBotChatButton": "Почати спілкування!", - "getStartedFriendsButton": "Обговорити з другом", "groupChat": "Груповий чат", "directMessage": "Пряме повідомлення", "newDirectMessage": "Нове пряме повідомлення", @@ -4802,7 +4355,6 @@ "mySavedActivities": "Мої збережені активності", "noSavedActivities": "Збережених активностей немає", "saveActivity": "Зберегти цю активність", - "yourSavedActivities": "Збережені активності", "failedToPlayVideo": "Не вдалося відтворити відео", "done": "Готово", "inThisSpace": "У цьому курсі", @@ -4841,37 +4393,27 @@ "maximumActivityParticipants": "Кожна активність може мати максимум {count} учасник(ів).", "pending": "Очікує", "inactive": "Неактивний", - "unjoinedActivityMessage": "Хочете взяти участь? Оберіть відкриту роль!\nАбо просто поспостерігайте та подивіться шоу!", - "fullActivityMessage": "Не соромтеся дивитися шоу! Оскільки немає відкритих ролей для участі, ви можете переглядати чат!", "confirmRole": "Підтвердити роль", "openRoleLabel": "ВІДКРИТА", "joinedTheActivity": "👋 {username} приєднався як {role}", "finishedTheActivity": "🎯 {username} завершив цю активність", - "endActivityTitle": "Я закінчив", - "endActivityDesc": "Ви виконали цілі?\nЦе ваше підтвердження, що ви відходите від переписки. Але не хвилюйтеся, веселощі продовжуються у чаті! Поспостерігайте та насолоджуйтеся шоу, поки всі не натиснуть 'Готово'.", "archiveToAnalytics": "Додати до моїх завершених активностей", "activitySummaryError": "Зведення активностей недоступне", "requestSummaries": "Запитати зведення", - "loadingActivitySummary": "Завантаження зведення активності...", "generatingNewActivities": "Ви перший користувач цієї пари мов! Будь ласка, зачекайте хвилину, ми готуємо активності саме для вас.", - "requestAccessTitle": "Запитати доступ до перегляду аналітики?", + "requestAccessTitle": "Запросити доступ до аналітики?", "requestAccessDesc": "Бажаєте запросити доступ до перегляду аналітики учасників?\n\nЯкщо учасники погоджуються, адміністратори цього курсу зможуть переглядати їх:\n • загальний словниковий запас\n • загальні граматичні концепції\n • кількість завершених сесій активності\n • конкретні граматичні концепції, використані правильно та неправильно\n\nВони не зможуть переглядати:\n • повідомлення у чатах поза межами курсу\n • список словникових запасів", "requestAccess": "Запитати доступ ({count})", "analyticsInactiveTitle": "Запити до неактивних користувачів не можуть бути надіслані", "analyticsInactiveDesc": "Неактивні користувачі, які не входили з моменту впровадження цієї функції, не побачать ваш запит.\n\nКнопка «Запит» з'явиться, коли вони повернуться. Ви зможете повторно надіслати запит пізніше, натиснувши кнопку «Запит» під їхнім ім'ям, коли вона стане доступною.", "accessRequestedTitle": "Запит на доступ до аналітики", - "accessRequestedDesc": "Адміністратори «{space}» запитують доступ до ваших аналітичних даних навчання.\n\nЯкщо ви погоджуєтеся, адміністратори цього курсу зможуть переглядати ваші:\n • загальний словниковий запас\n • загальні граматичні концепції\n • кількість завершених сесій активності\n • конкретні граматичні концепції, які використовувалися, правильно та неправильно\n\nВони не зможуть переглядати ваші:\n • повідомлення у чатах поза межами курсу\n • список словникових слів", - "allowAccess": "Дозволити доступ", - "denyAccess": "Заборонити доступ", + "accessRequestedDesc": "Запитують адміністратори(и): {admin} \n\nАдміністратори з “{space}” просять переглянути вашу аналітику навчання.\n\nЯкщо ви згодні, вони зможуть переглядати ваше:\n • загальне словникове запас\n • загальні граматичні концепції\n • загальну кількість завершених сесій активності\n • конкретні граматичні концепції, які використовувалися, правильно та неправильно\n\nВони не зможуть переглядати ваше:\n • повідомлення в чатах поза курсом\n • список словникового запасу", "adminRequestedAccess": "Адміністратори запитали доступ до вашої аналітики.", "lastUpdated": "Оновлено\n{time}", "activityFinishedMessage": "Все завершено!", "endForAll": "Завершити для всіх", "newCourse": "Новий курс", - "newCourseSubtitle": "Який план курсу ви хотіли б використати?", - "failedToLoadCourses": "Не вдалося завантажити курси", "numModules": "{num} модулів", - "numActivityPlans": "{num} планів активності", "coursePlan": "План курсу", "editCourseLater": "Ви можете редагувати назву шаблону, описи та зображення курсу пізніше.", "newCourseAccess": "За замовчуванням курси є приватними і потребують схвалення адміністратора для приєднання. Ви можете редагувати ці налаштування в будь-який час.", @@ -4885,17 +4427,11 @@ "accessDesc": "Ви можете зробити свій курс відкритим для світу! Або зробити його приватним і захищеним.", "createGroupChatDesc": "Оскільки сесії активності починаються і закінчуються, групові чати залишаться відкритими для рутинного спілкування.", "deleteDesc": "Тільки адміністратори можуть видалити курс. Це руйнівна дія, яка видаляє всіх користувачів і всі обрані чати в межах курсу. Дійте обережно.", - "failedToLoadCourseInfo": "Не вдалося завантажити інформацію про курс", "noCourseFound": "Ой, цьому курсу потрібен план!\n\nПлани курсу — це послідовність тем і активностей для спілкування.", "additionalParticipants": "+ {num} інших", - "activityNotFoundForCourse": "Ця активність не знайдена в межах курсу", - "courseChats": "Чати курсу", - "myActivitySessions": "Мої сесії активності", "directMessages": "Прямі повідомлення", "whatNow": "Що далі?", "chooseNextActivity": "Обирайте свою наступну активність!", - "seeInstructions": "Переглянути інструкції", - "hideInstructions": "Сховати інструкції", "letsGo": "Поїхали", "chooseRole": "Оберіть роль!", "chooseRoleToParticipate": "Обрати роль для участі!", @@ -4905,23 +4441,15 @@ "inviteFriends": "Запросити друзів", "waitNotDone": "Зачекайте, я ще не закінчив!", "waitingForOthersToFinish": "Очікування завершення інших...", - "saveToCompletedActivities": "Зберегти у завершені активності", "generatingSummary": "Аналіз чату та створення результатів", - "instructionsLanguage": "Мова інструкцій", "findCourse": "Знайти курс", - "activityCompletedDesc": "Ваша завершена активність додана до аналітики, де ви можете переглянути та попрактикувати використану мову.", "pingParticipantsNotification": "{user} шукає користувачів для приєднання до сесії активності в {room}", "course": "Курс", "courses": "Курси", "courseName": "Назва курсу", "createNewCourse": "Новий курс", - "publicCourses": "Публічні курси", "goToCourse": "Перейти до курсу: {course}", "activityComplete": "Ця активність завершена. Підсумок активності має бути доступний нижче.", - "haventChattedMuch": "Здається, ви не багато спілкувалися, спробуйте використати ще кілька слів! Якщо ви відчуваєте, що виконали свою ціль, ви можете завершити активність нижче.", - "haveChatted": "Здається, ви вже деякий час спілкуєтеся! Якщо ви відчуваєте, що виконали свою ціль, завершіть, щоб закінчити активність, і ми згенеруємо для вас підсумок у чаті!", - "userDoneAndWaiting": "{num1}/{num2} учасників завершили. Зачекайте, поки всі закінчать, і ми згенеруємо для вас підсумок у чаті! \n\nЯкщо хочете приєднатися знову до розмови, натисніть кнопку продовження у чаті.", - "othersDoneAndWaiting": "{num1}/{num2} завершили. Ви виконали свою ціль?", "startNewSession": "Почати нову сесію", "joinOpenSession": "Приєднатися до відкритої сесії", "less": "менше", @@ -4931,7 +4459,6 @@ "openToJoin": "Відкрити для приєднання", "results": "Результати", "activityDone": "Активність завершена!", - "moreLabel": "більше", "promoCodeInfo": "Промо-коди можна ввести на наступній сторінці", "editsComingSoon": "Можливість редагування міст і активностей скоро з'явиться.", "editing": "Редагування", @@ -4947,13 +4474,10 @@ "courseSavedSuccessfully": "Курс успішно збережено", "addCoursePlan": "Додати план курсу", "activityStatsButtonInstruction": "Натисніть тут, щоб переглянути статистику вашої активності та закрити активність після завершення", - "readingAnalyticsDesc": "Натисніть практику на кожному повідомленні для читання активностей.", - "speakingAnalyticsDesc": "Запишіть голосові повідомлення для практики говоріння.", - "audioAnalyticsDesc": "Натисніть практику на кожному повідомленні для слухання активностей.", "loginToAccount": "Увійти до мого облікового запису", "appDescription": "Вивчайте мову\nпишучи повідомлення друзям.", "languages": "Мови", - "chooseLanguage": "Виберіть мову.", + "chooseLanguage": "Виберіть мову призначення.", "planTrip": "Сплануйте свою поїздку", "howAreYouTraveling": "Як ви подорожуєте?", "unlockPrivateTrip": "Розблокувати приватну поїздку", @@ -4966,25 +4490,20 @@ "courseCode": "Який секретний пароль?", "courseCodeHint": "Код або посилання на поїздку", "unlockMyTrip": "Розблокувати мою поїздку", - "anyLevel": "Будь-який рівень", "signupOption": "Як ви хочете зареєструватися?", "withApple": "З Apple", "withGoogle": "З Google", "withEmail": "З електронною поштою", "createAccount": "Створити обліковий запис", - "noCoursesFound": "Курси не знайдено", "loginWithEmail": "Увійти з електронною поштою", "usernameOrEmail": "Ім'я користувача або електронна пошта", "email": "Електронна пошта", "forgotPassword": "Забули пароль?", - "writingAnalyticsDesc": "Надсилайте повідомлення для практики написання.", "endActivity": "Завершити діяльність", "allLanguages": "Всі мови", - "allCefrLevels": "Всі рівні CEFR", "chatListTooltip": "Тут ви знайдете свої особисті повідомлення! Натисніть на аватар будь-якого користувача і «почати розмову», щоб надіслати особисте повідомлення.", "directMessageBotTitle": "Пряме повідомлення Пангей Бот", "feedbackTitle": "Зворотній зв'язок щодо діяльності", - "feedbackDesc": "Як слід покращити цю діяльність? Якщо можете, надайте деталі, і ми внесемо зміни!", "feedbackHint": "Ваш відгук", "feedbackButton": "Надіслати відгук", "directMessageBotDesc": "Спілкування з людьми — це цікавіше, але... штучний інтелект завжди готовий!", @@ -4999,30 +4518,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5038,18 +4533,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5074,18 +4557,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5122,38 +4593,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5162,62 +4605,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5254,10 +4653,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5266,14 +4661,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5282,46 +4669,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5330,10 +4681,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5390,18 +4737,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5410,14 +4745,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5446,18 +4773,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5466,42 +4781,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5510,14 +4793,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5538,26 +4813,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5578,10 +4833,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5614,25 +4865,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5689,34 +4921,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5745,778 +4949,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7509,14 +5945,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7528,14 +5956,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7567,10 +5987,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7579,18 +5995,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7599,14 +6003,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7631,38 +6027,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7708,10 +6076,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7736,10 +6100,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7764,10 +6124,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7776,66 +6132,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7856,42 +6156,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7916,154 +6192,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8080,18 +6208,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8112,14 +6228,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8136,10 +6244,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8152,14 +6256,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8168,14 +6264,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8203,26 +6291,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8251,18 +6319,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8299,10 +6359,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9235,10 +7291,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9419,34 +7471,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9459,10 +7483,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9471,14 +7491,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9495,22 +7507,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9658,14 +7654,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9674,34 +7662,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9710,54 +7670,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9766,10 +7690,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9786,10 +7706,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9961,26 +7877,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10009,10 +7905,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10069,30 +7961,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10121,18 +7997,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10249,14 +8117,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10269,10 +8129,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10281,14 +8137,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10305,14 +8153,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10321,22 +8161,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10349,18 +8173,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10377,22 +8189,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10401,30 +8201,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10497,18 +8273,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10565,18 +8329,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10605,30 +8357,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10681,18 +8417,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10741,46 +8469,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10845,10 +8533,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11020,14 +8704,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11055,14 +8731,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11075,10 +8743,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11114,19 +8778,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11151,14 +8810,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11167,14 +8818,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11227,10 +8870,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11243,18 +8882,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11267,14 +8894,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11315,26 +8934,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11362,10 +8969,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11376,36 +8979,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11442,10 +9015,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11510,18 +9079,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11586,10 +9143,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11610,10 +9163,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11630,10 +9179,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11642,10 +9187,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11658,10 +9199,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11686,16 +9223,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Запросіть друзів до активності", - "inviteFriendsToActivityCourse": "Запросіть друзів до активності та курсу", "feedbackRespDesc": "Перевірте завтра оновлення активності.", "activityDropdownDesc": "Коли закінчите цю активність, натисніть нижче", - "activityAnalyticsListBody": "Це ваші завершені активності! Після завершення активностей ви можете переглянути їх тут.", "languageMismatchTitle": "Несумісність мови", "languageMismatchDesc": "Мова вашої цільової мови не співпадає з мовою цієї активності. Оновити цільову мову?", "reportWordIssueTooltip": "Повідомити про проблему з інформацією слова", "tokenInfoFeedbackDialogTitle": "Зворотній зв'язок про інформацію слова", - "tokenInfoFeedbackDialogDesc": "Штучний інтелект робить помилки. Будь ласка, опишіть будь-які проблеми, які ви знайшли з наведеною інформацією.", "noPublicCoursesFound": "Публічні курси не знайдені. Хотіли б створити один?", "noCourseTemplatesFound": "Ми не змогли знайти курси для вашої цільової мови. Тим часом ви можете спілкуватися з Pangea Bot і повернутися пізніше для більшої кількості курсів.", "botActivityJoinFailMessage": "Pangea Bot відповідає довго. Будь ласка, спробуйте ще раз пізніше або запросіть друга.", @@ -11703,14 +9236,6 @@ "leaveDesc": "Вийти з цього простору та всіх чатів у ньому", "selectAll": "Вибрати все", "deselectAll": "Скасувати вибір всього", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11719,10 +9244,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11739,10 +9260,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11776,7 +9293,6 @@ "newMessageInPangeaChat": "🗨️ Нове повідомлення у чаті Pangea", "shareCourse": "Поділитися курсом", "addCourse": "Додати курс", - "joinCourseWithCode": "Приєднатися до курсу за кодом", "joinPublicCourse": "Приєднатися до публічного курсу", "vocabLevelsDesc": "Тут з'являться слова словника, коли ви їх підвищите рівень!", "highlightVocabTooltip": "Виділіть цільові слова словникового запасу нижче, надіславши їх або практикуючи з ними в чаті", @@ -11800,10 +9316,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11812,7 +9324,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "Не знайдено особистих повідомлень або чатів. Переконайтеся, що ваш запит написаний правильно.", + "activityAnalyticsTooltipBody": "Це ваші збережені активності для перегляду та практики.", + "numSavedActivities": "Кількість збережених активностей", + "saveActivityTitle": "Зберегти активність", + "saveActivityDesc": "Добра робота! Збережіть цю активність для подальшого перегляду та практики", + "levelInfoTooltip": "Тут ви можете побачити всі бали, які ви заробили, і як!", + "alreadyInCourseWithID": "Ви вже в курсі з цим планом. Ви хочете створити курс з тим же планом або перейти до існуючого курсу?", + "goToExistingCourse": "Перейти до існуючого курсу", + "emojiView": "Перегляд емодзі", + "feedbackDialogDesc": "Я також роблю помилки! Що-небудь, щоб допомогти мені покращитися?", + "contactHasBeenInvitedToTheCourse": "Контакт був запрошений на курс", + "activityStatsButtonTooltip": "Інформація про активність", + "allow": "Дозволити", + "deny": "Відхилити", + "enabledRenewal": "Увімкнути продовження підписки", + "subscriptionEndsOn": "Підписка закінчується", + "subscriptionRenewsOn": "Підписка поновлюється", + "waitForSubscriptionChanges": "Зміни у вашій підписці можуть зайняти деякий час, щоб відобразитися в додатку.", + "subscribeReadingAssistance": "Підпишіться, щоб розблокувати інструменти повідомлень", + "aceDisplayName": "Achinese", + "achDisplayName": "Аколі", + "afDisplayName": "Африкаанс", + "akDisplayName": "Акан", + "alzDisplayName": "Алур", + "amDisplayName": "Амхарська", + "arDisplayName": "Арабська", + "asDisplayName": "Ассамська", + "awaDisplayName": "Аваді", + "ayDisplayName": "Аймара", + "azDisplayName": "Азербайджанська", + "baDisplayName": "Башкирська", + "banDisplayName": "Балінезійська", + "bbcDisplayName": "Батак Тоба", + "beDisplayName": "Білоруська", + "bemDisplayName": "Бемба", + "bewDisplayName": "Бетаві", + "bgDisplayName": "Болгарська", + "bhoDisplayName": "Бходжпурі", + "bikDisplayName": "Біколь", + "bmDisplayName": "Бамбара", + "bnDisplayName": "Бенгальська", + "bnBDDisplayName": "Бенгальська (Бангладеш)", + "bnINDisplayName": "Бенгальська (Індія)", + "brDisplayName": "Бретонська", + "bsDisplayName": "Боснійська", + "btsDisplayName": "Батак Сімалунгун", + "btxDisplayName": "Батак Каро", + "buaDisplayName": "Бурятська", + "caDisplayName": "Каталонська", + "cebDisplayName": "Себуанська", + "cggDisplayName": "Чіга", + "chmDisplayName": "Марі", + "ckbDisplayName": "Центральний курдський", + "cnhDisplayName": "Хакха Чін", + "coDisplayName": "Корсиканська", + "crhDisplayName": "Кримськотатарська", + "crsDisplayName": "Сесельва креольська французька", + "csDisplayName": "Чеська", + "cvDisplayName": "Чувашська", + "cyDisplayName": "Валлійська", + "daDisplayName": "Данська", + "deDisplayName": "Німецька", + "dinDisplayName": "Дінка", + "doiDisplayName": "Догрі", + "dovDisplayName": "Домбе", + "dzDisplayName": "Дзонгкха", + "eeDisplayName": "Еве", + "enDisplayName": "Англійська", + "enAUDisplayName": "Англійська (Австралія)", + "enGBDisplayName": "Англійська (Великобританія)", + "enINDisplayName": "Англійська (Індія)", + "enUSDisplayName": "Англійська (США)", + "eoDisplayName": "Есперанто", + "esDisplayName": "Іспанська", + "esESDisplayName": "Іспанська (Іспанія)", + "esMXDisplayName": "Іспанська (Мексика)", + "euDisplayName": "Баскська", + "faDisplayName": "Перська", + "ffDisplayName": "Фулах", + "fiDisplayName": "Фінська", + "filDisplayName": "Філіппінська", + "fjDisplayName": "Фіджійська", + "foDisplayName": "Фарерська", + "frDisplayName": "Французька", + "frCADisplayName": "Французька (Канада)", + "frFRDisplayName": "Французька (Франція)", + "fyDisplayName": "Західнофризька", + "gaDisplayName": "Ірландська", + "gaaDisplayName": "Га", + "gdDisplayName": "Шотландська гельська", + "glDisplayName": "Галисійська", + "gnDisplayName": "Гуарані", + "gomDisplayName": "Гоанський конкані", + "guDisplayName": "Гуджараті", + "haDisplayName": "Хауса", + "hawDisplayName": "Гавайська", + "heDisplayName": "Іврит", + "hiDisplayName": "Гінді", + "hilDisplayName": "Хілігайнон", + "hmnDisplayName": "Хмонг", + "hneDisplayName": "Чхаттісгархі", + "hrDisplayName": "Хорватська", + "hrxDisplayName": "Гунсрік", + "htDisplayName": "Гаїтянський креольський", + "huDisplayName": "Угорська", + "hyDisplayName": "Вірменська", + "idDisplayName": "Індонезійська", + "igDisplayName": "Ігбо", + "iloDisplayName": "Ілоко", + "isDisplayName": "Ісландська", + "itDisplayName": "Італійська", + "jaDisplayName": "Японська", + "jvDisplayName": "Яванська", + "kaDisplayName": "Грузинська", + "kkDisplayName": "Казахська", + "kmDisplayName": "Кхмерська", + "knDisplayName": "Каннада", + "koDisplayName": "Корейська", + "kokDisplayName": "Конкані", + "kriDisplayName": "Кріо", + "ksDisplayName": "Кашмірі", + "ktuDisplayName": "Кітуба (Демократична Республіка Конго)", + "kuDisplayName": "Курдська", + "kyDisplayName": "Киргизька", + "laDisplayName": "Латинська", + "lbDisplayName": "Люксембурзька", + "lgDisplayName": "Ганда", + "liDisplayName": "Лімбурзька", + "lijDisplayName": "Лігурійська", + "lmoDisplayName": "Ломбардійська", + "lnDisplayName": "Лінгала", + "loDisplayName": "Лаоська", + "ltDisplayName": "Литовська", + "ltgDisplayName": "Латгальська", + "luoDisplayName": "Луо (Кенія та Танзанія)", + "lusDisplayName": "Мізо", + "lvDisplayName": "Латвійська", + "maiDisplayName": "Майтхілі", + "makDisplayName": "Макасар", + "mgDisplayName": "Малагасійська", + "miDisplayName": "Маорі", + "minDisplayName": "Мінаккабау", + "mkDisplayName": "Македонська", + "mlDisplayName": "Малаялам", + "mnDisplayName": "Монгольська", + "mniDisplayName": "Маніпурі", + "mrDisplayName": "Маратхі", + "msDisplayName": "Малайська", + "msArabDisplayName": "Малайська (арабською)", + "msMYDisplayName": "Малайська (Малайзія)", + "mtDisplayName": "Мальтійська", + "mwrDisplayName": "Марварі", + "myDisplayName": "Бірманська", + "nanDisplayName": "Мінь Нан", + "nbDisplayName": "Норвезька (Бокмол)", + "neDisplayName": "Непальська", + "newDisplayName": "Неварі", + "nlDisplayName": "Голландська", + "nlBEDisplayName": "Фламандська", + "noDisplayName": "Норвезька", + "nrDisplayName": "Південний Ндебеле", + "nsoDisplayName": "Північний Сото", + "nusDisplayName": "Нуер", + "nyDisplayName": "Ньянджа", + "ocDisplayName": "Окситан", + "omDisplayName": "Оромо", + "orDisplayName": "Одія", + "paDisplayName": "Панджабі", + "paArabDisplayName": "Панджабі (Шахмукхі)", + "paINDisplayName": "Панджабі (Гурмукхі)", + "pagDisplayName": "Пангасінан", + "pamDisplayName": "Пампанга", + "papDisplayName": "Папіаменто", + "plDisplayName": "Польська", + "psDisplayName": "Пашто", + "ptDisplayName": "Португальська", + "ptBRDisplayName": "Португальська (Бразилія)", + "ptPTDisplayName": "Португальська (Португалія)", + "quDisplayName": "Кечуа", + "rajDisplayName": "Раджастхані", + "rnDisplayName": "Рунді", + "roDisplayName": "Румунська", + "roMDDisplayName": "Молдовська", + "romDisplayName": "Ромська", + "ruDisplayName": "Російська", + "rwDisplayName": "Кіньярванда", + "saDisplayName": "Санскрит", + "satDisplayName": "Санталі", + "scnDisplayName": "Сицилійська", + "sdDisplayName": "Синдхі", + "sgDisplayName": "Санго", + "shnDisplayName": "Шан", + "siDisplayName": "Сінгальська", + "skDisplayName": "Словацька", + "slDisplayName": "Словенська", + "smDisplayName": "Самоанська", + "snDisplayName": "Шона", + "soDisplayName": "Сомалійська", + "sqDisplayName": "Албанська", + "srDisplayName": "Сербська", + "srMEDisplayName": "Чорногорська", + "ssDisplayName": "Сваті", + "stDisplayName": "Південний Сото", + "suDisplayName": "Сунданська", + "svDisplayName": "Шведська", + "swDisplayName": "Суахілі", + "szlDisplayName": "Сілезька", + "taDisplayName": "Тамільська", + "teDisplayName": "Телугу", + "tetDisplayName": "Тетум", + "tgDisplayName": "Таджицька", + "thDisplayName": "Тайська", + "tiDisplayName": "Тигринья", + "tkDisplayName": "Туркменська", + "tlDisplayName": "Тагальська", + "tnDisplayName": "Цвана", + "trDisplayName": "Турецька", + "tsDisplayName": "Цонга", + "ttDisplayName": "Татарська", + "ugDisplayName": "Уйгурська", + "ukDisplayName": "Українська", + "urDisplayName": "Урду", + "urINDisplayName": "Урду (Індія)", + "urPKDisplayName": "Урду (Пакистан)", + "uzDisplayName": "Узбек", + "viDisplayName": "В'єтнамська", + "wuuDisplayName": "У", + "xhDisplayName": "Ксоса", + "yiDisplayName": "Їдиш", + "yoDisplayName": "Йоруба", + "yuaDisplayName": "Юкатек", + "yueDisplayName": "Кантонська", + "yueCNDisplayName": "Кантонська (Китай)", + "yueHKDisplayName": "Кантонська (Гонконг)", + "zhDisplayName": "Китайська", + "zhCNDisplayName": "Китайська (Спрощена)", + "zhTWDisplayName": "Китайська (Традиційна)", + "zuDisplayName": "Зулу", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11879,6 +10577,7 @@ "notStartedActivitiesTitle": "Відкриті сесії ({num})", "inProgressActivitiesTitle": "Відбувається зараз ({num})", "completedActivitiesTitle": "Завершено ({num})", + "pickDifferentActivity": "Виберіть іншу активність", "inOngoingActivity": "У вас є активність, що триває!", "@notStartedActivitiesTitle": { "type": "String", @@ -11904,10 +10603,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ваша цільова мова не відповідає цьому повідомленню. Оновити вашу цільову мову?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Це всі учасники цього курсу. Натисніть на аватар будь-якого користувача та виберіть \"почати розмову\", щоб надіслати особисте повідомлення.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Це слово vocab буде назавжди видалено з вашої аналітики", + "woman": "Жінка", + "man": "Чоловік", + "otherGender": "Інше", + "unselectedGender": "Виберіть варіант статі", + "gender": "Стать", + "chatParticipantTooltip": "Це всі учасники цього чату. Натисніть на аватар будь-якого користувача та \"почати розмову\", щоб надіслати особисте повідомлення.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Інструменти навчання вимкнені для повідомлень, які не є вашою цільовою мовою.", + "vocabEmoji": "Емодзі словника", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Запит на регенерацію", + "optionalRegenerateReason": "(Необов'язково) Причина", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Ви встановили емодзі для {lemma}! Ми будемо використовувати цей емодзі для представлення слова в практичних завданнях у майбутньому.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Очікування завершення входу", + "ssoDialogDesc": "Ми відкрили нову вкладку, щоб ви могли безпечно увійти.", + "ssoDialogHelpText": "🤔 Якщо ви не побачили нову вкладку, будь ласка, перевірте блокувальник спливаючих вікон.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Вимкнути мовні інструменти", + "disableLanguageToolsDesc": "Ви хочете вимкнути автоматичну мовну допомогу?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Доступ заборонено. Увімкніть дозволи на запис, щоб записувати аудіоповідомлення.", + "genericWebRecordingError": "Щось пішло не так. Рекомендуємо використовувати браузер Chrome для запису повідомлень.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Для найкращого досвіду використання цього додатку, будь ласка, розширте розмір екрану.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Дії для розблокування наступної теми", "activitiesToUnlockTopicDesc": "Встановіть кількість дій для розблокування наступної теми курсу", "@activitiesToUnlockTopicTitle": { @@ -11917,5 +10734,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Правильна практика визначення словникового запасу", + "constructUseIncLMDesc": "Неправильна практика визначення словникового запасу", + "constructUseCorLADesc": "Правильна практика аудіо словникового запасу", + "constructUseIncLADesc": "Неправильна практика аудіо словникового запасу", + "constructUseBonus": "Бонус під час практики словникового запасу", + "practiceVocab": "Практика словникового запасу", + "selectMeaning": "Виберіть значення", + "selectAudio": "Виберіть відповідне аудіо", + "congratulations": "Вітаємо!", + "anotherRound": "Ще один раунд", + "noActivityRequest": "Немає поточного запиту на активність.", + "quit": "Вийти", + "congratulationsYouveCompletedPractice": "Вітаємо! Ви завершили практичну сесію.", + "mustHave10Words": "Вам потрібно мати принаймні 10 слів для практики. Спробуйте поговорити з другом або Pangea Bot, щоб дізнатися більше!", + "botSettings": "Налаштування бота", + "activitySettingsOverrideWarning": "Мова та рівень мови визначаються планом активності", + "voice": "Голос", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index 2caff2293..77ad1ad05 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:16.250270", + "@@last_modified": "2026-01-07 14:27:35.989013", "about": "Giới thiệu", "@about": { "type": "String", @@ -884,7 +884,6 @@ "copiedToClipboard": "Đã sao chép vào khay nhớ tạm", "copyToClipboard": "Sao chép vào khay nhớ tạm", "createGroup": "Tạo nhóm", - "createNewGroup": "Tạo cuộc trò chuyện mới", "darkTheme": "Chủ đề tối", "defaultPermissionLevel": "Cấp quyền mặc định cho người dùng mới", "directChats": "Cuộc trò chuyện trực tiếp", @@ -892,7 +891,6 @@ "edit": "Chỉnh sửa", "editBlockedServers": "Chỉnh sửa máy chủ bị chặn", "chatPermissions": "Quyền hạn trong trò chuyện", - "editChatPermissions": "Chỉnh sửa quyền hạn trò chuyện", "editRoomAliases": "Chỉnh sửa bí danh phòng", "editRoomAvatar": "Chỉnh sửa ảnh đại diện phòng", "emoteExists": "Biểu tượng cảm xúc đã tồn tại!", @@ -1731,9 +1729,6 @@ "noKeyForThisMessage": "Có thể tin nhắn đã được gửi trước khi bạn đăng nhập trên thiết bị này. Hoặc thiết bị của bạn bị chặn hoặc có lỗi kết nối. Nếu bạn đọc được tin trên thiết bị khác, hãy truyền khóa về thiết bị này! Vào Cài đặt > Thiết bị và xác minh lẫn nhau. Khi mở phòng và cả hai thiết bị đều trực tuyến, chúng sẽ tự trao đổi khóa. Không muốn mất khóa khi đăng xuất? Hãy bật sao lưu trò chuyện trong cài đặt.", "deviceKeys": "Khóa thiết bị:", "requests": "Yêu cầu", - "allCorrect": "Đó đúng là cách tôi nói! Hay quá!", - "newWayAllGood": "Không đúng kiểu tôi, nhưng cũng ổn!", - "othersAreBetter": "Có thể có cách diễn đạt hay hơn.", "holdForInfo": "Nhấn giữ để biết thông tin.", "greenFeedback": "Chính xác tôi sẽ dùng từ này!", "yellowFeedback": "Bạn có thể thử từ đó! Nhấn lại để dùng.", @@ -1748,9 +1743,6 @@ "cannotBeReversed": "Hành động này không thể khôi phục", "enterDeletedClassName": "Nhập tên không gian để xác nhận:", "incorrectClassName": "Tên không gian không đúng", - "oneday": "24 giờ qua", - "oneweek": "7 ngày qua", - "onemonth": "Tháng vừa rồi", "sixmonth": "6 tháng vừa qua", "oneyear": "1 năm vừa qua", "gaTooltip": "Dùng L2 với hỗ trợ ngữ pháp", @@ -1766,21 +1758,14 @@ "interactiveTranslatorRequiredDesc": "Học viên không thể tắt hỗ trợ dịch. Họ vẫn có thể từ chối gợi ý. Không áp dụng cho quản trị viên hoặc cuộc trò chuyện riêng.", "notYetSet": "Chưa thiết lập", "allClasses": "Tất cả Lớp", - "myLearning": "Phân tích của tôi", "allChatsAndClasses": "Tất cả trò chuyện và không gian", "timeOfLastMessage": "Thời gian gửi tin cuối", "totalMessages": "Tổng tin nhắn đã gửi", "waTooltip": "Dùng L2 không trợ giúp", - "changeDateRange": "Thay đổi mốc thời gian", "numberOfStudents": "Số học viên", - "classDescription": "Mô tả", "classDescriptionDesc": "Thiết lập mô tả", "requestToEnroll": "Yêu cầu tham gia", "spaceAnalyticsDesc": "Thông tin về mức độ tương tác và sử dụng ngôn ngữ", - "addStudents": "Mời bằng liên kết hoặc mã", - "copyClassLink": "Sao chép liên kết mời", - "copyClassCode": "Sao chép mã mời", - "inviteStudentByUserName": "Mời người dùng qua tên", "languageSettings": "Cài đặt ngôn ngữ", "selectSpaceDominantLanguage": "Ngôn ngữ chính của không gian?", "selectSpaceTargetLanguage": "Ngôn ngữ đích của không gian?", @@ -1791,36 +1776,24 @@ "oneToOneChatsWithinClassDesc": "Cho phép học viên mở trò chuyện riêng với người khác trong không gian. Nếu tắt, họ chỉ có thể vào nhóm chat.", "createGroupChats": "Tạo nhóm chat", "createGroupChatsDesc": "Bật để cho phép học viên tạo nhóm trong không gian.", - "shareVideo": "Chia sẻ video", - "shareVideoDesc": "Bật để học viên chia sẻ video.", "sharePhotos": "Chia sẻ ảnh", "sharePhotosDesc": "Bật để học viên chia sẻ ảnh.", - "shareFiles": "Chia sẻ tệp", "shareFilesDesc": "Bật để học viên chia sẻ tệp.", "shareLocationDesc": "Bật để học viên chia sẻ vị trí.", - "selectLanguageLevel": "Chọn trình độ ngôn ngữ", "noIdenticalLanguages": "Vui lòng chọn ngôn ngữ cơ sở và đích khác nhau", - "iWantALanguagePartnerFrom": "Đến từ:", - "worldWide": "Toàn cầu", - "noResults": "Không tìm thấy kết quả! Hãy thử mở rộng tiêu chí.", "searchBy": "Tìm theo quốc gia và ngôn ngữ", - "iWantAConversationPartner": "Tôi muốn bạn hội thoại", - "iWantALanguagePartnerWhoSpeaks": "Nói:", - "iWantALanguagePartnerWhoIsLearning": "Đang học:", "yourBirthdayPlease": "Pangea Chat phục vụ cộng đồng học trên 13 tuổi. Để bảo vệ người dùng trẻ, chúng tôi cần xác minh độ tuổi.\n\nTrước khi tìm lớp, phòng hoặc bạn bè, vui lòng xác nhận bạn đủ 18 tuổi trở lên.", "invalidDob": "Ngày sinh không hợp lệ", "enterYourDob": "Nhập ngày sinh của bạn", - "getStarted": "Bắt đầu", "mustBe13": "Bạn phải ít nhất 13 tuổi", "yourBirthdayPleaseShort": "Vui lòng chọn nhóm tuổi của bạn", - "joinWithClassCodeHint": "Nhập mã mời", - "languageLevelPreA1": "Hoàn toàn mới (Pre A1)", - "languageLevelA1": "Sơ cấp (A1)", - "languageLevelA2": "Căn bản (A2)", - "languageLevelB1": "Trung cấp (B1)", - "languageLevelB2": "Trung cấp cao (B2)", - "languageLevelC1": "Nâng cao (C1)", - "languageLevelC2": "Thành thạo (C2)", + "languageLevelPreA1": "Người mới bắt đầu Thấp (Pre A1)", + "languageLevelA1": "Người mới giữa (A1)", + "languageLevelA2": "Người mới cao (A2)", + "languageLevelB1": "Trung cấp trung bình (B1)", + "languageLevelB2": "Cao cấp thấp (B2)", + "languageLevelC1": "Cao cấp trung bình (C1)", + "languageLevelC2": "Cao cấp (C2)", "changeTheNameOfTheClass": "Đổi tên", "changeTheNameOfTheChat": "Đổi tên trò chuyện", "welcomeToYourNewClass": "Chào mừng! 🙂", @@ -1832,11 +1805,8 @@ "setToPublicSettingsDesc": "Để tìm bạn đàm thoại, bạn cần đặt hồ sơ của mình là công khai.", "accountSettings": "Cài đặt tài khoản", "unableToFindClassCode": "Không tìm thấy mã.", - "askPangeaBot": "Nhờ Pangea Bot định nghĩa ngữ cảnh.", "sorryNoResults": "Xin lỗi, không có kết quả nào.", "ignoreInThisText": "Bỏ qua", - "helpMeTranslate": "Đồng ý!", - "needsItShortMessage": "Ra ngoài ngôn ngữ đích", "needsIGCShortMessage": "Thử công cụ ngữ pháp!", "needsItMessage": "Đợi đã, điều này không phải bằng {targetLanguage}! Bạn có cần giúp dịch không?", "@needsItMessage": { @@ -1847,19 +1817,9 @@ } } }, - "needsIgcMessage": "Tin nhắn này có lỗi ngữ pháp.", - "tokenTranslationTitle": "Một từ trong ngôn ngữ gốc của bạn.", - "spanTranslationDesc": "Xem gợi ý dịch bên dưới.", - "spanTranslationTitle": "Một số từ trong ngôn ngữ gốc của bạn.", - "l1SpanAndGrammarTitle": "Ngoài ngôn ngữ đích", - "l1SpanAndGrammarDesc": "Có thể là ngôn ngữ gốc của bạn hoặc có thể là lỗi ngữ pháp.", - "otherTitle": "Bạn có một lỗi.", - "otherDesc": "Xem gợi ý sửa bên dưới.", "countryInformation": "Quốc gia của tôi", - "myLanguages": "Ngôn ngữ gốc và đích của tôi", "targetLanguage": "Ngôn ngữ đích", "sourceLanguage": "Ngôn ngữ gốc", - "languagesISpeak": "Những ngôn ngữ tôi nói", "updateLanguage": "Ngôn ngữ của tôi", "whatLanguageYouWantToLearn": "Bạn muốn học ngôn ngữ nào?", "whatIsYourBaseLanguage": "Ngôn ngữ gốc của bạn là gì?", @@ -1872,13 +1832,8 @@ "errorDisableITUserDesc": "Nhấn vào đây để cập nhật cài đặt hỗ trợ dịch", "errorDisableIGCUserDesc": "Nhấn vào đây để cập nhật cài đặt hỗ trợ ngữ pháp", "errorDisableLanguageAssistanceUserDesc": "Nhấn vào đây để cập nhật cài đặt hỗ trợ dịch và ngữ pháp", - "itIsDisabled": "Trình Dịch Tương Tác đang bị tắt", - "igcIsDisabled": "Trình Kiểm Tra Ngữ Pháp Tương Tác đang bị tắt", - "goToLearningSettings": "Đi tới Cài đặt Học tập", "error405Title": "Chưa thiết lập ngôn ngữ", "error405Desc": "Vui lòng thiết lập ngôn ngữ của bạn trong Menu chính > Cài đặt Học tập.", - "loginOrSignup": "Đăng nhập với", - "iAgreeToThe": "Tôi đồng ý với ", "termsAndConditions": "Điều khoản và Điều kiện", "andCertifyIAmAtLeast13YearsOfAge": " và xác nhận tôi ít nhất 16 tuổi.", "error502504Title": "Wow, có rất nhiều học viên đang trực tuyến!", @@ -1886,40 +1841,21 @@ "error404Title": "Lỗi dịch!", "error404Desc": "Pangea Bot chưa biết cách dịch điều này...", "errorPleaseRefresh": "Chúng tôi sẽ kiểm tra! Vui lòng tải lại và thử lại.", - "toggleIT": "Dịch Tương Tác", - "toggleIGC": "Ngữ Pháp Tương Tác", - "toggleToolSettingsDescription": "Tại đây, bạn có thể bật/tắt các công cụ ngôn ngữ cá nhân.", "connectedToStaging": "Bạn đang kết nối với máy chủ thử nghiệm (staging).", "learningSettings": "Cài đặt học tập", - "sendVoiceNotes": "Gửi ghi âm", - "sendVoiceNotesDesc": "Bật để cho phép học viên gửi ghi âm trong trò chuyện.", - "chatTopic": "Chủ đề trò chuyện", - "chatTopicDesc": "Đặt chủ đề cho cuộc trò chuyện", - "inviteStudentByUserNameDesc": "Nếu học viên của bạn đã có tài khoản, bạn có thể tìm họ.", "classRoster": "Danh sách thành viên", - "almostPerfect": "Có vẻ đúng! Đây là cách tôi sẽ nói.", - "prettyGood": "Khá ổn! Đây là cách tôi sẽ nói.", - "letMeThink": "Hmm, để xem bạn làm thế nào!", "clickMessageTitle": "Cần trợ giúp?", "clickMessageBody": "Nhấn vào tin nhắn để truy cập các công cụ ngôn ngữ như dịch, nghe lại và hơn thế nữa!", - "understandingMessagesTitle": "Định nghĩa và dịch!", - "understandingMessagesBody": "Nhấn các từ được gạch chân để xem định nghĩa. Nhấn biểu tượng dịch ở góc phải trên tin nhắn để dịch.", "allDone": "Hoàn tất!", "vocab": "Từ vựng", "low": "Chúng tôi có bằng chứng người dùng chưa hiểu các từ này.", "medium": "Các từ này đã được sử dụng nhưng chưa chắc đã hiểu hoàn toàn.", "high": "Chúng tôi có bằng chứng người dùng đã hiểu các từ này.", - "unknownProficiency": "Các từ này chưa được sử dụng trong Pangea Chat.", - "changeView": "Chuyển chế độ xem.", - "clearAll": "Xóa tất cả các từ?", - "generateVocabulary": "Tạo từ vựng từ tiêu đề và mô tả", - "generatePrompts": "Tạo gợi ý", "subscribe": "Đăng ký", "getAccess": "Đăng ký ngay!", "subscriptionDesc": "Trò chuyện cơ bản miễn phí! Đăng ký để mở khóa dịch tương tác, sửa ngữ pháp và phân tích học tập.", "subscriptionManagement": "Quản lý gói đăng ký", "currentSubscription": "Gói hiện tại", - "changeSubscription": "Thay đổi gói", "cancelSubscription": "Hủy gói", "selectYourPlan": "Chọn gói", "subsciptionPlatformTooltip": "Vui lòng đăng nhập bằng thiết bị gốc để quản lý gói đăng ký", @@ -1928,20 +1864,6 @@ "paymentHistory": "Lịch sử thanh toán", "emptyChatDownloadWarning": "Không thể tải xuống cuộc trò chuyện trống", "update": "Cập nhật", - "updateDesc": "Bạn có thể cập nhật ứng dụng từ phiên bản {localVersion} lên {storeVersion}", - "@updateDesc": { - "type": "String", - "placeholders": { - "storeVersion": { - "type": "String" - }, - "localVersion": { - "type": "String" - } - } - }, - "maybeLater": "Để sau", - "mainMenu": "Menu chính", "toggleImmersionMode": "Chế độ nhập vai", "toggleImmersionModeDesc": "Khi bật, tất cả tin nhắn sẽ được hiển thị trong ngôn ngữ đích. Phù hợp cho trao đổi ngôn ngữ.", "itToggleDescription": "Công cụ ngôn ngữ này sẽ phát hiện từ trong ngôn ngữ gốc của bạn và giúp dịch sang ngôn ngữ đích. Đôi lúc AI có thể sai sót.", @@ -1956,13 +1878,6 @@ "definitionsToolDescription": "Khi bật, từ gạch chân màu xanh có thể được nhấn để xem định nghĩa.", "translationsToolDescrption": "Khi bật, nhấn tin nhắn và chọn biểu tượng dịch để xem ở ngôn ngữ gốc.", "welcomeBack": "Chào mừng trở lại! Nếu bạn đã tham gia chương trình thử nghiệm 2023-2024, hãy liên hệ để nhận gói đặc biệt. Nếu bạn là giáo viên hoặc trường đã mua bản quyền, cũng hãy liên hệ với chúng tôi.", - "kickAllStudents": "Đá tất cả học viên", - "kickAllStudentsConfirmation": "Bạn có chắc muốn đá tất cả học viên không?", - "inviteAllStudents": "Mời tất cả học viên", - "inviteAllStudentsConfirmation": "Bạn có chắc muốn mời tất cả học viên không?", - "inviteUsersFromPangea": "Thêm quản trị viên", - "redeemPromoCode": "Nhập mã khuyến mại", - "enterPromoCode": "Nhập mã khuyến mại", "downloadTxtFile": "Tải tệp văn bản", "downloadCSVFile": "Tải tệp CSV", "promotionalSubscriptionDesc": "Hiện bạn có gói khuyến mại trọn đời. Nếu muốn thay đổi, hãy liên hệ support@pangea.chat.", @@ -1976,199 +1891,7 @@ }, "oneWeekTrial": "Dùng thử 1 tuần", "downloadXLSXFile": "Tải tệp Excel", - "abDisplayName": "Tiếng Abkhaz", - "aaDisplayName": "Tiếng Afar", - "afDisplayName": "Tiếng Afrikaans", - "akDisplayName": "Tiếng Akan", - "sqDisplayName": "Tiếng Albania", - "amDisplayName": "Tiếng Amharic", - "arDisplayName": "Tiếng Ả Rập", - "anDisplayName": "Tiếng Aragonese", - "hyDisplayName": "Tiếng Armenia", - "asDisplayName": "Tiếng Assam", - "avDisplayName": "Tiếng Avaric", - "aeDisplayName": "Tiếng Avestan", - "ayDisplayName": "Tiếng Aymara", - "azDisplayName": "Tiếng Azerbaijan", - "bmDisplayName": "Tiếng Bambara", - "baDisplayName": "Tiếng Bashkir", - "euDisplayName": "Tiếng Basque", - "beDisplayName": "Tiếng Belarus", - "bnDisplayName": "Tiếng Bengal", - "bhDisplayName": "Tiếng Bihari", - "biDisplayName": "Tiếng Bislama", - "bsDisplayName": "Tiếng Bosnia", - "brDisplayName": "Tiếng Breton", - "bgDisplayName": "Tiếng Bulgaria", - "myDisplayName": "Tiếng Myanmar", - "caDisplayName": "Tiếng Catalan / Valencian", - "chDisplayName": "Tiếng Chamorro", - "ceDisplayName": "Tiếng Chechen", - "nyDisplayName": "Tiếng Chichewa / Chewa / Nyanja", - "zhDisplayName": "Tiếng Trung", - "cvDisplayName": "Tiếng Chuvash", - "kwDisplayName": "Tiếng Cornwall", - "coDisplayName": "Tiếng Corsican", - "crDisplayName": "Tiếng Cree", - "hrDisplayName": "Tiếng Croatia", - "csDisplayName": "Tiếng Séc", - "daDisplayName": "Tiếng Đan Mạch", - "dvDisplayName": "Tiếng Divehi / Dhivehi / Maldivian", - "nlDisplayName": "Tiếng Hà Lan", - "enDisplayName": "Tiếng Anh", - "eoDisplayName": "Tiếng Esperanto", - "etDisplayName": "Tiếng Estonia", - "eeDisplayName": "Tiếng Ewe", - "foDisplayName": "Tiếng Faroe", - "fjDisplayName": "Tiếng Fijian", - "fiDisplayName": "Tiếng Phần Lan", - "frDisplayName": "Tiếng Pháp", - "ffDisplayName": "Tiếng Fula / Fulah / Pulaar / Pular", - "glDisplayName": "Tiếng Galicia", - "kaDisplayName": "Tiếng Gruzia", - "deDisplayName": "Tiếng Đức", - "elDisplayName": "Tiếng Hy Lạp (Hiện đại)", - "gnDisplayName": "Tiếng Guaraní", - "guDisplayName": "Tiếng Gujarati", - "htDisplayName": "Tiếng Haiti / Haiti Creole", - "haDisplayName": "Tiếng Hausa", - "heDisplayName": "Tiếng Hebrew (hiện đại)", - "hzDisplayName": "Tiếng Herero", - "hiDisplayName": "Tiếng Hindi", - "hoDisplayName": "Tiếng Hiri Motu", - "huDisplayName": "Tiếng Hungary", - "iaDisplayName": "Tiếng Interlingua", - "idDisplayName": "Tiếng Indonesia", - "ieDisplayName": "Tiếng Interlingue", - "gaDisplayName": "Tiếng Ireland", - "igDisplayName": "Tiếng Igbo", - "ikDisplayName": "Tiếng Inupiaq", - "ioDisplayName": "Tiếng Ido", - "isDisplayName": "Tiếng Iceland", - "itDisplayName": "Tiếng Ý", - "iuDisplayName": "Tiếng Inuktitut", - "jaDisplayName": "Tiếng Nhật", - "jvDisplayName": "Tiếng Java", - "klDisplayName": "Tiếng Kalaallisut / Greenlandic", - "knDisplayName": "Tiếng Kannada", - "krDisplayName": "Tiếng Kanuri", - "ksDisplayName": "Tiếng Kashmir", - "kkDisplayName": "Tiếng Kazakh", - "kmDisplayName": "Tiếng Khmer", - "kiDisplayName": "Tiếng Kikuyu / Gikuyu", - "rwDisplayName": "Tiếng Kinyarwanda", - "kyDisplayName": "Tiếng Kirghiz / Kyrgyz", - "kvDisplayName": "Tiếng Komi", - "kgDisplayName": "Tiếng Kongo", - "koDisplayName": "Tiếng Hàn", - "kuDisplayName": "Tiếng Kurd", - "kjDisplayName": "Tiếng Kwanyama / Kuanyama", - "laDisplayName": "Tiếng Latin", - "lbDisplayName": "Tiếng Luxembourgish", - "lgDisplayName": "Tiếng Luganda", - "liDisplayName": "Tiếng Limburgish / Limburgan / Limburger", - "lnDisplayName": "Tiếng Lingala", - "loDisplayName": "Tiếng Lào", - "ltDisplayName": "Tiếng Lithuania", - "luDisplayName": "Tiếng Luba-Katanga", - "lvDisplayName": "Tiếng Latvia", - "gvDisplayName": "Tiếng Manx", - "mkDisplayName": "Tiếng Macedonia", - "mgDisplayName": "Tiếng Malagasy", - "msDisplayName": "Tiếng Mã Lai", - "mlDisplayName": "Tiếng Malayalam", - "mtDisplayName": "Tiếng Malta", - "miDisplayName": "Tiếng Māori", - "mrDisplayName": "Tiếng Marathi", - "mhDisplayName": "Tiếng Marshallese", - "mnDisplayName": "Tiếng Mông Cổ", - "naDisplayName": "Tiếng Nauru", - "nvDisplayName": "Tiếng Navajo / Navaho", - "nbDisplayName": "Tiếng Na Uy (Bokmål)", - "ndDisplayName": "Tiếng Ndebele miền Bắc", - "neDisplayName": "Tiếng Nepal", - "ngDisplayName": "Tiếng Ndonga", - "nnDisplayName": "Tiếng Na Uy (Nynorsk)", - "noDisplayName": "Tiếng Na Uy", - "iiDisplayName": "Tiếng Nuosu", - "nrDisplayName": "Tiếng Ndebele miền Nam", - "ocDisplayName": "Tiếng Occitan", - "ojDisplayName": "Tiếng Ojibwe / Ojibwa", - "cuDisplayName": "Tiếng Slav Giáo Hội Cổ", - "omDisplayName": "Tiếng Oromo", - "orDisplayName": "Tiếng Oriya", - "osDisplayName": "Tiếng Ossetian / Ossetic", - "paDisplayName": "Tiếng Punjabi", - "piDisplayName": "Tiếng Pāli", - "faDisplayName": "Tiếng Ba Tư", - "plDisplayName": "Tiếng Ba Lan", - "psDisplayName": "Tiếng Pashto / Pushto", - "ptDisplayName": "Tiếng Bồ Đào Nha", - "quDisplayName": "Tiếng Quechua", - "rmDisplayName": "Tiếng Romansh", - "rnDisplayName": "Tiếng Kirundi", - "roDisplayName": "Tiếng Romania / Moldavian / Moldovan", - "ruDisplayName": "Tiếng Nga", - "saDisplayName": "Tiếng Phạn (Sanskrit)", - "scDisplayName": "Tiếng Sardinian", - "sdDisplayName": "Tiếng Sindhi", - "seDisplayName": "Tiếng Sami miền Bắc", - "smDisplayName": "Tiếng Samoa", - "sgDisplayName": "Tiếng Sango", - "srDisplayName": "Tiếng Serbia", - "gdDisplayName": "Tiếng Gaelic Scotland", - "snDisplayName": "Tiếng Shona", - "siDisplayName": "Tiếng Sinhala / Sinhalese", - "skDisplayName": "Tiếng Slovakia", - "slDisplayName": "Tiếng Slovenia", - "soDisplayName": "Tiếng Somali", - "stDisplayName": "Tiếng Sotho miền Nam", - "esDisplayName": "Tiếng Tây Ban Nha", - "suDisplayName": "Tiếng Sunda", - "swDisplayName": "Tiếng Swahili", - "ssDisplayName": "Tiếng Swati", - "svDisplayName": "Tiếng Thụy Điển", - "taDisplayName": "Tiếng Tamil", - "teDisplayName": "Tiếng Telugu", - "tgDisplayName": "Tiếng Tajik", - "thDisplayName": "Tiếng Thái", - "tiDisplayName": "Tiếng Tigrinya", - "boDisplayName": "Tiếng Tây Tạng", - "tkDisplayName": "Tiếng Turkmen", - "tlDisplayName": "Tiếng Tagalog", - "tnDisplayName": "Tiếng Tswana", - "toDisplayName": "Tiếng Tonga (Đảo Tonga)", - "trDisplayName": "Tiếng Thổ Nhĩ Kỳ", - "tsDisplayName": "Tiếng Tsonga", - "ttDisplayName": "Tiếng Tatar", - "twDisplayName": "Tiếng Twi", - "tyDisplayName": "Tiếng Tahiti", - "ugDisplayName": "Tiếng Uighur / Uyghur", - "ukDisplayName": "Tiếng Ukraina", - "urDisplayName": "Tiếng Urdu", - "uzDisplayName": "Tiếng Uzbek", - "veDisplayName": "Tiếng Venda", - "viDisplayName": "Tiếng Việt", - "voDisplayName": "Tiếng Volapük", - "waDisplayName": "Tiếng Walloon", - "cyDisplayName": "Tiếng Wales", - "woDisplayName": "Tiếng Wolof", - "fyDisplayName": "Tiếng Frisian miền Tây", - "xhDisplayName": "Tiếng Xhosa", - "yiDisplayName": "Tiếng Yiddish", - "yoDisplayName": "Tiếng Yoruba", - "zaDisplayName": "Tiếng Zhuang / Chuang", "unkDisplayName": "Chưa xác định", - "zuDisplayName": "Tiếng Zulu", - "hawDisplayName": "Tiếng Hawaii", - "hmnDisplayName": "Tiếng H'Mông", - "multiDisplayName": "Đa ngôn ngữ", - "cebDisplayName": "Tiếng Cebuano", - "dzDisplayName": "Tiếng Dzongkha", - "iwDisplayName": "Tiếng Hebrew", - "jwDisplayName": "Tiếng Javanese", - "moDisplayName": "Tiếng Moldavian", - "shDisplayName": "Tiếng Serbo-Croatian", "wwCountryDisplayName": "Toàn thế giới", "afCountryDisplayName": "Afghanistan", "axCountryDisplayName": "Quần đảo Åland", @@ -2416,11 +2139,7 @@ "yeCountryDisplayName": "Yemen", "zmCountryDisplayName": "Zambia", "zwCountryDisplayName": "Zimbabwe", - "pay": "Thanh toán", - "allPrivateChats": "Trò chuyện riêng", - "unknownPrivateChat": "Cuộc trò chuyện riêng chưa xác định", - "declinedInvitation": "Đã từ chối lời mời", - "acceptedInvitation": "Đã chấp nhận lời mời", + "pay": "Checkout", "youreInvited": "📩 Bạn được mời!", "invitedToChat": "{user} đã mời bạn tham gia trò chuyện: {name}! Bạn muốn chấp nhận không?", "@invitedToChat": { @@ -2437,34 +2156,15 @@ "yearlySubscription": "Hàng năm", "defaultSubscription": "Gói Pangea Chat", "freeTrial": "Dùng thử miễn phí", - "grammarAnalytics": "Phân tích lỗi ngữ pháp", "total": "Tổng: ", "noDataFound": "Không tìm thấy dữ liệu", - "promoSubscriptionExpirationDesc": "Gói khuyến mãi hết hạn vào {expiration}. Nếu cần trợ giúp, hãy liên hệ support@pangea.chat.", - "@promoSubscriptionExpirationDesc": { - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "emptyChatNameWarning": "Vui lòng nhập tên cho cuộc trò chuyện này", - "someErrorTitle": "Hmm, có gì đó không đúng", - "someErrorBody": "Có thể đây là lỗi hoặc nội dung bằng ngôn ngữ khác.", "bestCorrectionFeedback": "Đúng rồi!", "distractorFeedback": "Chưa chính xác lắm.", "bestAnswerFeedback": "Chính xác!", "definitionDefaultPrompt": "Từ này có nghĩa là gì?", "practiceDefaultPrompt": "Câu trả lời tốt nhất là gì?", "correctionDefaultPrompt": "Phương án thay thế tốt nhất là gì?", - "itStartDefaultPrompt": "Bạn cần hỗ trợ dịch không?", - "lockedChatWarning": "🔒 Cuộc trò chuyện này đã bị khóa", - "lockChat": "Khóa trò chuyện", - "suggestToChat": "Đề xuất trò chuyện này", - "suggestToChatDesc": "Những trò chuyện được đề xuất sẽ hiện trong danh sách trò chuyện", "acceptSelection": "Chấp nhận chỉnh sửa", - "acceptSelectionAnyway": "Vẫn dùng lựa chọn này", - "makingActivity": "Đang tạo hoạt động", "why": "Tại sao?", "definition": "Định nghĩa", "exampleSentence": "Ví dụ", @@ -2507,7 +2207,6 @@ } }, "searchChatsRooms": "Tìm kiếm #cuộc_trò_chuyện, @người_dùng...", - "viewArchive": "Xem lưu trữ", "trialExpiration": "Bản dùng thử của bạn sẽ hết hạn vào {expiration}", "@trialExpiration": { "placeholders": { @@ -2520,7 +2219,6 @@ "activateTrial": "Dùng thử miễn phí 7 ngày", "successfullySubscribed": "Bạn đã đăng ký thành công!", "clickToManageSubscription": "Nhấp vào đây để quản lý gói đăng ký.", - "errorGettingAudio": "Lỗi khi lấy tệp âm thanh. Hãy tải lại và thử tiếp.", "nothingFound": "Không tìm thấy gì...", "groupName": "Tên nhóm", "createGroupAndInviteUsers": "Tạo nhóm và mời người dùng", @@ -2628,18 +2326,8 @@ "noEmailWarning": "Vui lòng nhập địa chỉ email hợp lệ. Nếu không, bạn sẽ không thể đặt lại mật khẩu. Hoặc chạm lại nút để tiếp tục mà không cần.", "pleaseEnterValidEmail": "Vui lòng nhập địa chỉ email hợp lệ.", "pleaseChooseAUsername": "Vui lòng chọn tên người dùng", - "chooseAUsername": "Chọn tên người dùng", "define": "Định nghĩa", "listen": "Nghe", - "addConversationBot": "Bật bot hội thoại", - "addConversationBotDesc": "Thêm bot vào cuộc trò chuyện này", - "convoBotSettingsDescription": "Chỉnh sửa chủ đề và mức độ khó của hội thoại", - "enterAConversationTopic": "Nhập chủ đề hội thoại", - "conversationTopic": "Chủ đề hội thoại", - "enableModeration": "Bật kiểm duyệt", - "enableModerationDesc": "Bật kiểm duyệt tự động để xem xét tin nhắn trước khi gửi", - "conversationLanguageLevel": "Trình độ ngôn ngữ của hội thoại?", - "showDefinition": "Hiển thị định nghĩa", "sendReadReceipts": "Gửi xác nhận đã đọc", "sendTypingNotificationsDescription": "Những thành viên khác thấy khi bạn đang nhập tin nhắn.", "sendReadReceiptsDescription": "Những thành viên khác thấy khi bạn đã đọc tin nhắn.", @@ -2703,34 +2391,16 @@ } } }, - "subscriptionPopupTitle": "Câu này có thể có lỗi ngữ pháp...", - "subscriptionPopupDesc": "Đăng ký ngay để mở khóa tính năng dịch và kiểm tra ngữ pháp!", - "seeOptions": "Xem gói", - "continuedWithoutSubscription": "Tiếp tục mà không đăng ký", "trialPeriodExpired": "Thời gian dùng thử đã hết hạn", - "selectToDefine": "Nhấp vào từ để xem định nghĩa!", "translations": "bản dịch", "messageAudio": "âm thanh tin nhắn", "definitions": "định nghĩa", "subscribedToUnlockTools": "Đăng ký để mở khóa dịch tương tác, kiểm tra ngữ pháp, âm thanh, hoạt động và phân tích học tập!", "more": "Thêm", "translationTooltip": "Dịch", - "audioTooltip": "Phát âm thanh", "speechToTextTooltip": "Chuyển giọng nói thành văn bản", - "certifyAge": "Tôi xác nhận tôi trên {age} tuổi", - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "kickBotWarning": "Đá Pangea Bot sẽ xóa bot hội thoại khỏi cuộc trò chuyện này.", - "joinToView": "Tham gia phòng để xem chi tiết", "refresh": "Tải lại", - "autoPlayTitle": "Tự động phát tin nhắn", - "autoPlayDesc": "Khi bật, âm thanh văn bản trong tin nhắn sẽ tự phát khi bạn chọn.", "transparent": "Trong suốt", "unreadChatsInApp": "{appname}: {unread} trò chuyện chưa đọc", "@unreadChatsInApp": { @@ -2750,70 +2420,23 @@ "accuracy": "Độ chính xác", "points": "Điểm", "noPaymentInfo": "Không cần thông tin thanh toán!", - "conversationBotModeSelectDescription": "Hoạt động trò chuyện", - "conversationBotModeSelectOption_discussion": "Thảo luận", - "conversationBotModeSelectOption_custom": "Tùy chỉnh", - "conversationBotModeSelectOption_conversation": "Hội thoại", - "conversationBotModeSelectOption_textAdventure": "Trò chơi văn bản", - "conversationBotModeSelectOption_storyGame": "Trò chơi kể chuyện", - "conversationBotDiscussionZone_title": "Cài đặt thảo luận", - "conversationBotDiscussionZone_discussionTopicLabel": "Chủ đề thảo luận", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "Đặt chủ đề thảo luận", - "conversationBotDiscussionZone_discussionKeywordsLabel": "Từ khóa thảo luận", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "Đặt từ khóa thảo luận", - "conversationBotDiscussionZone_discussionKeywordsHintText": "Danh sách từ khóa, cách nhau bằng dấu phẩy, để định hướng cuộc thảo luận", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "Gửi gợi ý thảo luận theo lịch", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "Số giờ giữa mỗi lần gửi gợi ý", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "Phản hồi khi có biểu tượng ⏩", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "Biểu tượng phản hồi để gửi gợi ý thảo luận", - "conversationBotCustomZone_title": "Cài đặt tùy chỉnh", - "conversationBotCustomZone_customSystemPromptLabel": "Nội dung hệ thống", - "conversationBotCustomZone_customSystemPromptPlaceholder": "Nhập prompt hệ thống tùy chỉnh", - "conversationBotCustomZone_customSystemPromptEmptyError": "Thiếu prompt hệ thống tùy chỉnh", - "botConfig": "Cấu hình bot và hoạt động", - "botConfigNoPermissionTitle": "Không có quyền", - "botConfigNoPermissionMessage": "Liên hệ quản trị viên phòng để thay đổi cấu hình bot", - "addConversationBotDialogTitleInvite": "Xác nhận mời bot hội thoại", - "addConversationBotButtonInvite": "Mời", - "addConversationBotDialogInviteConfirmation": "Mời", - "addConversationBotButtonTitleRemove": "Xác nhận xóa bot hội thoại", - "addConversationBotButtonRemove": "Gỡ", - "addConversationBotDialogRemoveConfirmation": "Gỡ", - "conversationBotConfigConfirmChange": "Xác nhận", - "conversationBotStatus": "Mời bot", - "conversationBotTextAdventureZone_title": "Trò chơi văn bản", - "conversationBotTextAdventureZone_instructionLabel": "Hướng dẫn trò chơi", - "conversationBotTextAdventureZone_instructionPlaceholder": "Đặt hướng dẫn cho Game Master", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "Thiếu hướng dẫn cho Game Master", - "studentAnalyticsNotAvailable": "Không có dữ liệu học viên", - "roomDataMissing": "Thiếu một số dữ liệu do bạn chưa vào phòng.", "updatePhoneOS": "Bạn có thể cần nâng cấp phiên bản hệ điều hành.", "wordsPerMinute": "Từ mỗi phút", "autoIGCToolName": "Tự động chạy hỗ trợ ngôn ngữ", "autoIGCToolDescription": "Tự động chạy hỗ trợ ngôn ngữ sau khi gõ tin nhắn", - "runGrammarCorrection": "Kiểm tra ngữ pháp", - "grammarCorrectionFailed": "Có vấn đề cần sửa", - "grammarCorrectionComplete": "Có vẻ ổn!", "chatCapacity": "Giới hạn thành viên trò chuyện", "roomFull": "Phòng đã đạt giới hạn.", - "topicNotSet": "Chưa đặt chủ đề.", - "chatCapacityNotSet": "Chưa giới hạn số thành viên trong trò chuyện.", "chatCapacityHasBeenChanged": "Giới hạn thành viên trò chuyện đã thay đổi", "chatCapacityExplanation": "Hạn chế số lượng người dùng thường (không phải quản trị viên) có thể tham gia cuộc trò chuyện.", - "chatExceedsCapacity": "Cuộc trò chuyện vượt quá giới hạn thành viên.", "tooManyRequest": "Quá nhiều yêu cầu, vui lòng thử lại sau.", "enterNumber": "Vui lòng nhập một số nguyên lớn hơn 0.", "buildTranslation": "Xây dựng bản dịch của bạn từ các lựa chọn trên", "noDatabaseEncryption": "Nền tảng này không hỗ trợ mã hóa cơ sở dữ liệu", "thereAreCountUsersBlocked": "Hiện có {count} người dùng bị chặn.", "knockRestricted": "Hạn chế gõ yêu cầu", - "nonexistentSelection": "Không còn tồn tại lựa chọn này.", "createNewSpace": "Tạo không gian mới", - "changeAnalyticsLanguage": "Thay đổi ngôn ngữ phân tích", "practice": "Luyện tập", "noLanguagesSet": "Chưa thiết lập ngôn ngữ", - "noActivitiesFound": "Tạm đủ cho lần này! Hãy quay lại sau để có thêm hoạt động.", - "hintTitle": "Gợi ý:", "speechToTextBody": "Với tin nhắn thoại, bạn có thể xem bản chép giọng nói và điểm từ/phút của người nói.", "previous": "Trước", "versionNotFound": "Không tìm thấy phiên bản", @@ -2834,18 +2457,6 @@ } } }, - "languageButtonLabel": "Ngôn ngữ: {currentLanguage}", - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "interactiveTranslatorAutoPlaySliderHeader": "Tự động bật trình dịch", - "interactiveTranslatorAutoPlayDesc": "Khởi chạy dịch tương tác mà không hỏi", - "changeAnalyticsView": "Thay đổi cách xem phân tích", "l1TranslationBody": "Tin nhắn trong ngôn ngữ gốc sẽ không được dịch.", "continueText": "Tiếp tục", "deleteSubscriptionWarningTitle": "Bạn đang có gói đăng ký hoạt động", @@ -2854,9 +2465,7 @@ "error520Title": "Hãy thử lại.", "error520Desc": "Xin lỗi, chúng tôi không thể hiểu tin nhắn của bạn...", "wordsUsed": "Từ đã dùng", - "errorTypes": "Loại lỗi", "level": "Cấp độ", - "canceledSend": "Hủy gửi", "morphsUsed": "Hình thái đã sử dụng", "translationChoicesBody": "Giữ lâu một lựa chọn để xem gợi ý.", "sendCanceled": "Đã hủy gửi", @@ -2919,7 +2528,6 @@ "reportContentIssueTitle": "Báo cáo nội dung vấn đề", "feedback": "Phản hồi (tùy chọn)", "reportContentIssueDescription": "Ôi không! AI hỗ trợ cá nhân hóa nhưng đôi khi vẫn nhầm lẫn. Hãy cho chúng tôi biết phản hồi của bạn hoặc ta sẽ thử lại.", - "changeContent": "Bạn muốn thay đổi nội dung như thế nào?", "l2SupportNa": "Không khả dụng", "l2SupportAlpha": "Bản Alpha", "l2SupportBeta": "Bản Beta", @@ -3149,7 +2757,6 @@ "grammarCopySPC": "Tính cụ thể", "grammarCopyPARTTYPE": "Loại phân từ", "grammarCopyINTREL": "Nghi vấn - quan hệ", - "grammarCopyNUMFORMpsor": "Dạng số của chủ sở hữu", "grammarCopyUNKNOWN": "Không rõ", "grammarCopyNUMBERPSOR": "Số lượng chủ sở hữu", "grammarCopyPOSS": "Sở hữu", @@ -3194,13 +2801,6 @@ "grammarCopyVOICEdir": "Thể trực tiếp", "grammarCopyVOICEinv": "Thể nghịch đảo", "grammarCopyVOICErcp": "Thể tương hỗ", - "enterPrompt": "Vui lòng nhập lời gợi ý (prompt)", - "selectBotLanguage": "Chọn ngôn ngữ cho bot", - "chooseVoice": "Chọn giọng đọc", - "enterLanguageLevel": "Vui lòng nhập trình độ ngôn ngữ", - "enterDiscussionTopic": "Vui lòng nhập chủ đề thảo luận", - "selectBotChatMode": "Chọn chế độ trò chuyện của bot", - "messageNotInTargetLang": "Tin nhắn không ở trong ngôn ngữ đích", "other": "Khác", "levelShort": "LVL {level}", "@levelShort": { @@ -3211,16 +2811,12 @@ } } }, - "botModeValidation": "Vui lòng chọn một chế độ trò chuyện", - "botSettingsSubtitle": "Mời bot kiểm duyệt hoặc khởi tạo hoạt động trò chuyện", - "invitePeople": "Mời người dùng", "invitePeopleChatSubtitle": "Mời người dùng hoặc quản trị viên đến cuộc trò chuyện này", "invitePeopleSpaceSubtitle": "Mời người dùng hoặc quản trị viên đến không gian này", "noCapacityLimit": "Không giới hạn sức chứa", "downloadGroupText": "Tải nội dung nhóm", "notificationsOn": "Bật thông báo", "notificationsOff": "Tắt thông báo", - "chatCanBeFoundViaSearch": "Cuộc trò chuyện có thể được tìm thấy qua tìm kiếm", "calculatingFileSize": "Đang tính kích thước tệp...", "prepareSendingAttachment": "Chuẩn bị gửi tệp đính kèm...", "sendingAttachment": "Đang gửi tệp đính kèm...", @@ -3249,9 +2845,6 @@ }, "oneOfYourDevicesIsNotVerified": "Một trong các thiết bị của bạn chưa được xác minh", "noticeChatBackupDeviceVerification": "Lưu ý: Khi bạn thêm tất cả thiết bị vào sao lưu trò chuyện, chúng sẽ tự động được xác minh.", - "requireCodeToJoin": "Yêu cầu mã để tham gia", - "canFindInSearch": "Có thể tìm thấy qua tìm kiếm", - "addChatToSpace": "Thêm trò chuyện vào không gian", "welcomeText": "Chào bạn 👋 Đây là FluffyChat. Bạn có thể đăng nhập vào bất kỳ máy chủ nào tương thích với https://matrix.org, và trò chuyện với mọi người. Đây là một mạng nhắn tin phi tập trung!", "blur": "Mờ:", "opacity": "Độ trong suốt:", @@ -3315,39 +2908,19 @@ } } }, - "signInWithUsername": "Đăng nhập bằng tên người dùng và mật khẩu", - "registrationEmailMessage": "Vui lòng xác nhận email bằng đường dẫn chúng tôi đã gửi. Đôi khi email có thể mất 5 phút mới đến hoặc vào mục spam.", "enableTTSToolName": "Bật đọc văn bản (text-to-speech)", "enableTTSToolDescription": "Cho phép ứng dụng tạo âm thanh đọc văn bản của ngôn ngữ đích", - "couldNotFindTTS": "Không tìm được công cụ đọc văn bản cho ngôn ngữ đích. ", - "ttsInstructionsHyperlink": "Nhấn vào đây để xem cách tải giọng đọc mới trên thiết bị.", - "createAnAccount": "Tạo tài khoản", - "signIn": "Đăng nhập", - "signUpWithEmail": "Đăng ký bằng Email", - "signUpWithGoogle": "Đăng ký bằng Google", - "signUpWithApple": "Đăng ký bằng Apple", "yourUsername": "Tên người dùng của bạn", "yourEmail": "Email của bạn", - "pleaseEnterAnEmail": "Vui lòng nhập địa chỉ email", - "signInWithGoogle": "Đăng nhập bằng Google", - "signInWithApple": "Đăng nhập bằng Apple", - "chooseYourAvatar": "Chọn ảnh đại diện", "iWantToLearn": "Tôi muốn học", - "letsStart": "Bắt đầu", - "pleaseAgreeToTOS": "Vui lòng đồng ý với Điều khoản và Điều kiện", "pleaseEnterEmail": "Vui lòng nhập địa chỉ email hợp lệ.", - "pleaseSelectALanguage": "Vui lòng chọn một ngôn ngữ", "myBaseLanguage": "Ngôn ngữ gốc của tôi", - "clickWordsInstructions": "Nhấn vào từ hoặc nút bên dưới để tìm hiểu thêm", - "chooseBestDefinition": "Chọn định nghĩa phù hợp nhất", "meaningSectionHeader": "Nghĩa:", "formSectionHeader": "Các dạng từ đã dùng trong trò chuyện:", - "noEmojiSelectedTooltip": "Chưa chọn biểu tượng cảm xúc nào", "writingExercisesTooltip": "Bài tập viết", "listeningExercisesTooltip": "Bài tập nghe", "readingExercisesTooltip": "Bài tập đọc", "meaningNotFound": "Không tìm thấy nghĩa của từ.", - "formsNotFound": "Không tìm thấy dạng từ.", "chooseBaseForm": "Chọn dạng gốc", "notTheCodeError": "Xin lỗi, mã đó không đúng!", "totalXP": "Tổng XP", @@ -3427,33 +3000,13 @@ } }, "doubleClickToEdit": "Nhấp đúp để chỉnh sửa.", - "removeFeature": "Xóa {feature}", - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, "otherPartyNotLoggedIn": "Bên kia hiện không đăng nhập, không thể nhận tin!", - "chooseCorrectLabel": "Chọn nhãn đúng.", - "levelPopupTitle": "Chúc mừng, bạn đã đạt cấp {level}", - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "activityPlannerTitle": "Trình lập hoạt động", "topicLabel": "Chủ đề", "topicPlaceholder": "Chọn một chủ đề...", "modePlaceholder": "Chọn một chế độ...", "learningObjectiveLabel": "Mục tiêu học tập", "learningObjectivePlaceholder": "Chọn một mục tiêu học tập...", - "mediaLabel": "Loại nội dung người học nên chia sẻ", "languageOfInstructionsLabel": "Ngôn ngữ hướng dẫn hoạt động", "targetLanguageLabel": "Ngôn ngữ đích", "cefrLevelLabel": "Trình độ CEFR", @@ -3467,17 +3020,7 @@ "instructions": "Hướng dẫn", "numberOfLearners": "Số lượng người học", "mustBeInteger": "Phải là số nguyên, ví dụ: 1, 2, 3...", - "noLemmasFound": "Chưa có từ vựng với hơn {xp} XP. Hãy luyện tập thêm!", - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "constructUsePvmDesc": "Đã sử dụng trong tin nhắn thoại", - "lockedMorphFeature": "Đang đợi mở khóa", "appWantsToUseForLogin": "Dùng '{server}' để đăng nhập", "@appWantsToUseForLogin": { "type": "String", @@ -3491,16 +3034,11 @@ "open": "Mở", "waitingForServer": "Đang đợi phản hồi từ máy chủ...", "appIntroduction": "FluffyChat cho phép bạn trò chuyện với bạn bè trên nhiều nền tảng khác nhau. Tìm hiểu thêm tại https://matrix.org hoặc nhấn *Tiếp tục*.", - "whatIsLemma": "Dạng gốc của từ là gì?", "constructUseCorMmDesc": "Đúng trong ý nghĩa tin nhắn", "constructUseIncMmDesc": "Sai trong ý nghĩa tin nhắn", "constructUseIgnMmDesc": "Bỏ qua trong ý nghĩa tin nhắn", "clickForMeaningActivity": "Nhấn đây để làm Bài tập Ý Nghĩa", "meaning": "Nghĩa", - "accountInformation": "Thông tin tài khoản", - "addGroupDescription": "Thêm mô tả cho cuộc trò chuyện", - "addNewFriend": "Thêm bạn mới", - "alreadyHaveAnAccount": "Bạn đã có tài khoản", "newChatRequest": "📩 Yêu cầu trò chuyện mới", "contentNotificationSettings": "Cài đặt thông báo nội dung", "generalNotificationSettings": "Cài đặt thông báo chung", @@ -3585,9 +3123,7 @@ } } }, - "slightlyOffensive": "Hơi xúc phạm", "clickOnEmailLink": "Vui lòng nhấp vào liên kết trong email và sau đó tiếp tục. Trong một số trường hợp hiếm hoi, email có thể bị gửi vào thư rác hoặc mất đến 5 phút để đến nơi.", - "whoIsAllowedToJoinThisChat": "Ai được phép tham gia cuộc trò chuyện này", "dontForgetPassword": "Đừng quên mật khẩu của bạn!", "enableAutocorrectToolName": "Bật tự động sửa", "enableAutocorrectDescription": "Sử dụng tính năng tự động sửa tích hợp của bàn phím khi gõ tin nhắn", @@ -3634,8 +3170,6 @@ "notSupportedOnThisDevice": "Không được hỗ trợ trên thiết bị này", "pleaseUpdateApp": "Vui lòng cập nhật ứng dụng để tiếp tục.", "chooseEmojiInstructionsBody": "Chọn một biểu tượng cảm xúc cho từ này! Không có câu trả lời sai và bạn có thể chuyển đổi bất cứ lúc nào! 😄", - "pickAnEmojiFor": "Chọn một biểu tượng cảm xúc cho ${lemma}", - "joinByCode": "Tham gia bằng mã", "@@locale": "vi", "@takeAPhoto": { "type": "String", @@ -3661,19 +3195,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, - "levelSummaryTrigger": "Đọc báo cáo", "levelSummaryPopupTitle": "Tóm tắt cấp {level}", "@levelSummaryPopupTitle": { "type": "String", @@ -3697,38 +3218,19 @@ "morphAnalyticsListBody": "Đây là tất cả các khái niệm ngữ pháp trong ngôn ngữ bạn đang học! Bạn sẽ mở khóa chúng khi gặp phải trong khi trò chuyện. Nhấp để xem chi tiết.", "chooseWordAudioInstructionsBody": "Nghe toàn bộ tin nhắn. Sau đó, khớp các âm thanh với các từ.", "chooseMorphsInstructionsBody": "Nhấp vào các mảnh ghép cho các câu hỏi ngữ pháp!", - "inviteAndLaunch": "Khởi động và mời", - "createOwnChat": "Tạo trò chuyện của riêng bạn", "pleaseEnterInt": "Vui lòng nhập một số", "home": "Trang chủ", "join": "Tham gia", "readingAssistanceOverviewBody": "Nhấp vào các nút bên dưới để chơi mini-game về việc khớp emoji, âm thanh, nghĩa từ và khái niệm ngữ pháp. Hoặc nhấp vào bất kỳ từ nào để xem chi tiết.", - "learnByTexting": "Học qua nhắn tin", - "referFriends": "Giới thiệu bạn bè", - "referFriendDialogTitle": "Mời một người bạn tham gia cuộc trò chuyện của bạn", - "referFriendDialogDesc": "Bạn có một người bạn hào hứng học một ngôn ngữ mới cùng bạn không? Hãy sao chép và gửi liên kết mời này để tham gia và bắt đầu trò chuyện với bạn hôm nay.", - "youUnlocked": "Bạn đã mở khóa", "resetInstructionTooltipsTitle": "Đặt lại hướng dẫn công cụ", "resetInstructionTooltipsDesc": "Nhấp để hiển thị hướng dẫn công cụ như cho một người dùng hoàn toàn mới.", "selectForGrammar": "Chọn một biểu tượng ngữ pháp cho các hoạt động và chi tiết.", - "newChatActivityTitle": "Thêm một hoạt động thú vị?", - "newChatActivityDesc": "Biến mỗi cuộc trò chuyện nhóm thành một cuộc phiêu lưu với Kế hoạch Hoạt động! Đặt các chủ đề và mục tiêu hấp dẫn cho nhóm, và mang cuộc trò chuyện đến cuộc sống với những hình ảnh tuyệt đẹp. Khơi dậy những cuộc thảo luận sáng tạo và giữ cho niềm vui chảy trôi một cách dễ dàng!", - "exploreMore": "Khám phá thêm", "randomize": "Ngẫu nhiên hóa", "clear": "Xóa", "featuredActivities": "Nổi bật", - "goToChat": "Đi đến trò chuyện", "save": "Lưu", - "selectActivity": "Chọn hoạt động", - "wordFocusListeningMultipleChoice": "Âm thanh nào phù hợp với từ?", "startChat": "Bắt đầu trò chuyện", "translationProblem": "Vấn đề dịch thuật", - "perfectTranslation": "Dịch thuật hoàn hảo!", - "greatJobTranslation": "Làm tốt công việc với bản dịch này!", - "goodJobTranslation": "Làm tốt công việc với bản dịch này.", - "makingProgress": "Bạn đang tiến bộ!", - "keepPracticing": "Tiếp tục luyện tập!", - "niceJob": "Làm tốt lắm!", "askToJoin": "Yêu cầu tham gia", "emptyChatWarningTitle": "Trò chuyện trống", "emptyChatWarningDesc": "Bạn chưa mời ai vào trò chuyện của mình. Đi đến cài đặt trò chuyện để mời danh bạ hoặc Bot của bạn. Bạn cũng có thể làm điều này sau.", @@ -3746,8 +3248,6 @@ "languageLevelC2Desc": "Tôi có thể hiểu hầu như mọi thứ nghe hoặc đọc và diễn đạt bản thân một cách lưu loát và chính xác.", "newVocab": "Từ vựng mới", "newGrammar": "Khái niệm ngữ pháp mới", - "congratulationsOnReaching": "Bạn đã đạt đến Cấp độ {level}!", - "seeDetails": "Xem chi tiết", "choosePracticeMode": "Nhấp vào một trong các nút ở trên để bắt đầu một hoạt động thực hành", "ban": "Cấm", "unban": "Bỏ cấm", @@ -3764,7 +3264,6 @@ "timesUsedWithAssistance": "Số lần sử dụng với sự trợ giúp", "shareInviteCode": "Chia sẻ mã mời: {code}", "leaderboard": "Bảng xếp hạng", - "welcomeUser": "Chào mừng {user}", "skipForNow": "Bỏ qua tạm thời", "@setCustomPermissionLevel": { "type": "String", @@ -3822,14 +3321,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -3846,26 +3337,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -3878,18 +3349,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -3906,22 +3365,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@createActivity": { "type": "String", "placeholders": {} @@ -3934,30 +3381,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -4026,18 +3449,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -4106,14 +3517,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -4121,12 +3524,8 @@ "permissions": "Quyền hạn", "addEnvironmentOverride": "Thêm ghi đè môi trường", "defaultOption": "Mặc định", - "chatWithActivities": "Trò chuyện với các hoạt động", "launch": "Khởi động", - "launchActivityToChats": "Khởi động hoạt động đến các trò chuyện", "searchChats": "Tìm kiếm cuộc trò chuyện", - "selectChats": "Chọn cuộc trò chuyện", - "selectChatToStart": "Hoàn tất! Chọn một trò chuyện để bắt đầu", "pinMessages": "Ghim tin nhắn", "setJoinRules": "Đặt quy tắc tham gia", "displayNavigationRail": "Hiển thị thanh điều hướng trên di động", @@ -4148,10 +3547,6 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@findYourPeople": { "type": "String", "placeholders": {} @@ -4160,22 +3555,10 @@ "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@pinMessages": { "type": "String", "placeholders": {} @@ -4226,9 +3609,7 @@ "maxFifty": "Tối đa 50", "activities": "Hoạt động", "access": "Truy cập", - "botSettings": "Cài đặt bot", "activitySuggestionTimeoutMessage": "Chúng tôi đang làm việc chăm chỉ để tạo ra các hoạt động cho bạn, vui lòng quay lại sau một phút", - "accessSettingsWarning": "Ôi! Có vẻ như bạn không có quyền thiết lập các quy tắc Truy cập của phòng này. Bạn nên kiểm tra những điều này để đảm bảo chúng là những gì bạn cần và nói chuyện với quản trị viên phòng nếu bạn cần thay đổi chúng", "private": "Riêng tư", "cannotBeFoundInSearch": "Không thể tìm thấy trong tìm kiếm", "public": "Công khai", @@ -4238,14 +3619,6 @@ "canBeFoundViaKnock": "• yêu cầu tham gia và sự chấp thuận của quản trị viên", "youHaveLeveledUp": "Bạn đã nâng cấp!", "sendActivities": "Gửi hoạt động", - "getStartedBotChatDesc": "Trò chuyện với AI là một nơi tuyệt vời để bắt đầu và các công cụ đọc, viết, nghe và nói của Pangea giúp điều đó dễ dàng!", - "getStartedCommunitiesDesc": "Học tập với một cộng đồng là nơi Pangea Chat tỏa sáng!\nBạn có thể tham gia lớp học của mình, tìm một trường học, hoặc thậm chí tạo riêng cho mình!", - "getStartedFriendsDesc": "Bạn có một người bạn muốn học cùng bạn không?", - "getStartedBotChatComplete": "Tuyệt vời! Bạn đang trò chuyện với bot!", - "getStartedComplete": "Bạn đã hoàn thành phần này!\nTiếp tục khám phá các tính năng tuyệt vời của chúng tôi bằng cách trò chuyện với bạn bè!", - "getStartedFriendsComplete": "Woohoo! Bạn đã có bạn bè! 😉", - "getStartedBotChatButton": "Bắt đầu trò chuyện!", - "getStartedFriendsButton": "Trò chuyện với một người bạn", "groupChat": "Nhóm trò chuyện", "directMessage": "Tin nhắn trực tiếp", "newDirectMessage": "Tin nhắn trực tiếp mới", @@ -4258,7 +3631,6 @@ "mySavedActivities": "Các hoạt động đã lưu của tôi", "noSavedActivities": "Không có hoạt động nào đã lưu", "saveActivity": "Lưu hoạt động này", - "yourSavedActivities": "Các hoạt động đã lưu", "failedToPlayVideo": "Không thể phát video", "done": "Xong", "myContacts": "Danh bạ của tôi", @@ -4328,18 +3700,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@private": { "type": "String", "placeholders": {} @@ -4376,38 +3740,6 @@ "type": "String", "placeholders": {} }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -4456,10 +3788,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -4602,7 +3930,6 @@ "noSpaceDescriptionYet": "Chưa tạo mô tả khóa học nào.", "knockSpaceSuccess": "Bạn đã yêu cầu tham gia khóa học này! Quản trị viên sẽ phản hồi yêu cầu của bạn khi họ nhận được 😀", "enterSpaceCode": "Nhập mã khóa học", - "joinSpaceOnboardingDesc": "Bạn có mã mời hoặc liên kết đến một khóa học công khai không?", "spaceChildPermission": "Ai có thể thêm cuộc trò chuyện mới vào khóa học này", "deleteSpaceDesc": "Khóa học và bất kỳ cuộc trò chuyện nào đã chọn sẽ bị xóa cho tất cả các thành viên và tất cả các tin nhắn trong cuộc trò chuyện sẽ không còn khả dụng để thực hành hoặc phân tích học tập. Hành động này không thể hoàn tác.", "configureSpace": "Cấu hình khóa học", @@ -4610,7 +3937,6 @@ "howSpaceCanBeFound": "Khóa học này có thể được tìm thấy như thế nào", "visibleToCommunity": "Hiển thị cho cộng đồng Chat Pangea rộng hơn qua \"Tìm khóa học\"", "howSpaceCanBeJoined": "Khóa học này có thể được tham gia như thế nào", - "getStartedCommunitiesComplete": "Tuyệt vời, bạn đã tham gia một khóa học!", "aUserIsKnocking": "Có 1 người dùng đang yêu cầu tham gia khóa học của bạn", "usersAreKnocking": "{users} người dùng đang yêu cầu tham gia khóa học của bạn", "deleteEmptySpaceDesc": "Khóa học sẽ bị xóa cho tất cả các thành viên. Hành động này không thể hoàn tác.", @@ -4630,37 +3956,27 @@ "maximumActivityParticipants": "Mỗi hoạt động có tối đa {count} người tham gia.", "pending": "Đang chờ", "inactive": "Không hoạt động", - "unjoinedActivityMessage": "Bạn có muốn tham gia không? Chọn vai trò mở!\nHoặc tụ tập và xem chương trình!", - "fullActivityMessage": "Thoải mái xem chương trình! Trong khi không có vai trò mở để tham gia, bạn có thể xem cuộc trò chuyện!", "confirmRole": "Xác nhận vai trò", "openRoleLabel": "MỞ", "joinedTheActivity": "👋 {username} đã tham gia với vai trò {role}", "finishedTheActivity": "🎯 {username} đã kết thúc hoạt động này", - "endActivityTitle": "Tôi đã xong", - "endActivityDesc": "Bạn đã hoàn thành các mục tiêu chưa?\nĐây là xác nhận của bạn rằng bạn đang rút lui khỏi việc nhắn tin. Nhưng đừng lo, niềm vui vẫn tiếp tục trong cuộc trò chuyện! Hãy thoải mái tụ tập và thưởng thức chương trình cho đến khi mọi người nhấn 'Xong'.", "archiveToAnalytics": "Thêm vào các hoạt động đã hoàn thành của tôi", "activitySummaryError": "Không thể lấy tóm tắt hoạt động", "requestSummaries": "Yêu cầu tóm tắt", - "loadingActivitySummary": "Đang tải tóm tắt hoạt động...", "generatingNewActivities": "Bạn là người dùng đầu tiên của cặp ngôn ngữ này! Vui lòng chờ một phút, chúng tôi đang chuẩn bị hoạt động dành riêng cho bạn.", - "requestAccessTitle": "Yêu cầu quyền truy cập xem phân tích?", + "requestAccessTitle": "Yêu cầu quyền truy cập phân tích?", "requestAccessDesc": "Bạn có muốn yêu cầu quyền truy cập để xem phân tích người tham gia?\n\nNếu các người tham gia đồng ý, quản trị viên của khóa học này sẽ có thể xem:\n • tổng số từ vựng\n • tổng số khái niệm ngữ pháp\n • tổng số phiên hoạt động đã hoàn thành\n • các khái niệm ngữ pháp cụ thể đã sử dụng, đúng và sai\n\nHọ sẽ không thể xem:\n • tin nhắn trong các cuộc trò chuyện ngoài khóa học\n • danh sách từ vựng", "requestAccess": "Yêu cầu quyền truy cập ({count})", "analyticsInactiveTitle": "Không thể gửi yêu cầu tới người dùng không hoạt động", "analyticsInactiveDesc": "Người dùng không hoạt động kể từ khi tính năng này được giới thiệu sẽ không thấy yêu cầu của bạn.\n\nNút Yêu cầu sẽ xuất hiện khi họ trở lại. Bạn có thể gửi lại yêu cầu sau bằng cách nhấn nút Yêu cầu dưới tên của họ khi nó khả dụng.", "accessRequestedTitle": "Yêu cầu truy cập phân tích", - "accessRequestedDesc": "Quản trị viên của “{space}” đang yêu cầu xem phân tích học tập của bạn.\n\nNếu bạn đồng ý, quản trị viên của khóa học này sẽ có thể xem:\n • tổng số từ vựng\n • tổng số khái niệm ngữ pháp\n • tổng số phiên hoạt động đã hoàn thành\n • các khái niệm ngữ pháp cụ thể đã sử dụng, đúng và sai\n\nHọ sẽ không thể xem:\n • tin nhắn trong các cuộc trò chuyện ngoài khóa học\n • danh sách từ vựng", - "allowAccess": "Cho phép truy cập", - "denyAccess": "Từ chối truy cập", + "accessRequestedDesc": "Yêu cầu quản trị viên: {admin} \n\nCác quản trị viên từ “{space}” đang yêu cầu xem phân tích học tập của bạn.\n\nNếu bạn đồng ý, họ sẽ có thể xem:\n • tổng số từ vựng\n • tổng số khái niệm ngữ pháp\n • tổng số phiên hoạt động đã hoàn thành\n • các khái niệm ngữ pháp cụ thể đã sử dụng, đúng và sai\n\nHọ sẽ không thể xem:\n • tin nhắn trong các cuộc trò chuyện bên ngoài khóa học\n • danh sách từ vựng", "adminRequestedAccess": "Quản trị viên yêu cầu xem phân tích của bạn.", "lastUpdated": "Cập nhật\n{time}", "activityFinishedMessage": "Hoàn tất!", "endForAll": "Kết thúc cho tất cả", "newCourse": "Khóa học mới", - "newCourseSubtitle": "Bạn muốn sử dụng kế hoạch khóa học nào?", - "failedToLoadCourses": "Không thể tải khóa học", "numModules": "{num} mô-đun", - "numActivityPlans": "{num} kế hoạch hoạt động", "coursePlan": "Kế hoạch khóa học", "editCourseLater": "Bạn có thể chỉnh sửa tiêu đề mẫu, mô tả và hình ảnh khóa học sau.", "newCourseAccess": "Theo mặc định, các khóa học là riêng tư và yêu cầu sự chấp thuận của quản trị viên để tham gia. Bạn có thể chỉnh sửa các cài đặt này bất cứ lúc nào.", @@ -4674,17 +3990,11 @@ "accessDesc": "Bạn có thể làm cho khóa học của mình mở cho thế giới! Hoặc, làm cho khóa học của bạn riêng tư và an toàn.", "createGroupChatDesc": "Trong khi các phiên hoạt động bắt đầu và kết thúc, nhóm trò chuyện sẽ luôn mở để giao tiếp định kỳ.", "deleteDesc": "Chỉ quản trị viên mới có thể xóa khóa học. Đây là hành động phá hủy, sẽ xóa tất cả người dùng và tất cả các cuộc trò chuyện đã chọn trong khóa học. Hãy cẩn thận khi thực hiện.", - "failedToLoadCourseInfo": "Không thể tải thông tin khóa học", "noCourseFound": "Ôi, khóa học này cần có kế hoạch!\n\nKế hoạch khóa học là một chuỗi các chủ đề và hoạt động trò chuyện.", "additionalParticipants": "+ {num} người khác", - "activityNotFoundForCourse": "Hoạt động này không được tìm thấy trong khóa học", - "courseChats": "Các cuộc trò chuyện của khóa học", - "myActivitySessions": "Các phiên hoạt động của tôi", "directMessages": "Tin nhắn trực tiếp", "whatNow": "Bây giờ làm gì?", "chooseNextActivity": "Chọn hoạt động tiếp theo của bạn!", - "seeInstructions": "Xem hướng dẫn", - "hideInstructions": "Ẩn hướng dẫn", "letsGo": "Đi nào", "chooseRole": "Chọn vai trò!", "chooseRoleToParticipate": "Chọn vai trò để tham gia!", @@ -4694,23 +4004,15 @@ "inviteFriends": "Mời bạn bè", "waitNotDone": "Chờ tôi chưa xong!", "waitingForOthersToFinish": "Đang chờ những người khác hoàn thành...", - "saveToCompletedActivities": "Lưu vào hoạt động đã hoàn thành", "generatingSummary": "Phân tích cuộc trò chuyện và tạo kết quả", - "instructionsLanguage": "Ngôn ngữ hướng dẫn", "findCourse": "Tìm khóa học", - "activityCompletedDesc": "Hoạt động đã hoàn thành của bạn đã được thêm vào phân tích để bạn có thể xem lại và luyện tập ngôn ngữ đã sử dụng.", "pingParticipantsNotification": "{user} đang tìm kiếm người dùng để tham gia phiên hoạt động trong {room}", "course": "Khóa học", "courses": "Các khóa học", "courseName": "Tên khóa học", "createNewCourse": "Khóa học mới", - "publicCourses": "Các khóa học công khai", "goToCourse": "Đi tới khóa học: {course}", "activityComplete": "Hoạt động này đã hoàn thành. Tóm tắt hoạt động sẽ có sẵn bên dưới.", - "haventChattedMuch": "Có vẻ bạn chưa trò chuyện nhiều, hãy thử sử dụng nhiều từ vựng hơn! Nếu bạn cảm thấy đã hoàn thành mục tiêu, bạn có thể kết thúc hoạt động bên dưới.", - "haveChatted": "Có vẻ bạn đã trò chuyện một thời gian rồi! Nếu bạn cảm thấy đã hoàn thành mục tiêu, hãy kết thúc để hoàn tất hoạt động và chúng tôi sẽ tạo cho bạn một bản tóm tắt trong cuộc trò chuyện!", - "userDoneAndWaiting": "{num1}/{num2} người tham gia đã kết thúc. Chờ mọi người hoàn thành, chúng tôi sẽ tạo cho bạn một bản tóm tắt trong cuộc trò chuyện! \n\nNếu bạn muốn tham gia lại cuộc trò chuyện, nhấn nút tiếp tục trong cuộc trò chuyện.", - "othersDoneAndWaiting": "{num1}/{num2} đã hoàn thành. Bạn đã hoàn thành mục tiêu của mình chưa?", "startNewSession": "Bắt đầu phiên mới", "joinOpenSession": "Tham gia phiên mở", "less": "ít hơn", @@ -4720,7 +4022,6 @@ "openToJoin": "Mở để tham gia", "results": "Kết quả", "activityDone": "Hoạt động hoàn thành!", - "moreLabel": "xem thêm", "promoCodeInfo": "Mã khuyến mãi có thể nhập ở trang tiếp theo", "editsComingSoon": "Khả năng chỉnh sửa thành phố và hoạt động sẽ sớm ra mắt.", "editing": "Đang chỉnh sửa", @@ -4736,13 +4037,10 @@ "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ữ", - "chooseLanguage": "Chọn một ngôn ngữ.", + "chooseLanguage": "Chọn một ngôn ngữ mục tiêu.", "planTrip": "Lập kế hoạch chuyến đi", "howAreYouTraveling": "Bạn đi du lịch bằng phương tiện gì?", "unlockPrivateTrip": "Mở khóa chuyến đi riêng tư", @@ -4755,25 +4053,20 @@ "courseCode": "Mật khẩu bí mật là gì?", "courseCodeHint": "Mã chuyến đi hoặc liên kết", "unlockMyTrip": "Mở khóa chuyến đi của tôi", - "anyLevel": "Bất kỳ trình độ nào", "signupOption": "Bạn muốn đăng ký như thế nào?", "withApple": "Với Apple", "withGoogle": "Với Google", "withEmail": "Với Email", "createAccount": "Tạo tài khoản", - "noCoursesFound": "Không tìm thấy khóa học", "loginWithEmail": "Đăng nhập bằng email", "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ữ", - "allCefrLevels": "Tất cả các trình độ CEFR", "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.", "directMessageBotTitle": "Tin nhắn trực tiếp với Pangea Bot", "feedbackTitle": "Phản hồi hoạt động", - "feedbackDesc": "Hoạt động nên được cải thiện như thế nào? Nếu bạn có thể cung cấp một số chi tiết, chúng tôi sẽ thực hiện thay đổi!", "feedbackHint": "Phản hồi của bạn", "feedbackButton": "Gửi phản hồi", "directMessageBotDesc": "Nói chuyện với con người thì vui hơn nhưng... AI luôn sẵn sàng!", @@ -4835,10 +4128,6 @@ "type": "String", "placeholders": {} }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@spaceChildPermission": { "type": "String", "placeholders": {} @@ -4867,10 +4156,6 @@ "type": "String", "placeholders": {} }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, "@aUserIsKnocking": { "type": "String", "placeholders": {} @@ -4962,14 +4247,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -4997,14 +4274,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -5017,10 +4286,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -5056,19 +4321,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -5093,14 +4353,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -5109,14 +4361,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -5169,10 +4413,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -5185,18 +4425,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -5209,14 +4437,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -5257,26 +4477,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -5304,10 +4512,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -5318,36 +4522,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -5384,10 +4558,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -5452,18 +4622,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -5528,10 +4686,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -5552,10 +4706,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -5572,10 +4722,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -5584,10 +4730,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -5600,10 +4742,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -5628,16 +4766,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "Mời bạn bè tham gia hoạt động", - "inviteFriendsToActivityCourse": "Mời bạn bè tham gia hoạt động và khóa học", "feedbackRespDesc": "Kiểm tra lại vào ngày mai để cập nhật hoạt động.", "activityDropdownDesc": "Khi bạn hoàn thành hoạt động này, nhấn vào bên dưới", - "activityAnalyticsListBody": "Đây là các hoạt động bạn đã hoàn thành! Sau khi hoàn thành các hoạt động, bạn có thể xem chúng tại đây.", "languageMismatchTitle": "Không khớp ngôn ngữ", "languageMismatchDesc": "Ngôn ngữ mục tiêu của bạn không khớp với ngôn ngữ của hoạt động này. Cập nhật ngôn ngữ mục tiêu của bạn?", "reportWordIssueTooltip": "Báo cáo vấn đề về thông tin từ", "tokenInfoFeedbackDialogTitle": "Phản hồi Thông tin Từ", - "tokenInfoFeedbackDialogDesc": "AI có thể mắc lỗi. Vui lòng mô tả bất kỳ vấn đề nào bạn gặp phải với thông tin trên.", "noPublicCoursesFound": "Không tìm thấy khóa học công khai. Bạn có muốn tạo một khóa học không?", "noCourseTemplatesFound": "Chúng tôi không thể tìm thấy bất kỳ khóa học nào phù hợp với ngôn ngữ mục tiêu của bạn. Trong thời gian chờ, bạn có thể trò chuyện với Pangea Bot và quay lại sau để xem thêm các khóa học.", "botActivityJoinFailMessage": "Pangea Bot đang phản hồi chậm. Vui lòng thử lại sau hoặc mời bạn bè tham gia.", @@ -5645,14 +4779,6 @@ "leaveDesc": "Rời khỏi không gian này và tất cả các cuộc trò chuyện trong đó", "selectAll": "Chọn tất cả", "deselectAll": "Bỏ chọn tất cả", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -5661,10 +4787,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -5681,10 +4803,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -5719,7 +4837,6 @@ "newMessageInPangeaChat": "🔊 Tin nhắn mới trong Pangea Chat", "shareCourse": "Chia sẻ khóa học", "addCourse": "Thêm khóa học", - "joinCourseWithCode": "Tham gia khóa học bằng mã", "joinPublicCourse": "Tham gia khóa học công khai", "vocabLevelsDesc": "Đây là nơi các từ vựng sẽ xuất hiện sau khi bạn nâng cấp chúng!", "highlightVocabTooltip": "Đánh dấu các từ vựng mục tiêu bên dưới bằng cách gửi chúng hoặc thực hành với chúng trong trò chuyện", @@ -5747,10 +4864,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -5759,7 +4872,1221 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "@languageLevelPreA1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelA1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelA2": { + "type": "String", + "placeholders": {} + }, + "@languageLevelB1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelB2": { + "type": "String", + "placeholders": {} + }, + "@languageLevelC1": { + "type": "String", + "placeholders": {} + }, + "@languageLevelC2": { + "type": "String", + "placeholders": {} + }, + "emptyChatSearch": "Không tìm thấy tin nhắn trực tiếp hoặc trò chuyện nào. Hãy chắc chắn rằng bạn đã đánh vần đúng tìm kiếm.", + "activityAnalyticsTooltipBody": "Đây là các hoạt động đã lưu của bạn để xem xét và thực hành.", + "numSavedActivities": "Số lượng hoạt động đã lưu", + "saveActivityTitle": "Lưu hoạt động", + "saveActivityDesc": "Làm tốt lắm! Lưu hoạt động này để xem xét và thực hành sau.", + "levelInfoTooltip": "Tại đây bạn có thể thấy tất cả các điểm bạn đã kiếm được và cách thức!", + "alreadyInCourseWithID": "Bạn đã tham gia một khóa học với kế hoạch này. Bạn có muốn tạo một khóa học với cùng kế hoạch, hay đi đến khóa học hiện có?", + "goToExistingCourse": "Đi đến khóa học hiện có", + "emojiView": "Chế độ xem biểu tượng cảm xúc", + "feedbackDialogDesc": "Tôi cũng mắc lỗi! Có điều gì để giúp tôi cải thiện không?", + "contactHasBeenInvitedToTheCourse": "Liên hệ đã được mời tham gia khóa học", + "activityStatsButtonTooltip": "Thông tin hoạt động", + "allow": "Cho phép", + "deny": "Từ chối", + "enabledRenewal": "Kích hoạt gia hạn đăng ký", + "subscriptionEndsOn": "Đăng ký kết thúc vào", + "subscriptionRenewsOn": "Đăng ký gia hạn vào", + "waitForSubscriptionChanges": "Các thay đổi đối với đăng ký của bạn có thể mất một chút thời gian để phản ánh trong ứng dụng.", + "subscribeReadingAssistance": "Đăng ký để mở khóa công cụ nhắn tin", + "aceDisplayName": "Achinese", + "achDisplayName": "Acoli", + "afDisplayName": "Afrikaans", + "akDisplayName": "Akan", + "alzDisplayName": "Alur", + "amDisplayName": "Amharic", + "arDisplayName": "Tiếng Ả Rập", + "asDisplayName": "Assamese", + "awaDisplayName": "Awadhi", + "ayDisplayName": "Aymara", + "azDisplayName": "Azerbaijani", + "baDisplayName": "Bashkir", + "banDisplayName": "Người Bali", + "bbcDisplayName": "Batak Toba", + "beDisplayName": "Người Belarus", + "bemDisplayName": "Bemba", + "bewDisplayName": "Betawi", + "bgDisplayName": "Người Bulgaria", + "bhoDisplayName": "Bhojpuri", + "bikDisplayName": "Bikol", + "bmDisplayName": "Bambara", + "bnDisplayName": "Bengali", + "bnBDDisplayName": "Bengali (Bangladesh)", + "bnINDisplayName": "Bengali (Ấn Độ)", + "brDisplayName": "Breton", + "bsDisplayName": "Bosnia", + "btsDisplayName": "Batak Simalungun", + "btxDisplayName": "Batak Karo", + "buaDisplayName": "Buriat", + "caDisplayName": "Catalan", + "cebDisplayName": "Cebuano", + "cggDisplayName": "Chiga", + "chmDisplayName": "Mari", + "ckbDisplayName": "Người Kurd Trung", + "cnhDisplayName": "Hakha Chin", + "coDisplayName": "Corsican", + "crhDisplayName": "Tiếng Thổ Nhĩ Kỳ Krym", + "crsDisplayName": "Tiếng Pháp Creole Seselwa", + "csDisplayName": "Tiếng Séc", + "cvDisplayName": "Chuvash", + "cyDisplayName": "Tiếng Wales", + "daDisplayName": "Đan Mạch", + "deDisplayName": "Đức", + "dinDisplayName": "Dinka", + "doiDisplayName": "Dogri", + "dovDisplayName": "Dombe", + "dzDisplayName": "Dzongkha", + "eeDisplayName": "Ewe", + "enDisplayName": "Tiếng Anh", + "enAUDisplayName": "Tiếng Anh (Úc)", + "enGBDisplayName": "Tiếng Anh (Vương quốc Anh)", + "enINDisplayName": "Tiếng Anh (Ấn Độ)", + "enUSDisplayName": "Tiếng Anh (Mỹ)", + "eoDisplayName": "Esperanto", + "esDisplayName": "Tiếng Tây Ban Nha", + "esESDisplayName": "Tiếng Tây Ban Nha (Tây Ban Nha)", + "esMXDisplayName": "Tiếng Tây Ban Nha (Mexico)", + "euDisplayName": "Basque", + "faDisplayName": "Tiếng Ba Tư", + "ffDisplayName": "Fulah", + "fiDisplayName": "Tiếng Phần Lan", + "filDisplayName": "Tiếng Filipino", + "fjDisplayName": "Tiếng Fijian", + "foDisplayName": "Tiếng Faroese", + "frDisplayName": "Tiếng Pháp", + "frCADisplayName": "Tiếng Pháp (Canada)", + "frFRDisplayName": "Tiếng Pháp (Pháp)", + "fyDisplayName": "Tiếng Frisian phương Tây", + "gaDisplayName": "Tiếng Ireland", + "gaaDisplayName": "Tiếng Ga", + "gdDisplayName": "Tiếng Gaelic Scotland", + "glDisplayName": "Galician", + "gnDisplayName": "Guarani", + "gomDisplayName": "Goan Konkani", + "guDisplayName": "Gujarati", + "haDisplayName": "Hausa", + "hawDisplayName": "Hawaiian", + "heDisplayName": "Hebrew", + "hiDisplayName": "Hindi", + "hilDisplayName": "Hiligaynon", + "hmnDisplayName": "Hmong", + "hneDisplayName": "Chhattisgarhi", + "hrDisplayName": "Tiếng Croatia", + "hrxDisplayName": "Hunsrik", + "htDisplayName": "Tiếng Creole Haiti", + "huDisplayName": "Tiếng Hungary", + "hyDisplayName": "Tiếng Armenia", + "idDisplayName": "Tiếng Indonesia", + "igDisplayName": "Tiếng Igbo", + "iloDisplayName": "Tiếng Iloko", + "isDisplayName": "Tiếng Iceland", + "itDisplayName": "Tiếng Ý", + "jaDisplayName": "Tiếng Nhật", + "jvDisplayName": "Tiếng Java", + "kaDisplayName": "Tiếng Gruzia", + "kkDisplayName": "Tiếng Kazakh", + "kmDisplayName": "Tiếng Khmer", + "knDisplayName": "Tiếng Kannada", + "koDisplayName": "Tiếng Hàn", + "kokDisplayName": "Tiếng Konkani", + "kriDisplayName": "Tiếng Krio", + "ksDisplayName": "Kashmiri", + "ktuDisplayName": "Kituba (Cộng hòa Dân chủ Congo)", + "kuDisplayName": "Kurdish", + "kyDisplayName": "Kyrgyz", + "laDisplayName": "Latin", + "lbDisplayName": "Luxembourgish", + "lgDisplayName": "Ganda", + "liDisplayName": "Limburgish", + "lijDisplayName": "Ligurian", + "lmoDisplayName": "Lombard", + "lnDisplayName": "Lingala", + "loDisplayName": "Lào", + "ltDisplayName": "Tiếng Litva", + "ltgDisplayName": "Tiếng Latgalian", + "luoDisplayName": "Luo (Kenya và Tanzania)", + "lusDisplayName": "Mizo", + "lvDisplayName": "Tiếng Latvia", + "maiDisplayName": "Maithili", + "makDisplayName": "Makasar", + "mgDisplayName": "Tiếng Malagasy", + "miDisplayName": "Māori", + "minDisplayName": "Minangkabau", + "mkDisplayName": "Macedonian", + "mlDisplayName": "Malayalam", + "mnDisplayName": "Mông Cổ", + "mniDisplayName": "Manipuri", + "mrDisplayName": "Marathi", + "msDisplayName": "Malaixia", + "msArabDisplayName": "Malaixia (Ả Rập)", + "msMYDisplayName": "Malaixia (Malaysia)", + "mtDisplayName": "Maltese", + "mwrDisplayName": "Marwari", + "myDisplayName": "Burmese", + "nanDisplayName": "Min Nan", + "nbDisplayName": "Na Uy (Bokmål)", + "neDisplayName": "Nepali", + "newDisplayName": "Newari", + "nlDisplayName": "Hà Lan", + "nlBEDisplayName": "Flemish", + "noDisplayName": "Na Uy", + "nrDisplayName": "Nam Ndebele", + "nsoDisplayName": "Sotho Bắc", + "nusDisplayName": "Nuer", + "nyDisplayName": "Nyanja", + "ocDisplayName": "Occitan", + "omDisplayName": "Oromo", + "orDisplayName": "Odia", + "paDisplayName": "Punjabi", + "paArabDisplayName": "Punjabi (Shahmukhi)", + "paINDisplayName": "Punjabi (Gurmukhi)", + "pagDisplayName": "Pangasinan", + "pamDisplayName": "Pampanga", + "papDisplayName": "Papiamento", + "plDisplayName": "Tiếng Ba Lan", + "psDisplayName": "Tiếng Pashto", + "ptDisplayName": "Tiếng Bồ Đào Nha", + "ptBRDisplayName": "Tiếng Bồ Đào Nha (Brazil)", + "ptPTDisplayName": "Tiếng Bồ Đào Nha (Bồ Đào Nha)", + "quDisplayName": "Tiếng Quechua", + "rajDisplayName": "Tiếng Rajasthan", + "rnDisplayName": "Rundi", + "roDisplayName": "Tiếng Romania", + "roMDDisplayName": "Tiếng Moldova", + "romDisplayName": "Tiếng Romani", + "ruDisplayName": "Tiếng Nga", + "rwDisplayName": "Tiếng Kinyarwanda", + "saDisplayName": "Tiếng Sanskrit", + "satDisplayName": "Tiếng Santali", + "scnDisplayName": "Tiếng Sicilian", + "sdDisplayName": "Tiếng Sindhi", + "sgDisplayName": "Sango", + "shnDisplayName": "Shan", + "siDisplayName": "Sinhala", + "skDisplayName": "Slovak", + "slDisplayName": "Slovenian", + "smDisplayName": "Samoan", + "snDisplayName": "Shona", + "soDisplayName": "Somali", + "sqDisplayName": "Albanian", + "srDisplayName": "Serbian", + "srMEDisplayName": "Montenegro", + "ssDisplayName": "Swati", + "stDisplayName": "Sotho miền Nam", + "suDisplayName": "Sundanese", + "svDisplayName": "Thụy Điển", + "swDisplayName": "Swahili", + "szlDisplayName": "Silesian", + "taDisplayName": "Tamil", + "teDisplayName": "Telugu", + "tetDisplayName": "Tetum", + "tgDisplayName": "Tajik", + "thDisplayName": "Thái", + "tiDisplayName": "Tigrinya", + "tkDisplayName": "Turkmen", + "tlDisplayName": "Tagalog", + "tnDisplayName": "Tswana", + "trDisplayName": "Thổ Nhĩ Kỳ", + "tsDisplayName": "Tsonga", + "ttDisplayName": "Tatar", + "ugDisplayName": "Uyghur", + "ukDisplayName": "Tiếng Ukraina", + "urDisplayName": "Tiếng Urdu", + "urINDisplayName": "Tiếng Urdu (Ấn Độ)", + "urPKDisplayName": "Tiếng Urdu (Pakistan)", + "uzDisplayName": "Tiếng Uzbek", + "viDisplayName": "Tiếng Việt", + "wuuDisplayName": "Tiếng Wu", + "xhDisplayName": "Tiếng Xhosa", + "yiDisplayName": "Tiếng Yiddish", + "yoDisplayName": "Tiếng Yoruba", + "yuaDisplayName": "Yucateco", + "yueDisplayName": "Tiếng Quảng Đông", + "yueCNDisplayName": "Tiếng Quảng Đông (Trung Quốc)", + "yueHKDisplayName": "Tiếng Quảng Đông (Hồng Kông)", + "zhDisplayName": "Tiếng Trung", + "zhCNDisplayName": "Tiếng Trung (Giản thể)", + "zhTWDisplayName": "Tiếng Trung (Phồn thể)", + "zuDisplayName": "Tiếng Zulu", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -5826,6 +6153,7 @@ "notStartedActivitiesTitle": "Phiên mở ({num})", "inProgressActivitiesTitle": "Đang diễn ra ({num})", "completedActivitiesTitle": "Đã hoàn thành ({num})", + "pickDifferentActivity": "Chọn một hoạt động khác", "inOngoingActivity": "Bạn có một hoạt động đang diễn ra!", "@notStartedActivitiesTitle": { "type": "String", @@ -5851,10 +6179,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ngôn ngữ mục tiêu của bạn không khớp với thông điệp này. Cập nhật ngôn ngữ mục tiêu của bạn?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "Đây là tất cả mọi người trong khóa học này. Nhấp vào avatar của bất kỳ người dùng nào và \"bắt đầu cuộc trò chuyện\" để gửi tin nhắn trực tiếp.", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "Từ vựng này sẽ bị xóa vĩnh viễn khỏi phân tích của bạn", + "woman": "Phụ nữ", + "man": "Nam", + "otherGender": "Khác", + "unselectedGender": "Chọn một tùy chọn giới tính", + "gender": "Giới tính", + "chatParticipantTooltip": "Đây là tất cả mọi người trong cuộc trò chuyện này. Nhấp vào avatar của bất kỳ người dùng nào và \"bắt đầu cuộc trò chuyện\" để gửi tin nhắn trực tiếp.", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "Công cụ học tập bị vô hiệu hóa cho các tin nhắn không phải bằng ngôn ngữ mục tiêu của bạn.", + "vocabEmoji": "Biểu tượng từ vựng", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "Yêu cầu tái tạo", + "optionalRegenerateReason": "(Tùy chọn) Lý do", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "Bạn đã đặt biểu tượng cảm xúc cho {lemma}! Chúng tôi sẽ sử dụng biểu tượng cảm xúc này để đại diện cho từ trong các hoạt động thực hành trong tương lai.", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "Đang chờ hoàn tất đăng nhập", + "ssoDialogDesc": "Chúng tôi đã mở một tab mới để bạn có thể đăng nhập một cách an toàn.", + "ssoDialogHelpText": "🤔 Nếu bạn không thấy tab mới, vui lòng kiểm tra trình chặn popup của bạn.", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "Vô hiệu hóa công cụ ngôn ngữ", + "disableLanguageToolsDesc": "Bạn có muốn vô hiệu hóa trợ giúp ngôn ngữ tự động không?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "Quyền truy cập bị từ chối. Bật quyền ghi âm để ghi lại tin nhắn âm thanh.", + "genericWebRecordingError": "Có điều gì đó không đúng. Chúng tôi khuyên bạn nên sử dụng trình duyệt Chrome khi ghi lại tin nhắn.", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "Để có trải nghiệm tốt nhất khi sử dụng ứng dụng này, vui lòng mở rộng kích thước màn hình của bạn.", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "Các hoạt động để mở khóa chủ đề tiếp theo", "activitiesToUnlockTopicDesc": "Đặt số lượng hoạt động để mở khóa chủ đề khóa học tiếp theo", "@activitiesToUnlockTopicTitle": { @@ -5864,5 +6310,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "Thực hành định nghĩa từ vựng đúng", + "constructUseIncLMDesc": "Thực hành định nghĩa từ vựng sai", + "constructUseCorLADesc": "Thực hành âm thanh từ vựng đúng", + "constructUseIncLADesc": "Thực hành âm thanh từ vựng sai", + "constructUseBonus": "Thưởng trong quá trình thực hành từ vựng", + "practiceVocab": "Thực hành từ vựng", + "selectMeaning": "Chọn nghĩa", + "selectAudio": "Chọn âm thanh phù hợp", + "congratulations": "Chúc mừng!", + "anotherRound": "Một vòng nữa", + "noActivityRequest": "Không có yêu cầu hoạt động nào hiện tại.", + "quit": "Thoát", + "congratulationsYouveCompletedPractice": "Chúc mừng! Bạn đã hoàn thành buổi thực hành.", + "mustHave10Words": "Bạn phải có ít nhất 10 từ vựng để thực hành. Hãy thử nói chuyện với một người bạn hoặc Pangea Bot để khám phá thêm!", + "botSettings": "Cài đặt Bot", + "activitySettingsOverrideWarning": "Ngôn ngữ và cấp độ ngôn ngữ được xác định bởi kế hoạch hoạt động", + "voice": "Giọng nói", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index ec477fd55..8684f06a8 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -710,28 +710,16 @@ "commandHint_logoutall": "登出所有活躍裝置", "displayNavigationRail": "在手機上顯示導航欄", "customReaction": "自定義反應", - "accountInformation": "帳戶資訊", - "addGroupDescription": "添加聊天描述", - "addNewFriend": "添加新朋友", - "alreadyHaveAnAccount": "已經有帳戶?", - "createNewGroup": "建立新聊天", - "editChatPermissions": "編輯聊天權限", "ignore": "封鎖", "ignoredUsers": "已封鎖的用戶", "writeAMessageLangCodes": "輸入 {l1} 或 {l2}...", "requests": "請求", - "allCorrect": "我就會咁講!好嘢!", - "newWayAllGood": "呢個唔係我平時講嘅方式,但睇落都唔錯!", - "othersAreBetter": "嗯,可能有更好嘅講法。", "holdForInfo": "按住睇字詞資料。", "greenFeedback": "呢個係我會用嘅!", "yellowFeedback": "嗯,你可以試下咁講睇睇!要用呢個字,只需再次點擊。", "redFeedback": "我覺得唔啱...", "itInstructionsTitle": "我可以幫你翻譯!", "itInstructionsBody": "你可以按住選擇,睇字詞資料。", - "oneday": "過去24小時", - "oneweek": "過去7日", - "onemonth": "過去一個月", "gaTooltip": "用於語法協助", "taTooltip": "用於翻譯協助", "unTooltip": "其他", @@ -741,58 +729,27 @@ "interactiveTranslatorAllowed": "學生選擇", "interactiveTranslatorRequired": "需要", "notYetSet": "尚未設定", - "myLearning": "我的分析", "waTooltip": "無協助使用 L2", - "changeDateRange": "更改日期範圍", - "classDescription": "描述", - "addStudents": "邀請用戶透過連結或代碼", - "copyClassLink": "複製邀請連結", - "copyClassCode": "複製邀請代碼", - "inviteStudentByUserName": "以用戶名邀請用戶", "languageSettings": "語言設定", "interactiveTranslator": "翻譯協助", - "shareVideo": "分享影片", - "shareVideoDesc": "打開此功能,讓學生可以在聊天中分享影片。", - "shareFiles": "分享檔案", - "selectLanguageLevel": "選擇語言水平", "noIdenticalLanguages": "請選擇不同的基礎語言和目標語言", - "iWantALanguagePartnerFrom": "來自:", - "worldWide": "全球", - "noResults": "沒有結果!請嘗試擴大搜尋範圍。", "searchBy": "按國家和語言搜尋", - "iWantAConversationPartner": "我想要一個對話夥伴,他/她", - "iWantALanguagePartnerWhoSpeaks": "會說:", - "iWantALanguagePartnerWhoIsLearning": "正在學習:", "joinWithClassCode": "加入課程", - "joinWithClassCodeHint": "輸入邀請碼", - "languageLevelPreA1": "真正的初學者(Pre A1)", - "languageLevelA1": "初學者(A1)", - "languageLevelA2": "初級(A2)", - "languageLevelB1": "中級(B1)", - "languageLevelB2": "中高級(B2)", - "languageLevelC1": "高級(C1)", - "languageLevelC2": "精通(C2)", + "languageLevelPreA1": "新手低級 (Pre A1)", + "languageLevelA1": "新手中級 (A1)", + "languageLevelA2": "初學者高級 (A2)", + "languageLevelB1": "中級中 (B1)", + "languageLevelB2": "高級低 (B2)", + "languageLevelC1": "高級中 (C1)", + "languageLevelC2": "卓越 (C2)", "changeTheNameOfTheClass": "更改名稱", "changeTheNameOfTheChat": "更改聊天名稱", - "askPangeaBot": "向Pangea機器人詢問語境定義。", "sorryNoResults": "抱歉,沒有結果。", "ignoreInThisText": "忽略", - "helpMeTranslate": "是的!", - "needsItShortMessage": "超出範圍", "needsItMessage": "等等,嗰唔係 {targetLanguage}!你需要幫手翻譯嗎?", - "needsIgcMessage": "呢個訊息有語法錯誤。", - "tokenTranslationTitle": "一個字喺你嘅基本語言入面。", - "spanTranslationDesc": "睇下下面嘅可能翻譯。", - "spanTranslationTitle": "有啲字喺你嘅基本語言入面。", - "l1SpanAndGrammarTitle": "喺目標語言之外", - "l1SpanAndGrammarDesc": "呢個可能喺你嘅基本語言,或者係語法錯誤。", - "otherTitle": "你有一個錯誤。", - "otherDesc": "睇下下面嘅可能修正。", "countryInformation": "我嘅國家", - "myLanguages": "我嘅基本同目標語言", "targetLanguage": "目標語言", "sourceLanguage": "基本語言", - "languagesISpeak": "我會講嘅語言", "updateLanguage": "我嘅語言", "whatLanguageYouWantToLearn": "你想學咩語言?", "whatIsYourBaseLanguage": "你嘅基本語言係咩?", @@ -807,13 +764,8 @@ "errorDisableLanguageAssistanceUserDesc": "點擊此處更新翻譯協助和文法協助設定", "errorDisableITClassDesc": "此課程的翻譯協助已關閉。", "errorDisableIGCClassDesc": "此課程的文法協助已關閉。", - "itIsDisabled": "互動翻譯已停用", - "igcIsDisabled": "互動文法檢查已停用", - "goToLearningSettings": "前往學習設定", "error405Title": "未設定語言", "error405Desc": "請在主選單 > 學習設定中設定您的語言。", - "loginOrSignup": "使用以下帳號登入", - "iAgreeToThe": "我同意", "termsAndConditions": "條款及細則", "andCertifyIAmAtLeast13YearsOfAge": "並證明我已年滿16歲。", "error502504Title": "哇,線上學生很多!", @@ -821,40 +773,21 @@ "error404Title": "翻譯錯誤!", "error404Desc": "Pangea Bot 唔肯定點樣翻譯嗰個...", "errorPleaseRefresh": "我哋正喺研究緊!請重新載入再試一次。", - "toggleIT": "互動翻譯", - "toggleIGC": "互動語法檢查", - "toggleToolSettingsDescription": "喺呢度你可以切換你嘅個人語言工具設定。", "connectedToStaging": "已連接到測試環境", "learningSettings": "學習設定", - "sendVoiceNotes": "發送語音備忘", - "sendVoiceNotesDesc": "打開呢個功能,讓學生可以喺對話中發送語音備忘。", - "chatTopic": "對話主題", - "chatTopicDesc": "設定一個對話主題", - "inviteStudentByUserNameDesc": "如果你嘅學生已經有帳戶,你可以搜尋佢哋。", "participants": "參與者", - "almostPerfect": "睇嚟冇錯!呢啲係我會講嘅內容。", - "prettyGood": "幾好!呢啲係我會講嘅內容。", - "letMeThink": "嗯,等我睇下你做得點啦!", "clickMessageTitle": "需要幫助?", "clickMessageBody": "點擊一條訊息,使用語言工具,例如翻譯、重播等等!", - "understandingMessagesTitle": "定義同翻譯!", - "understandingMessagesBody": "點擊底下劃線嘅字,睇定義。用訊息選項(右上角)進行翻譯。", "allDone": "全部完成!", "vocab": "詞彙", "low": "我們有證據顯示用戶不理解這些詞語。", "medium": "這些詞已被使用。不清楚用戶是否完全理解這些詞。", "high": "我們有證據顯示用戶理解這些詞。", - "unknownProficiency": "這些詞在Pangea Chat中未被使用。", - "changeView": "切換視圖。", - "clearAll": "清除所有詞語?", - "generateVocabulary": "根據標題和描述生成詞彙", - "generatePrompts": "生成提示", "subscribe": "訂閱", "getAccess": "立即訂閱!", "subscriptionDesc": "訊息傳遞是免費的!訂閱以解鎖互動翻譯、語法檢查和學習分析。", "subscriptionManagement": "訂閱管理", "currentSubscription": "當前訂閱", - "changeSubscription": "更改您的訂閱", "cancelSubscription": "取消您的訂閱", "selectYourPlan": "選擇您的方案", "subsciptionPlatformTooltip": "請在您的原始設備上登入以管理您的訂閱方案", @@ -863,9 +796,6 @@ "paymentHistory": "付款記錄", "emptyChatDownloadWarning": "無法下載空白聊天記錄", "update": "更新", - "updateDesc": "你現在可以將此應用程式從 {localVersion} 更新到 {storeVersion}", - "maybeLater": "稍後再說", - "mainMenu": "主選單", "toggleImmersionMode": "沉浸模式", "toggleImmersionModeDesc": "啟用後,所有訊息將以你的目標語言顯示。此設定在語言交流中特別有用。", "itToggleDescription": "此語言學習工具會識別你基礎語言中的單詞,並幫助你將它們翻譯成目標語言。雖然罕見,但AI可能會出錯。", @@ -880,212 +810,13 @@ "definitionsToolDescription": "啟用後,藍色底線的單詞可以點擊查看定義。點擊訊息以存取定義。", "translationsToolDescrption": "啟用後,點擊訊息和翻譯圖示即可查看你的基礎語言的訊息。", "welcomeBack": "歡迎回來!如果你是2023-2024試點計劃的一部分,請聯繫我們以獲取你的特別試點訂閱。如果你是教師,或者你的機構已為你的班級購買了許可證,請聯繫我們以獲取你的教師訂閱。", - "kickAllStudents": "踢出所有學生", - "kickAllStudentsConfirmation": "你確定要踢出所有學生嗎?", - "inviteAllStudents": "邀請所有學生", - "inviteAllStudentsConfirmation": "你確定要邀請所有學生嗎?", - "inviteUsersFromPangea": "添加管理員", - "redeemPromoCode": "兌換促銷碼", - "enterPromoCode": "輸入促銷碼", "downloadTxtFile": "下載文本文件", "downloadCSVFile": "下載CSV文件", "promotionalSubscriptionDesc": "你目前擁有終身促銷訂閱。如需幫助更改訂閱,請聯繫 support@pangea.chat。", "originalSubscriptionPlatform": "通過 {purchasePlatform} 購買的訂閱", "oneWeekTrial": "一周試用", "downloadXLSXFile": "下載Excel文件", - "abDisplayName": "阿布哈茲語", - "aaDisplayName": "阿法爾語", - "afDisplayName": "南非荷蘭語", - "akDisplayName": "阿坎語", - "sqDisplayName": "阿爾巴尼亞語", - "amDisplayName": "阿姆哈拉語", - "arDisplayName": "阿拉伯語", - "anDisplayName": "阿拉岡語", - "hyDisplayName": "亞美尼亞語", - "asDisplayName": "阿薩姆語", - "avDisplayName": "阿瓦爾語", - "aeDisplayName": "古維斯坦語", - "ayDisplayName": "艾馬拉語", - "azDisplayName": "阿塞拜疆語", - "bmDisplayName": "班巴拉語", - "baDisplayName": "巴什基爾語", - "euDisplayName": "巴斯克語", - "beDisplayName": "白俄羅斯語", - "bnDisplayName": "孟加拉語", - "bhDisplayName": "比哈爾語", - "biDisplayName": "比斯拉馬語", - "bsDisplayName": "波斯尼亞語", - "brDisplayName": "布列塔尼語", - "bgDisplayName": "保加利亞語", - "myDisplayName": "緬甸語", - "caDisplayName": "加泰羅尼亞語,瓦倫西亞語", - "chDisplayName": "查莫羅語", - "ceDisplayName": "車臣語", - "nyDisplayName": "奇切瓦語、契瓦語、尼安查語", - "zhDisplayName": "中文", - "cvDisplayName": "楚瓦什語", - "kwDisplayName": "康沃爾語", - "coDisplayName": "科西嘉語", - "crDisplayName": "克里語", - "hrDisplayName": "克羅地亞語", - "csDisplayName": "捷克語", - "daDisplayName": "丹麥語", - "dvDisplayName": "迪維希語;迪維希語;馬爾代夫語", - "nlDisplayName": "荷蘭語", - "enDisplayName": "英語", - "eoDisplayName": "世界語", - "etDisplayName": "愛沙尼亞語", - "eeDisplayName": "埃維語", - "foDisplayName": "法羅語", - "fjDisplayName": "斐濟語", - "fiDisplayName": "芬蘭語", - "frDisplayName": "法語", - "ffDisplayName": "富拉語;富拉;普拉爾語;普拉爾", - "glDisplayName": "加利西亞語", - "kaDisplayName": "喬治亞語", - "deDisplayName": "德語", - "elDisplayName": "現代希臘語", - "gnDisplayName": "瓜拉尼語", - "guDisplayName": "古吉拉特語", - "htDisplayName": "海地克里奧爾語", - "haDisplayName": "豪薩語", - "heDisplayName": "現代希伯來語", - "hzDisplayName": "赫雷羅語", - "hiDisplayName": "印地語", - "hoDisplayName": "希里莫圖語", - "huDisplayName": "匈牙利語", - "iaDisplayName": "世界語", - "idDisplayName": "印尼語", - "ieDisplayName": "Interlingue", - "gaDisplayName": "愛爾蘭語", - "igDisplayName": "伊博語", - "ikDisplayName": "因努皮亞克語", - "ioDisplayName": "伊多語", - "isDisplayName": "冰島語", - "itDisplayName": "意大利語", - "iuDisplayName": "因努克提特語", - "jaDisplayName": "日語", - "jvDisplayName": "爪哇語", - "klDisplayName": "格陵蘭語", - "knDisplayName": "卡納達語", - "krDisplayName": "卡努里語", - "ksDisplayName": "克什米爾語", - "kkDisplayName": "哈薩克語", - "kmDisplayName": "高棉語", - "kiDisplayName": "基庫尤語", - "rwDisplayName": "魯旺達語", - "kyDisplayName": "吉爾吉斯語", - "kvDisplayName": "科米語", - "kgDisplayName": "剛果語", - "koDisplayName": "韓語", - "kuDisplayName": "庫爾德語", - "kjDisplayName": "坎亞馬語,Kuanyama", - "laDisplayName": "拉丁語", - "lbDisplayName": "盧森堡語,Letzeburgesch", - "lgDisplayName": "盧干達語", - "liDisplayName": "林堡語,Limburgan,Limburger", - "lnDisplayName": "林加拉語", - "loDisplayName": "寮語", - "ltDisplayName": "立陶宛語", - "luDisplayName": "盧巴-坎塔加語", - "lvDisplayName": "拉脫維亞語", - "gvDisplayName": "馬恩島語", - "mkDisplayName": "馬其頓語", - "mgDisplayName": "馬爾加什語", - "msDisplayName": "馬來語", - "mlDisplayName": "馬拉雅拉姆語", - "mtDisplayName": "馬耳他語", - "miDisplayName": "毛利語", - "mrDisplayName": "馬拉地語(馬拉地語)", - "mhDisplayName": "馬歇爾群島語", - "mnDisplayName": "蒙古語", - "naDisplayName": "瑙魯", - "nvDisplayName": "納瓦霍語", - "nbDisplayName": "挪威博克馬爾語", - "ndDisplayName": "北恩德貝勒語", - "neDisplayName": "尼泊爾語", - "ngDisplayName": "恩東加語", - "nnDisplayName": "挪威新挪威語", - "noDisplayName": "挪威語", - "iiDisplayName": "Nuosu", - "nrDisplayName": "南恩德貝勒語", - "ocDisplayName": "奧克語", - "ojDisplayName": "奧吉布語,奧吉布瓦語", - "cuDisplayName": "古教會斯拉夫語,教會斯拉夫語,古保加利亞語,古斯拉夫語", - "omDisplayName": "奧羅莫語", - "orDisplayName": "奧里雅語", - "osDisplayName": "奧塞梯語,奧塞提克語", - "paDisplayName": "旁遮普語,旁遮普語", - "piDisplayName": "巴利語", - "faDisplayName": "波斯語", - "plDisplayName": "波蘭語", - "psDisplayName": "普什圖語", - "ptDisplayName": "葡萄牙語", - "quDisplayName": "克丘亞語", - "rmDisplayName": "羅馬什語", - "rnDisplayName": "基隆迪語", - "roDisplayName": "羅馬尼亞語", - "ruDisplayName": "俄語", - "saDisplayName": "梵語", - "scDisplayName": "撒丁語", - "sdDisplayName": "信德語", - "seDisplayName": "北薩米語", - "smDisplayName": "薩摩亞語", - "sgDisplayName": "桑戈語", - "srDisplayName": "塞爾維亞語", - "gdDisplayName": "蘇格蘭蓋爾語", - "snDisplayName": "紹納語", - "siDisplayName": "僧伽羅語", - "skDisplayName": "斯洛伐克語", - "slDisplayName": "斯洛文尼亞語", - "soDisplayName": "索馬里語", - "stDisplayName": "南索托語", - "esDisplayName": "西班牙語", - "suDisplayName": "巽他語", - "swDisplayName": "斯瓦希里語", - "ssDisplayName": "斯瓦蒂語", - "svDisplayName": "瑞典語", - "taDisplayName": "泰米爾語", - "teDisplayName": "泰盧固語", - "tgDisplayName": "塔吉克語", - "thDisplayName": "泰語", - "tiDisplayName": "提格利語", - "boDisplayName": "藏語(標準、藏族、中部)", - "tkDisplayName": "土庫曼語", - "tlDisplayName": "他加祿語", - "tnDisplayName": "茨瓦納語", - "toDisplayName": "湯加(湯加群島)", - "trDisplayName": "土耳其語", - "tsDisplayName": "宗加語", - "ttDisplayName": "韃靼語", - "twDisplayName": "Twi", - "tyDisplayName": "塔希提語", - "ugDisplayName": "維吾爾語", - "ukDisplayName": "烏克蘭語", - "urDisplayName": "烏爾都語", - "uzDisplayName": "烏茲別克語", - "veDisplayName": "文達語", - "viDisplayName": "越南語", - "voDisplayName": "沃拉普克語", - "waDisplayName": "瓦隆語", - "cyDisplayName": "威爾士語", - "woDisplayName": "沃洛夫語", - "fyDisplayName": "西弗里斯語", - "xhDisplayName": "科薩語", - "yiDisplayName": "意第緒語", - "yoDisplayName": "約魯巴語", - "zaDisplayName": "壯語", "unkDisplayName": "未知", - "zuDisplayName": "祖魯語", - "hawDisplayName": "夏威夷語", - "hmnDisplayName": "苗語", - "multiDisplayName": "多語言", - "cebDisplayName": "宿霧語", - "dzDisplayName": "宗喀語", - "iwDisplayName": "希伯來語", - "jwDisplayName": "爪哇語", - "moDisplayName": "摩爾多瓦語", - "shDisplayName": "塞爾維亞-克羅地亞語", "wwCountryDisplayName": "全球", "afCountryDisplayName": "阿富汗", "axCountryDisplayName": "奧蘭群島", @@ -1333,41 +1064,25 @@ "yeCountryDisplayName": "也門", "zmCountryDisplayName": "尚比亞", "zwCountryDisplayName": "津巴布韋", - "pay": "付款", - "allPrivateChats": "私密對話", - "unknownPrivateChat": "未知私密對話", + "pay": "Checkout", "invitedToSpace": "{user} 已邀請你加入課程:{space}!你想接受嗎?", - "declinedInvitation": "已拒絕邀請", - "acceptedInvitation": "已接受邀請", "youreInvited": "📩 你被邀請啦!", "invitedToChat": "{user} 已邀請你加入一個聊天:{name}!你想接受嗎?", "monthlySubscription": "每月", "yearlySubscription": "每年", "defaultSubscription": "Pangea 聊天訂閱", "freeTrial": "免費試用", - "grammarAnalytics": "錯誤分析", "total": "總計:", "noDataFound": "未找到資料", - "promoSubscriptionExpirationDesc": "你目前的訂閱是促銷優惠,將於 {expiration} 到期。如需協助更改訂閱,請聯繫 support@pangea.chat。", - "emptyChatNameWarning": "請為此聊天輸入名稱", "blurMeansTranslateTitle": "為何訊息會模糊?", "blurMeansTranslateBody": "當沉浸模式開啟時,用你的基本語言傳送的訊息會被模糊,Pangea 機器人會將它們翻譯成你的目標語言。沉浸模式可以在個別和課程設定中切換。", - "someErrorTitle": "嗯,出了點問題", - "someErrorBody": "可能是錯誤或你的基本語言出了問題。", "bestCorrectionFeedback": "沒錯!", "distractorFeedback": "不太對。", "bestAnswerFeedback": "沒錯!", "definitionDefaultPrompt": "這個詞是什麼意思?", "practiceDefaultPrompt": "最佳答案是什麼?", "correctionDefaultPrompt": "最佳替代方案是什麼?", - "itStartDefaultPrompt": "你想幫助翻譯嗎?", - "lockedChatWarning": "🔒 此聊天已被鎖定", - "lockChat": "鎖定聊天", - "suggestToChat": "建議加入此聊天", - "suggestToChatDesc": "建議的聊天會顯示在聊天列表中", "acceptSelection": "接受更正", - "acceptSelectionAnyway": "無論如何使用此", - "makingActivity": "正在進行活動", "why": "為什麼?", "definition": "定義", "exampleSentence": "範例句子", @@ -1375,128 +1090,55 @@ "reportMessageTitle": "{reportingUserId} 在聊天室 {roomName} 舉報了來自 {reportedUserId} 的訊息", "reportMessageBody": "訊息:{reportedMessage}\n原因:{reason}", "noTeachersFound": "找不到可舉報的老師", - "viewArchive": "查看存檔", "trialExpiration": "您的免費試用於 {expiration} 到期", "freeTrialDesc": "新用戶可獲得一周的 Pangea 聊天免費試用", "activateTrial": "免費7天試用", "successfullySubscribed": "你已成功訂閱!", "clickToManageSubscription": "點擊此處管理你的訂閱。", - "errorGettingAudio": "獲取音頻時出錯。請刷新並重試。", "signUp": "註冊", "pleaseChooseAtLeastChars": "請至少選擇 {min} 個字符。", "noEmailWarning": "請輸入有效的電子郵件地址。否則你將無法重設密碼。如果你不想,請再次點擊按鈕繼續。", "pleaseEnterValidEmail": "請輸入有效的電子郵件地址。", "pleaseChooseAUsername": "請選擇一個用戶名", - "chooseAUsername": "選擇一個用戶名", "define": "定義", "listen": "聽", - "addConversationBot": "啟用對話機器人", - "addConversationBotDesc": "在此聊天中添加一個機器人", - "convoBotSettingsDescription": "編輯對話主題和難度", - "enterAConversationTopic": "輸入對話主題", - "conversationTopic": "對話主題", - "enableModeration": "啟用審核", - "enableModerationDesc": "啟用自動審核以在消息發送前進行審查", - "conversationLanguageLevel": "此對話的語言水平是什麼?", - "showDefinition": "顯示定義", - "subscriptionPopupTitle": "呢句句子可能有語法錯誤...", - "subscriptionPopupDesc": "今日就訂閱,解鎖翻譯同語法修正功能!", - "seeOptions": "睇選項", - "continuedWithoutSubscription": "繼續唔訂閱", "trialPeriodExpired": "試用期已過", - "selectToDefine": "點擊任何字詞睇佢嘅定義!", "translations": "翻譯", "messageAudio": "訊息音頻", "definitions": "定義", "subscribedToUnlockTools": "訂閱以解鎖互動式翻譯同語法檢查、音頻播放、個人化練習活動同學習分析!", "translationTooltip": "翻譯", - "audioTooltip": "播放音頻", "speechToTextTooltip": "轉錄", - "certifyAge": "我證明我已經超過 {age} 歲", "kickBotWarning": "踢走 Pangea 機械人會將對話機械人從呢個聊天中移除。", - "joinToView": "加入呢個房間睇詳情", "refresh": "重新整理", - "autoPlayTitle": "自動播放訊息", - "autoPlayDesc": "啟用時,選擇嘅訊息文字轉語音會自動播放。", "messageAnalytics": "訊息分析", "words": "詞語", "score": "分數", "accuracy": "準確度", "points": "分數", "noPaymentInfo": "無需付款資料!", - "conversationBotModeSelectDescription": "對話活動", - "conversationBotModeSelectOption_discussion": "討論", - "conversationBotModeSelectOption_custom": "自訂", - "conversationBotModeSelectOption_conversation": "對話", - "conversationBotModeSelectOption_textAdventure": "文字冒險", - "conversationBotModeSelectOption_storyGame": "故事遊戲", - "conversationBotDiscussionZone_title": "討論設定", - "conversationBotDiscussionZone_discussionTopicLabel": "討論主題", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "設定討論主題", - "conversationBotDiscussionZone_discussionKeywordsLabel": "討論關鍵詞", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "設定討論關鍵詞", - "conversationBotDiscussionZone_discussionKeywordsHintText": "用逗號分隔的關鍵詞列表以引導討論", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "按時間表發送討論提示", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "討論提示之間的小時數", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "在⏩反應時回應", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "回應以發送討論提示", - "conversationBotCustomZone_title": "自訂設定", - "conversationBotCustomZone_customSystemPromptLabel": "系統提示", - "conversationBotCustomZone_customSystemPromptPlaceholder": "設定自訂系統提示", - "conversationBotCustomZone_customSystemPromptEmptyError": "缺少自訂系統提示", - "botConfig": "機械人及活動設定", - "botConfigNoPermissionTitle": "無權限", - "botConfigNoPermissionMessage": "請聯絡房間管理員以更改機械人設定", - "addConversationBotDialogTitleInvite": "確認邀請對話機械人", - "addConversationBotButtonInvite": "邀請", - "addConversationBotDialogInviteConfirmation": "邀請", - "addConversationBotButtonTitleRemove": "確認移除對話機械人", - "addConversationBotButtonRemove": "移除", - "addConversationBotDialogRemoveConfirmation": "移除", - "conversationBotConfigConfirmChange": "確認", - "conversationBotStatus": "邀請機械人", - "conversationBotTextAdventureZone_title": "文字冒險", - "conversationBotTextAdventureZone_instructionLabel": "遊戲主持人指示", - "conversationBotTextAdventureZone_instructionPlaceholder": "設定遊戲主持人指示", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "缺少遊戲主持人指示", - "studentAnalyticsNotAvailable": "學生數據目前不可用", - "roomDataMissing": "您不屬於的房間可能缺少一些數據。", "updatePhoneOS": "您可能需要更新設備的操作系統版本。", "wordsPerMinute": "每分鐘字數", "autoIGCToolName": "自動運行Pangea寫作協助", "autoIGCToolDescription": "在發送消息前,自動運行Pangea聊天語法和翻譯寫作協助。", - "runGrammarCorrection": "檢查訊息", - "grammarCorrectionFailed": "需處理的問題", - "grammarCorrectionComplete": "看起來不錯!", "tooltipInstructionsTitle": "不確定那是什麼嗎?", "tooltipInstructionsMobileBody": "長按項目以查看工具提示。", "tooltipInstructionsBrowserBody": "將滑鼠懸停在項目上以查看工具提示。", "chatCapacity": "聊天容量", "roomFull": "此房間已達容量上限。", - "topicNotSet": "尚未設定主題。", - "chatCapacityNotSet": "此聊天沒有容量限制。", "chatCapacityHasBeenChanged": "聊天容量已更改", "chatCapacitySetTooLow": "聊天容量至少為 {count}。", "chatCapacityExplanation": "聊天容量限制允許加入聊天的成員數量。", - "chatExceedsCapacity": "此聊天超出其容量。", "tooManyRequest": "請求過多,請稍後再試。", "enterNumber": "請輸入整數值。", "buildTranslation": "從上述選項建立您的翻譯", - "nonexistentSelection": "選擇已不存在。", - "changeAnalyticsLanguage": "更改分析語言", "practice": "練習", "noLanguagesSet": "未設定語言", - "noActivitiesFound": "暫時就到此為止!稍後再來查看更多。", - "hintTitle": "提示:", "speechToTextBody": "對於語音訊息,您可以看到轉錄內容以及說話者的每分鐘字數得分。", "versionNotFound": "找不到版本", "fetchingVersion": "正在獲取版本...", "versionFetchError": "獲取版本時出錯", "versionText": "版本:{version}+{buildNumber}", - "languageButtonLabel": "語言:{currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "自動播放翻譯", - "interactiveTranslatorAutoPlayDesc": "啟動互動翻譯器而不需確認。", - "changeAnalyticsView": "更改分析視圖", "l1TranslationBody": "您的基本語言中的訊息將不會被翻譯。", "deleteSubscriptionWarningTitle": "您有一個有效的訂閱", "deleteSubscriptionWarningBody": "刪除您的帳戶不會自動取消您的訂閱。", @@ -1504,9 +1146,7 @@ "error520Title": "請再試一次。", "error520Desc": "對不起,我們無法理解您的訊息...", "wordsUsed": "已用詞彙", - "errorTypes": "錯誤類型", "level": "等級", - "canceledSend": "已取消發送", "morphsUsed": "已用形態", "translationChoicesBody": "點擊並長按選項以獲取提示。", "grammar": "語法", @@ -1516,7 +1156,6 @@ "reportContentIssueTitle": "舉報內容問題", "feedback": "可選反饋", "reportContentIssueDescription": "哎呀!AI可以促進個性化學習體驗,但...也會產生幻覺。請提供您的反饋,我們會再試一次。", - "changeContent": "哎呀!AI可以促進個性化學習體驗,但...也會產生幻覺。它應該是什麼?", "clickTheWordAgainToDeselect": "點擊已選擇的詞以取消選擇。", "l2SupportNa": "暫時不支援", "l2SupportAlpha": "Alpha", @@ -1751,7 +1390,6 @@ "grammarCopySPC": "特定性", "grammarCopyPARTTYPE": "部分格類型", "grammarCopyINTREL": "疑問-關係", - "grammarCopyNUMFORMpsor": "所有者數量", "grammarCopyUNKNOWN": "未知", "grammarCopyNUMBERPSOR": "所有者數量", "grammarCopyPOSS": "所有格", @@ -1797,28 +1435,14 @@ "grammarCopyVOICEdir": "直接語態", "grammarCopyVOICEinv": "倒裝語態", "grammarCopyVOICErcp": "互惠語態", - "enterPrompt": "請輸入系統提示", - "selectBotLanguage": "選擇機械人語言", - "chooseVoice": "選擇語音", - "enterLanguageLevel": "請輸入語言水平", - "enterDiscussionTopic": "請輸入討論主題", - "selectBotChatMode": "選擇聊天模式", - "messageNotInTargetLang": "訊息不在目標語言中", "other": "其他", "levelShort": "LVL {level}", - "botModeValidation": "請選擇一個聊天模式", "clickBestOption": "選擇最佳選項來翻譯您的訊息!", "completeActivitiesToUnlock": "完成至少一個活動以解鎖翻譯!", - "botSettingsSubtitle": "邀請機械人管理聊天活動", - "invitePeople": "邀請用戶", "noCapacityLimit": "沒有容量限制", "downloadGroupText": "下載群組文字", "notificationsOn": "通知已開啟", "notificationsOff": "通知已關閉", - "chatCanBeFoundViaSearch": "聊天可通過搜索找到", - "requireCodeToJoin": "加入需提供代碼", - "canFindInSearch": "可在搜索中找到", - "addChatToSpace": "添加聊天", "createChatAndInviteUsers": "創建聊天並邀請用戶", "updatedNewSpaceDescription": "課程讓你整合聊天並建立私人或公共社區。", "joinWithCode": "用代碼加入", @@ -1854,39 +1478,19 @@ "constructUseCollected": "喺聊天中收集", "constructUseNanDesc": "唔適用", "xpIntoLevel": "{currentXP} / {maxXP} 經驗值", - "signInWithUsername": "用用戶名同密碼登入", - "registrationEmailMessage": "請用連結驗證你嘅電郵。有時候,電郵可能需要最多五分鐘先到。亦請檢查垃圾郵件夾。", "enableTTSToolName": "啟用文字轉語音", "enableTTSToolDescription": "允許應用程式為你嘅目標語言嘅部分文字產生文字轉語音輸出。", - "couldNotFindTTS": "我哋搵唔到你目前目標語言嘅文字轉語音引擎。", - "ttsInstructionsHyperlink": "點擊呢度睇下載新語音嘅指引。", - "createAnAccount": "建立帳戶", - "signIn": "登入", - "signUpWithEmail": "用電郵註冊", - "signUpWithGoogle": "用 Google 註冊", - "signUpWithApple": "用 Apple 註冊", "yourUsername": "你的用戶名", "yourEmail": "你的電郵", - "pleaseEnterAnEmail": "請輸入電郵地址", - "signInWithGoogle": "用 Google 登入", - "signInWithApple": "用 Apple 登入", - "chooseYourAvatar": "選擇你的頭像", "iWantToLearn": "我想學習", - "letsStart": "開始吧", - "pleaseAgreeToTOS": "請同意條款及細則", "pleaseEnterEmail": "請輸入有效的電郵地址。", - "pleaseSelectALanguage": "請選擇一種語言", "myBaseLanguage": "我的基本語言", - "clickWordsInstructions": "🧻 點擊任何單詞以查看詳情。🤐", - "chooseBestDefinition": "這個詞的意思是什麼?", "meaningSectionHeader": "意思:", "formSectionHeader": "聊天中使用的表格:", - "noEmojiSelectedTooltip": "未選擇表情符號", "writingExercisesTooltip": "寫作", "listeningExercisesTooltip": "聽力練習", "readingExercisesTooltip": "閱讀", "meaningNotFound": "找不到意思。", - "formsNotFound": "找不到表格。", "chooseBaseForm": "選擇基本形式", "notTheCodeError": "對不起,這不是代碼!", "totalXP": "總經驗值", @@ -1926,9 +1530,6 @@ "pickAnEmoji": "你最鍾意用邊個表情符號代表 '{lemma}'?", "chooseLemmaMeaningInstructionsBody": "將意思同訊息入面嘅詞配對!", "doubleClickToEdit": "雙擊以編輯。", - "removeFeature": "移除 {feature}", - "chooseCorrectLabel": "揀選正確嘅標籤。", - "levelPopupTitle": "恭喜你達到\n第 {level} 級", "activityPlannerTitle": "活動規劃器", "topicLabel": "主題", "topicPlaceholder": "揀一個主題...", @@ -1936,7 +1537,6 @@ "modePlaceholder": "揀一個模式...", "learningObjectiveLabel": "學習目標", "learningObjectivePlaceholder": "揀一個學習目標...", - "mediaLabel": "媒體學習者應分享", "languageOfInstructionsLabel": "活動指示語言", "targetLanguageLabel": "目標語言", "cefrLevelLabel": "CEFR 級別", @@ -1951,20 +1551,15 @@ "instructions": "指示", "numberOfLearners": "學習者人數", "mustBeInteger": "必須是整數,例如 1、2、3、...", - "noLemmasFound": "沒有超過 {xp} XP 的詞彙。繼續練習!", "constructUsePvmDesc": "以語音訊息產生", - "lockedMorphFeature": "等待解鎖", "leaveSpaceDescription": "退出課程後,您將離開其中所有的聊天。其他用戶將看到您已離開課程。", - "whatIsLemma": "什麼是詞根?", "constructUseCorMmDesc": "正確的訊息含義", "constructUseIncMmDesc": "錯誤的訊息含義", "constructUseIgnMmDesc": "被忽略的訊息含義", "clickForMeaningActivity": "點擊此處參加意義挑戰", "meaning": "意思", "chatWith": "與{displayname}組成群組", - "slightlyOffensive": "略帶冒犯", "clickOnEmailLink": "請點擊電子郵件中的連結,然後繼續。\n\n如果電子郵件未到達,請檢查您的垃圾郵件夾。", - "whoIsAllowedToJoinThisChat": "誰可以加入此聊天", "dontForgetPassword": "別忘了你的密碼!", "enableAutocorrectToolName": "啟用設備自動更正", "enableAutocorrectDescription": "如果您的設備支持您正在學習的語言,您可以啟用設備自動更正,以在輸入時修正常見錯誤。", @@ -1992,48 +1587,26 @@ "autocorrectNotAvailable": "很抱歉,你的平台目前不支援此功能。請留意後續開發!", "pleaseUpdateApp": "請更新應用程式以繼續。", "chooseEmojiInstructionsBody": "將表情符號與它們最能代表的詞語配對。別擔心!不同意也不扣分。😅", - "pickAnEmojiFor": "為 {lemma} 選擇一個表情符號", "analyticsVocabListBody": "這是你的全部詞彙!當你每學會一個詞,就會由幼苗長成盛開的花朵。點擊任何詞以查看更多詳情。", "morphAnalyticsListBody": "這是你正在學習的語言中的所有語法概念!你在聊天時遇到它們就會解鎖。點擊查看詳情。", "knockSpaceSuccess": "你已申請加入此課程!管理員收到申請後會回覆你😊", - "joinByCode": "用代碼加入", "chooseWordAudioInstructionsBody": "聽完整個訊息。然後將音頻與詞語配對。", "chooseMorphsInstructionsBody": "點擊拼圖碎片回答語法問題!", - "inviteAndLaunch": "啟動並邀請", - "createOwnChat": "建立你自己嘅對話", "pleaseEnterInt": "請輸入一個數字", "home": "首頁", "join": "加入", "readingAssistanceOverviewBody": "點擊下面嘅按鈕,玩配對表情符號、音頻、詞義同語法概念嘅迷你遊戲。或者點擊任何詞語睇詳細資料。", - "learnByTexting": "用短信學習", - "levelSummaryTrigger": "睇摘要", "levelSummaryPopupTitle": "第 {level} 級摘要", - "referFriends": "介紹朋友", - "referFriendDialogTitle": "邀請朋友加入你嘅對話", - "referFriendDialogDesc": "你有冇朋友好興奮同你一齊學新語言?咁就複製同發送呢個邀請連結,加入並即刻同你傾計。", - "youUnlocked": "你已解鎖", "resetInstructionTooltipsTitle": "重設指引提示", "resetInstructionTooltipsDesc": "點擊顯示新用戶嘅指引提示。", "selectForGrammar": "選擇一個語法圖標,睇活動同詳細資料。", - "newChatActivityTitle": "加入一個有趣嘅活動?", - "newChatActivityDesc": "用活動規劃器令每個群組對話都變成冒險!設定吸引嘅主題同目標,用靚圖令對話生動起來。激發創意討論,令樂趣無窮!", - "exploreMore": "探索更多", "randomize": "隨機", "clear": "清除", "makeYourOwnActivity": "Create your own activity", "featuredActivities": "Featured", - "goToChat": "Go to chat", "save": "Save", - "selectActivity": "Select activity", - "wordFocusListeningMultipleChoice": "Which audio matches the word?", "startChat": "Start a chat", "translationProblem": "Translation problem", - "perfectTranslation": "完美翻譯!", - "greatJobTranslation": "你嘅翻譯做得好!", - "goodJobTranslation": "呢個翻譯做得唔錯。", - "makingProgress": "你喺進步!", - "keepPracticing": "繼續練習!", - "niceJob": "做得好!", "askToJoin": "請求加入", "emptyChatWarningTitle": "對話空空如也", "emptyChatWarningDesc": "你未邀請任何人加入對話。請前往對話設定,邀請你的聯絡人或機械人。你亦可以稍後再做。", @@ -2052,8 +1625,6 @@ "languageLevelC2Desc": "我幾乎能理解所有聽到或閱讀的內容,並能流利且準確地表達自己。", "newVocab": "新詞彙", "newGrammar": "新語法概念", - "congratulationsOnReaching": "你已達到第 {level} 級!", - "seeDetails": "查看詳情", "choosePracticeMode": "點擊上方其中一個按鈕開始練習活動", "ban": "封鎖", "unban": "解除封鎖", @@ -2067,8 +1638,6 @@ "timesUsedWithAssistance": "協助下使用次數", "shareInviteCode": "分享邀請碼:{code}", "leaderboard": "排行榜", - "welcomeUser": "歡迎 {user}", - "joinSpaceOnboardingDesc": "你有邀請碼或連結加入公開課程嗎?", "skipForNow": "暫時跳過", "permissions": "權限", "spaceChildPermission": "誰可以在此課程中新增聊天", @@ -2076,12 +1645,8 @@ "defaultOption": "預設", "deleteChatDesc": "你確定要刪除此聊天嗎?此操作將刪除所有參與者的聊天記錄,且所有訊息將不再供練習或學習分析使用。", "deleteSpaceDesc": "此課程及所有選擇的聊天將被刪除,所有訊息將不再供練習或學習分析使用。此操作無法撤銷。", - "chatWithActivities": "與活動聊天", "launch": "啟動", - "launchActivityToChats": "將活動發送到聊天", "searchChats": "搜尋聊天", - "selectChats": "揀選對話", - "selectChatToStart": "完成!揀一個對話開始", "maxFifty": "最多50個", "configureSpace": "設定課程", "pinMessages": "釘住訊息", @@ -2095,9 +1660,7 @@ "announcements": "公告", "activities": "活動", "access": "存取", - "botSettings": "機械人設定", "activitySuggestionTimeoutMessage": "我哋正努力為你產生更多活動,請稍候再睇", - "accessSettingsWarning": "哎呀!睇嚟你冇權限設定呢個房間嘅存取規則。你應該檢查呢啲設定,確保佢哋符合你嘅需要,如果需要更改,請同房間管理員聯絡", "howSpaceCanBeFound": "呢個課程點樣可以搵到", "private": "私人", "cannotBeFoundInSearch": "喺搜尋中搵唔到", @@ -2110,16 +1673,6 @@ "canBeFoundViaKnock": "• 請求加入同管理員批准", "youHaveLeveledUp": "你升級啦!", "sendActivities": "發送活動", - "getStarted": "開始啦", - "getStartedBotChatDesc": "同AI傾偈係一個好嘅開始,Pangea嘅閱讀、寫作、聽力同口語工具令呢一切變得容易!", - "getStartedCommunitiesDesc": "同社群一齊學習係Pangea Chat嘅亮點!\n你可以加入你嘅班、搵課程,甚至自己創建!", - "getStartedFriendsDesc": "你有冇朋友想同你一齊學習?", - "getStartedBotChatComplete": "做得好!你而家喺同機械人傾偈!", - "getStartedCommunitiesComplete": "太好啦,你已經加入咗一個課程!", - "getStartedComplete": "你完成咗呢個部分!\n繼續用傾偈同朋友探索我哋嘅精彩功能!", - "getStartedFriendsComplete": "Woohoo!你有朋友啦!😊", - "getStartedBotChatButton": "開始傾偈!", - "getStartedFriendsButton": "同朋友傾偈", "groupChat": "群組聊天", "directMessage": "直接訊息", "newDirectMessage": "新直接訊息", @@ -2135,7 +1688,6 @@ "mySavedActivities": "我的已保存活動", "noSavedActivities": "沒有已保存的活動", "saveActivity": "保存此活動", - "yourSavedActivities": "已保存的活動", "failedToPlayVideo": "播放視頻失敗", "done": "完成", "inThisSpace": "在此課程中", @@ -2174,37 +1726,27 @@ "maximumActivityParticipants": "每個活動最多可有 {count} 位參與者。", "pending": "待處理", "inactive": "未啟用", - "unjoinedActivityMessage": "你想參加嗎?選擇一個開放角色!\n或者閒逛並觀看表演!", - "fullActivityMessage": "隨時觀看表演!雖然沒有開放角色可以參與,但你可以查看聊天!", "confirmRole": "確認角色", "openRoleLabel": "開放", "joinedTheActivity": "👋 {username} 以 {role} 身份加入", "finishedTheActivity": "🎯 {username} 完成了此活動", - "endActivityTitle": "我完成了", - "endActivityDesc": "你完成了目標嗎?\n呢個係你退出傳訊嘅確認。不過唔使擔心,樂趣仲喺度!隨時可以留喺度欣賞表演,直到大家點擊「完成」。", "archiveToAnalytics": "加入我已完成嘅活動", "activitySummaryError": "活動摘要暫時無法取得", "requestSummaries": "請求摘要", - "loadingActivitySummary": "載入活動摘要中...", "generatingNewActivities": "你係呢個語言配對嘅第一個用戶!請俾我哋一分鐘,我哋正喺準備專屬你嘅活動。", - "requestAccessTitle": "申請查看分析數據?", + "requestAccessTitle": "請求分析訪問?", "requestAccessDesc": "你想申請查看參與者分析數據?\n\n如果參與者同意,呢個課程嘅管理員可以睇到佢哋嘅:\n • 總詞彙量\n • 總語法概念\n • 完成嘅活動次數\n • 使用嘅具體語法概念,正確同錯誤\n\n佢哋唔能睇到:\n • 課程外嘅聊天訊息\n • 詞彙清單", "requestAccess": "申請存取 ({count})", "analyticsInactiveTitle": "無法向非活躍用戶發出請求", "analyticsInactiveDesc": "自從呢個功能推出以來冇登入嘅非活躍用戶,唔會睇到你嘅請求。\n\n佢哋返嚟之後,請求按鈕會出現。你可以喺佢哋嘅名字下面點擊請求按鈕,再次發送請求。", "accessRequestedTitle": "分析存取請求", - "accessRequestedDesc": "「{space}」嘅管理員正喺請求睇你嘅學習分析數據。\n\n如果你同意,呢個課程嘅管理員可以睇到你嘅:\n • 總詞彙量\n • 總語法概念\n • 完成嘅活動次數\n • 使用嘅具體語法概念,正確同錯誤\n\n佢哋唔能睇到:\n • 課程外嘅聊天訊息\n • 詞彙清單", - "allowAccess": "允許存取", - "denyAccess": "拒絕存取", + "accessRequestedDesc": "請求管理員:{admin} \n\n來自「{space}」的管理員正在請求查看您的學習分析。\n\n如果您同意,他們將能夠查看您的:\n • 總詞彙量\n • 總語法概念\n • 完成的總活動會話\n • 使用的特定語法概念,包括正確和不正確的\n\n他們將無法查看您的:\n • 課程外聊天中的消息\n • 詞彙列表", "adminRequestedAccess": "管理員已請求睇你嘅分析數據。", "lastUpdated": "更新\n{time}", "activityFinishedMessage": "全部完成!", "endForAll": "結束所有", "newCourse": "新課程", - "newCourseSubtitle": "你想使用邊個課程計劃?", - "failedToLoadCourses": "載入課程失敗", "numModules": "{num} 個模組", - "numActivityPlans": "{num} 個活動計劃", "coursePlan": "課程計劃", "editCourseLater": "你可以稍後編輯模板標題、描述同課程圖片。", "newCourseAccess": "預設情況下,課程係私密嘅,需要管理員批准先可以加入。你可以隨時修改呢啲設定。", @@ -2218,44 +1760,28 @@ "accessDesc": "你可以將課程開放畀全世界!或者,將課程設為私密同安全。", "createGroupChatDesc": "活動會議開始同結束,但群組聊天會保持開放,用於日常溝通。", "deleteDesc": "只有管理員可以刪除課程。呢個係破壞性操作,會移除所有用戶同刪除課程內所有選擇嘅聊天。請小心操作。", - "failedToLoadCourseInfo": "載入課程資料失敗", "noCourseFound": "哦,呢個課程需要一個計劃!\n\n課程計劃係一系列主題同對話活動。", "additionalParticipants": "+ {num} 其他人", - "activityNotFoundForCourse": "未喺課程中找到呢個活動", - "courseChats": "課程討論", - "myActivitySessions": "我嘅活動時段", "directMessages": "直接訊息", "whatNow": "而家點?", "chooseNextActivity": "揀你下一個活動!", - "seeInstructions": "睇指示", - "hideInstructions": "隱藏指示", "letsGo": "我哋出發啦", "chooseRole": "揀一個角色!", "chooseRoleToParticipate": "揀一個角色嚟參與!", "waitingToFillRole": "等緊填滿 {num} 個角色...", "pingParticipants": "提醒課程參與者", "playWithBot": "同 Pangea 機械人玩", - "inviteFriendsToActivity": "邀請朋友參與活動", - "inviteFriendsToActivityCourse": "邀請朋友參與活動同課程", "waitNotDone": "等我完啦!", "waitingForOthersToFinish": "等其他人完成...", - "saveToCompletedActivities": "儲存到已完成活動", "generatingSummary": "分析聊天並生成結果", - "instructionsLanguage": "指示語言", "findCourse": "尋找課程", - "activityCompletedDesc": "你完成的活動已加入分析,你可以在此查看和練習你使用的語言。", "pingParticipantsNotification": "{user} 正在尋找用戶加入 {room} 的活動會話", "course": "課程", "courses": "課程", "courseName": "課程名稱", "createNewCourse": "新建課程", - "publicCourses": "公開課程", "goToCourse": "前往課程:{course}", "activityComplete": "此活動已完成。活動摘要應在下方提供。", - "haventChattedMuch": "看起來你沒有多聊天,試著使用更多詞彙!如果你覺得已完成目標,可以在下方結束活動。", - "haveChatted": "看起來你已經聊天一段時間!如果你覺得已完成目標,請結束活動,我們會在聊天中為你生成摘要!", - "userDoneAndWaiting": "{num1}/{num2} 參與者已完成。請等待所有人完成,我們會在聊天中為你生成摘要!\n\n如果你想重新加入對話,請點擊聊天中的繼續按鈕。", - "othersDoneAndWaiting": "{num1}/{num2} 已完成。你完成了你的目標嗎?", "startNewSession": "開始新會話", "joinOpenSession": "加入公開會話", "less": "較少", @@ -2265,7 +1791,6 @@ "openToJoin": "開放加入", "results": "結果", "activityDone": "活動完成!", - "moreLabel": "更多", "promoCodeInfo": "優惠碼可以喺下一頁輸入", "editsComingSoon": "編輯城市同活動嘅功能即將推出。", "editing": "編輯中", @@ -2281,13 +1806,10 @@ "courseSavedSuccessfully": "課程已成功保存", "addCoursePlan": "添加課程計劃", "activityStatsButtonInstruction": "點擊此處查看您的活動統計數據,完成後關閉活動", - "readingAnalyticsDesc": "點擊每條消息進行閱讀練習。", - "speakingAnalyticsDesc": "錄製語音消息進行口語練習。", - "audioAnalyticsDesc": "點擊每條消息進行聽力練習。", "loginToAccount": "登入我的帳戶", "appDescription": "學習一種語言\n同時與朋友發訊息。", "languages": "語言", - "chooseLanguage": "選擇一種語言。", + "chooseLanguage": "選擇目標語言。", "planTrip": "規劃您的旅程", "howAreYouTraveling": "你打算怎樣旅行?", "unlockPrivateTrip": "解鎖私人行程", @@ -2300,25 +1822,20 @@ "courseCode": "密碼是什麼?", "courseCodeHint": "行程代碼或鏈接", "unlockMyTrip": "解鎖我的行程", - "anyLevel": "任何程度", "signupOption": "你想點樣註冊?", "withApple": "用 Apple", "withGoogle": "用 Google", "withEmail": "用電郵", "createAccount": "建立帳戶", - "noCoursesFound": "未找到課程", "loginWithEmail": "用電郵登入", "usernameOrEmail": "用戶名或電郵", "email": "電郵", "forgotPassword": "忘記密碼?", - "writingAnalyticsDesc": "發送訊息練習寫作。", "endActivity": "結束活動", "allLanguages": "所有語言", - "allCefrLevels": "所有CEFR等級", "chatListTooltip": "喺呢度你會搵到你嘅直接訊息!點擊任何用戶嘅頭像同「開始對話」嚟發送私訊。", "directMessageBotTitle": "直接訊息 Pangea 機械人", "feedbackTitle": "活動反饋", - "feedbackDesc": "點樣改善活動?如果你可以提供啲詳細資料,我哋會作出改變!", "feedbackRespDesc": "明日再嚟查閱活動更新。", "feedbackHint": "你嘅反饋", "feedbackButton": "提交反饋", @@ -2327,12 +1844,10 @@ "playWithAI": "而家同AI玩玩", "courseStartDesc": "Pangea Bot隨時準備出發!\n\n...但有朋友一齊學習會更好!", "activityDropdownDesc": "完成呢個活動後,點擊下面", - "activityAnalyticsListBody": "呢啲係你完成嘅活動!完成活動後,你可以喺呢度睇到佢哋。", "languageMismatchTitle": "語言不符", "languageMismatchDesc": "你嘅目標語言同呢個活動嘅語言唔一致。想更新你嘅目標語言嗎?", "reportWordIssueTooltip": "報告詞語資訊問題", "tokenInfoFeedbackDialogTitle": "詞語資訊反饋", - "tokenInfoFeedbackDialogDesc": "AI會出錯。請描述你喺上面資訊中發現嘅任何問題。", "noPublicCoursesFound": "未找到公開課程。你想創建一個嗎?", "noCourseTemplatesFound": "我哋未搵到你目標語言嘅課程。你可以暫時同Pangea Bot傾偈,之後再嚟睇多啲課程。", "botActivityJoinFailMessage": "Pangea Bot反應有啲慢。請稍後再試,或者邀請朋友一齊。", @@ -2341,7 +1856,7 @@ "selectAll": "全選", "deselectAll": "取消全選", "@@locale": "yue", - "@@last_modified": "2026-01-06 13:01:38.057632", + "@@last_modified": "2026-01-07 14:25:37.722488", "@ignoreUser": { "type": "String", "placeholders": {} @@ -5694,30 +5209,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@ignore": { "type": "String", "placeholders": {} @@ -5741,18 +5232,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5777,18 +5256,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5825,38 +5292,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5865,62 +5304,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5957,10 +5352,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5969,14 +5360,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5985,46 +5368,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -6033,10 +5380,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -6093,18 +5436,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -6113,14 +5444,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -6149,18 +5472,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -6169,42 +5480,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -6213,14 +5492,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -6241,26 +5512,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -6281,10 +5532,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -6317,25 +5564,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -6392,34 +5620,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -6448,778 +5648,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -8212,14 +6644,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -8231,14 +6655,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -8270,10 +6686,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -8282,18 +6694,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -8302,14 +6702,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -8334,38 +6726,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -8411,10 +6775,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -8439,10 +6799,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -8467,10 +6823,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -8479,66 +6831,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -8559,42 +6855,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -8619,154 +6891,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8783,18 +6907,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8815,14 +6927,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8839,10 +6943,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8855,14 +6955,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8871,14 +6963,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8906,26 +6990,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8954,18 +7018,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -9002,10 +7058,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9934,10 +7986,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -10118,34 +8166,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -10158,10 +8178,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -10170,14 +8186,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -10194,22 +8202,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -10357,14 +8349,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -10373,34 +8357,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -10409,54 +8365,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -10465,10 +8385,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -10485,10 +8401,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -10660,26 +8572,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10708,10 +8600,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10768,30 +8656,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10820,18 +8692,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10948,14 +8812,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10968,10 +8824,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10980,14 +8832,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -11004,14 +8848,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -11020,22 +8856,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -11048,18 +8868,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -11076,22 +8884,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -11100,30 +8896,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -11196,18 +8968,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -11264,18 +9024,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -11304,30 +9052,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -11380,18 +9112,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -11440,46 +9164,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -11544,10 +9228,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11719,14 +9399,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11754,14 +9426,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11774,10 +9438,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11813,19 +9473,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11850,14 +9505,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11866,14 +9513,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11926,10 +9565,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11942,18 +9577,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11966,14 +9589,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -12002,14 +9617,6 @@ "type": "String", "placeholders": {} }, - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@waitNotDone": { "type": "String", "placeholders": {} @@ -12018,26 +9625,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -12065,10 +9660,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -12079,36 +9670,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -12145,10 +9706,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -12213,18 +9770,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -12289,10 +9834,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -12313,10 +9854,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -12333,10 +9870,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -12345,10 +9878,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -12361,10 +9890,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -12397,10 +9922,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -12417,10 +9938,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -12873,7 +10390,6 @@ "newMessageInPangeaChat": "📩 Pangea 聊天有新訊息", "shareCourse": "分享課程", "addCourse": "加入課程", - "joinCourseWithCode": "用代碼加入課程", "joinPublicCourse": "加入公開課程", "vocabLevelsDesc": "呢度會放你升級後嘅詞彙!", "highlightVocabTooltip": "通過在聊天中發送或練習以下目標詞彙來突出顯示它們", @@ -12897,10 +10413,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -12909,7 +10421,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "沒有找到私訊或聊天。請確保您的搜索拼寫正確。", + "activityAnalyticsTooltipBody": "這些是您保存的活動以供審查和練習。", + "numSavedActivities": "保存的活動數量", + "saveActivityTitle": "保存活動", + "saveActivityDesc": "做得好!保存此活動以便稍後審查和練習", + "levelInfoTooltip": "在這裡您可以看到您獲得的所有積分及其來源!", + "alreadyInCourseWithID": "您已經在這個計劃的課程中。您想創建一個相同計劃的課程,還是去現有的課程?", + "goToExistingCourse": "前往現有課程", + "emojiView": "表情符號視圖", + "feedbackDialogDesc": "我也會犯錯!有什麼可以幫助我改進的嗎?", + "contactHasBeenInvitedToTheCourse": "聯絡人已被邀請參加課程", + "activityStatsButtonTooltip": "活動資訊", + "allow": "允許", + "deny": "拒絕", + "enabledRenewal": "啟用訂閱續訂", + "subscriptionEndsOn": "訂閱於以下日期結束", + "subscriptionRenewsOn": "訂閱於以下日期續訂", + "waitForSubscriptionChanges": "您的訂閱更改可能需要一段時間才能在應用程式中反映。", + "subscribeReadingAssistance": "訂閱以解鎖消息工具", + "aceDisplayName": "Achinese", + "achDisplayName": "阿科利", + "afDisplayName": "南非荷蘭語", + "akDisplayName": "阿坎語", + "alzDisplayName": "阿盧爾語", + "amDisplayName": "阿姆哈拉語", + "arDisplayName": "阿拉伯語", + "asDisplayName": "阿薩姆語", + "awaDisplayName": "阿瓦迪語", + "ayDisplayName": "艾馬拉語", + "azDisplayName": "阿塞拜疆語", + "baDisplayName": "巴什基爾", + "banDisplayName": "巴厘語", + "bbcDisplayName": "巴塔克托巴語", + "beDisplayName": "白俄羅斯語", + "bemDisplayName": "本巴語", + "bewDisplayName": "貝塔維語", + "bgDisplayName": "保加利亞語", + "bhoDisplayName": "博傑普里語", + "bikDisplayName": "比科爾語", + "bmDisplayName": "班巴拉語", + "bnDisplayName": "孟加拉語", + "bnBDDisplayName": "孟加拉語(孟加拉)", + "bnINDisplayName": "孟加拉語(印度)", + "brDisplayName": "布列塔尼語", + "bsDisplayName": "波士尼亞語", + "btsDisplayName": "巴塔克西馬隆根語", + "btxDisplayName": "巴塔克卡羅語", + "buaDisplayName": "布里亞特語", + "caDisplayName": "加泰羅尼亞語", + "cebDisplayName": "宿霧語", + "cggDisplayName": "奇加", + "chmDisplayName": "瑪莉", + "ckbDisplayName": "中央庫爾德語", + "cnhDisplayName": "哈卡欽", + "coDisplayName": "科西嘉語", + "crhDisplayName": "克里米亞土耳其語", + "crsDisplayName": "塞舌爾克里奧爾法語", + "csDisplayName": "捷克語", + "cvDisplayName": "楚瓦什語", + "cyDisplayName": "威爾士語", + "daDisplayName": "丹麥語", + "deDisplayName": "德語", + "dinDisplayName": "丁卡語", + "doiDisplayName": "多格里語", + "dovDisplayName": "多姆比語", + "dzDisplayName": "宗喀語", + "eeDisplayName": "埃維語", + "enDisplayName": "英語", + "enAUDisplayName": "英語 (澳洲)", + "enGBDisplayName": "英語 (英國)", + "enINDisplayName": "英文(印度)", + "enUSDisplayName": "英文(美國)", + "eoDisplayName": "世界語", + "esDisplayName": "西班牙語", + "esESDisplayName": "西班牙語(西班牙)", + "esMXDisplayName": "西班牙語(墨西哥)", + "euDisplayName": "巴斯克語", + "faDisplayName": "波斯語", + "ffDisplayName": "富拉語", + "fiDisplayName": "芬蘭語", + "filDisplayName": "菲律賓語", + "fjDisplayName": "斐濟語", + "foDisplayName": "法羅語", + "frDisplayName": "法語", + "frCADisplayName": "法語(加拿大)", + "frFRDisplayName": "法語(法國)", + "fyDisplayName": "西弗里西語", + "gaDisplayName": "愛爾蘭語", + "gaaDisplayName": "加語", + "gdDisplayName": "蘇格蘭蓋爾語", + "glDisplayName": "加利西亞語", + "gnDisplayName": "瓜拉尼語", + "gomDisplayName": "果阿孔卡尼語", + "guDisplayName": "古吉拉特語", + "haDisplayName": "豪薩語", + "hawDisplayName": "夏威夷語", + "heDisplayName": "希伯來語", + "hiDisplayName": "印地語", + "hilDisplayName": "希利蓋農語", + "hmnDisplayName": "苗族語", + "hneDisplayName": "恰蒂斯加爾語", + "hrDisplayName": "克羅地亞語", + "hrxDisplayName": "亨斯里克語", + "htDisplayName": "海地克里奧爾語", + "huDisplayName": "匈牙利語", + "hyDisplayName": "亞美尼亞語", + "idDisplayName": "印尼語", + "igDisplayName": "伊博語", + "iloDisplayName": "伊洛卡諾語", + "isDisplayName": "冰島語", + "itDisplayName": "意大利語", + "jaDisplayName": "日語", + "jvDisplayName": "爪哇語", + "kaDisplayName": "喬治亞語", + "kkDisplayName": "哈薩克語", + "kmDisplayName": "高棉語", + "knDisplayName": "卡納達語", + "koDisplayName": "韓語", + "kokDisplayName": "孔卡尼語", + "kriDisplayName": "克里奧語", + "ksDisplayName": "克什米爾語", + "ktuDisplayName": "基圖巴語(剛果民主共和國)", + "kuDisplayName": "庫爾德語", + "kyDisplayName": "吉爾吉斯語", + "laDisplayName": "拉丁語", + "lbDisplayName": "盧森堡語", + "lgDisplayName": "甘達語", + "liDisplayName": "林堡語", + "lijDisplayName": "利古里亞語", + "lmoDisplayName": "倫巴第語", + "lnDisplayName": "林加拉語", + "loDisplayName": "寮語", + "ltDisplayName": "立陶宛語", + "ltgDisplayName": "拉脫維亞語", + "luoDisplayName": "盧奧語(肯尼亞和坦桑尼亞)", + "lusDisplayName": "米佐語", + "lvDisplayName": "拉脫維亞語", + "maiDisplayName": "邁蒂利語", + "makDisplayName": "馬卡薩語", + "mgDisplayName": "馬達加斯加語", + "miDisplayName": "毛利語", + "minDisplayName": "米南加保語", + "mkDisplayName": "馬其頓語", + "mlDisplayName": "馬拉雅拉姆語", + "mnDisplayName": "蒙古語", + "mniDisplayName": "Manipuri", + "mrDisplayName": "馬拉地語", + "msDisplayName": "馬來語", + "msArabDisplayName": "馬來語(阿拉伯文)", + "msMYDisplayName": "馬來語(馬來西亞)", + "mtDisplayName": "馬耳他語", + "mwrDisplayName": "馬拉瓦語", + "myDisplayName": "緬甸語", + "nanDisplayName": "閩南語", + "nbDisplayName": "挪威語(博克馬爾)", + "neDisplayName": "尼泊爾語", + "newDisplayName": "尼瓦爾語", + "nlDisplayName": "荷蘭語", + "nlBEDisplayName": "弗拉芒語", + "noDisplayName": "挪威語", + "nrDisplayName": "南恩德貝勒", + "nsoDisplayName": "北索托", + "nusDisplayName": "努爾", + "nyDisplayName": "尼揚賈", + "ocDisplayName": "奧克西坦", + "omDisplayName": "奧羅莫", + "orDisplayName": "奧里亞", + "paDisplayName": "旁遮普語", + "paArabDisplayName": "旁遮普語(沙赫穆基)", + "paINDisplayName": "旁遮普語(古爾穆基)", + "pagDisplayName": "彭加西南語", + "pamDisplayName": "旁遮普語", + "papDisplayName": "帕皮阿門托語", + "plDisplayName": "波蘭語", + "psDisplayName": "普什圖語", + "ptDisplayName": "葡萄牙語", + "ptBRDisplayName": "葡萄牙語(巴西)", + "ptPTDisplayName": "葡萄牙語(葡萄牙)", + "quDisplayName": "克丘亞語", + "rajDisplayName": "拉賈斯坦語", + "rnDisplayName": "倫迪", + "roDisplayName": "羅馬尼亞語", + "roMDDisplayName": "摩爾多瓦語", + "romDisplayName": "羅曼尼語", + "ruDisplayName": "俄語", + "rwDisplayName": "基尼亞萬達語", + "saDisplayName": "梵語", + "satDisplayName": "桑塔利語", + "scnDisplayName": "西西里語", + "sdDisplayName": "信德語", + "sgDisplayName": "新高", + "shnDisplayName": "山", + "siDisplayName": "僧伽羅", + "skDisplayName": "斯洛伐克", + "slDisplayName": "斯洛文尼亞", + "smDisplayName": "薩摩亞", + "snDisplayName": "肖納", + "soDisplayName": "索馬利", + "sqDisplayName": "阿爾巴尼亞", + "srDisplayName": "塞爾維亞", + "srMEDisplayName": "黑山語", + "ssDisplayName": "斯瓦蒂語", + "stDisplayName": "南索托語", + "suDisplayName": "巽他語", + "svDisplayName": "瑞典語", + "swDisplayName": "斯瓦希里語", + "szlDisplayName": "西里西亞語", + "taDisplayName": "泰米爾語", + "teDisplayName": "泰盧固語", + "tetDisplayName": "特圖姆語", + "tgDisplayName": "塔吉克語", + "thDisplayName": "泰語", + "tiDisplayName": "提格利尼亞語", + "tkDisplayName": "土庫曼語", + "tlDisplayName": "他加祿語", + "tnDisplayName": "茨瓦納語", + "trDisplayName": "土耳其語", + "tsDisplayName": "宗加語", + "ttDisplayName": "塔塔爾語", + "ugDisplayName": "維吾爾語", + "ukDisplayName": "烏克蘭語", + "urDisplayName": "烏爾都語", + "urINDisplayName": "烏爾都語(印度)", + "urPKDisplayName": "烏爾都語(巴基斯坦)", + "uzDisplayName": "烏茲別克語", + "viDisplayName": "越南語", + "wuuDisplayName": "吳語", + "xhDisplayName": "科薩語", + "yiDisplayName": "意第緒語", + "yoDisplayName": "約魯巴語", + "yuaDisplayName": "尤卡特克", + "yueDisplayName": "廣東話", + "yueCNDisplayName": "廣東話(中國)", + "yueHKDisplayName": "廣東話(香港)", + "zhDisplayName": "中文", + "zhCNDisplayName": "中文(簡體)", + "zhTWDisplayName": "中文(繁體)", + "zuDisplayName": "祖魯語", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -12975,6 +11673,7 @@ }, "notStartedActivitiesTitle": "開放會議 ({num})", "inProgressActivitiesTitle": "正在進行中 ({num})", + "pickDifferentActivity": "選擇其他活動", "completedActivitiesTitle": "已完成 ({num})", "inOngoingActivity": "你有一個正在進行的活動!", "@notStartedActivitiesTitle": { @@ -13001,10 +11700,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "您的目標語言與此消息不匹配。要更新您的目標語言嗎?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "這是這個課程中的所有人。點擊任何用戶的頭像並選擇「開始對話」來發送私信。", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "這個詞彙將會從你的分析中永久移除", + "woman": "女性", + "man": "男性", + "otherGender": "其他", + "unselectedGender": "選擇一個性別選項", + "gender": "性別", + "chatParticipantTooltip": "這是這個聊天中的所有人。點擊任何用戶的頭像並選擇「開始對話」來發送私信。", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "學習工具對於不在目標語言中的消息是禁用的。", + "vocabEmoji": "詞彙表情符號", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "請求再生", + "optionalRegenerateReason": "(可選) 原因", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "你已為 {lemma} 設定了表情符號!我們將在未來的練習活動中使用這個表情符號來代表這個詞。", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "等待登錄完成", + "ssoDialogDesc": "我們已經打開了一個新標籤,以便您可以安全地登錄。", + "ssoDialogHelpText": "🤔 如果您沒有看到新標籤,請檢查您的彈出窗口阻止程序。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "禁用語言工具", + "disableLanguageToolsDesc": "你想要禁用自動語言輔助嗎?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "權限被拒絕。請啟用錄音權限以錄製音頻消息。", + "genericWebRecordingError": "發生錯誤。我們建議在錄製消息時使用 Chrome 瀏覽器。", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "為了獲得最佳的應用體驗,請擴大您的螢幕大小。", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "解鎖下一主題的活動", "activitiesToUnlockTopicDesc": "設置解鎖下一課程主題所需的活動數量", "@activitiesToUnlockTopicTitle": { @@ -13014,5 +11831,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "正確的詞彙定義練習", + "constructUseIncLMDesc": "不正確的詞彙定義練習", + "constructUseCorLADesc": "正確的詞彙音頻練習", + "constructUseIncLADesc": "不正確的詞彙音頻練習", + "constructUseBonus": "詞彙練習期間的獎勵", + "practiceVocab": "練習詞彙", + "selectMeaning": "選擇意思", + "selectAudio": "選擇匹配的音頻", + "congratulations": "恭喜!", + "anotherRound": "再來一輪", + "noActivityRequest": "目前沒有活動請求。", + "quit": "退出", + "congratulationsYouveCompletedPractice": "恭喜!你已完成練習課程。", + "mustHave10Words": "你必須至少有 10 個詞彙來練習它們。試著和朋友或 Pangea Bot 談談以發現更多!", + "botSettings": "機械人設置", + "activitySettingsOverrideWarning": "活動計劃決定的語言和語言水平", + "voice": "聲音", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 94693b098..401c2b283 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,6 +1,6 @@ { "@@locale": "zh", - "@@last_modified": "2026-01-06 13:02:25.686469", + "@@last_modified": "2026-01-07 14:27:59.550670", "about": "关于", "@about": { "type": "String", @@ -3381,26 +3381,14 @@ "displayNavigationRail": "在移动设备上显示导航栏", "@displayNavigationRail": {}, "customReaction": "自定义反应", - "accountInformation": "账户信息", - "addGroupDescription": "添加聊天描述", - "addNewFriend": "添加新朋友", - "alreadyHaveAnAccount": "已经有账户?", - "createNewGroup": "创建新聊天", - "editChatPermissions": "编辑聊天权限", "writeAMessageLangCodes": "输入 {l1} 或 {l2}...", "requests": "请求", - "allCorrect": "我会这么说!不错!", - "newWayAllGood": "我不会这么说,但看起来不错!", - "othersAreBetter": "嗯,可能有更好的表达方式。", "holdForInfo": "点击并按住获取单词信息。", "greenFeedback": "这就是我会说的!", "yellowFeedback": "嗯,你可以试试这个,看看是否有效!要使用这个词,只需再次点击它。", "redFeedback": "我觉得那不对……", "itInstructionsTitle": "我可以帮你翻译!", "itInstructionsBody": "你可以点击并按住选项获取单词信息。", - "oneday": "过去24小时", - "oneweek": "过去7天", - "onemonth": "过去一个月", "gaTooltip": "使用语法辅助的二级语言", "taTooltip": "使用翻译辅助的二级语言", "unTooltip": "其他", @@ -3410,58 +3398,27 @@ "interactiveTranslatorAllowed": "学生选择", "interactiveTranslatorRequired": "必需", "notYetSet": "尚未设置", - "myLearning": "我的分析", "waTooltip": "无需辅助的二级语言", - "changeDateRange": "更改日期范围", - "classDescription": "描述", - "addStudents": "通过链接或代码邀请用户", - "copyClassLink": "复制邀请链接", - "copyClassCode": "复制邀请代码", - "inviteStudentByUserName": "通过用户名邀请用户", "languageSettings": "语言设置", "interactiveTranslator": "翻译辅助", - "shareVideo": "分享视频", - "shareVideoDesc": "开启此功能,允许学生在聊天中分享视频。", - "shareFiles": "分享文件", - "selectLanguageLevel": "选择语言水平", "noIdenticalLanguages": "请选择不同的基础语言和目标语言", - "iWantALanguagePartnerFrom": "来自:", - "worldWide": "全球", - "noResults": "没有结果!尝试扩大搜索范围。", "searchBy": "按国家和语言搜索", - "iWantAConversationPartner": "我想要一个对话伙伴,他/她", - "iWantALanguagePartnerWhoSpeaks": "会说:", - "iWantALanguagePartnerWhoIsLearning": "正在学习:", "joinWithClassCode": "加入课程", - "joinWithClassCodeHint": "输入邀请码", - "languageLevelPreA1": "初学者(Pre A1)", - "languageLevelA1": "初级(A1)", - "languageLevelA2": "基础(A2)", - "languageLevelB1": "中级(B1)", - "languageLevelB2": "中高级(B2)", - "languageLevelC1": "高级(C1)", - "languageLevelC2": "精通(C2)", + "languageLevelPreA1": "初学者低级(预 A1)", + "languageLevelA1": "新手中级 (A1)", + "languageLevelA2": "初学者高水平 (A2)", + "languageLevelB1": "中级中水平 (B1)", + "languageLevelB2": "高级低水平 (B2)", + "languageLevelC1": "高级中水平 (C1)", + "languageLevelC2": "优秀 (C2)", "changeTheNameOfTheClass": "更改名称", "changeTheNameOfTheChat": "更改聊天名称", - "askPangeaBot": "向Pangea机器人询问上下文定义。", "sorryNoResults": "抱歉,没有结果。", "ignoreInThisText": "忽略", - "helpMeTranslate": "是的!", - "needsItShortMessage": "超出目标", "needsItMessage": "等等,那不是{targetLanguage}!你需要帮助翻译吗?", - "needsIgcMessage": "此消息存在语法错误。", - "tokenTranslationTitle": "一个单词在你的基础语言中。", - "spanTranslationDesc": "请查看下面的可能翻译。", - "spanTranslationTitle": "一些单词在你的基础语言中。", - "l1SpanAndGrammarTitle": "超出目标语言", - "l1SpanAndGrammarDesc": "这可能是你的基础语言,也可能是语法错误。", - "otherTitle": "你有一个错误。", - "otherDesc": "请查看下面的可能修正。", "countryInformation": "我的国家", - "myLanguages": "我的基础和目标语言", "targetLanguage": "目标语言", "sourceLanguage": "基础语言", - "languagesISpeak": "我会说的语言", "updateLanguage": "我的语言", "whatLanguageYouWantToLearn": "你想学习哪种语言?", "whatIsYourBaseLanguage": "你的基础语言是什么?", @@ -3476,13 +3433,8 @@ "errorDisableLanguageAssistanceUserDesc": "点击这里更新翻译协助和语法协助设置", "errorDisableITClassDesc": "此课程中的翻译协助已关闭。", "errorDisableIGCClassDesc": "此课程中的语法协助已关闭。", - "itIsDisabled": "互动翻译已禁用", - "igcIsDisabled": "互动语法检查已禁用", - "goToLearningSettings": "前往学习设置", "error405Title": "未设置语言", "error405Desc": "请在主菜单 > 学习设置中设置您的语言。", - "loginOrSignup": "用以下方式登录", - "iAgreeToThe": "我同意", "termsAndConditions": "条款和条件", "andCertifyIAmAtLeast13YearsOfAge": "并证明我已满16岁。", "error502504Title": "哇,在线的学生很多!", @@ -3490,40 +3442,21 @@ "error404Title": "翻译错误!", "error404Desc": "Pangea机器人不确定如何翻译这个...", "errorPleaseRefresh": "我们正在处理!请重新加载并重试。", - "toggleIT": "互动翻译", - "toggleIGC": "互动语法检查", - "toggleToolSettingsDescription": "在这里您可以切换您的个人语言工具设置。", "connectedToStaging": "已连接到预发布环境", "learningSettings": "学习设置", - "sendVoiceNotes": "发送语音笔记", - "sendVoiceNotesDesc": "开启此功能以允许学生在聊天中发送语音笔记。", - "chatTopic": "聊天主题", - "chatTopicDesc": "设置聊天主题", - "inviteStudentByUserNameDesc": "如果您的学生已经有账户,您可以搜索他们。", "participants": "参与者", - "almostPerfect": "看起来差不多!这是我会说的话。", - "prettyGood": "相当不错!这是我会说的话。", - "letMeThink": "嗯,让我看看你表现如何!", "clickMessageTitle": "需要帮助吗?", "clickMessageBody": "点击消息以获取翻译、回放等语言工具!", - "understandingMessagesTitle": "定义和翻译!", - "understandingMessagesBody": "点击带下划线的单词获取定义。使用消息选项(右上角)进行翻译。", "allDone": "全部完成!", "vocab": "词汇", "low": "我们有证据表明用户不理解这些单词。", "medium": "这些单词已被使用。尚不清楚用户是否完全理解这些单词。", "high": "我们有证据表明用户理解这些单词。", - "unknownProficiency": "这些单词尚未在Pangea聊天中使用。", - "changeView": "切换视图。", - "clearAll": "清除所有单词?", - "generateVocabulary": "根据标题和描述生成词汇", - "generatePrompts": "生成提示", "subscribe": "订阅", "getAccess": "立即订阅!", "subscriptionDesc": "消息免费!订阅以解锁互动翻译、语法检查和学习分析功能。", "subscriptionManagement": "订阅管理", "currentSubscription": "当前订阅", - "changeSubscription": "更改您的订阅", "cancelSubscription": "取消您的订阅", "selectYourPlan": "选择您的计划", "subsciptionPlatformTooltip": "请在您的原设备上登录以管理您的订阅计划", @@ -3532,9 +3465,6 @@ "paymentHistory": "支付记录", "emptyChatDownloadWarning": "无法下载空聊天", "update": "更新", - "updateDesc": "您现在可以将此应用从 {localVersion} 更新到 {storeVersion}", - "maybeLater": "稍后", - "mainMenu": "主菜单", "toggleImmersionMode": "沉浸模式", "toggleImmersionModeDesc": "启用后,所有消息都以您的目标语言显示。此设置在语言交流中最为有用。", "itToggleDescription": "此语言学习工具将识别您的基础语言中的单词,并帮助您将其翻译成目标语言。虽然罕见,但AI可能会出现翻译错误。", @@ -3549,212 +3479,13 @@ "definitionsToolDescription": "启用后,蓝色下划线的单词可以点击查看定义。点击消息以获取定义。", "translationsToolDescrption": "启用后,点击消息和翻译图标即可查看您的基础语言中的消息。", "welcomeBack": "欢迎回来!如果您是2023-2024试点的一部分,请联系我们获取您的特别试点订阅。如果您是教师,或者您的机构为您的班级购买了许可证,请联系我们获取您的教师订阅。", - "kickAllStudents": "踢出所有学生", - "kickAllStudentsConfirmation": "您确定要踢出所有学生吗?", - "inviteAllStudents": "邀请所有学生", - "inviteAllStudentsConfirmation": "您确定要邀请所有学生吗?", - "inviteUsersFromPangea": "添加管理员", - "redeemPromoCode": "兑换优惠码", - "enterPromoCode": "输入优惠码", "downloadTxtFile": "下载文本文件", "downloadCSVFile": "下载CSV文件", "promotionalSubscriptionDesc": "您目前拥有终身促销订阅。若需帮助更改订阅,请联系 support@pangea.chat。", "originalSubscriptionPlatform": "通过 {purchasePlatform} 购买的订阅", "oneWeekTrial": "一周试用", "downloadXLSXFile": "下载Excel文件", - "abDisplayName": "阿布哈兹语", - "aaDisplayName": "阿法尔语", - "afDisplayName": "南非荷兰语", - "akDisplayName": "阿坎语", - "sqDisplayName": "阿尔巴尼亚语", - "amDisplayName": "阿姆哈拉语", - "arDisplayName": "阿拉伯语", - "anDisplayName": "阿拉贡语", - "hyDisplayName": "亚美尼亚语", - "asDisplayName": "阿萨姆语", - "avDisplayName": "阿瓦尔语", - "aeDisplayName": "古维斯特语", - "ayDisplayName": "艾马拉语", - "azDisplayName": "阿塞拜疆语", - "bmDisplayName": "班巴拉语", - "baDisplayName": "巴什基尔语", - "euDisplayName": "巴斯克语", - "beDisplayName": "白俄罗斯语", - "bnDisplayName": "孟加拉语", - "bhDisplayName": "比哈里语", - "biDisplayName": "比斯拉马语", - "bsDisplayName": "波斯尼亚语", - "brDisplayName": "布列塔尼语", - "bgDisplayName": "保加利亚语", - "myDisplayName": "缅甸语", - "caDisplayName": "加泰罗尼亚语,瓦伦西亚语", - "chDisplayName": "查莫罗语", - "ceDisplayName": "车臣语", - "nyDisplayName": "奇切瓦语,切瓦语,尼扬贾语", - "zhDisplayName": "中文", - "cvDisplayName": "楚瓦什语", - "kwDisplayName": "康沃尔语", - "coDisplayName": "科西嘉语", - "crDisplayName": "克里语", - "hrDisplayName": "克罗地亚语", - "csDisplayName": "捷克语", - "daDisplayName": "丹麦语", - "dvDisplayName": "迪维希语;迪维希语;马尔代夫语;", - "nlDisplayName": "荷兰语", - "enDisplayName": "英语", - "eoDisplayName": "世界语", - "etDisplayName": "爱沙尼亚语", - "eeDisplayName": "埃维语", - "foDisplayName": "法罗语", - "fjDisplayName": "斐济语", - "fiDisplayName": "芬兰语", - "frDisplayName": "法语", - "ffDisplayName": "富拉语;富拉语;普拉尔语;普拉拉语", - "glDisplayName": "加利西亚语", - "kaDisplayName": "格鲁吉亚语", - "deDisplayName": "德语", - "elDisplayName": "现代希腊语", - "gnDisplayName": "瓜拉尼语", - "guDisplayName": "古吉拉特语", - "htDisplayName": "海地克里奥尔语", - "haDisplayName": "豪萨语", - "heDisplayName": "现代希伯来语", - "hzDisplayName": "赫雷罗语", - "hiDisplayName": "印地语", - "hoDisplayName": "希里莫图语", - "huDisplayName": "匈牙利语", - "iaDisplayName": "国际语", - "idDisplayName": "印尼语", - "ieDisplayName": "国际语(Interlingue)", - "gaDisplayName": "爱尔兰语", - "igDisplayName": "伊博语", - "ikDisplayName": "伊努皮克语", - "ioDisplayName": "伊多语", - "isDisplayName": "冰岛语", - "itDisplayName": "意大利语", - "iuDisplayName": "因纽特语", - "jaDisplayName": "日语", - "jvDisplayName": "爪哇语", - "klDisplayName": "格陵兰语", - "knDisplayName": "卡纳达语", - "krDisplayName": "卡努里语", - "ksDisplayName": "克什米尔语", - "kkDisplayName": "哈萨克语", - "kmDisplayName": "高棉语", - "kiDisplayName": "基库尤语,吉库尤语", - "rwDisplayName": "卢旺达语", - "kyDisplayName": "吉尔吉斯语", - "kvDisplayName": "科米语", - "kgDisplayName": "刚果语", - "koDisplayName": "韩语", - "kuDisplayName": "库尔德语", - "kjDisplayName": "宽亚马语,宽亚马语", - "laDisplayName": "拉丁语", - "lbDisplayName": "卢森堡语,莱茨堡语", - "lgDisplayName": "卢干达语", - "liDisplayName": "林堡语,林堡方言", - "lnDisplayName": "林加拉语", - "loDisplayName": "老挝语", - "ltDisplayName": "立陶宛语", - "luDisplayName": "卢巴-坎塔加语", - "lvDisplayName": "拉脱维亚语", - "gvDisplayName": "马恩岛语", - "mkDisplayName": "马其顿语", - "mgDisplayName": "马尔加什语", - "msDisplayName": "马来语", - "mlDisplayName": "马拉雅拉姆语", - "mtDisplayName": "马耳他语", - "miDisplayName": "毛利语", - "mrDisplayName": "马拉地语(马拉地语)", - "mhDisplayName": "马绍尔语", - "mnDisplayName": "蒙古语", - "naDisplayName": "瑙鲁语", - "nvDisplayName": "纳瓦霍语", - "nbDisplayName": "挪威布克莫尔语", - "ndDisplayName": "北恩德贝莱语", - "neDisplayName": "尼泊尔语", - "ngDisplayName": "恩东加语", - "nnDisplayName": "挪威尼诺斯克语", - "noDisplayName": "挪威语", - "iiDisplayName": "诺苏语", - "nrDisplayName": "南恩德贝莱语", - "ocDisplayName": "奥克语", - "ojDisplayName": "奥吉布威语,奥吉布瓦语", - "cuDisplayName": "古教斯拉夫语,教会斯拉夫语,教会斯拉夫语,古保加利亚语,古斯拉夫语", - "omDisplayName": "奥罗莫语", - "orDisplayName": "奥里雅语", - "osDisplayName": "奥塞梯语,奥塞梯语", - "paDisplayName": "旁遮普语,旁遮普语", - "piDisplayName": "巴利语", - "faDisplayName": "波斯语", - "plDisplayName": "波兰语", - "psDisplayName": "普什图语,普什图语", - "ptDisplayName": "葡萄牙语", - "quDisplayName": "克丘亚语", - "rmDisplayName": "罗曼什语", - "rnDisplayName": "基隆迪语", - "roDisplayName": "罗马尼亚语,摩尔多瓦语", - "ruDisplayName": "俄语", - "saDisplayName": "梵语(Saṅskṛta)", - "scDisplayName": "撒丁语", - "sdDisplayName": "信德语", - "seDisplayName": "北萨米语", - "smDisplayName": "萨摩亚语", - "sgDisplayName": "桑戈语", - "srDisplayName": "塞尔维亚语", - "gdDisplayName": "苏格兰盖尔语,盖尔语", - "snDisplayName": "绍纳语", - "siDisplayName": "僧伽罗语,僧伽罗语", - "skDisplayName": "斯洛伐克语", - "slDisplayName": "斯洛文尼亚语", - "soDisplayName": "索马里语", - "stDisplayName": "南索托语", - "esDisplayName": "西班牙语", - "suDisplayName": "巽他语", - "swDisplayName": "斯瓦希里语", - "ssDisplayName": "斯瓦蒂语", - "svDisplayName": "瑞典语", - "taDisplayName": "泰米尔语", - "teDisplayName": "泰卢固语", - "tgDisplayName": "塔吉克语", - "thDisplayName": "泰语", - "tiDisplayName": "提格里尼亚语", - "boDisplayName": "藏语标准语,藏语,中部藏语", - "tkDisplayName": "土库曼语", - "tlDisplayName": "塔加洛语", - "tnDisplayName": "茨瓦纳语", - "toDisplayName": "汤加(汤加群岛)", - "trDisplayName": "土耳其语", - "tsDisplayName": "宗加语", - "ttDisplayName": "鞑靼语", - "twDisplayName": "特威语", - "tyDisplayName": "大溪地语", - "ugDisplayName": "维吾尔语", - "ukDisplayName": "乌克兰语", - "urDisplayName": "乌尔都语", - "uzDisplayName": "乌兹别克语", - "veDisplayName": "文达语", - "viDisplayName": "越南语", - "voDisplayName": "沃拉普克语", - "waDisplayName": "瓦隆语", - "cyDisplayName": "威尔士语", - "woDisplayName": "沃洛夫语", - "fyDisplayName": "西弗里西亚语", - "xhDisplayName": "科萨语", - "yiDisplayName": "意第绪语", - "yoDisplayName": "约鲁巴语", - "zaDisplayName": "壮语,布朗语", "unkDisplayName": "未知", - "zuDisplayName": "祖鲁语", - "hawDisplayName": "夏威夷语", - "hmnDisplayName": "苗语", - "multiDisplayName": "多语言", - "cebDisplayName": "宿务语", - "dzDisplayName": "宗喀语", - "iwDisplayName": "希伯来语", - "jwDisplayName": "爪哇语", - "moDisplayName": "摩尔多瓦语", - "shDisplayName": "塞尔维亚-克罗地亚语", "wwCountryDisplayName": "全球", "afCountryDisplayName": "阿富汗", "axCountryDisplayName": "奥兰群岛", @@ -4002,41 +3733,25 @@ "yeCountryDisplayName": "也门", "zmCountryDisplayName": "赞比亚", "zwCountryDisplayName": "津巴布韦", - "pay": "支付", - "allPrivateChats": "私聊", - "unknownPrivateChat": "未知私聊", + "pay": "结账", "invitedToSpace": "{user} 邀请你加入课程:{space}!你是否愿意接受?", - "declinedInvitation": "已拒绝邀请", - "acceptedInvitation": "已接受邀请", "youreInvited": "📩 你被邀请了!", "invitedToChat": "{user} 邀请你加入聊天:{name}!你是否愿意接受?", "monthlySubscription": "月度", "yearlySubscription": "年度", "defaultSubscription": "潘吉亚聊天订阅", "freeTrial": "免费试用", - "grammarAnalytics": "错误分析", "total": "总计:", "noDataFound": "未找到数据", - "promoSubscriptionExpirationDesc": "您的当前订阅为促销订阅,有效期至 {expiration}。如需帮助更改订阅,请联系 support@pangea.chat。", - "emptyChatNameWarning": "请输入此聊天的名称", "blurMeansTranslateTitle": "为什么消息会模糊?", "blurMeansTranslateBody": "当沉浸模式开启时,在您的基础语言中发送的消息将被模糊,Pangea Bot会将其翻译成您的目标语言。沉浸模式可以在个人和课程设置中切换。", - "someErrorTitle": "嗯,出了点问题", - "someErrorBody": "可能是错误或您的基础语言中出现了问题。", "bestCorrectionFeedback": "正确!", "distractorFeedback": "不太对。", "bestAnswerFeedback": "正确!", "definitionDefaultPrompt": "这个词是什么意思?", "practiceDefaultPrompt": "最佳答案是什么?", "correctionDefaultPrompt": "最好的替代词是什么?", - "itStartDefaultPrompt": "你需要帮助翻译吗?", - "lockedChatWarning": "🔒 该聊天已被锁定", - "lockChat": "锁定聊天", - "suggestToChat": "建议加入此聊天", - "suggestToChatDesc": "建议的聊天将显示在聊天列表中", "acceptSelection": "接受更正", - "acceptSelectionAnyway": "无论如何使用", - "makingActivity": "正在制作活动", "why": "为什么?", "definition": "定义", "exampleSentence": "例句", @@ -4044,128 +3759,55 @@ "reportMessageTitle": "{reportingUserId} 在房间 {roomName} 中举报了来自 {reportedUserId} 的消息", "reportMessageBody": "消息:{reportedMessage}\n原因:{reason}", "noTeachersFound": "未找到可举报的老师", - "viewArchive": "查看存档", "trialExpiration": "您的免费试用将在 {expiration} 到期", "freeTrialDesc": "新用户可获得为期一周的Pangea聊天免费试用", "activateTrial": "免费7天试用", "successfullySubscribed": "订阅成功!", "clickToManageSubscription": "点击这里管理您的订阅。", - "errorGettingAudio": "获取音频时出错。请刷新页面后重试。", "signUp": "注册", "pleaseChooseAtLeastChars": "请选择至少 {min} 个字符。", "noEmailWarning": "请输入有效的电子邮箱地址,否则您将无法重置密码。如果不需要,请再次点击按钮继续。", "pleaseEnterValidEmail": "请输入有效的电子邮箱地址。", "pleaseChooseAUsername": "请选择用户名", - "chooseAUsername": "选择用户名", "define": "定义", "listen": "听", - "addConversationBot": "启用对话机器人", - "addConversationBotDesc": "在此聊天中添加机器人", - "convoBotSettingsDescription": "编辑对话主题和难度", - "enterAConversationTopic": "输入对话主题", - "conversationTopic": "对话主题", - "enableModeration": "启用 moderation", - "enableModerationDesc": "启用自动 moderation,在消息发送前进行审核", - "conversationLanguageLevel": "此对话的语言水平是?", - "showDefinition": "显示定义", - "subscriptionPopupTitle": "此句子可能有语法错误...", - "subscriptionPopupDesc": "立即订阅以解锁翻译和语法纠正!", - "seeOptions": "查看选项", - "continuedWithoutSubscription": "继续不订阅", "trialPeriodExpired": "您的试用期已过", - "selectToDefine": "点击任何单词查看其定义!", "translations": "翻译", "messageAudio": "消息音频", "definitions": "定义", "subscribedToUnlockTools": "订阅以解锁互动翻译和语法检查、音频播放、个性化练习活动和学习分析!", "translationTooltip": "翻译", - "audioTooltip": "播放音频", "speechToTextTooltip": "转录", - "certifyAge": "我证明我已满{age}岁", "kickBotWarning": "踢出Pangea机器人将会将对话机器人从此聊天中移除。", - "joinToView": "加入此房间以查看详情", "refresh": "刷新", - "autoPlayTitle": "自动播放消息", - "autoPlayDesc": "启用后,选中的消息文本转语音音频将自动播放。", "messageAnalytics": "消息分析", "words": "词数", "score": "得分", "accuracy": "准确率", "points": "积分", "noPaymentInfo": "无需支付信息!", - "conversationBotModeSelectDescription": "聊天活动", - "conversationBotModeSelectOption_discussion": "讨论", - "conversationBotModeSelectOption_custom": "自定义", - "conversationBotModeSelectOption_conversation": "对话", - "conversationBotModeSelectOption_textAdventure": "文字冒险", - "conversationBotModeSelectOption_storyGame": "故事游戏", - "conversationBotDiscussionZone_title": "讨论设置", - "conversationBotDiscussionZone_discussionTopicLabel": "讨论主题", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "设置讨论主题", - "conversationBotDiscussionZone_discussionKeywordsLabel": "讨论关键词", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "设置讨论关键词", - "conversationBotDiscussionZone_discussionKeywordsHintText": "用逗号分隔的关键词列表以引导讨论", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "按计划发送讨论提示", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "讨论提示之间的小时数", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "在⏩反应时响应", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "发送讨论提示的反应", - "conversationBotCustomZone_title": "自定义设置", - "conversationBotCustomZone_customSystemPromptLabel": "系统提示", - "conversationBotCustomZone_customSystemPromptPlaceholder": "设置自定义系统提示", - "conversationBotCustomZone_customSystemPromptEmptyError": "缺少自定义系统提示", - "botConfig": "机器人和活动设置", - "botConfigNoPermissionTitle": "无权限", - "botConfigNoPermissionMessage": "联系房间管理员以更改机器人配置", - "addConversationBotDialogTitleInvite": "确认邀请会话机器人", - "addConversationBotButtonInvite": "邀请", - "addConversationBotDialogInviteConfirmation": "邀请", - "addConversationBotButtonTitleRemove": "确认移除会话机器人", - "addConversationBotButtonRemove": "移除", - "addConversationBotDialogRemoveConfirmation": "移除", - "conversationBotConfigConfirmChange": "确认", - "conversationBotStatus": "邀请机器人", - "conversationBotTextAdventureZone_title": "文字冒险", - "conversationBotTextAdventureZone_instructionLabel": "游戏主持人指令", - "conversationBotTextAdventureZone_instructionPlaceholder": "设置游戏主持人指令", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "缺少游戏主持人指令", - "studentAnalyticsNotAvailable": "学生数据目前不可用", - "roomDataMissing": "您不属于的房间中的某些数据可能缺失。", "updatePhoneOS": "您可能需要更新设备的操作系统版本。", "wordsPerMinute": "每分钟字数", "autoIGCToolName": "自动运行Pangea写作辅助", "autoIGCToolDescription": "在发送消息前自动运行Pangea聊天语法和翻译写作辅助。", - "runGrammarCorrection": "检查消息", - "grammarCorrectionFailed": "需要解决的问题", - "grammarCorrectionComplete": "看起来不错!", "tooltipInstructionsTitle": "不确定它的作用吗?", "tooltipInstructionsMobileBody": "长按项目以查看工具提示。", "tooltipInstructionsBrowserBody": "将鼠标悬停在项目上以查看工具提示。", "chatCapacity": "聊天容量", "roomFull": "此房间已达容量上限。", - "topicNotSet": "尚未设置主题。", - "chatCapacityNotSet": "此聊天没有容量限制。", "chatCapacityHasBeenChanged": "聊天容量已更改", "chatCapacitySetTooLow": "聊天容量必须至少为 {count}。", "chatCapacityExplanation": "聊天容量限制允许加入聊天的成员人数。", - "chatExceedsCapacity": "此聊天已超出容量。", "tooManyRequest": "请求过多,请稍后再试。", "enterNumber": "请输入一个整数值。", "buildTranslation": "根据上方的选项构建您的翻译", - "nonexistentSelection": "所选内容已不存在。", - "changeAnalyticsLanguage": "更改分析语言", "practice": "练习", "noLanguagesSet": "未设置语言", - "noActivitiesFound": "暂时就到这里!稍后回来获取更多。", - "hintTitle": "提示:", "speechToTextBody": "对于语音消息,您可以看到转录内容以及说话者的每分钟字数得分。", "versionNotFound": "未找到版本", "fetchingVersion": "正在获取版本...", "versionFetchError": "获取版本信息时出错", "versionText": "版本:{version}+{buildNumber}", - "languageButtonLabel": "语言:{currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "自动播放翻译", - "interactiveTranslatorAutoPlayDesc": "启动互动翻译器而无需确认。", - "changeAnalyticsView": "切换分析视图", "l1TranslationBody": "您的基础语言消息将不会被翻译。", "deleteSubscriptionWarningTitle": "您有一个有效的订阅", "deleteSubscriptionWarningBody": "删除您的账户不会自动取消您的订阅。", @@ -4173,9 +3815,7 @@ "error520Title": "请再试一次。", "error520Desc": "抱歉,我们无法理解您的消息……", "wordsUsed": "已使用的单词", - "errorTypes": "错误类型", "level": "等级", - "canceledSend": "已取消发送", "morphsUsed": "已使用的形态", "translationChoicesBody": "点击并按住一个选项以获取提示。", "grammar": "语法", @@ -4185,7 +3825,6 @@ "reportContentIssueTitle": "举报内容问题", "feedback": "可选反馈", "reportContentIssueDescription": "哎呀!AI可以促进个性化学习体验,但……也会产生幻觉。请提供您的反馈,我们会再次尝试。", - "changeContent": "哎呀!AI可以促进个性化学习体验,但……也会产生幻觉。它应该是什么?", "clickTheWordAgainToDeselect": "点击已选择的单词以取消选择。", "l2SupportNa": "不可用", "l2SupportAlpha": "Alpha", @@ -4419,7 +4058,6 @@ "grammarCopySPC": "特指性", "grammarCopyPARTTYPE": "部分格类型", "grammarCopyINTREL": "疑问-关系", - "grammarCopyNUMFORMpsor": "所有者的数", "grammarCopyUNKNOWN": "未知", "grammarCopyNUMBERPSOR": "所有者的数字", "grammarCopyPOSS": "所有格", @@ -4465,28 +4103,14 @@ "grammarCopyVOICEdir": "直接", "grammarCopyVOICEinv": "反向", "grammarCopyVOICErcp": "互惠", - "enterPrompt": "请输入系统提示", - "selectBotLanguage": "选择机器人语言", - "chooseVoice": "选择语音", - "enterLanguageLevel": "请输入语言水平", - "enterDiscussionTopic": "请输入讨论主题", - "selectBotChatMode": "选择聊天模式", - "messageNotInTargetLang": "消息不在目标语言中", "other": "其他", "levelShort": "等级 {level}", - "botModeValidation": "请选择聊天模式", "clickBestOption": "选择最佳选项以翻译您的消息!", "completeActivitiesToUnlock": "完成至少一项活动以解锁翻译!", - "botSettingsSubtitle": "邀请机器人管理聊天活动", - "invitePeople": "邀请用户", "noCapacityLimit": "没有容量限制", "downloadGroupText": "下载群组文本", "notificationsOn": "通知已开启", "notificationsOff": "通知已关闭", - "chatCanBeFoundViaSearch": "聊天可以通过搜索找到", - "requireCodeToJoin": "加入需要验证码", - "canFindInSearch": "可以在搜索中找到", - "addChatToSpace": "添加聊天", "createChatAndInviteUsers": "创建聊天并邀请用户", "updatedNewSpaceDescription": "课程允许你整合你的聊天并建立私有或公共社区。", "joinWithCode": "用代码加入", @@ -4522,39 +4146,19 @@ "constructUseCollected": "已在聊天中收集", "constructUseNanDesc": "不适用", "xpIntoLevel": "{currentXP} / {maxXP} 经验值", - "signInWithUsername": "使用用户名和密码登录", - "registrationEmailMessage": "请通过发送到您的邮箱的链接验证您的邮箱。在某些情况下,邮件可能需要最多5分钟才能到达。也请检查您的垃圾邮件文件夹。", "enableTTSToolName": "启用文本转语音", "enableTTSToolDescription": "允许应用程序为目标语言中的部分文本生成文本转语音输出。", - "couldNotFindTTS": "我们找不到适用于您当前目标语言的文本转语音引擎。", - "ttsInstructionsHyperlink": "点击这里查看在您的设备上下载新语音的说明。", - "createAnAccount": "创建账户", - "signIn": "登录", - "signUpWithEmail": "用邮箱注册", - "signUpWithGoogle": "用Google注册", - "signUpWithApple": "用Apple注册", "yourUsername": "您的用户名", "yourEmail": "您的邮箱", - "pleaseEnterAnEmail": "请输入邮箱地址", - "signInWithGoogle": "用Google登录", - "signInWithApple": "用Apple登录", - "chooseYourAvatar": "选择您的头像", "iWantToLearn": "我想学习", - "letsStart": "让我们开始", - "pleaseAgreeToTOS": "请同意条款和条件", "pleaseEnterEmail": "请输入有效的电子邮件地址。", - "pleaseSelectALanguage": "请选择一种语言", "myBaseLanguage": "我的基础语言", - "clickWordsInstructions": "🧻 点击任何单词以获取详细信息。🤐", - "chooseBestDefinition": "这个词的意思是什么?", "meaningSectionHeader": "含义:", "formSectionHeader": "在聊天中使用的形式:", - "noEmojiSelectedTooltip": "未选择表情符号", "writingExercisesTooltip": "写作", "listeningExercisesTooltip": "听力", "readingExercisesTooltip": "阅读", "meaningNotFound": "未找到含义。", - "formsNotFound": "未找到形式。", "chooseBaseForm": "选择基本形式", "notTheCodeError": "抱歉,那不是代码!", "totalXP": "总经验值", @@ -4594,9 +4198,6 @@ "pickAnEmoji": "你喜欢为'{lemma}'选择哪个表情?", "chooseLemmaMeaningInstructionsBody": "将意思与消息中的单词匹配!", "doubleClickToEdit": "双击编辑。", - "removeFeature": "移除{feature}", - "chooseCorrectLabel": "选择正确的标签。", - "levelPopupTitle": "恭喜你达到\n第{level}级", "activityPlannerTitle": "活动规划器", "topicLabel": "主题", "topicPlaceholder": "选择一个主题...", @@ -4604,7 +4205,6 @@ "modePlaceholder": "选择一种模式...", "learningObjectiveLabel": "学习目标", "learningObjectivePlaceholder": "选择一个学习目标...", - "mediaLabel": "学习者应分享的媒体", "languageOfInstructionsLabel": "活动说明的语言", "targetLanguageLabel": "目标语言", "cefrLevelLabel": "CEFR等级", @@ -4619,20 +4219,15 @@ "instructions": "说明", "numberOfLearners": "学习者人数", "mustBeInteger": "必须是整数,例如1、2、3等", - "noLemmasFound": "没有超过 {xp} XP 的词汇。继续练习!", "constructUsePvmDesc": "以语音消息形式生成", - "lockedMorphFeature": "等待解锁", "leaveSpaceDescription": "退出课程后,您将离开其中所有的聊天。其他用户将看到您已离开课程。", - "whatIsLemma": "什么是词元?", "constructUseCorMmDesc": "正确的消息含义", "constructUseIncMmDesc": "错误的消息含义", "constructUseIgnMmDesc": "被忽略的消息含义", "clickForMeaningActivity": "点击这里进行意义挑战", "meaning": "含义", "chatWith": "与{displayname}组队", - "slightlyOffensive": "略带冒犯", "clickOnEmailLink": "请点击电子邮件中的链接,然后继续。\n\n如果未收到邮件,请检查您的垃圾邮件文件夹。", - "whoIsAllowedToJoinThisChat": "谁可以加入此聊天", "dontForgetPassword": "别忘了你的密码!", "enableAutocorrectToolName": "启用设备自动更正", "enableAutocorrectDescription": "如果您的设备支持您正在学习的语言,可以启用设备自动更正,以在输入时修正常见错误。", @@ -4660,48 +4255,26 @@ "autocorrectNotAvailable": "很抱歉,您的平台目前不支持此功能。请关注后续开发!", "pleaseUpdateApp": "请更新应用以继续。", "chooseEmojiInstructionsBody": "将表情符号与它们最能代表的单词匹配。别担心!不同意也不会扣分。😊", - "pickAnEmojiFor": "为 {lemma} 选择一个表情符号", "analyticsVocabListBody": "这是你所有的词汇!当你获得每个单词的经验值时,它们会从幼苗成长为盛开。点击任何单词以查看更多细节。", "morphAnalyticsListBody": "这些是你正在学习的语言中的所有语法概念!你在聊天时遇到它们时会解锁它们。点击查看详情。", "knockSpaceSuccess": "你已请求加入此课程!管理员将在收到请求后回复你 😀", - "joinByCode": "通过代码加入", "chooseWordAudioInstructionsBody": "听完整个消息,然后将音频与单词匹配。", "chooseMorphsInstructionsBody": "点击拼图块以回答语法问题!", - "inviteAndLaunch": "邀请并启动", - "createOwnChat": "创建你自己的聊天", "pleaseEnterInt": "请输入一个数字", "home": "首页", "join": "加入", "readingAssistanceOverviewBody": "点击下面的按钮进行匹配表情符号、音频、单词含义和语法概念的迷你游戏。或者点击任何单词获取详细信息。", - "learnByTexting": "通过短信学习", - "levelSummaryTrigger": "查看总结", "levelSummaryPopupTitle": "第 {level} 级总结", - "referFriends": "推荐朋友", - "referFriendDialogTitle": "邀请朋友加入你的对话", - "referFriendDialogDesc": "你有朋友对与你一起学习新语言感兴趣吗?然后复制并发送此邀请链接,加入并开始与你聊天。", - "youUnlocked": "你已解锁", "resetInstructionTooltipsTitle": "重置操作提示", "resetInstructionTooltipsDesc": "点击显示像新用户一样的操作提示。", "selectForGrammar": "选择一个语法图标以查看活动和详细信息。", - "newChatActivityTitle": "添加一个有趣的活动?", - "newChatActivityDesc": "使用活动规划器让每个群聊都充满冒险!为群组设置吸引人的主题和目标,用精彩的图片让对话生动起来。激发富有想象力的讨论,让乐趣轻松流淌!", - "exploreMore": "探索更多", "randomize": "随机", "clear": "清除", "makeYourOwnActivity": "创建你自己的活动", "featuredActivities": "精选", - "goToChat": "前往聊天", "save": "保存", - "selectActivity": "选择活动", - "wordFocusListeningMultipleChoice": "哪个音频与这个单词匹配?", "startChat": "开始聊天", "translationProblem": "翻译问题", - "perfectTranslation": "完美的翻译!", - "greatJobTranslation": "这次翻译做得很好!", - "goodJobTranslation": "这次翻译不错。", - "makingProgress": "你在取得进步!", - "keepPracticing": "继续练习!", - "niceJob": "干得好!", "askToJoin": "请求加入", "emptyChatWarningTitle": "聊天为空", "emptyChatWarningDesc": "你还没有邀请任何人加入你的聊天。前往聊天设置邀请你的联系人或机器人。你也可以稍后再做。", @@ -4720,8 +4293,6 @@ "languageLevelC2Desc": "我几乎能理解听到或阅读的所有内容,并能流利准确地表达自己。", "newVocab": "新词汇", "newGrammar": "新语法概念", - "congratulationsOnReaching": "你已达到第 {level} 级!", - "seeDetails": "查看详情", "choosePracticeMode": "点击上方任意按钮开始练习活动", "ban": "封禁", "unban": "解除封禁", @@ -4735,8 +4306,6 @@ "timesUsedWithAssistance": "协助使用次数", "shareInviteCode": "分享邀请码:{code}", "leaderboard": "排行榜", - "welcomeUser": "欢迎 {user}", - "joinSpaceOnboardingDesc": "你有公共课程的邀请码或链接吗?", "skipForNow": "暂时跳过", "permissions": "权限", "spaceChildPermission": "谁可以向此课程添加新聊天", @@ -4744,12 +4313,8 @@ "defaultOption": "默认", "deleteChatDesc": "您确定要删除此聊天吗?它将被所有参与者删除,聊天中的所有消息将不再可用于练习或学习分析。", "deleteSpaceDesc": "课程和任何已选择的聊天将被所有参与者删除,聊天中的所有消息将不再可用于练习或学习分析。此操作无法撤销。", - "chatWithActivities": "与活动聊天", "launch": "启动", - "launchActivityToChats": "向聊天中发布活动", "searchChats": "搜索聊天", - "selectChats": "选择聊天", - "selectChatToStart": "完成!选择一个聊天开始", "maxFifty": "最多50个", "configureSpace": "配置课程", "pinMessages": "置顶消息", @@ -4763,9 +4328,7 @@ "announcements": "公告", "activities": "活动", "access": "访问权限", - "botSettings": "机器人设置", "activitySuggestionTimeoutMessage": "我们正在努力为您生成更多活动,请稍后再查看", - "accessSettingsWarning": "哎呀!看起来您没有权限设置此房间的访问规则。您应该检查这些规则是否符合您的需求,如果需要更改,请联系房间管理员", "howSpaceCanBeFound": "如何找到此课程", "private": "私密", "cannotBeFoundInSearch": "搜索中无法找到", @@ -4778,16 +4341,6 @@ "canBeFoundViaKnock": "• 请求加入并由管理员批准", "youHaveLeveledUp": "你已升级!", "sendActivities": "发送活动", - "getStarted": "开始使用", - "getStartedBotChatDesc": "与AI聊天是一个很好的起点,潘盖亚的阅读、写作、听力和口语工具让它变得简单!", - "getStartedCommunitiesDesc": "与社区一起学习是Pangea Chat的亮点!\n你可以加入你的班级,找到课程,甚至自己创建!", - "getStartedFriendsDesc": "你有想和你一起学习的朋友吗?", - "getStartedBotChatComplete": "做得好!你正在与机器人聊天!", - "getStartedCommunitiesComplete": "太棒了,你已经加入了一个课程!", - "getStartedComplete": "你已完成本节!\n继续通过与朋友聊天探索我们的精彩功能!", - "getStartedFriendsComplete": "哇哦!你有朋友啦!😊", - "getStartedBotChatButton": "开始聊天!", - "getStartedFriendsButton": "与朋友聊天", "groupChat": "群聊", "directMessage": "私信", "newDirectMessage": "新私信", @@ -4803,7 +4356,6 @@ "mySavedActivities": "我的已保存活动", "noSavedActivities": "没有已保存的活动", "saveActivity": "保存此活动", - "yourSavedActivities": "已保存的活动", "failedToPlayVideo": "播放视频失败", "done": "完成", "inThisSpace": "在此空间", @@ -4842,37 +4394,27 @@ "maximumActivityParticipants": "每个活动最多可有 {count} 位参与者。", "pending": "待处理", "inactive": "不活跃", - "unjoinedActivityMessage": "你想参加吗?选择一个开放角色!\n或者闲逛观看表演!", - "fullActivityMessage": "随意观看表演!虽然没有开放角色可以参加,但你可以查看聊天!", "confirmRole": "确认角色", "openRoleLabel": "开放", "joinedTheActivity": "👋 {username} 作为 {role} 加入", "finishedTheActivity": "🎯 {username} 完成了此次活动", - "endActivityTitle": "我已完成", - "endActivityDesc": "你完成目标了吗?\n这是你退出聊天的确认。但别担心,乐趣还在聊天中继续!随意闲逛,享受表演,直到大家都点击“完成”。", "archiveToAnalytics": "添加到我的已完成活动", "activitySummaryError": "无法获取活动总结", "requestSummaries": "请求总结", - "loadingActivitySummary": "正在加载活动总结...", "generatingNewActivities": "你是此语言对的第一个用户!请稍等,我们正在为你准备活动。", - "requestAccessTitle": "请求查看分析权限?", + "requestAccessTitle": "请求分析访问权限?", "requestAccessDesc": "你想请求查看参与者分析吗?\n\n如果参与者同意,课程管理员将能够查看他们的:\n • 词汇总数\n • 语法概念总数\n • 完成的活动会话总数\n • 使用的具体语法概念,正确与错误\n\n他们将无法查看:\n • 课程外的聊天消息\n • 词汇列表", "requestAccess": "请求访问({count})", "analyticsInactiveTitle": "无法向不活跃用户发送请求", "analyticsInactiveDesc": "自此功能推出以来未登录的不活跃用户将不会看到你的请求。\n\n当他们返回时,请求按钮会出现。你可以稍后通过点击他们名字下的请求按钮重新发送请求。", "accessRequestedTitle": "访问分析请求", - "accessRequestedDesc": "“{space}”的管理员请求查看您的学习分析。\n\n如果您同意,课程管理员将能够查看您的:\n • 词汇总数\n • 语法概念总数\n • 完成的活动会话总数\n • 使用的具体语法概念,包括正确和错误的\n\n他们将无法查看您的:\n • 课程外的聊天消息\n • 词汇列表", - "allowAccess": "允许访问", - "denyAccess": "拒绝访问", + "accessRequestedDesc": "请求管理员:{admin} \n\n来自“{space}”的管理员请求查看您的学习分析。\n\n如果您同意,他们将能够查看您的:\n • 总词汇量\n • 总语法概念\n • 完成的活动会话总数\n • 正确和错误使用的特定语法概念\n\n他们将无法查看您的:\n • 课程外聊天中的消息\n • 词汇表", "adminRequestedAccess": "管理员请求查看您的分析。", "lastUpdated": "更新于\n{time}", "activityFinishedMessage": "全部完成!", "endForAll": "全部结束", "newCourse": "新课程", - "newCourseSubtitle": "您想使用哪个课程计划?", - "failedToLoadCourses": "加载课程失败", "numModules": "{num} 个模块", - "numActivityPlans": "{num} 个活动计划", "coursePlan": "课程计划", "editCourseLater": "您可以稍后编辑模板标题、描述和课程图片。", "newCourseAccess": "默认情况下,课程是私有的,需要管理员批准才能加入。您可以随时编辑这些设置。", @@ -4886,17 +4428,11 @@ "accessDesc": "你可以让你的课程对全世界开放!或者,将你的课程设为私密且安全。", "createGroupChatDesc": "活动会话开始和结束,而群聊将保持开放以进行日常沟通。", "deleteDesc": "只有管理员可以删除课程。这是一个破坏性操作,会删除所有用户和课程内的所有选定聊天。请谨慎操作。", - "failedToLoadCourseInfo": "加载课程信息失败", "noCourseFound": "哦,这个课程需要一个计划!\n\n课程计划是一系列主题和对话活动。", "additionalParticipants": "+ {num} 其他人", - "activityNotFoundForCourse": "在课程中未找到此活动", - "courseChats": "课程聊天", - "myActivitySessions": "我的活动会话", "directMessages": "直接消息", "whatNow": "接下来怎么办?", "chooseNextActivity": "选择你的下一个活动!", - "seeInstructions": "查看说明", - "hideInstructions": "隐藏说明", "letsGo": "开始吧", "chooseRole": "选择一个角色!", "chooseRoleToParticipate": "选择一个角色参与!", @@ -4906,23 +4442,15 @@ "inviteFriends": "邀请朋友", "waitNotDone": "等一下,我还没完成!", "waitingForOthersToFinish": "等待其他人完成...", - "saveToCompletedActivities": "保存到已完成的活动", "generatingSummary": "正在分析聊天内容并生成结果", - "instructionsLanguage": "指令语言", "findCourse": "查找课程", - "activityCompletedDesc": "您的已完成活动已添加到分析中,您可以在这里回顾和练习所使用的语言。", "pingParticipantsNotification": "{user} 正在寻找用户加入 {room} 中的活动会话", "course": "课程", "courses": "课程", "courseName": "课程名称", "createNewCourse": "新建课程", - "publicCourses": "公开课程", "goToCourse": "前往课程:{course}", "activityComplete": "此活动已完成。活动摘要应在下方显示。", - "haventChattedMuch": "看起来你没有多聊天,试试使用更多词汇!如果你觉得已完成目标,可以在下面结束活动。", - "haveChatted": "看起来你已经聊天了一段时间!如果你觉得已经完成了你的目标,请结束以完成活动,我们将在聊天中为你生成总结!", - "userDoneAndWaiting": "{num1}/{num2} 参与者已完成。等待所有人完成,我们将在聊天中为你生成总结!\n\n如果你想重新加入对话,请点击聊天中的继续按钮。", - "othersDoneAndWaiting": "{num1}/{num2} 已完成。你完成你的目标了吗?", "startNewSession": "开始新会话", "joinOpenSession": "加入公开会话", "less": "少", @@ -4932,7 +4460,6 @@ "openToJoin": "开放加入", "results": "结果", "activityDone": "活动完成!", - "moreLabel": "更多", "promoCodeInfo": "优惠码可以在下一页输入", "editsComingSoon": "编辑城市和活动的功能即将推出。", "editing": "编辑中", @@ -4948,13 +4475,10 @@ "courseSavedSuccessfully": "课程已成功保存", "addCoursePlan": "添加课程计划", "activityStatsButtonInstruction": "点击这里查看您的活动统计,完成后关闭活动", - "readingAnalyticsDesc": "点击每条消息进行阅读活动练习。", - "speakingAnalyticsDesc": "录制语音消息进行口语练习。", - "audioAnalyticsDesc": "点击每条消息进行听力活动练习。", "loginToAccount": "登录我的账户", "appDescription": "学习一门语言\n同时给朋友发消息。", "languages": "语言", - "chooseLanguage": "选择一种语言。", + "chooseLanguage": "选择目标语言。", "planTrip": "规划您的旅行", "howAreYouTraveling": "你打算怎么旅行?", "unlockPrivateTrip": "解锁私人旅行", @@ -4967,25 +4491,20 @@ "courseCode": "密码是什么?", "courseCodeHint": "旅行代码或链接", "unlockMyTrip": "解锁我的旅行", - "anyLevel": "任何水平", "signupOption": "你想如何注册?", "withApple": "使用Apple", "withGoogle": "使用Google", "withEmail": "使用电子邮件", "createAccount": "创建账户", - "noCoursesFound": "未找到课程", "loginWithEmail": "使用电子邮件登录", "usernameOrEmail": "用户名或电子邮件", "email": "电子邮件", "forgotPassword": "忘记密码?", - "writingAnalyticsDesc": "发送消息以练习写作。", "endActivity": "结束活动", "allLanguages": "所有语言", - "allCefrLevels": "所有CEFR等级", "chatListTooltip": "在这里你会找到你的私信!点击任何用户的头像并选择“开始对话”以发送私信。", "directMessageBotTitle": "直接消息 Pangea 机器人", "feedbackTitle": "活动反馈", - "feedbackDesc": "如何改进此活动?如果你能提供一些细节,我们将进行调整!", "feedbackHint": "你的反馈", "feedbackButton": "提交反馈", "directMessageBotDesc": "与人类交谈更有趣,但……AI随时待命!", @@ -4996,30 +4515,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5035,18 +4530,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5071,18 +4554,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5119,38 +4590,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5159,62 +4602,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5251,10 +4650,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5263,14 +4658,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5279,46 +4666,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5327,10 +4678,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5387,18 +4734,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5407,14 +4742,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5443,18 +4770,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5463,42 +4778,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5507,14 +4790,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5535,26 +4810,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5575,10 +4830,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5611,25 +4862,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5686,34 +4918,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5742,778 +4946,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7506,14 +5942,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7525,14 +5953,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7564,10 +5984,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7576,18 +5992,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7596,14 +6000,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7628,38 +6024,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7705,10 +6073,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7733,10 +6097,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7761,10 +6121,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7773,66 +6129,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7853,42 +6153,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7913,154 +6189,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8077,18 +6205,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8109,14 +6225,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8133,10 +6241,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8149,14 +6253,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8165,14 +6261,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8200,26 +6288,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8248,18 +6316,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8296,10 +6356,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9232,10 +7288,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9416,34 +7468,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9456,10 +7480,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9468,14 +7488,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9492,22 +7504,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9655,14 +7651,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9671,34 +7659,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9707,54 +7667,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9763,10 +7687,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9783,10 +7703,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9958,26 +7874,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10006,10 +7902,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10066,30 +7958,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10118,18 +7994,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10246,14 +8114,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10266,10 +8126,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10278,14 +8134,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10302,14 +8150,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10318,22 +8158,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10346,18 +8170,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10374,22 +8186,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10398,30 +8198,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10494,18 +8270,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10562,18 +8326,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10602,30 +8354,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10678,18 +8414,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10738,46 +8466,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10842,10 +8530,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11017,14 +8701,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11052,14 +8728,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11072,10 +8740,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11111,19 +8775,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11148,14 +8807,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11164,14 +8815,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11224,10 +8867,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11240,18 +8879,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11264,14 +8891,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11312,26 +8931,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11359,10 +8966,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11373,36 +8976,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11439,10 +9012,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11507,18 +9076,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11583,10 +9140,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11607,10 +9160,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11627,10 +9176,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11639,10 +9184,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11655,10 +9196,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackHint": { "type": "String", "placeholders": {} @@ -11683,16 +9220,12 @@ "type": "String", "placeholders": {} }, - "inviteFriendsToActivity": "邀请朋友参加活动", - "inviteFriendsToActivityCourse": "邀请朋友参加活动和课程", "feedbackRespDesc": "明天回来查看活动更新。", "activityDropdownDesc": "完成此活动后,点击下面", - "activityAnalyticsListBody": "这些是你完成的活动!完成活动后,你可以在这里查看。", "languageMismatchTitle": "语言不匹配", "languageMismatchDesc": "你的目标语言与此活动的语言不匹配。要更新你的目标语言吗?", "reportWordIssueTooltip": "报告单词信息问题", "tokenInfoFeedbackDialogTitle": "单词信息反馈", - "tokenInfoFeedbackDialogDesc": "AI会犯错。请描述你在上述信息中发现的任何问题。", "noPublicCoursesFound": "未找到公共课程。你想创建一个吗?", "noCourseTemplatesFound": "我们未能找到你的目标语言的课程。你可以暂时与Pangea机器人聊天,稍后再回来查看更多课程。", "botActivityJoinFailMessage": "Pangea机器人响应有点慢。请稍后再试,或邀请朋友。", @@ -11700,14 +9233,6 @@ "leaveDesc": "离开此空间及其中的所有聊天", "selectAll": "全选", "deselectAll": "取消全选", - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11716,10 +9241,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11736,10 +9257,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11773,7 +9290,6 @@ "newMessageInPangeaChat": "📩 Pangea 聊天中有新消息", "shareCourse": "分享课程", "addCourse": "添加课程", - "joinCourseWithCode": "用代码加入课程", "joinPublicCourse": "加入公共课程", "vocabLevelsDesc": "这是你提升词汇等级后,词汇将会显示的地方!", "highlightVocabTooltip": "通过在聊天中发送或练习下面的目标词汇来突出显示它们", @@ -11797,10 +9313,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11809,7 +9321,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "未找到私信或聊天。请确保您的搜索拼写正确。", + "activityAnalyticsTooltipBody": "这些是您保存的活动,供回顾和练习。", + "numSavedActivities": "保存的活动数量", + "saveActivityTitle": "保存活动", + "saveActivityDesc": "做得好!保存此活动以便稍后回顾和练习", + "levelInfoTooltip": "在这里您可以看到您获得的所有积分以及如何获得的!", + "alreadyInCourseWithID": "您已经在这个计划的课程中。您想创建一个相同计划的课程,还是去现有课程?", + "goToExistingCourse": "前往现有课程", + "emojiView": "表情符号视图", + "feedbackDialogDesc": "我也会犯错!有什么可以帮助我改进的吗?", + "contactHasBeenInvitedToTheCourse": "联系人已被邀请参加课程", + "activityStatsButtonTooltip": "活动信息", + "allow": "允许", + "deny": "拒绝", + "enabledRenewal": "启用订阅续费", + "subscriptionEndsOn": "订阅结束于", + "subscriptionRenewsOn": "订阅续费于", + "waitForSubscriptionChanges": "您的订阅更改可能需要一些时间才能在应用中反映。", + "subscribeReadingAssistance": "订阅以解锁消息工具", + "aceDisplayName": "Achinese", + "achDisplayName": "阿科利", + "afDisplayName": "南非荷兰语", + "akDisplayName": "阿坎语", + "alzDisplayName": "阿卢尔语", + "amDisplayName": "阿姆哈拉语", + "arDisplayName": "阿拉伯语", + "asDisplayName": "阿萨姆语", + "awaDisplayName": "阿瓦迪语", + "ayDisplayName": "艾马拉语", + "azDisplayName": "阿塞拜疆语", + "baDisplayName": "巴什基尔语", + "banDisplayName": "巴厘语", + "bbcDisplayName": "托巴巴塔克语", + "beDisplayName": "白俄罗斯语", + "bemDisplayName": "本巴语", + "bewDisplayName": "贝塔维语", + "bgDisplayName": "保加利亚语", + "bhoDisplayName": "博杰普尔语", + "bikDisplayName": "比科尔语", + "bmDisplayName": "班巴拉语", + "bnDisplayName": "孟加拉语", + "bnBDDisplayName": "孟加拉语(孟加拉国)", + "bnINDisplayName": "孟加拉语(印度)", + "brDisplayName": "布列塔尼语", + "bsDisplayName": "波斯尼亚语", + "btsDisplayName": "巴塔克西马伦贡语", + "btxDisplayName": "巴塔克卡罗语", + "buaDisplayName": "布里亚特语", + "caDisplayName": "加泰罗尼亚语", + "cebDisplayName": "宿务语", + "cggDisplayName": "奇嘎", + "chmDisplayName": "玛丽", + "ckbDisplayName": "中央库尔德语", + "cnhDisplayName": "哈卡钦", + "coDisplayName": "科西嘉语", + "crhDisplayName": "克里米亚土耳其语", + "crsDisplayName": "塞舌尔克里奥尔法语", + "csDisplayName": "捷克语", + "cvDisplayName": "楚瓦什语", + "cyDisplayName": "威尔士语", + "daDisplayName": "丹麦语", + "deDisplayName": "德语", + "dinDisplayName": "丁卡语", + "doiDisplayName": "多格里语", + "dovDisplayName": "多姆贝语", + "dzDisplayName": "宗喀语", + "eeDisplayName": "埃维语", + "enDisplayName": "英语", + "enAUDisplayName": "英语(澳大利亚)", + "enGBDisplayName": "英语(英国)", + "enINDisplayName": "英语(印度)", + "enUSDisplayName": "英语(美国)", + "eoDisplayName": "世界语", + "esDisplayName": "西班牙语", + "esESDisplayName": "西班牙语(西班牙)", + "esMXDisplayName": "西班牙语(墨西哥)", + "euDisplayName": "巴斯克语", + "faDisplayName": "波斯语", + "ffDisplayName": "富拉语", + "fiDisplayName": "芬兰语", + "filDisplayName": "菲律宾语", + "fjDisplayName": "斐济语", + "foDisplayName": "法罗语", + "frDisplayName": "法语", + "frCADisplayName": "法语(加拿大)", + "frFRDisplayName": "法语(法国)", + "fyDisplayName": "西弗里西亚语", + "gaDisplayName": "爱尔兰语", + "gaaDisplayName": "加语", + "gdDisplayName": "苏格兰盖尔语", + "glDisplayName": "加利西亚语", + "gnDisplayName": "瓜拉尼语", + "gomDisplayName": "果阿孔卡尼语", + "guDisplayName": "古吉拉特语", + "haDisplayName": "豪萨语", + "hawDisplayName": "夏威夷语", + "heDisplayName": "希伯来语", + "hiDisplayName": "印地语", + "hilDisplayName": "希利盖农语", + "hmnDisplayName": "苗语", + "hneDisplayName": "恰蒂斯加尔语", + "hrDisplayName": "克罗地亚语", + "hrxDisplayName": "亨斯里克语", + "htDisplayName": "海地克里奥尔语", + "huDisplayName": "匈牙利语", + "hyDisplayName": "亚美尼亚语", + "idDisplayName": "印尼语", + "igDisplayName": "伊博语", + "iloDisplayName": "伊洛克语", + "isDisplayName": "冰岛语", + "itDisplayName": "意大利语", + "jaDisplayName": "日语", + "jvDisplayName": "爪哇语", + "kaDisplayName": "格鲁吉亚语", + "kkDisplayName": "哈萨克语", + "kmDisplayName": "高棉语", + "knDisplayName": "卡纳达语", + "koDisplayName": "韩语", + "kokDisplayName": "孔卡尼语", + "kriDisplayName": "克里奥尔语", + "ksDisplayName": "克什米尔语", + "ktuDisplayName": "基图巴语(刚果民主共和国)", + "kuDisplayName": "库尔德语", + "kyDisplayName": "吉尔吉斯语", + "laDisplayName": "拉丁语", + "lbDisplayName": "卢森堡语", + "lgDisplayName": "甘达语", + "liDisplayName": "林堡语", + "lijDisplayName": "利古里亚语", + "lmoDisplayName": "伦巴第语", + "lnDisplayName": "林加拉语", + "loDisplayName": "老挝语", + "ltDisplayName": "立陶宛语", + "ltgDisplayName": "拉脱维亚地方语", + "luoDisplayName": "卢奥语(肯尼亚和坦桑尼亚)", + "lusDisplayName": "米佐语", + "lvDisplayName": "拉脱维亚语", + "maiDisplayName": "迈蒂利语", + "makDisplayName": "马卡萨语", + "mgDisplayName": "马尔加什语", + "miDisplayName": "毛利语", + "minDisplayName": "米南加保语", + "mkDisplayName": "马其顿语", + "mlDisplayName": "马拉雅拉姆语", + "mnDisplayName": "蒙古语", + "mniDisplayName": "Manipuri", + "mrDisplayName": "马拉地语", + "msDisplayName": "马来语", + "msArabDisplayName": "马来语(阿拉伯文)", + "msMYDisplayName": "马来语(马来西亚)", + "mtDisplayName": "马耳他语", + "mwrDisplayName": "马尔瓦里语", + "myDisplayName": "缅甸语", + "nanDisplayName": "闽南语", + "nbDisplayName": "挪威语(博克马尔)", + "neDisplayName": "尼泊尔语", + "newDisplayName": "尼瓦尔语", + "nlDisplayName": "荷兰语", + "nlBEDisplayName": "弗拉芒语", + "noDisplayName": "挪威语", + "nrDisplayName": "南恩德贝勒语", + "nsoDisplayName": "北索托语", + "nusDisplayName": "努尔语", + "nyDisplayName": "尼扬贾语", + "ocDisplayName": "奥克语", + "omDisplayName": "奥罗莫语", + "orDisplayName": "奥里亚语", + "paDisplayName": "旁遮普语", + "paArabDisplayName": "旁遮普语(沙赫穆基)", + "paINDisplayName": "旁遮普语(古尔穆基)", + "pagDisplayName": "邦阿西南", + "pamDisplayName": "旁帕", + "papDisplayName": "帕皮阿门托", + "plDisplayName": "波兰语", + "psDisplayName": "普什图语", + "ptDisplayName": "葡萄牙语", + "ptBRDisplayName": "葡萄牙语(巴西)", + "ptPTDisplayName": "葡萄牙语(葡萄牙)", + "quDisplayName": "凯楚亚语", + "rajDisplayName": "拉贾斯坦语", + "rnDisplayName": "伦迪语", + "roDisplayName": "罗马尼亚语", + "roMDDisplayName": "摩尔多瓦语", + "romDisplayName": "罗曼尼语", + "ruDisplayName": "俄语", + "rwDisplayName": "基尼亚卢旺达语", + "saDisplayName": "梵语", + "satDisplayName": "桑塔利语", + "scnDisplayName": "西西里语", + "sdDisplayName": "信德语", + "sgDisplayName": "桑戈", + "shnDisplayName": "山", + "siDisplayName": "僧伽罗语", + "skDisplayName": "斯洛伐克语", + "slDisplayName": "斯洛文尼亚语", + "smDisplayName": "萨摩亚语", + "snDisplayName": "肖纳语", + "soDisplayName": "索马里语", + "sqDisplayName": "阿尔巴尼亚语", + "srDisplayName": "塞尔维亚语", + "srMEDisplayName": "黑山语", + "ssDisplayName": "斯瓦蒂语", + "stDisplayName": "南索托语", + "suDisplayName": "巽他语", + "svDisplayName": "瑞典语", + "swDisplayName": "斯瓦希里语", + "szlDisplayName": "西里西亚语", + "taDisplayName": "泰米尔语", + "teDisplayName": "泰卢固语", + "tetDisplayName": "特图姆语", + "tgDisplayName": "塔吉克语", + "thDisplayName": "泰语", + "tiDisplayName": "提格利尼亚语", + "tkDisplayName": "土库曼语", + "tlDisplayName": "他加禄语", + "tnDisplayName": "茨瓦纳语", + "trDisplayName": "土耳其语", + "tsDisplayName": "宗加语", + "ttDisplayName": "鞑靼语", + "ugDisplayName": "维吾尔语", + "ukDisplayName": "乌克兰语", + "urDisplayName": "乌尔都语", + "urINDisplayName": "乌尔都语(印度)", + "urPKDisplayName": "乌尔都语(巴基斯坦)", + "uzDisplayName": "乌兹别克语", + "viDisplayName": "越南语", + "wuuDisplayName": "吴语", + "xhDisplayName": "科萨语", + "yiDisplayName": "意第绪语", + "yoDisplayName": "约鲁巴语", + "yuaDisplayName": "尤卡坦语", + "yueDisplayName": "粤语", + "yueCNDisplayName": "粤语(中国)", + "yueHKDisplayName": "粤语(香港)", + "zhDisplayName": "中文", + "zhCNDisplayName": "中文(简体)", + "zhTWDisplayName": "中文(繁体)", + "zuDisplayName": "祖鲁语", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11876,6 +10574,7 @@ "notStartedActivitiesTitle": "开放的会议 ({num})", "inProgressActivitiesTitle": "正在进行中 ({num})", "completedActivitiesTitle": "完成 ({num})", + "pickDifferentActivity": "选择其他活动", "inOngoingActivity": "您有一个正在进行的活动!", "@notStartedActivitiesTitle": { "type": "String", @@ -11901,10 +10600,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "您的目标语言与此消息不匹配。要更新您的目标语言吗?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "这是本课程中的所有人。点击任何用户的头像并选择“开始对话”以发送私信。", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "这个词汇将从您的分析中永久删除", + "woman": "女性", + "man": "男性", + "otherGender": "其他", + "unselectedGender": "选择一个性别选项", + "gender": "性别", + "chatParticipantTooltip": "这就是这个聊天中的所有人。点击任何用户的头像并选择“开始对话”以发送私信。", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "学习工具对不在目标语言中的消息是禁用的。", + "vocabEmoji": "词汇表情符号", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "请求再生", + "optionalRegenerateReason": "(可选) 原因", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "您已为 {lemma} 设置了表情符号!我们将使用此表情符号在今后的实践活动中表示该词。", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "等待登录完成", + "ssoDialogDesc": "我们打开了一个新标签页,以便您可以安全地登录。", + "ssoDialogHelpText": "🤔 如果您没有看到新标签页,请检查您的弹出窗口拦截器。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "禁用语言工具", + "disableLanguageToolsDesc": "您想要禁用自动语言辅助吗?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "权限被拒绝。请启用录音权限以录制音频消息。", + "genericWebRecordingError": "出现了问题。我们建议在录制消息时使用Chrome浏览器。", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "为了获得最佳的应用体验,请扩大您的屏幕尺寸。", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "解锁下一个主题的活动", "activitiesToUnlockTopicDesc": "设置解锁下一个课程主题所需的活动数量", "@activitiesToUnlockTopicTitle": { @@ -11914,5 +10731,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "正确的词汇定义练习", + "constructUseIncLMDesc": "错误的词汇定义练习", + "constructUseCorLADesc": "正确的词汇音频练习", + "constructUseIncLADesc": "错误的词汇音频练习", + "constructUseBonus": "词汇练习期间的奖励", + "practiceVocab": "练习词汇", + "selectMeaning": "选择意思", + "selectAudio": "选择匹配的音频", + "congratulations": "恭喜!", + "anotherRound": "再来一轮", + "noActivityRequest": "当前没有活动请求。", + "quit": "退出", + "congratulationsYouveCompletedPractice": "恭喜!您已完成练习课程。", + "mustHave10Words": "您必须至少有 10 个词汇来进行练习。尝试与朋友或 Pangea Bot 交谈以发现更多!", + "botSettings": "机器人设置", + "activitySettingsOverrideWarning": "活动计划确定的语言和语言级别", + "voice": "声音", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh_Hant.arb b/lib/l10n/intl_zh_Hant.arb index 667fca74a..3ee19351a 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-01-06 13:02:01.182495", + "@@last_modified": "2026-01-07 14:26:51.046421", "about": "關於", "@about": { "type": "String", @@ -3357,26 +3357,14 @@ "commandHint_logoutall": "登出所有活動設備", "displayNavigationRail": "在手機上顯示導航欄", "customReaction": "自定義反應", - "accountInformation": "帳戶資訊", - "addGroupDescription": "添加聊天描述", - "addNewFriend": "添加新朋友", - "alreadyHaveAnAccount": "已經有帳戶?", - "createNewGroup": "創建新聊天", - "editChatPermissions": "編輯聊天權限", "writeAMessageLangCodes": "用 {l1} 或 {l2} 輸入...", "requests": "請求", - "allCorrect": "我會這樣說!不錯!", - "newWayAllGood": "這不是我會說的方式,但看起來不錯!", - "othersAreBetter": "嗯,也許有更好的說法。", "holdForInfo": "點擊並長按以獲取單詞資訊。", "greenFeedback": "這是我會放的!", "yellowFeedback": "嗯,你可以试试这个,看看是否有效!要使用这个词,只需再次点击它。", "redFeedback": "我觉得那不对……", "itInstructionsTitle": "我可以帮你翻译!", "itInstructionsBody": "你可以点击并按住选项以获取单词信息。", - "oneday": "过去24小时", - "oneweek": "过去7天", - "onemonth": "上个月", "gaTooltip": "与语法辅助一起使用L2", "taTooltip": "与翻译辅助一起使用L2", "unTooltip": "其他", @@ -3386,58 +3374,27 @@ "interactiveTranslatorAllowed": "学生选择", "interactiveTranslatorRequired": "必需", "notYetSet": "尚未设置", - "myLearning": "我的分析", "waTooltip": "无辅助使用L2", - "changeDateRange": "更改日期范围", - "classDescription": "描述", - "addStudents": "邀請用戶通過鏈接或代碼", - "copyClassLink": "複製邀請鏈接", - "copyClassCode": "複製邀請代碼", - "inviteStudentByUserName": "通過用戶名邀請用戶", "languageSettings": "語言設置", "interactiveTranslator": "翻譯協助", - "shareVideo": "分享視頻", - "shareVideoDesc": "打開此選項以允許學生在聊天中分享視頻。", - "shareFiles": "分享文件", - "selectLanguageLevel": "選擇語言水平", "noIdenticalLanguages": "請選擇不同的基礎語言和目標語言", - "iWantALanguagePartnerFrom": "來自:", - "worldWide": "全球", - "noResults": "沒有結果!請嘗試擴大搜索範圍。", "searchBy": "按國家和語言搜索", - "iWantAConversationPartner": "我想要一個能夠", - "iWantALanguagePartnerWhoSpeaks": "說:", - "iWantALanguagePartnerWhoIsLearning": "正在學習:", "joinWithClassCode": "加入課程", - "joinWithClassCodeHint": "輸入邀請碼", - "languageLevelPreA1": "完全初學者(Pre A1)", - "languageLevelA1": "初級(A1)", - "languageLevelA2": "Elementary(A2)", - "languageLevelB1": "中級(B1)", - "languageLevelB2": "中高級(B2)", - "languageLevelC1": "高級(C1)", - "languageLevelC2": "精通(C2)", + "languageLevelPreA1": "新手低級(Pre A1)", + "languageLevelA1": "新手中級 (A1)", + "languageLevelA2": "初學者高級 (A2)", + "languageLevelB1": "中級中 (B1)", + "languageLevelB2": "高級低 (B2)", + "languageLevelC1": "高級中 (C1)", + "languageLevelC2": "優秀 (C2)", "changeTheNameOfTheClass": "更改名稱", "changeTheNameOfTheChat": "更改聊天名稱", - "askPangeaBot": "向Pangea機器人詢問語境定義。", "sorryNoResults": "抱歉,沒有結果。", "ignoreInThisText": "忽略", - "helpMeTranslate": "是的!", - "needsItShortMessage": "超出範圍", "needsItMessage": "等等,那不是{targetLanguage}!你需要幫助翻譯嗎?", - "needsIgcMessage": "此訊息有語法錯誤。", - "tokenTranslationTitle": "一個單詞在你的基本語言中。", - "spanTranslationDesc": "請參見以下可能的翻譯。", - "spanTranslationTitle": "一些單詞在你的基本語言中。", - "l1SpanAndGrammarTitle": "超出目標語言範圍", - "l1SpanAndGrammarDesc": "這可能是您的基本語言,也可能是語法錯誤。", - "otherTitle": "您有一個錯誤。", - "otherDesc": "請查看下面的可能修正。", "countryInformation": "我的國家", - "myLanguages": "我的基本語言和目標語言", "targetLanguage": "目標語言", "sourceLanguage": "基本語言", - "languagesISpeak": "我會說的語言", "updateLanguage": "我的語言", "whatLanguageYouWantToLearn": "你想學哪種語言?", "whatIsYourBaseLanguage": "你的基本語言是什麼?", @@ -3452,13 +3409,8 @@ "errorDisableLanguageAssistanceUserDesc": "點擊此處更新翻譯協助和語法協助設置", "errorDisableITClassDesc": "此課程已關閉互動翻譯協助。", "errorDisableIGCClassDesc": "此課程已關閉互動語法協助。", - "itIsDisabled": "互動翻譯已停用", - "igcIsDisabled": "互動語法檢查已停用", - "goToLearningSettings": "前往學習設定", "error405Title": "未設定語言", "error405Desc": "請在主選單 > 學習設定中設定您的語言。", - "loginOrSignup": "使用以下帳號登入", - "iAgreeToThe": "我同意 ", "termsAndConditions": "條款與條件", "andCertifyIAmAtLeast13YearsOfAge": " 並證明我已年滿16歲。", "error502504Title": "哇,線上學生好多!", @@ -3466,40 +3418,21 @@ "error404Title": "翻譯錯誤!", "error404Desc": "Pangea 機器人不確定如何翻譯那個...", "errorPleaseRefresh": "我們正在處理!請重新載入並再試一次。", - "toggleIT": "互動翻譯", - "toggleIGC": "互動語法檢查", - "toggleToolSettingsDescription": "在此處您可以切換您的個別語言工具設定。", "connectedToStaging": "已連接到測試環境", "learningSettings": "學習設定", - "sendVoiceNotes": "傳送語音備忘錄", - "sendVoiceNotesDesc": "打開此選項以允許學生在聊天中傳送語音備忘錄。", - "chatTopic": "聊天主題", - "chatTopicDesc": "設定聊天主題", - "inviteStudentByUserNameDesc": "如果你的學生已經有帳號,你可以搜尋他們。", "participants": "參與者", - "almostPerfect": "看起來很不錯!這是我會說的內容。", - "prettyGood": "相當不錯!這是我會說的內容。", - "letMeThink": "嗯,讓我看看你做得怎麼樣!", "clickMessageTitle": "需要幫助嗎?", "clickMessageBody": "點擊訊息以使用語言工具,如翻譯、回放等!", - "understandingMessagesTitle": "定義與翻譯!", - "understandingMessagesBody": "點擊底線標記的單字以獲取定義。使用訊息選項進行翻譯(右上角)。", "allDone": "全部完成!", "vocab": "詞彙", "low": "我們有證據顯示用戶不理解這些單詞。", "medium": "這些單詞已被使用。目前尚不清楚用戶是否完全理解這些單詞。", "high": "我們有證據顯示用戶理解這些單詞。", - "unknownProficiency": "這些單詞尚未在 Pangea 聊天中使用。", - "changeView": "切换视图。", - "clearAll": "清除所有单词?", - "generateVocabulary": "根据标题和描述生成词汇", - "generatePrompts": "生成提示", "subscribe": "订阅", "getAccess": "立即订阅!", "subscriptionDesc": "消息传递免费!订阅以解锁互动翻译、语法检查和学习分析。", "subscriptionManagement": "订阅管理", "currentSubscription": "当前订阅", - "changeSubscription": "更改您的订阅", "cancelSubscription": "取消您的订阅", "selectYourPlan": "选择您的计划", "subsciptionPlatformTooltip": "请登录到您的原始设备以管理您的订阅计划", @@ -3508,9 +3441,6 @@ "paymentHistory": "支付记录", "emptyChatDownloadWarning": "无法下载空聊天记录", "update": "更新", - "updateDesc": "您现在可以将此应用从 {localVersion} 更新到 {storeVersion}", - "maybeLater": "稍后再说", - "mainMenu": "主選單", "toggleImmersionMode": "沉浸模式", "toggleImmersionModeDesc": "啟用後,所有訊息將以您的目標語言顯示。此設定在語言交流中特別有用。", "itToggleDescription": "此語言學習工具將識別您基本語言中的單詞,並協助您將其翻譯成目標語言。雖然罕見,但AI可能會產生翻譯錯誤。", @@ -3525,212 +3455,13 @@ "definitionsToolDescription": "啟用後,藍色底線的單詞可以點擊查看定義。點擊訊息以存取定義。", "translationsToolDescrption": "啟用後,點擊訊息和翻譯圖示即可查看您的基本語言訊息。", "welcomeBack": "歡迎回來!如果您是2023-2024試點計畫的一部分,請聯繫我們以獲取您的特別試點訂閱。如果您是教師,且已為您的班級購買許可證(或您的機構已購買),請聯繫我們以獲取教師訂閱。", - "kickAllStudents": "踢出所有學生", - "kickAllStudentsConfirmation": "您確定要踢出所有學生嗎?", - "inviteAllStudents": "邀請所有學生", - "inviteAllStudentsConfirmation": "您確定要邀請所有學生嗎?", - "inviteUsersFromPangea": "添加管理員", - "redeemPromoCode": "兌換促銷碼", - "enterPromoCode": "輸入促銷碼", "downloadTxtFile": "下載文字檔", "downloadCSVFile": "下載CSV檔", "promotionalSubscriptionDesc": "您目前擁有終身促銷訂閱。請聯繫 support@pangea.chat 以獲取更改訂閱的幫助。", "originalSubscriptionPlatform": "訂閱平台為 {purchasePlatform}", "oneWeekTrial": "一週試用", "downloadXLSXFile": "下載Excel檔", - "abDisplayName": "阿布哈茲語", - "aaDisplayName": "阿法爾語", - "afDisplayName": "南非荷蘭語", - "akDisplayName": "阿坎語", - "sqDisplayName": "阿爾巴尼亞語", - "amDisplayName": "阿姆哈拉語", - "arDisplayName": "阿拉伯語", - "anDisplayName": "阿拉贡語", - "hyDisplayName": "亞美尼亞語", - "asDisplayName": "阿薩姆語", - "avDisplayName": "阿瓦爾語", - "aeDisplayName": "古維斯坦語", - "ayDisplayName": "艾马拉语", - "azDisplayName": "阿塞拜疆语", - "bmDisplayName": "班巴拉语", - "baDisplayName": "巴什基尔语", - "euDisplayName": "巴斯克语", - "beDisplayName": "白俄罗斯语", - "bnDisplayName": "孟加拉语", - "bhDisplayName": "比哈尔语", - "biDisplayName": "比斯拉马语", - "bsDisplayName": "波斯尼亚语", - "brDisplayName": "布列塔尼语", - "bgDisplayName": "保加利亚语", - "myDisplayName": "缅甸语", - "caDisplayName": "加泰罗尼亚语,瓦伦西亚语", - "chDisplayName": "查莫罗语", - "ceDisplayName": "车臣语", - "nyDisplayName": "奇切瓦语,切瓦语,尼扬贾语", - "zhDisplayName": "中文", - "cvDisplayName": "楚瓦什语", - "kwDisplayName": "康沃尔语", - "coDisplayName": "科西嘉語", - "crDisplayName": "克里語", - "hrDisplayName": "克羅地亞語", - "csDisplayName": "捷克語", - "daDisplayName": "丹麥語", - "dvDisplayName": "迪維希語;馬爾代夫語", - "nlDisplayName": "荷蘭語", - "enDisplayName": "英語", - "eoDisplayName": "世界語", - "etDisplayName": "愛沙尼亞語", - "eeDisplayName": "埃維語", - "foDisplayName": "法羅語", - "fjDisplayName": "斐濟語", - "fiDisplayName": "芬蘭語", - "frDisplayName": "法語", - "ffDisplayName": "富拉語;富拉語;普拉語;普拉爾語", - "glDisplayName": "加利西亞語", - "kaDisplayName": "格魯吉亞語", - "deDisplayName": "德語", - "elDisplayName": "希臘語,現代", - "gnDisplayName": "瓜拉尼", - "guDisplayName": "古吉拉特语", - "htDisplayName": "海地语,海地克里奥尔语", - "haDisplayName": "豪萨语", - "heDisplayName": "希伯来语(现代)", - "hzDisplayName": "赫雷罗语", - "hiDisplayName": "印地语", - "hoDisplayName": "希里莫图语", - "huDisplayName": "匈牙利语", - "iaDisplayName": "国际语", - "idDisplayName": "印尼语", - "ieDisplayName": "国际语(Interlingue)", - "gaDisplayName": "爱尔兰语", - "igDisplayName": "伊博语", - "ikDisplayName": "伊努皮克语", - "ioDisplayName": "伊多语", - "isDisplayName": "冰岛语", - "itDisplayName": "意大利语", - "iuDisplayName": "因纽特语", - "jaDisplayName": "日语", - "jvDisplayName": "爪哇語", - "klDisplayName": "格陵蘭語", - "knDisplayName": "康纳达语", - "krDisplayName": "卡努里语", - "ksDisplayName": "克什米尔语", - "kkDisplayName": "哈萨克语", - "kmDisplayName": "高棉语", - "kiDisplayName": "基库尤语", - "rwDisplayName": "卢旺达语", - "kyDisplayName": "吉尔吉斯语", - "kvDisplayName": "科米语", - "kgDisplayName": "刚果语", - "koDisplayName": "韩语", - "kuDisplayName": "库尔德语", - "kjDisplayName": "宽亚马语", - "laDisplayName": "拉丁语", - "lbDisplayName": "卢森堡语", - "lgDisplayName": "卢干达语", - "liDisplayName": "林堡语", - "lnDisplayName": "林加拉语", - "loDisplayName": "寮語", - "ltDisplayName": "立陶宛語", - "luDisplayName": "盧巴-坎塔加語", - "lvDisplayName": "拉脫維亞語", - "gvDisplayName": "馬恩島語", - "mkDisplayName": "馬其頓語", - "mgDisplayName": "馬爾加什語", - "msDisplayName": "馬來語", - "mlDisplayName": "馬拉雅拉姆語", - "mtDisplayName": "馬耳他語", - "miDisplayName": "毛利語", - "mrDisplayName": "馬拉地語(馬拉地語)", - "mhDisplayName": "馬歇爾群島語", - "mnDisplayName": "蒙古語", - "naDisplayName": "諾魯語", - "nvDisplayName": "納瓦霍語", - "nbDisplayName": "挪威博克馬爾語", - "ndDisplayName": "北恩德貝勒語", - "neDisplayName": "尼泊爾語", - "ngDisplayName": "恩東加語", - "nnDisplayName": "挪威新諾斯語", - "noDisplayName": "挪威語", - "iiDisplayName": "諾蘇語", - "nrDisplayName": "南恩德貝勒語", - "ocDisplayName": "奧克語", - "ojDisplayName": "奧吉布威語,奧吉布瓦語", - "cuDisplayName": "古教會斯拉夫語,教會斯拉夫語,教會斯拉夫語,古保加利亞語,古斯拉夫語", - "omDisplayName": "奧羅莫語", - "orDisplayName": "奧里亞語", - "osDisplayName": "奧塞梯語,奧塞梯語", - "paDisplayName": "旁遮普語,旁遮普語", - "piDisplayName": "巴利語", - "faDisplayName": "波斯語", - "plDisplayName": "波蘭語", - "psDisplayName": "普什圖語,普什圖語", - "ptDisplayName": "葡萄牙語", - "quDisplayName": "克丘亞語", - "rmDisplayName": "羅馬什語", - "rnDisplayName": "基隆迪語", - "roDisplayName": "羅馬尼亞語,摩爾多瓦語", - "ruDisplayName": "俄語", - "saDisplayName": "梵語 (Saṃskṛta)", - "scDisplayName": "撒丁语", - "sdDisplayName": "信德语", - "seDisplayName": "北萨米语", - "smDisplayName": "萨摩亚语", - "sgDisplayName": "桑戈语", - "srDisplayName": "塞尔维亚语", - "gdDisplayName": "苏格兰盖尔语,盖尔语", - "snDisplayName": "绍纳语", - "siDisplayName": "僧伽罗语,僧伽罗语", - "skDisplayName": "斯洛伐克语", - "slDisplayName": "斯洛文尼亚语", - "soDisplayName": "索马里语", - "stDisplayName": "南索托语", - "esDisplayName": "西班牙语", - "suDisplayName": "巽他语", - "swDisplayName": "斯瓦希里语", - "ssDisplayName": "斯瓦蒂语", - "svDisplayName": "瑞典语", - "taDisplayName": "泰米爾語", - "teDisplayName": "泰盧固語", - "tgDisplayName": "塔吉克語", - "thDisplayName": "泰語", - "tiDisplayName": "提格里尼亞語", - "boDisplayName": "藏語(標準藏語,藏族,中部)", - "tkDisplayName": "土庫曼語", - "tlDisplayName": "他加祿語", - "tnDisplayName": "茨瓦納語", - "toDisplayName": "湯加(湯加群島)", - "trDisplayName": "土耳其語", - "tsDisplayName": "宗加語", - "ttDisplayName": "韃靼語", - "twDisplayName": "阿希語", - "tyDisplayName": "大溪地語", - "ugDisplayName": "維吾爾語", - "ukDisplayName": "烏克蘭語", - "urDisplayName": "烏爾都語", - "uzDisplayName": "烏茲別克語", - "veDisplayName": "文達語", - "viDisplayName": "越南語", - "voDisplayName": "沃拉普克語", - "waDisplayName": "瓦隆語", - "cyDisplayName": "威爾士語", - "woDisplayName": "沃洛夫語", - "fyDisplayName": "西弗里斯蘭語", - "xhDisplayName": "科薩語", - "yiDisplayName": "意第緒語", - "yoDisplayName": "約魯巴語", - "zaDisplayName": "壯語,莊語", "unkDisplayName": "未知", - "zuDisplayName": "祖魯語", - "hawDisplayName": "夏威夷語", - "hmnDisplayName": "苗語", - "multiDisplayName": "多語", - "cebDisplayName": "宿霧語", - "dzDisplayName": "宗喀語", - "iwDisplayName": "希伯來語", - "jwDisplayName": "爪哇語", - "moDisplayName": "摩爾多瓦語", - "shDisplayName": "塞尔维亚-克罗地亚语", "wwCountryDisplayName": "全球", "afCountryDisplayName": "阿富汗", "axCountryDisplayName": "奥兰群岛", @@ -3978,41 +3709,25 @@ "yeCountryDisplayName": "也门", "zmCountryDisplayName": "赞比亚", "zwCountryDisplayName": "津巴布韦", - "pay": "支付", - "allPrivateChats": "私密聊天", - "unknownPrivateChat": "未知私密聊天", + "pay": "結帳", "invitedToSpace": "{user} 邀请你加入课程:{space}!你想接受吗?", - "declinedInvitation": "已拒绝邀请", - "acceptedInvitation": "已接受邀请", "youreInvited": "📩 你被邀请了!", "invitedToChat": "{user} 邀请你加入聊天:{name}!你想接受吗?", "monthlySubscription": "每月", "yearlySubscription": "每年", "defaultSubscription": "潘吉亚聊天订阅", "freeTrial": "免费试用", - "grammarAnalytics": "錯誤分析", "total": "總計:", "noDataFound": "未找到資料", - "promoSubscriptionExpirationDesc": "您的目前訂閱為促銷,將於 {expiration} 到期。如需協助更改訂閱,請聯繫 support@pangea.chat。", - "emptyChatNameWarning": "請輸入此聊天的名稱", "blurMeansTranslateTitle": "為什麼訊息會模糊?", "blurMeansTranslateBody": "當沉浸模式開啟時,您用基本語言傳送的訊息將會模糊,Pangea 機器人會將其翻譯成您的目標語言。沉浸模式可以在個別和課程設定中切換。", - "someErrorTitle": "嗯,出了點問題", - "someErrorBody": "可能是錯誤或您的基本語言出現問題。", "bestCorrectionFeedback": "沒錯!", "distractorFeedback": "不太對。", "bestAnswerFeedback": "沒錯!", "definitionDefaultPrompt": "這個詞是什麼意思?", "practiceDefaultPrompt": "最佳答案是什麼?", "correctionDefaultPrompt": "最佳替代詞是什麼?", - "itStartDefaultPrompt": "你需要幫助翻譯嗎?", - "lockedChatWarning": "🔒 此聊天已被鎖定", - "lockChat": "鎖定聊天", - "suggestToChat": "建議加入此聊天", - "suggestToChatDesc": "建議的聊天將會出現在聊天列表中", "acceptSelection": "接受更正", - "acceptSelectionAnyway": "無論如何使用此內容", - "makingActivity": "正在進行活動", "why": "為什麼?", "definition": "定義", "exampleSentence": "範例句子", @@ -4020,128 +3735,55 @@ "reportMessageTitle": "{reportingUserId} 在聊天室 {roomName} 中舉報了來自 {reportedUserId} 的訊息", "reportMessageBody": "訊息:{reportedMessage}\n原因:{reason}", "noTeachersFound": "找不到可舉報的老師", - "viewArchive": "查看存檔", "trialExpiration": "您的免費試用期將於 {expiration} 到期", "freeTrialDesc": "新用戶可獲得一週的 Pangea 聊天免費試用", "activateTrial": "免費7天試用", "successfullySubscribed": "您已成功訂閱!", "clickToManageSubscription": "點擊此處管理您的訂閱。", - "errorGettingAudio": "獲取音訊時出錯。請刷新並重試。", "signUp": "註冊", "pleaseChooseAtLeastChars": "請至少選擇 {min} 個字符。", "noEmailWarning": "請輸入有效的電子郵件地址。否則您將無法重設密碼。如果不想重設,請再次點擊按鈕繼續。", "pleaseEnterValidEmail": "請輸入有效的電子郵件地址。", "pleaseChooseAUsername": "請選擇一個用戶名", - "chooseAUsername": "選擇一個用戶名", "define": "定義", "listen": "聽", - "addConversationBot": "啟用對話機器人", - "addConversationBotDesc": "在此聊天中添加一個機器人", - "convoBotSettingsDescription": "編輯對話主題和難度", - "enterAConversationTopic": "輸入對話主題", - "conversationTopic": "對話主題", - "enableModeration": "啟用管理", - "enableModerationDesc": "啟用自動管理以在消息發送前審查", - "conversationLanguageLevel": "此對話的語言水平是什麼?", - "showDefinition": "顯示定義", - "subscriptionPopupTitle": "此句子可能有語法錯誤...", - "subscriptionPopupDesc": "立即訂閱以解鎖翻譯和語法更正!", - "seeOptions": "查看選項", - "continuedWithoutSubscription": "繼續不訂閱", "trialPeriodExpired": "您的試用期已過期", - "selectToDefine": "點擊任何單詞查看其定義!", "translations": "翻譯", "messageAudio": "訊息音訊", "definitions": "定義", "subscribedToUnlockTools": "訂閱以解鎖互動式翻譯與語法檢查、音訊播放、個人化練習活動與學習分析!", "translationTooltip": "翻譯", - "audioTooltip": "播放音訊", "speechToTextTooltip": "轉錄", - "certifyAge": "我證明我已超過 {age} 歲", "kickBotWarning": "踢出 Pangea 機器人將會移除此聊天中的對話機器人。", - "joinToView": "加入此房間以查看詳細資訊", "refresh": "重新整理", - "autoPlayTitle": "自動播放訊息", - "autoPlayDesc": "啟用後,選取訊息時文字轉語音將自動播放。", "messageAnalytics": "訊息分析", "words": "單詞", "score": "分數", "accuracy": "準確率", "points": "點數", "noPaymentInfo": "無需付款資訊!", - "conversationBotModeSelectDescription": "聊天活動", - "conversationBotModeSelectOption_discussion": "討論", - "conversationBotModeSelectOption_custom": "自訂", - "conversationBotModeSelectOption_conversation": "對話", - "conversationBotModeSelectOption_textAdventure": "文字冒險", - "conversationBotModeSelectOption_storyGame": "故事遊戲", - "conversationBotDiscussionZone_title": "討論設定", - "conversationBotDiscussionZone_discussionTopicLabel": "討論主題", - "conversationBotDiscussionZone_discussionTopicPlaceholder": "設定討論主題", - "conversationBotDiscussionZone_discussionKeywordsLabel": "討論關鍵詞", - "conversationBotDiscussionZone_discussionKeywordsPlaceholder": "設定討論關鍵詞", - "conversationBotDiscussionZone_discussionKeywordsHintText": "用逗號分隔的關鍵詞列表以引導討論", - "conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": "按計劃發送討論提示", - "conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": "討論提示之間的小時數", - "conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": "在⏩反應時回應", - "conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": "發送討論提示的反應", - "conversationBotCustomZone_title": "自訂設定", - "conversationBotCustomZone_customSystemPromptLabel": "系統提示", - "conversationBotCustomZone_customSystemPromptPlaceholder": "設定自訂系統提示", - "conversationBotCustomZone_customSystemPromptEmptyError": "缺少自訂系統提示", - "botConfig": "機器人與活動設定", - "botConfigNoPermissionTitle": "沒有權限", - "botConfigNoPermissionMessage": "請聯繫房間管理員以更改機器人配置", - "addConversationBotDialogTitleInvite": "確認邀請對話機器人", - "addConversationBotButtonInvite": "邀請", - "addConversationBotDialogInviteConfirmation": "邀請", - "addConversationBotButtonTitleRemove": "確認移除對話機器人", - "addConversationBotButtonRemove": "移除", - "addConversationBotDialogRemoveConfirmation": "移除", - "conversationBotConfigConfirmChange": "確認", - "conversationBotStatus": "邀請機器人", - "conversationBotTextAdventureZone_title": "文字冒險", - "conversationBotTextAdventureZone_instructionLabel": "遊戲主持人指示", - "conversationBotTextAdventureZone_instructionPlaceholder": "設定遊戲主持人指示", - "conversationBotCustomZone_instructionSystemPromptEmptyError": "缺少遊戲主持人指示", - "studentAnalyticsNotAvailable": "學生數據目前不可用", - "roomDataMissing": "您不在某些房間中,可能缺少部分數據。", "updatePhoneOS": "您可能需要更新設備的作業系統版本。", "wordsPerMinute": "每分鐘字數", "autoIGCToolName": "自動運行Pangea寫作協助", "autoIGCToolDescription": "在發送訊息前,自動運行Pangea聊天語法和翻譯寫作協助。", - "runGrammarCorrection": "檢查訊息", - "grammarCorrectionFailed": "需處理的問題", - "grammarCorrectionComplete": "看起來不錯!", "tooltipInstructionsTitle": "不確定這是做什麼的嗎?", "tooltipInstructionsMobileBody": "長按項目以查看工具提示。", "tooltipInstructionsBrowserBody": "將滑鼠懸停在項目上以查看工具提示。", "chatCapacity": "聊天容量", "roomFull": "此房間已達容量上限。", - "topicNotSet": "尚未設定主題。", - "chatCapacityNotSet": "此聊天沒有容量限制。", "chatCapacityHasBeenChanged": "聊天容量已更改", "chatCapacitySetTooLow": "聊天容量必須至少為 {count}。", "chatCapacityExplanation": "聊天容量限制允許加入的成員數量。", - "chatExceedsCapacity": "此聊天已超出容量。", "tooManyRequest": "請求過多,請稍後再試。", "enterNumber": "請輸入整數值。", "buildTranslation": "從上述選項建立您的翻譯", - "nonexistentSelection": "選擇已不存在。", - "changeAnalyticsLanguage": "更改分析語言", "practice": "練習", "noLanguagesSet": "未設定語言", - "noActivitiesFound": "目前暫時沒有活動!稍後再來看看。", - "hintTitle": "提示:", "speechToTextBody": "語音訊息可以看到轉錄內容以及說話者的每分鐘字數得分。", "versionNotFound": "未找到版本", "fetchingVersion": "正在取得版本...", "versionFetchError": "取得版本時出錯", "versionText": "版本:{version}+{buildNumber}", - "languageButtonLabel": "語言:{currentLanguage}", - "interactiveTranslatorAutoPlaySliderHeader": "自動播放翻譯", - "interactiveTranslatorAutoPlayDesc": "啟動互動式翻譯器而不需詢問。", - "changeAnalyticsView": "更改分析視圖", "l1TranslationBody": "您的基本語言中的訊息將不會被翻譯。", "deleteSubscriptionWarningTitle": "您有一個有效的訂閱", "deleteSubscriptionWarningBody": "刪除您的帳戶不會自動取消您的訂閱。", @@ -4149,9 +3791,7 @@ "error520Title": "請再試一次。", "error520Desc": "抱歉,我們無法理解您的訊息...", "wordsUsed": "已使用字數", - "errorTypes": "錯誤類型", "level": "等級", - "canceledSend": "已取消發送", "morphsUsed": "已使用形態變化", "translationChoicesBody": "點擊並長按選項以獲取提示。", "grammar": "語法", @@ -4161,7 +3801,6 @@ "reportContentIssueTitle": "舉報內容問題", "feedback": "可選反饋", "reportContentIssueDescription": "哎呀!AI可以促進個性化學習體驗,但...也會產生幻覺。請提供您的反饋,我們將再次嘗試。", - "changeContent": "哎呀!AI可以促進個性化學習體驗,但...也會產生幻覺。它應該是什麼?", "clickTheWordAgainToDeselect": "點擊已選擇的單詞以取消選擇。", "l2SupportNa": "不可用", "l2SupportAlpha": "Alpha", @@ -4395,7 +4034,6 @@ "grammarCopySPC": "特定性", "grammarCopyPARTTYPE": "部分格類型", "grammarCopyINTREL": "疑問-關係", - "grammarCopyNUMFORMpsor": "所有者數量", "grammarCopyUNKNOWN": "未知", "grammarCopyNUMBERPSOR": "所有者數量", "grammarCopyPOSS": "所有格", @@ -4441,28 +4079,14 @@ "grammarCopyVOICEdir": "直接", "grammarCopyVOICEinv": "倒置", "grammarCopyVOICErcp": "相互", - "enterPrompt": "請輸入系統提示", - "selectBotLanguage": "選擇機器人語言", - "chooseVoice": "選擇語音", - "enterLanguageLevel": "請輸入語言等級", - "enterDiscussionTopic": "請輸入討論主題", - "selectBotChatMode": "選擇聊天模式", - "messageNotInTargetLang": "訊息非目標語言", "other": "其他", "levelShort": "等級 {level}", - "botModeValidation": "請選擇一個聊天模式", "clickBestOption": "選擇最佳選項來翻譯您的訊息!", "completeActivitiesToUnlock": "完成至少一個活動以解鎖翻譯!", - "botSettingsSubtitle": "邀請機器人來管理聊天活動", - "invitePeople": "邀請用戶", "noCapacityLimit": "沒有容量限制", "downloadGroupText": "下載群組文字", "notificationsOn": "通知已開啟", "notificationsOff": "通知已關閉", - "chatCanBeFoundViaSearch": "可以通過搜尋找到此聊天", - "requireCodeToJoin": "加入需要密碼", - "canFindInSearch": "可以在搜尋中找到", - "addChatToSpace": "添加聊天", "createChatAndInviteUsers": "建立聊天並邀請用戶", "updatedNewSpaceDescription": "課程允許您整合您的聊天並建立私人或公共社群。", "joinWithCode": "用密碼加入", @@ -4498,39 +4122,19 @@ "constructUseCollected": "在聊天中收集", "constructUseNanDesc": "不適用", "xpIntoLevel": "{currentXP} / {maxXP} 經驗值", - "signInWithUsername": "使用用戶名和密碼登錄", - "registrationEmailMessage": "請通過發送的鏈接驗證您的電子郵件。在某些情況下,電子郵件可能需要最多5分鐘才能到達。也請檢查您的垃圾郵件文件夾。", "enableTTSToolName": "啟用文字轉語音", "enableTTSToolDescription": "允許應用程序為您目標語言的部分文本生成文字轉語音輸出。", - "couldNotFindTTS": "我們找不到適用於您當前目標語言的文字轉語音引擎。", - "ttsInstructionsHyperlink": "點擊此處查看在您的設備上下載新語音的說明。", - "createAnAccount": "創建帳戶", - "signIn": "登錄", - "signUpWithEmail": "用電子郵件註冊", - "signUpWithGoogle": "用Google註冊", - "signUpWithApple": "用Apple註冊", "yourUsername": "您的用戶名", "yourEmail": "您的電子郵件", - "pleaseEnterAnEmail": "請輸入電子郵件地址", - "signInWithGoogle": "使用 Google 登入", - "signInWithApple": "使用 Apple 登入", - "chooseYourAvatar": "選擇您的頭像", "iWantToLearn": "我想學習", - "letsStart": "讓我們開始", - "pleaseAgreeToTOS": "請同意條款與條件", "pleaseEnterEmail": "請輸入有效的電子郵件地址。", - "pleaseSelectALanguage": "請選擇一種語言", "myBaseLanguage": "我的基本語言", - "clickWordsInstructions": "🧻 點擊任何單詞以獲取詳細信息。🤐", - "chooseBestDefinition": "這個詞的意思是什麼?", "meaningSectionHeader": "意思:", "formSectionHeader": "在聊天中使用的形式:", - "noEmojiSelectedTooltip": "未選擇表情符號", "writingExercisesTooltip": "寫作", "listeningExercisesTooltip": "聽力", "readingExercisesTooltip": "閱讀", "meaningNotFound": "未能找到意思。", - "formsNotFound": "找不到表單。", "chooseBaseForm": "選擇基本形式", "notTheCodeError": "抱歉,這不是代碼!", "totalXP": "總經驗值", @@ -4570,9 +4174,6 @@ "pickAnEmoji": "你喜歡用哪個表情符號來代表'{lemma}'?", "chooseLemmaMeaningInstructionsBody": "將意思與訊息中的單詞配對!", "doubleClickToEdit": "雙擊以編輯。", - "removeFeature": "移除 {feature}", - "chooseCorrectLabel": "選擇正確的標籤。", - "levelPopupTitle": "恭喜你達到\n等級 {level}", "activityPlannerTitle": "活動規劃器", "topicLabel": "主題", "topicPlaceholder": "選擇一個主題...", @@ -4580,7 +4181,6 @@ "modePlaceholder": "選擇一個模式...", "learningObjectiveLabel": "學習目標", "learningObjectivePlaceholder": "選擇一個學習目標...", - "mediaLabel": "媒體學習者應分享", "languageOfInstructionsLabel": "活動指示語言", "targetLanguageLabel": "目標語言", "cefrLevelLabel": "CEFR 等級", @@ -4595,20 +4195,15 @@ "instructions": "指示", "numberOfLearners": "學習者人數", "mustBeInteger": "必須是整數,例如 1、2、3、...", - "noLemmasFound": "沒有超過 {xp} XP 的詞彙。請繼續練習!", "constructUsePvmDesc": "以語音訊息產生", - "lockedMorphFeature": "等待解鎖", "leaveSpaceDescription": "退出課程後,您將離開所有該課程中的聊天。其他用戶將看到您已離開課程。", - "whatIsLemma": "什麼是詞根?", "constructUseCorMmDesc": "正確的訊息含義", "constructUseIncMmDesc": "錯誤的訊息含義", "constructUseIgnMmDesc": "忽略的訊息含義", "clickForMeaningActivity": "點擊此處參加意義挑戰", "meaning": "意義", "chatWith": "與 {displayname} 組群", - "slightlyOffensive": "略帶冒犯", "clickOnEmailLink": "請點擊電子郵件中的連結,然後繼續。\n\n如果電子郵件未送達,請檢查您的垃圾郵件夾。", - "whoIsAllowedToJoinThisChat": "誰可以加入此聊天", "dontForgetPassword": "別忘了你的密碼!", "enableAutocorrectToolName": "啟用裝置自動更正", "enableAutocorrectDescription": "如果您的裝置支援您正在學習的語言,您可以啟用裝置自動更正,以在輸入時修正常見錯誤。", @@ -4636,48 +4231,26 @@ "autocorrectNotAvailable": "很抱歉,您的平台目前不支援此功能。請持續關注後續開發!", "pleaseUpdateApp": "請更新應用程式以繼續使用。", "chooseEmojiInstructionsBody": "將表情符號與它們最能代表的詞語配對。別擔心!不同意也不扣分。😅", - "pickAnEmojiFor": "為 {lemma} 選擇一個表情符號", "analyticsVocabListBody": "這是你的所有詞彙!當你每學會一個詞,就會從幼苗長成盛開的花朵。點擊任何詞以查看更多詳情。", "morphAnalyticsListBody": "這是你正在學習的語言中的所有語法概念!你在聊天時遇到它們時會解鎖。點擊查看詳情。", "knockSpaceSuccess": "你已申請加入此課程!管理員收到後會回覆你的請求 😄", - "joinByCode": "用代碼加入", "chooseWordAudioInstructionsBody": "聽完整個訊息。然後將音訊與詞語配對。", "chooseMorphsInstructionsBody": "點擊拼圖碎片回答語法問題!", - "inviteAndLaunch": "邀請並啟動", - "createOwnChat": "建立自己的聊天", "pleaseEnterInt": "請輸入一個數字", "home": "首頁", "join": "加入", "readingAssistanceOverviewBody": "點擊下方按鈕進行匹配表情符號、音訊、詞義和語法概念的迷你遊戲。或點擊任何詞以查看更多詳情。", - "learnByTexting": "透過傳訊學習", - "levelSummaryTrigger": "查看摘要", "levelSummaryPopupTitle": "等級 {level} 摘要", - "referFriends": "推薦朋友", - "referFriendDialogTitle": "邀請朋友加入你的對話", - "referFriendDialogDesc": "你有朋友對學習新語言感興趣嗎?那就複製並發送這個邀請連結,加入並開始與你聊天吧。", - "youUnlocked": "你已解鎖", "resetInstructionTooltipsTitle": "重置指示提示", "resetInstructionTooltipsDesc": "點擊顯示像新用戶一樣的指示提示。", "selectForGrammar": "選擇一個語法圖示以進行活動和詳細資訊。", - "newChatActivityTitle": "加入有趣的活動?", - "newChatActivityDesc": "用活動規劃器讓每個群組聊天都充滿冒險!設定吸引人的主題和目標,並用精彩的圖片讓對話生動起來。激發富有想像力的討論,讓樂趣自然流動!", - "exploreMore": "探索更多", "randomize": "隨機", "clear": "清除", "makeYourOwnActivity": "創建你的活動", "featuredActivities": "精選", - "goToChat": "前往聊天", "save": "儲存", - "selectActivity": "選擇活動", - "wordFocusListeningMultipleChoice": "哪個音頻與該詞匹配?", "startChat": "開始聊天", "translationProblem": "翻譯問題", - "perfectTranslation": "完美的翻譯!", - "greatJobTranslation": "這次翻譯做得很好!", - "goodJobTranslation": "這次翻譯做得不錯。", - "makingProgress": "你正在進步!", - "keepPracticing": "繼續練習!", - "niceJob": "做得好!", "askToJoin": "請求加入", "emptyChatWarningTitle": "聊天是空的", "emptyChatWarningDesc": "你還沒有邀請任何人加入你的聊天。前往聊天設置邀請你的聯絡人或機器人。你也可以稍後再做。", @@ -4696,8 +4269,6 @@ "languageLevelC2Desc": "我几乎可以理解听到或阅读的所有内容,并能流利且准确地表达自己。", "newVocab": "新词汇", "newGrammar": "新语法概念", - "congratulationsOnReaching": "你已达到第 {level} 级!", - "seeDetails": "查看详情", "choosePracticeMode": "点击上方的按钮开始练习活动", "ban": "封禁", "unban": "解除封禁", @@ -4711,8 +4282,6 @@ "timesUsedWithAssistance": "协助使用次数", "shareInviteCode": "分享邀请代码:{code}", "leaderboard": "排行榜", - "welcomeUser": "歡迎 {user}", - "joinSpaceOnboardingDesc": "你有邀請碼或連結加入公開課程嗎?", "skipForNow": "暫時跳過", "permissions": "權限", "spaceChildPermission": "誰可以向此課程添加新聊天", @@ -4720,12 +4289,8 @@ "defaultOption": "預設", "deleteChatDesc": "你確定要刪除此聊天嗎?所有參與者的聊天內容將被刪除,且所有訊息將不再供練習或學習分析使用。", "deleteSpaceDesc": "此課程及所有選擇的聊天將被刪除,所有訊息將不再供練習或學習分析使用。此操作無法還原。", - "chatWithActivities": "與活動聊天", "launch": "啟動", - "launchActivityToChats": "向聊天發起活動", "searchChats": "搜尋聊天", - "selectChats": "選擇聊天", - "selectChatToStart": "完成!選擇一個聊天開始", "maxFifty": "最多50個", "configureSpace": "設定課程", "pinMessages": "置頂訊息", @@ -4739,9 +4304,7 @@ "announcements": "公告", "activities": "活動", "access": "訪問", - "botSettings": "機器人設置", "activitySuggestionTimeoutMessage": "我們正在努力為您生成更多活動,請稍候再查看", - "accessSettingsWarning": "哎呀!看起來您沒有權限設置此房間的訪問規則。您應該檢查這些規則是否符合您的需求,如果需要更改,請與房間管理員聯繫", "howSpaceCanBeFound": "如何找到此課程", "private": "私人", "cannotBeFoundInSearch": "在搜索中找不到", @@ -4754,16 +4317,6 @@ "canBeFoundViaKnock": "• 設置申請加入和管理員的批重", "youHaveLeveledUp": "您已級高了!", "sendActivities": "送送活動", - "getStarted": "得到委員來", - "getStartedBotChatDesc": "和自然話是開始的好地方,Pangea讀證、書讀、聽聽和語音工具使定得等星。", - "getStartedCommunitiesDesc": "和社群上學習是企鵝訊售的位置!\n你可以加入你的調節、找到一個調節或者作為自己的學習團。", - "getStartedFriendsDesc": "你有一個朋友想和你一起學習嗎?", - "getStartedBotChatComplete": "好了!你正在訊售自己的機器!", - "getStartedCommunitiesComplete": "好了,你已經加入了一個訓練程!", - "getStartedComplete": "你完成了此部分!\n使用我們的簡單特效功能來管理你的好玩家。", - "getStartedFriendsComplete": "好了!你已經有朋友!😉", - "getStartedBotChatButton": "開始訊售!", - "getStartedFriendsButton": "話話和朋友", "groupChat": "群組訊售", "directMessage": "直接信檔", "newDirectMessage": "新的直接信檔", @@ -4779,7 +4332,6 @@ "mySavedActivities": "我的已保存活動", "noSavedActivities": "沒有已保存的活動", "saveActivity": "保存此活動", - "yourSavedActivities": "已保存的活動", "failedToPlayVideo": "播放視頻失敗", "done": "完成", "inThisSpace": "在此課程中", @@ -4818,37 +4370,27 @@ "maximumActivityParticipants": "每個活動最多可有 {count} 位參與者。", "pending": "待處理", "inactive": "未激活", - "unjoinedActivityMessage": "您想參加嗎?選擇一個開放角色!\n或者閒逛並觀看表演!", - "fullActivityMessage": "隨時可以觀看表演!雖然目前沒有開放的角色可以參與,但您可以查看聊天!", "confirmRole": "確認角色", "openRoleLabel": "開放", "joinedTheActivity": "👋 {username} 以 {role} 身份加入", "finishedTheActivity": "🎯 {username} 完成了此活動", - "endActivityTitle": "我完成了", - "endActivityDesc": "你完成目標了嗎?\n這是你退出聊天的確認,但別擔心,樂趣還在聊天中繼續!隨意閒逛並享受表演,直到每個人點擊“完成”。", "archiveToAnalytics": "加入我已完成的活動", "activitySummaryError": "無法取得活動摘要", "requestSummaries": "請求摘要", - "loadingActivitySummary": "正在載入活動摘要...", "generatingNewActivities": "你是此語言對的第一位用戶!請稍候,我們正在為你準備活動。", - "requestAccessTitle": "請求分析查看權限?", + "requestAccessTitle": "請求分析訪問權限?", "requestAccessDesc": "你是否想請求查看參與者分析的權限?\n\n如果參與者同意,該課程的管理員將能夠查看他們的:\n • 總詞彙量\n • 總語法概念\n • 完成的活動會話總數\n • 使用的具體語法概念,正確與錯誤\n\n他們將無法查看他們的:\n • 課程外的聊天訊息\n • 詞彙清單", "requestAccess": "請求存取 ({count})", "analyticsInactiveTitle": "無法向非活躍用戶發送請求", "analyticsInactiveDesc": "自此功能推出以來未登入的非活躍用戶將看不到您的請求。\n\n當他們回來時,請求按鈕將會出現。您可以稍後再次點擊他們名字下的請求按鈕來重新發送請求。", "accessRequestedTitle": "分析存取請求", - "accessRequestedDesc": "「{space}」的管理員正在請求查看您的學習分析。\n\n如果您同意,該課程的管理員將能夠查看您的:\n • 總詞彙量\n • 總語法概念\n • 完成的活動會話總數\n • 使用的具體語法概念,正確與錯誤\n\n他們將無法查看您的:\n • 課程外的聊天訊息\n • 詞彙清單", - "allowAccess": "允許存取", - "denyAccess": "拒絕存取", + "accessRequestedDesc": "請求的管理員:{admin} \n\n來自「{space}」的管理員正在請求查看您的學習分析。\n\n如果您同意,他們將能夠查看您的:\n • 總詞彙量\n • 總語法概念\n • 完成的總活動會話\n • 使用的特定語法概念,包括正確和不正確的\n\n他們將無法查看您的:\n • 課程外聊天中的消息\n • 詞彙列表", "adminRequestedAccess": "管理員已請求查看您的分析。", "lastUpdated": "更新\n{time}", "activityFinishedMessage": "全部完成!", "endForAll": "結束所有", "newCourse": "新課程", - "newCourseSubtitle": "您想使用哪個課程計劃?", - "failedToLoadCourses": "載入課程失敗", "numModules": "{num} 模組", - "numActivityPlans": "{num} 活動計劃", "coursePlan": "課程計劃", "editCourseLater": "您可以稍後編輯課程標題、描述和課程圖片。", "newCourseAccess": "默認情況下,課程是私有的,需要管理員批准才能加入。您可以隨時編輯這些設置。", @@ -4862,44 +4404,28 @@ "accessDesc": "您可以讓您的課程向全世界開放!或者,將您的課程設為私有且安全。", "createGroupChatDesc": "活動會話開始和結束,而群聊將保持開放以進行日常交流。", "deleteDesc": "只有管理員可以刪除課程。這是一個破壞性操作,會刪除所有用戶並刪除課程內所有選擇的聊天。請謹慎操作。", - "failedToLoadCourseInfo": "無法載入課程資訊", "noCourseFound": "哦,這個課程需要一個計劃!\n\n課程計劃是一系列主題和對話活動。", "additionalParticipants": "+ {num} 其他人", - "activityNotFoundForCourse": "在此課程中未找到此活動", - "courseChats": "課程聊天", - "myActivitySessions": "我的活動會話", "directMessages": "直接訊息", "whatNow": "接下來怎麼辦?", "chooseNextActivity": "選擇您的下一個活動!", - "seeInstructions": "查看說明", - "hideInstructions": "隱藏說明", "letsGo": "我們走吧", "chooseRole": "選擇一個角色!", "chooseRoleToParticipate": "選擇一個角色參與!", "waitingToFillRole": "等待填寫 {num} 個角色...", "pingParticipants": "提醒課程參與者", "playWithBot": "與 Pangea 機器人玩", - "inviteFriendsToActivity": "邀請朋友參加活動", - "inviteFriendsToActivityCourse": "邀請朋友參加活動和課程", "waitNotDone": "等一下,我還沒完成!", "waitingForOthersToFinish": "等待其他人完成...", - "saveToCompletedActivities": "保存到已完成的活動", "generatingSummary": "分析聊天並生成結果", - "instructionsLanguage": "說明語言", "findCourse": "尋找課程", - "activityCompletedDesc": "您的已完成活動已添加到分析中,您可以回顧並練習所使用的語言。", "pingParticipantsNotification": "{user} 正在尋找用戶加入 {room} 的活動會議", "course": "課程", "courses": "課程", "courseName": "課程名稱", "createNewCourse": "新建課程", - "publicCourses": "公開課程", "goToCourse": "前往課程:{course}", "activityComplete": "此活動已完成。活動摘要應在下方提供。", - "haventChattedMuch": "看起來你還沒有多聊天,試著使用更多詞彙!如果你覺得已完成目標,可以在下方結束活動。", - "haveChatted": "看起來你已經聊天一段時間了!如果你覺得已完成目標,請結束以完成活動,我們會在聊天中為你生成摘要!", - "userDoneAndWaiting": "{num1}/{num2} 參與者已完成。請等待所有人完成,我們會在聊天中為你生成摘要!\n\n如果你想重新加入對話,請點擊聊天中的繼續按鈕。", - "othersDoneAndWaiting": "{num1}/{num2} 已完成。你完成你的目標了嗎?", "startNewSession": "開始新會話", "joinOpenSession": "加入公開會話", "less": "較少", @@ -4909,7 +4435,6 @@ "openToJoin": "開放加入", "results": "結果", "activityDone": "活動完成!", - "moreLabel": "更多", "promoCodeInfo": "促销码可以在下一页输入", "editsComingSoon": "编辑城市和活动的功能即将推出。", "editing": "编辑中", @@ -4925,13 +4450,10 @@ "courseSavedSuccessfully": "课程已成功保存", "addCoursePlan": "添加课程计划", "activityStatsButtonInstruction": "点击这里查看你的活动统计,并在完成后关闭活动", - "readingAnalyticsDesc": "点击每条消息的练习以进行阅读活动。", - "speakingAnalyticsDesc": "录制语音消息进行口语练习。", - "audioAnalyticsDesc": "点击每条消息的练习以进行听力活动。", "loginToAccount": "登录我的账户", "appDescription": "学习一门语言\n同时给朋友发短信。", "languages": "語言", - "chooseLanguage": "選擇一種語言。", + "chooseLanguage": "選擇目標語言。", "planTrip": "規劃您的旅程", "howAreYouTraveling": "您打算如何旅行?", "unlockPrivateTrip": "解鎖私人行程", @@ -4944,25 +4466,20 @@ "courseCode": "密碼是什麼?", "courseCodeHint": "行程代碼或連結", "unlockMyTrip": "解鎖我的行程", - "anyLevel": "任何等級", "signupOption": "您想如何註冊?", "withApple": "使用 Apple", "withGoogle": "使用 Google", "withEmail": "使用電子郵件", "createAccount": "建立帳戶", - "noCoursesFound": "未找到课程", "loginWithEmail": "使用电子邮件登录", "usernameOrEmail": "用户名或电子邮件", "email": "电子邮件", "forgotPassword": "忘记密码?", - "writingAnalyticsDesc": "发送消息以练习写作。", "endActivity": "结束活动", "allLanguages": "所有语言", - "allCefrLevels": "所有CEFR等级", "chatListTooltip": "在这里你会找到你的直接消息!点击任何用户的头像并选择“开始对话”以发送私信。", "directMessageBotTitle": "直接消息 Pangea 机器人", "feedbackTitle": "活动反馈", - "feedbackDesc": "如何改进活动?如果你能提供一些细节,我们会进行调整!", "feedbackRespDesc": "明天回来查看活动更新。", "feedbackHint": "你的反馈", "feedbackButton": "提交反馈", @@ -4971,12 +4488,10 @@ "playWithAI": "暂时与AI玩玩", "courseStartDesc": "Pangea机器人随时准备开始!\n\n……但和朋友一起学习更好!", "activityDropdownDesc": "完成此活動後,請點擊下方", - "activityAnalyticsListBody": "這些是您已完成的活動!完成活動後,您可以在此查看。", "languageMismatchTitle": "語言不匹配", "languageMismatchDesc": "您的目標語言與此活動的語言不符。是否要更新您的目標語言?", "reportWordIssueTooltip": "舉報單詞資訊問題", "tokenInfoFeedbackDialogTitle": "單詞資訊反饋", - "tokenInfoFeedbackDialogDesc": "AI 可能會出錯。請描述您在上述資訊中發現的任何問題。", "noPublicCoursesFound": "未找到公開課程。您想創建一個嗎?", "noCourseTemplatesFound": "我們未找到您的目標語言的課程。您可以暫時與 Pangea 機器人聊天,稍後再回來查看更多課程。", "botActivityJoinFailMessage": "Pangea 機器人回應較慢。請稍後再試,或邀請朋友加入。", @@ -5024,30 +4539,6 @@ "type": "String", "placeholders": {} }, - "@accountInformation": { - "type": "String", - "placeholders": {} - }, - "@addGroupDescription": { - "type": "String", - "placeholders": {} - }, - "@addNewFriend": { - "type": "String", - "placeholders": {} - }, - "@alreadyHaveAnAccount": { - "type": "String", - "placeholders": {} - }, - "@createNewGroup": { - "type": "String", - "placeholders": {} - }, - "@editChatPermissions": { - "type": "String", - "placeholders": {} - }, "@writeAMessageLangCodes": { "type": "String", "placeholders": { @@ -5063,18 +4554,6 @@ "type": "String", "placeholders": {} }, - "@allCorrect": { - "type": "String", - "placeholders": {} - }, - "@newWayAllGood": { - "type": "String", - "placeholders": {} - }, - "@othersAreBetter": { - "type": "String", - "placeholders": {} - }, "@holdForInfo": { "type": "String", "placeholders": {} @@ -5099,18 +4578,6 @@ "type": "String", "placeholders": {} }, - "@oneday": { - "type": "String", - "placeholders": {} - }, - "@oneweek": { - "type": "String", - "placeholders": {} - }, - "@onemonth": { - "type": "String", - "placeholders": {} - }, "@gaTooltip": { "type": "String", "placeholders": {} @@ -5147,38 +4614,10 @@ "type": "String", "placeholders": {} }, - "@myLearning": { - "type": "String", - "placeholders": {} - }, "@waTooltip": { "type": "String", "placeholders": {} }, - "@changeDateRange": { - "type": "String", - "placeholders": {} - }, - "@classDescription": { - "type": "String", - "placeholders": {} - }, - "@addStudents": { - "type": "String", - "placeholders": {} - }, - "@copyClassLink": { - "type": "String", - "placeholders": {} - }, - "@copyClassCode": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserName": { - "type": "String", - "placeholders": {} - }, "@languageSettings": { "type": "String", "placeholders": {} @@ -5187,62 +4626,18 @@ "type": "String", "placeholders": {} }, - "@shareVideo": { - "type": "String", - "placeholders": {} - }, - "@shareVideoDesc": { - "type": "String", - "placeholders": {} - }, - "@shareFiles": { - "type": "String", - "placeholders": {} - }, - "@selectLanguageLevel": { - "type": "String", - "placeholders": {} - }, "@noIdenticalLanguages": { "type": "String", "placeholders": {} }, - "@iWantALanguagePartnerFrom": { - "type": "String", - "placeholders": {} - }, - "@worldWide": { - "type": "String", - "placeholders": {} - }, - "@noResults": { - "type": "String", - "placeholders": {} - }, "@searchBy": { "type": "String", "placeholders": {} }, - "@iWantAConversationPartner": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoSpeaks": { - "type": "String", - "placeholders": {} - }, - "@iWantALanguagePartnerWhoIsLearning": { - "type": "String", - "placeholders": {} - }, "@joinWithClassCode": { "type": "String", "placeholders": {} }, - "@joinWithClassCodeHint": { - "type": "String", - "placeholders": {} - }, "@languageLevelPreA1": { "type": "String", "placeholders": {} @@ -5279,10 +4674,6 @@ "type": "String", "placeholders": {} }, - "@askPangeaBot": { - "type": "String", - "placeholders": {} - }, "@sorryNoResults": { "type": "String", "placeholders": {} @@ -5291,14 +4682,6 @@ "type": "String", "placeholders": {} }, - "@helpMeTranslate": { - "type": "String", - "placeholders": {} - }, - "@needsItShortMessage": { - "type": "String", - "placeholders": {} - }, "@needsItMessage": { "type": "String", "placeholders": { @@ -5307,46 +4690,10 @@ } } }, - "@needsIgcMessage": { - "type": "String", - "placeholders": {} - }, - "@tokenTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationDesc": { - "type": "String", - "placeholders": {} - }, - "@spanTranslationTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarTitle": { - "type": "String", - "placeholders": {} - }, - "@l1SpanAndGrammarDesc": { - "type": "String", - "placeholders": {} - }, - "@otherTitle": { - "type": "String", - "placeholders": {} - }, - "@otherDesc": { - "type": "String", - "placeholders": {} - }, "@countryInformation": { "type": "String", "placeholders": {} }, - "@myLanguages": { - "type": "String", - "placeholders": {} - }, "@targetLanguage": { "type": "String", "placeholders": {} @@ -5355,10 +4702,6 @@ "type": "String", "placeholders": {} }, - "@languagesISpeak": { - "type": "String", - "placeholders": {} - }, "@updateLanguage": { "type": "String", "placeholders": {} @@ -5415,18 +4758,6 @@ "type": "String", "placeholders": {} }, - "@itIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@igcIsDisabled": { - "type": "String", - "placeholders": {} - }, - "@goToLearningSettings": { - "type": "String", - "placeholders": {} - }, "@error405Title": { "type": "String", "placeholders": {} @@ -5435,14 +4766,6 @@ "type": "String", "placeholders": {} }, - "@loginOrSignup": { - "type": "String", - "placeholders": {} - }, - "@iAgreeToThe": { - "type": "String", - "placeholders": {} - }, "@termsAndConditions": { "type": "String", "placeholders": {} @@ -5471,18 +4794,6 @@ "type": "String", "placeholders": {} }, - "@toggleIT": { - "type": "String", - "placeholders": {} - }, - "@toggleIGC": { - "type": "String", - "placeholders": {} - }, - "@toggleToolSettingsDescription": { - "type": "String", - "placeholders": {} - }, "@connectedToStaging": { "type": "String", "placeholders": {} @@ -5491,42 +4802,10 @@ "type": "String", "placeholders": {} }, - "@sendVoiceNotes": { - "type": "String", - "placeholders": {} - }, - "@sendVoiceNotesDesc": { - "type": "String", - "placeholders": {} - }, - "@chatTopic": { - "type": "String", - "placeholders": {} - }, - "@chatTopicDesc": { - "type": "String", - "placeholders": {} - }, - "@inviteStudentByUserNameDesc": { - "type": "String", - "placeholders": {} - }, "@participants": { "type": "String", "placeholders": {} }, - "@almostPerfect": { - "type": "String", - "placeholders": {} - }, - "@prettyGood": { - "type": "String", - "placeholders": {} - }, - "@letMeThink": { - "type": "String", - "placeholders": {} - }, "@clickMessageTitle": { "type": "String", "placeholders": {} @@ -5535,14 +4814,6 @@ "type": "String", "placeholders": {} }, - "@understandingMessagesTitle": { - "type": "String", - "placeholders": {} - }, - "@understandingMessagesBody": { - "type": "String", - "placeholders": {} - }, "@allDone": { "type": "String", "placeholders": {} @@ -5563,26 +4834,6 @@ "type": "String", "placeholders": {} }, - "@unknownProficiency": { - "type": "String", - "placeholders": {} - }, - "@changeView": { - "type": "String", - "placeholders": {} - }, - "@clearAll": { - "type": "String", - "placeholders": {} - }, - "@generateVocabulary": { - "type": "String", - "placeholders": {} - }, - "@generatePrompts": { - "type": "String", - "placeholders": {} - }, "@subscribe": { "type": "String", "placeholders": {} @@ -5603,10 +4854,6 @@ "type": "String", "placeholders": {} }, - "@changeSubscription": { - "type": "String", - "placeholders": {} - }, "@cancelSubscription": { "type": "String", "placeholders": {} @@ -5639,25 +4886,6 @@ "type": "String", "placeholders": {} }, - "@updateDesc": { - "type": "String", - "placeholders": { - "localVersion": { - "type": "String" - }, - "storeVersion": { - "type": "String" - } - } - }, - "@maybeLater": { - "type": "String", - "placeholders": {} - }, - "@mainMenu": { - "type": "String", - "placeholders": {} - }, "@toggleImmersionMode": { "type": "String", "placeholders": {} @@ -5714,34 +4942,6 @@ "type": "String", "placeholders": {} }, - "@kickAllStudents": { - "type": "String", - "placeholders": {} - }, - "@kickAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudents": { - "type": "String", - "placeholders": {} - }, - "@inviteAllStudentsConfirmation": { - "type": "String", - "placeholders": {} - }, - "@inviteUsersFromPangea": { - "type": "String", - "placeholders": {} - }, - "@redeemPromoCode": { - "type": "String", - "placeholders": {} - }, - "@enterPromoCode": { - "type": "String", - "placeholders": {} - }, "@downloadTxtFile": { "type": "String", "placeholders": {} @@ -5770,778 +4970,10 @@ "type": "String", "placeholders": {} }, - "@abDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@afDisplayName": { - "type": "String", - "placeholders": {} - }, - "@akDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sqDisplayName": { - "type": "String", - "placeholders": {} - }, - "@amDisplayName": { - "type": "String", - "placeholders": {} - }, - "@arDisplayName": { - "type": "String", - "placeholders": {} - }, - "@anDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@asDisplayName": { - "type": "String", - "placeholders": {} - }, - "@avDisplayName": { - "type": "String", - "placeholders": {} - }, - "@aeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ayDisplayName": { - "type": "String", - "placeholders": {} - }, - "@azDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@baDisplayName": { - "type": "String", - "placeholders": {} - }, - "@euDisplayName": { - "type": "String", - "placeholders": {} - }, - "@beDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@biDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@brDisplayName": { - "type": "String", - "placeholders": {} - }, - "@bgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@myDisplayName": { - "type": "String", - "placeholders": {} - }, - "@caDisplayName": { - "type": "String", - "placeholders": {} - }, - "@chDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ceDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@coDisplayName": { - "type": "String", - "placeholders": {} - }, - "@crDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@csDisplayName": { - "type": "String", - "placeholders": {} - }, - "@daDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@enDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@etDisplayName": { - "type": "String", - "placeholders": {} - }, - "@eeDisplayName": { - "type": "String", - "placeholders": {} - }, - "@foDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@frDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ffDisplayName": { - "type": "String", - "placeholders": {} - }, - "@glDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@deDisplayName": { - "type": "String", - "placeholders": {} - }, - "@elDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@guDisplayName": { - "type": "String", - "placeholders": {} - }, - "@htDisplayName": { - "type": "String", - "placeholders": {} - }, - "@haDisplayName": { - "type": "String", - "placeholders": {} - }, - "@heDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@huDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@idDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ieDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@igDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ikDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ioDisplayName": { - "type": "String", - "placeholders": {} - }, - "@isDisplayName": { - "type": "String", - "placeholders": {} - }, - "@itDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jaDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@klDisplayName": { - "type": "String", - "placeholders": {} - }, - "@knDisplayName": { - "type": "String", - "placeholders": {} - }, - "@krDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ksDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@koDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@kjDisplayName": { - "type": "String", - "placeholders": {} - }, - "@laDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@liDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@loDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ltDisplayName": { - "type": "String", - "placeholders": {} - }, - "@luDisplayName": { - "type": "String", - "placeholders": {} - }, - "@lvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@msDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mtDisplayName": { - "type": "String", - "placeholders": {} - }, - "@miDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@mnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@naDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nvDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nbDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ndDisplayName": { - "type": "String", - "placeholders": {} - }, - "@neDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ngDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@noDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@nrDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ocDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ojDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@omDisplayName": { - "type": "String", - "placeholders": {} - }, - "@orDisplayName": { - "type": "String", - "placeholders": {} - }, - "@osDisplayName": { - "type": "String", - "placeholders": {} - }, - "@paDisplayName": { - "type": "String", - "placeholders": {} - }, - "@piDisplayName": { - "type": "String", - "placeholders": {} - }, - "@faDisplayName": { - "type": "String", - "placeholders": {} - }, - "@plDisplayName": { - "type": "String", - "placeholders": {} - }, - "@psDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ptDisplayName": { - "type": "String", - "placeholders": {} - }, - "@quDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rmDisplayName": { - "type": "String", - "placeholders": {} - }, - "@rnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@roDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ruDisplayName": { - "type": "String", - "placeholders": {} - }, - "@saDisplayName": { - "type": "String", - "placeholders": {} - }, - "@scDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@seDisplayName": { - "type": "String", - "placeholders": {} - }, - "@smDisplayName": { - "type": "String", - "placeholders": {} - }, - "@sgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@srDisplayName": { - "type": "String", - "placeholders": {} - }, - "@gdDisplayName": { - "type": "String", - "placeholders": {} - }, - "@snDisplayName": { - "type": "String", - "placeholders": {} - }, - "@siDisplayName": { - "type": "String", - "placeholders": {} - }, - "@skDisplayName": { - "type": "String", - "placeholders": {} - }, - "@slDisplayName": { - "type": "String", - "placeholders": {} - }, - "@soDisplayName": { - "type": "String", - "placeholders": {} - }, - "@stDisplayName": { - "type": "String", - "placeholders": {} - }, - "@esDisplayName": { - "type": "String", - "placeholders": {} - }, - "@suDisplayName": { - "type": "String", - "placeholders": {} - }, - "@swDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ssDisplayName": { - "type": "String", - "placeholders": {} - }, - "@svDisplayName": { - "type": "String", - "placeholders": {} - }, - "@taDisplayName": { - "type": "String", - "placeholders": {} - }, - "@teDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tgDisplayName": { - "type": "String", - "placeholders": {} - }, - "@thDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@boDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tkDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tlDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@toDisplayName": { - "type": "String", - "placeholders": {} - }, - "@trDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tsDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ttDisplayName": { - "type": "String", - "placeholders": {} - }, - "@twDisplayName": { - "type": "String", - "placeholders": {} - }, - "@tyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ugDisplayName": { - "type": "String", - "placeholders": {} - }, - "@ukDisplayName": { - "type": "String", - "placeholders": {} - }, - "@urDisplayName": { - "type": "String", - "placeholders": {} - }, - "@uzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@veDisplayName": { - "type": "String", - "placeholders": {} - }, - "@viDisplayName": { - "type": "String", - "placeholders": {} - }, - "@voDisplayName": { - "type": "String", - "placeholders": {} - }, - "@waDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@woDisplayName": { - "type": "String", - "placeholders": {} - }, - "@fyDisplayName": { - "type": "String", - "placeholders": {} - }, - "@xhDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@yoDisplayName": { - "type": "String", - "placeholders": {} - }, - "@zaDisplayName": { - "type": "String", - "placeholders": {} - }, "@unkDisplayName": { "type": "String", "placeholders": {} }, - "@zuDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hawDisplayName": { - "type": "String", - "placeholders": {} - }, - "@hmnDisplayName": { - "type": "String", - "placeholders": {} - }, - "@multiDisplayName": { - "type": "String", - "placeholders": {} - }, - "@cebDisplayName": { - "type": "String", - "placeholders": {} - }, - "@dzDisplayName": { - "type": "String", - "placeholders": {} - }, - "@iwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@jwDisplayName": { - "type": "String", - "placeholders": {} - }, - "@moDisplayName": { - "type": "String", - "placeholders": {} - }, - "@shDisplayName": { - "type": "String", - "placeholders": {} - }, "@wwCountryDisplayName": { "type": "String", "placeholders": {} @@ -7534,14 +5966,6 @@ "type": "String", "placeholders": {} }, - "@allPrivateChats": { - "type": "String", - "placeholders": {} - }, - "@unknownPrivateChat": { - "type": "String", - "placeholders": {} - }, "@invitedToSpace": { "type": "String", "placeholders": { @@ -7553,14 +5977,6 @@ } } }, - "@declinedInvitation": { - "type": "String", - "placeholders": {} - }, - "@acceptedInvitation": { - "type": "String", - "placeholders": {} - }, "@youreInvited": { "type": "String", "placeholders": {} @@ -7592,10 +6008,6 @@ "type": "String", "placeholders": {} }, - "@grammarAnalytics": { - "type": "String", - "placeholders": {} - }, "@total": { "type": "String", "placeholders": {} @@ -7604,18 +6016,6 @@ "type": "String", "placeholders": {} }, - "@promoSubscriptionExpirationDesc": { - "type": "String", - "placeholders": { - "expiration": { - "type": "String" - } - } - }, - "@emptyChatNameWarning": { - "type": "String", - "placeholders": {} - }, "@blurMeansTranslateTitle": { "type": "String", "placeholders": {} @@ -7624,14 +6024,6 @@ "type": "String", "placeholders": {} }, - "@someErrorTitle": { - "type": "String", - "placeholders": {} - }, - "@someErrorBody": { - "type": "String", - "placeholders": {} - }, "@bestCorrectionFeedback": { "type": "String", "placeholders": {} @@ -7656,38 +6048,10 @@ "type": "String", "placeholders": {} }, - "@itStartDefaultPrompt": { - "type": "String", - "placeholders": {} - }, - "@lockedChatWarning": { - "type": "String", - "placeholders": {} - }, - "@lockChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChat": { - "type": "String", - "placeholders": {} - }, - "@suggestToChatDesc": { - "type": "String", - "placeholders": {} - }, "@acceptSelection": { "type": "String", "placeholders": {} }, - "@acceptSelectionAnyway": { - "type": "String", - "placeholders": {} - }, - "@makingActivity": { - "type": "String", - "placeholders": {} - }, "@why": { "type": "String", "placeholders": {} @@ -7733,10 +6097,6 @@ "type": "String", "placeholders": {} }, - "@viewArchive": { - "type": "String", - "placeholders": {} - }, "@trialExpiration": { "type": "String", "placeholders": { @@ -7761,10 +6121,6 @@ "type": "String", "placeholders": {} }, - "@errorGettingAudio": { - "type": "String", - "placeholders": {} - }, "@signUp": { "type": "String", "placeholders": {} @@ -7789,10 +6145,6 @@ "type": "String", "placeholders": {} }, - "@chooseAUsername": { - "type": "String", - "placeholders": {} - }, "@define": { "type": "String", "placeholders": {} @@ -7801,66 +6153,10 @@ "type": "String", "placeholders": {} }, - "@addConversationBot": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDesc": { - "type": "String", - "placeholders": {} - }, - "@convoBotSettingsDescription": { - "type": "String", - "placeholders": {} - }, - "@enterAConversationTopic": { - "type": "String", - "placeholders": {} - }, - "@conversationTopic": { - "type": "String", - "placeholders": {} - }, - "@enableModeration": { - "type": "String", - "placeholders": {} - }, - "@enableModerationDesc": { - "type": "String", - "placeholders": {} - }, - "@conversationLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@showDefinition": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupTitle": { - "type": "String", - "placeholders": {} - }, - "@subscriptionPopupDesc": { - "type": "String", - "placeholders": {} - }, - "@seeOptions": { - "type": "String", - "placeholders": {} - }, - "@continuedWithoutSubscription": { - "type": "String", - "placeholders": {} - }, "@trialPeriodExpired": { "type": "String", "placeholders": {} }, - "@selectToDefine": { - "type": "String", - "placeholders": {} - }, "@translations": { "type": "String", "placeholders": {} @@ -7881,42 +6177,18 @@ "type": "String", "placeholders": {} }, - "@audioTooltip": { - "type": "String", - "placeholders": {} - }, "@speechToTextTooltip": { "type": "String", "placeholders": {} }, - "@certifyAge": { - "type": "String", - "placeholders": { - "age": { - "type": "String" - } - } - }, "@kickBotWarning": { "type": "String", "placeholders": {} }, - "@joinToView": { - "type": "String", - "placeholders": {} - }, "@refresh": { "type": "String", "placeholders": {} }, - "@autoPlayTitle": { - "type": "String", - "placeholders": {} - }, - "@autoPlayDesc": { - "type": "String", - "placeholders": {} - }, "@messageAnalytics": { "type": "String", "placeholders": {} @@ -7941,154 +6213,6 @@ "type": "String", "placeholders": {} }, - "@conversationBotModeSelectDescription": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_discussion": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_custom": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_conversation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_textAdventure": { - "type": "String", - "placeholders": {} - }, - "@conversationBotModeSelectOption_storyGame": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTopicPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionKeywordsHintText": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerScheduleHourIntervalLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionEnabledLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotDiscussionZone_discussionTriggerReactionKeyLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_customSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@botConfig": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionTitle": { - "type": "String", - "placeholders": {} - }, - "@botConfigNoPermissionMessage": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogTitleInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonInvite": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogInviteConfirmation": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonTitleRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotButtonRemove": { - "type": "String", - "placeholders": {} - }, - "@addConversationBotDialogRemoveConfirmation": { - "type": "String", - "placeholders": {} - }, - "@conversationBotConfigConfirmChange": { - "type": "String", - "placeholders": {} - }, - "@conversationBotStatus": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_title": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionLabel": { - "type": "String", - "placeholders": {} - }, - "@conversationBotTextAdventureZone_instructionPlaceholder": { - "type": "String", - "placeholders": {} - }, - "@conversationBotCustomZone_instructionSystemPromptEmptyError": { - "type": "String", - "placeholders": {} - }, - "@studentAnalyticsNotAvailable": { - "type": "String", - "placeholders": {} - }, - "@roomDataMissing": { - "type": "String", - "placeholders": {} - }, "@updatePhoneOS": { "type": "String", "placeholders": {} @@ -8105,18 +6229,6 @@ "type": "String", "placeholders": {} }, - "@runGrammarCorrection": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionFailed": { - "type": "String", - "placeholders": {} - }, - "@grammarCorrectionComplete": { - "type": "String", - "placeholders": {} - }, "@tooltipInstructionsTitle": { "type": "String", "placeholders": {} @@ -8137,14 +6249,6 @@ "type": "String", "placeholders": {} }, - "@topicNotSet": { - "type": "String", - "placeholders": {} - }, - "@chatCapacityNotSet": { - "type": "String", - "placeholders": {} - }, "@chatCapacityHasBeenChanged": { "type": "String", "placeholders": {} @@ -8161,10 +6265,6 @@ "type": "String", "placeholders": {} }, - "@chatExceedsCapacity": { - "type": "String", - "placeholders": {} - }, "@tooManyRequest": { "type": "String", "placeholders": {} @@ -8177,14 +6277,6 @@ "type": "String", "placeholders": {} }, - "@nonexistentSelection": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsLanguage": { - "type": "String", - "placeholders": {} - }, "@practice": { "type": "String", "placeholders": {} @@ -8193,14 +6285,6 @@ "type": "String", "placeholders": {} }, - "@noActivitiesFound": { - "type": "String", - "placeholders": {} - }, - "@hintTitle": { - "type": "String", - "placeholders": {} - }, "@speechToTextBody": { "type": "String", "placeholders": {} @@ -8228,26 +6312,6 @@ } } }, - "@languageButtonLabel": { - "type": "String", - "placeholders": { - "currentLanguage": { - "type": "String" - } - } - }, - "@interactiveTranslatorAutoPlaySliderHeader": { - "type": "String", - "placeholders": {} - }, - "@interactiveTranslatorAutoPlayDesc": { - "type": "String", - "placeholders": {} - }, - "@changeAnalyticsView": { - "type": "String", - "placeholders": {} - }, "@l1TranslationBody": { "type": "String", "placeholders": {} @@ -8276,18 +6340,10 @@ "type": "String", "placeholders": {} }, - "@errorTypes": { - "type": "String", - "placeholders": {} - }, "@level": { "type": "String", "placeholders": {} }, - "@canceledSend": { - "type": "String", - "placeholders": {} - }, "@morphsUsed": { "type": "String", "placeholders": {} @@ -8324,10 +6380,6 @@ "type": "String", "placeholders": {} }, - "@changeContent": { - "type": "String", - "placeholders": {} - }, "@clickTheWordAgainToDeselect": { "type": "String", "placeholders": {} @@ -9260,10 +7312,6 @@ "type": "String", "placeholders": {} }, - "@grammarCopyNUMFORMpsor": { - "type": "String", - "placeholders": {} - }, "@grammarCopyUNKNOWN": { "type": "String", "placeholders": {} @@ -9444,34 +7492,6 @@ "type": "String", "placeholders": {} }, - "@enterPrompt": { - "type": "String", - "placeholders": {} - }, - "@selectBotLanguage": { - "type": "String", - "placeholders": {} - }, - "@chooseVoice": { - "type": "String", - "placeholders": {} - }, - "@enterLanguageLevel": { - "type": "String", - "placeholders": {} - }, - "@enterDiscussionTopic": { - "type": "String", - "placeholders": {} - }, - "@selectBotChatMode": { - "type": "String", - "placeholders": {} - }, - "@messageNotInTargetLang": { - "type": "String", - "placeholders": {} - }, "@other": { "type": "String", "placeholders": {} @@ -9484,10 +7504,6 @@ } } }, - "@botModeValidation": { - "type": "String", - "placeholders": {} - }, "@clickBestOption": { "type": "String", "placeholders": {} @@ -9496,14 +7512,6 @@ "type": "String", "placeholders": {} }, - "@botSettingsSubtitle": { - "type": "String", - "placeholders": {} - }, - "@invitePeople": { - "type": "String", - "placeholders": {} - }, "@noCapacityLimit": { "type": "String", "placeholders": {} @@ -9520,22 +7528,6 @@ "type": "String", "placeholders": {} }, - "@chatCanBeFoundViaSearch": { - "type": "String", - "placeholders": {} - }, - "@requireCodeToJoin": { - "type": "String", - "placeholders": {} - }, - "@canFindInSearch": { - "type": "String", - "placeholders": {} - }, - "@addChatToSpace": { - "type": "String", - "placeholders": {} - }, "@createChatAndInviteUsers": { "type": "String", "placeholders": {} @@ -9683,14 +7675,6 @@ } } }, - "@signInWithUsername": { - "type": "String", - "placeholders": {} - }, - "@registrationEmailMessage": { - "type": "String", - "placeholders": {} - }, "@enableTTSToolName": { "type": "String", "placeholders": {} @@ -9699,34 +7683,6 @@ "type": "String", "placeholders": {} }, - "@couldNotFindTTS": { - "type": "String", - "placeholders": {} - }, - "@ttsInstructionsHyperlink": { - "type": "String", - "placeholders": {} - }, - "@createAnAccount": { - "type": "String", - "placeholders": {} - }, - "@signIn": { - "type": "String", - "placeholders": {} - }, - "@signUpWithEmail": { - "type": "String", - "placeholders": {} - }, - "@signUpWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signUpWithApple": { - "type": "String", - "placeholders": {} - }, "@yourUsername": { "type": "String", "placeholders": {} @@ -9735,54 +7691,18 @@ "type": "String", "placeholders": {} }, - "@pleaseEnterAnEmail": { - "type": "String", - "placeholders": {} - }, - "@signInWithGoogle": { - "type": "String", - "placeholders": {} - }, - "@signInWithApple": { - "type": "String", - "placeholders": {} - }, - "@chooseYourAvatar": { - "type": "String", - "placeholders": {} - }, "@iWantToLearn": { "type": "String", "placeholders": {} }, - "@letsStart": { - "type": "String", - "placeholders": {} - }, - "@pleaseAgreeToTOS": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterEmail": { "type": "String", "placeholders": {} }, - "@pleaseSelectALanguage": { - "type": "String", - "placeholders": {} - }, "@myBaseLanguage": { "type": "String", "placeholders": {} }, - "@clickWordsInstructions": { - "type": "String", - "placeholders": {} - }, - "@chooseBestDefinition": { - "type": "String", - "placeholders": {} - }, "@meaningSectionHeader": { "type": "String", "placeholders": {} @@ -9791,10 +7711,6 @@ "type": "String", "placeholders": {} }, - "@noEmojiSelectedTooltip": { - "type": "String", - "placeholders": {} - }, "@writingExercisesTooltip": { "type": "String", "placeholders": {} @@ -9811,10 +7727,6 @@ "type": "String", "placeholders": {} }, - "@formsNotFound": { - "type": "String", - "placeholders": {} - }, "@chooseBaseForm": { "type": "String", "placeholders": {} @@ -9986,26 +7898,6 @@ "type": "String", "placeholders": {} }, - "@removeFeature": { - "type": "String", - "placeholders": { - "feature": { - "type": "String" - } - } - }, - "@chooseCorrectLabel": { - "type": "String", - "placeholders": {} - }, - "@levelPopupTitle": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, "@activityPlannerTitle": { "type": "String", "placeholders": {} @@ -10034,10 +7926,6 @@ "type": "String", "placeholders": {} }, - "@mediaLabel": { - "type": "String", - "placeholders": {} - }, "@languageOfInstructionsLabel": { "type": "String", "placeholders": {} @@ -10094,30 +7982,14 @@ "type": "String", "placeholders": {} }, - "@noLemmasFound": { - "type": "String", - "placeholders": { - "xp": { - "type": "int" - } - } - }, "@constructUsePvmDesc": { "type": "String", "placeholders": {} }, - "@lockedMorphFeature": { - "type": "String", - "placeholders": {} - }, "@leaveSpaceDescription": { "type": "String", "placeholders": {} }, - "@whatIsLemma": { - "type": "String", - "placeholders": {} - }, "@constructUseCorMmDesc": { "type": "String", "placeholders": {} @@ -10146,18 +8018,10 @@ } } }, - "@slightlyOffensive": { - "type": "String", - "placeholders": {} - }, "@clickOnEmailLink": { "type": "String", "placeholders": {} }, - "@whoIsAllowedToJoinThisChat": { - "type": "String", - "placeholders": {} - }, "@dontForgetPassword": { "type": "String", "placeholders": {} @@ -10274,14 +8138,6 @@ "type": "String", "placeholders": {} }, - "@pickAnEmojiFor": { - "type": "String", - "placeholders": { - "lemma": { - "type": "String" - } - } - }, "@analyticsVocabListBody": { "type": "String", "placeholders": {} @@ -10294,10 +8150,6 @@ "type": "String", "placeholders": {} }, - "@joinByCode": { - "type": "String", - "placeholders": {} - }, "@chooseWordAudioInstructionsBody": { "type": "String", "placeholders": {} @@ -10306,14 +8158,6 @@ "type": "String", "placeholders": {} }, - "@inviteAndLaunch": { - "type": "String", - "placeholders": {} - }, - "@createOwnChat": { - "type": "String", - "placeholders": {} - }, "@pleaseEnterInt": { "type": "String", "placeholders": {} @@ -10330,14 +8174,6 @@ "type": "String", "placeholders": {} }, - "@learnByTexting": { - "type": "String", - "placeholders": {} - }, - "@levelSummaryTrigger": { - "type": "String", - "placeholders": {} - }, "@levelSummaryPopupTitle": { "type": "String", "placeholders": { @@ -10346,22 +8182,6 @@ } } }, - "@referFriends": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogTitle": { - "type": "String", - "placeholders": {} - }, - "@referFriendDialogDesc": { - "type": "String", - "placeholders": {} - }, - "@youUnlocked": { - "type": "String", - "placeholders": {} - }, "@resetInstructionTooltipsTitle": { "type": "String", "placeholders": {} @@ -10374,18 +8194,6 @@ "type": "String", "placeholders": {} }, - "@newChatActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@newChatActivityDesc": { - "type": "String", - "placeholders": {} - }, - "@exploreMore": { - "type": "String", - "placeholders": {} - }, "@randomize": { "type": "String", "placeholders": {} @@ -10402,22 +8210,10 @@ "type": "String", "placeholders": {} }, - "@goToChat": { - "type": "String", - "placeholders": {} - }, "@save": { "type": "String", "placeholders": {} }, - "@selectActivity": { - "type": "String", - "placeholders": {} - }, - "@wordFocusListeningMultipleChoice": { - "type": "String", - "placeholders": {} - }, "@startChat": { "type": "String", "placeholders": {} @@ -10426,30 +8222,6 @@ "type": "String", "placeholders": {} }, - "@perfectTranslation": { - "type": "String", - "placeholders": {} - }, - "@greatJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@goodJobTranslation": { - "type": "String", - "placeholders": {} - }, - "@makingProgress": { - "type": "String", - "placeholders": {} - }, - "@keepPracticing": { - "type": "String", - "placeholders": {} - }, - "@niceJob": { - "type": "String", - "placeholders": {} - }, "@askToJoin": { "type": "String", "placeholders": {} @@ -10522,18 +8294,6 @@ "type": "String", "placeholders": {} }, - "@congratulationsOnReaching": { - "type": "String", - "placeholders": { - "level": { - "type": "int" - } - } - }, - "@seeDetails": { - "type": "String", - "placeholders": {} - }, "@choosePracticeMode": { "type": "String", "placeholders": {} @@ -10590,18 +8350,6 @@ "type": "String", "placeholders": {} }, - "@welcomeUser": { - "type": "String", - "placeholders": { - "user": { - "type": "String" - } - } - }, - "@joinSpaceOnboardingDesc": { - "type": "String", - "placeholders": {} - }, "@skipForNow": { "type": "String", "placeholders": {} @@ -10630,30 +8378,14 @@ "type": "String", "placeholders": {} }, - "@chatWithActivities": { - "type": "String", - "placeholders": {} - }, "@launch": { "type": "String", "placeholders": {} }, - "@launchActivityToChats": { - "type": "String", - "placeholders": {} - }, "@searchChats": { "type": "String", "placeholders": {} }, - "@selectChats": { - "type": "String", - "placeholders": {} - }, - "@selectChatToStart": { - "type": "String", - "placeholders": {} - }, "@maxFifty": { "type": "String", "placeholders": {} @@ -10706,18 +8438,10 @@ "type": "String", "placeholders": {} }, - "@botSettings": { - "type": "String", - "placeholders": {} - }, "@activitySuggestionTimeoutMessage": { "type": "String", "placeholders": {} }, - "@accessSettingsWarning": { - "type": "String", - "placeholders": {} - }, "@howSpaceCanBeFound": { "type": "String", "placeholders": {} @@ -10766,46 +8490,6 @@ "type": "String", "placeholders": {} }, - "@getStarted": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsDesc": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedCommunitiesComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsComplete": { - "type": "String", - "placeholders": {} - }, - "@getStartedBotChatButton": { - "type": "String", - "placeholders": {} - }, - "@getStartedFriendsButton": { - "type": "String", - "placeholders": {} - }, "@groupChat": { "type": "String", "placeholders": {} @@ -10870,10 +8554,6 @@ "type": "String", "placeholders": {} }, - "@yourSavedActivities": { - "type": "String", - "placeholders": {} - }, "@failedToPlayVideo": { "type": "String", "placeholders": {} @@ -11045,14 +8725,6 @@ "type": "String", "placeholders": {} }, - "@unjoinedActivityMessage": { - "type": "String", - "placeholders": {} - }, - "@fullActivityMessage": { - "type": "String", - "placeholders": {} - }, "@confirmRole": { "type": "String", "placeholders": {} @@ -11080,14 +8752,6 @@ } } }, - "@endActivityTitle": { - "type": "String", - "placeholders": {} - }, - "@endActivityDesc": { - "type": "String", - "placeholders": {} - }, "@archiveToAnalytics": { "type": "String", "placeholders": {} @@ -11100,10 +8764,6 @@ "type": "String", "placeholders": {} }, - "@loadingActivitySummary": { - "type": "String", - "placeholders": {} - }, "@generatingNewActivities": { "type": "String", "placeholders": {} @@ -11139,19 +8799,14 @@ "@accessRequestedDesc": { "type": "String", "placeholders": { + "admin": { + "type": "String" + }, "space": { "type": "String" } } }, - "@allowAccess": { - "type": "String", - "placeholders": {} - }, - "@denyAccess": { - "type": "String", - "placeholders": {} - }, "@adminRequestedAccess": { "type": "String", "placeholders": {} @@ -11176,14 +8831,6 @@ "type": "String", "placeholders": {} }, - "@newCourseSubtitle": { - "type": "String", - "placeholders": {} - }, - "@failedToLoadCourses": { - "type": "String", - "placeholders": {} - }, "@numModules": { "type": "int", "placeholders": { @@ -11192,14 +8839,6 @@ } } }, - "@numActivityPlans": { - "type": "int", - "placeholders": { - "num": { - "type": "int" - } - } - }, "@coursePlan": { "type": "String", "placeholders": {} @@ -11252,10 +8891,6 @@ "type": "String", "placeholders": {} }, - "@failedToLoadCourseInfo": { - "type": "String", - "placeholders": {} - }, "@noCourseFound": { "type": "String", "placeholders": {} @@ -11268,18 +8903,6 @@ } } }, - "@activityNotFoundForCourse": { - "type": "String", - "placeholders": {} - }, - "@courseChats": { - "type": "String", - "placeholders": {} - }, - "@myActivitySessions": { - "type": "String", - "placeholders": {} - }, "@directMessages": { "type": "String", "placeholders": {} @@ -11292,14 +8915,6 @@ "type": "String", "placeholders": {} }, - "@seeInstructions": { - "type": "String", - "placeholders": {} - }, - "@hideInstructions": { - "type": "String", - "placeholders": {} - }, "@letsGo": { "type": "String", "placeholders": {} @@ -11328,14 +8943,6 @@ "type": "String", "placeholders": {} }, - "@inviteFriendsToActivity": { - "type": "String", - "placeholders": {} - }, - "@inviteFriendsToActivityCourse": { - "type": "String", - "placeholders": {} - }, "@waitNotDone": { "type": "String", "placeholders": {} @@ -11344,26 +8951,14 @@ "type": "String", "placeholders": {} }, - "@saveToCompletedActivities": { - "type": "String", - "placeholders": {} - }, "@generatingSummary": { "type": "String", "placeholders": {} }, - "@instructionsLanguage": { - "type": "String", - "placeholders": {} - }, "@findCourse": { "type": "String", "placeholders": {} }, - "@activityCompletedDesc": { - "type": "String", - "placeholders": {} - }, "@pingParticipantsNotification": { "type": "String", "placeholders": { @@ -11391,10 +8986,6 @@ "type": "String", "placeholders": {} }, - "@publicCourses": { - "type": "String", - "placeholders": {} - }, "@goToCourse": { "type": "String", "placeholders": { @@ -11405,36 +8996,6 @@ "type": "String", "placeholders": {} }, - "@haventChattedMuch": { - "type": "String", - "placeholders": {} - }, - "@haveChatted": { - "type": "String", - "placeholders": {} - }, - "@userDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, - "@othersDoneAndWaiting": { - "type": "String", - "placeholders": { - "num1": { - "type": "int" - }, - "num2": { - "type": "int" - } - } - }, "@startNewSession": { "type": "String", "placeholders": {} @@ -11471,10 +9032,6 @@ "type": "String", "placeholders": {} }, - "@moreLabel": { - "type": "String", - "placeholders": {} - }, "@promoCodeInfo": { "type": "String", "placeholders": {} @@ -11539,18 +9096,6 @@ "type": "String", "placeholders": {} }, - "@readingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@speakingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, - "@audioAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@loginToAccount": { "type": "String", "placeholders": {} @@ -11615,10 +9160,6 @@ "type": "String", "placeholders": {} }, - "@anyLevel": { - "type": "String", - "placeholders": {} - }, "@signupOption": { "type": "String", "placeholders": {} @@ -11639,10 +9180,6 @@ "type": "String", "placeholders": {} }, - "@noCoursesFound": { - "type": "String", - "placeholders": {} - }, "@loginWithEmail": { "type": "String", "placeholders": {} @@ -11659,10 +9196,6 @@ "type": "String", "placeholders": {} }, - "@writingAnalyticsDesc": { - "type": "String", - "placeholders": {} - }, "@endActivity": { "type": "String", "placeholders": {} @@ -11671,10 +9204,6 @@ "type": "String", "placeholders": {} }, - "@allCefrLevels": { - "type": "String", - "placeholders": {} - }, "@chatListTooltip": { "type": "String", "placeholders": {} @@ -11687,10 +9216,6 @@ "type": "String", "placeholders": {} }, - "@feedbackDesc": { - "type": "String", - "placeholders": {} - }, "@feedbackRespDesc": { "type": "String", "placeholders": {} @@ -11723,10 +9248,6 @@ "type": "String", "placeholders": {} }, - "@activityAnalyticsListBody": { - "type": "String", - "placeholders": {} - }, "@languageMismatchTitle": { "type": "String", "placeholders": {} @@ -11743,10 +9264,6 @@ "type": "String", "placeholders": {} }, - "@tokenInfoFeedbackDialogDesc": { - "type": "String", - "placeholders": {} - }, "@noPublicCoursesFound": { "type": "String", "placeholders": {} @@ -11780,7 +9297,6 @@ "newMessageInPangeaChat": "📩 Pangea 聊天中有新訊息", "shareCourse": "分享課程", "addCourse": "添加課程", - "joinCourseWithCode": "用代碼加入課程", "joinPublicCourse": "加入公開課程", "vocabLevelsDesc": "這是你升級後詞彙將會放置的地方!", "highlightVocabTooltip": "通過在聊天中發送或練習以下目標詞彙來突出顯示它們", @@ -11804,10 +9320,6 @@ "type": "String", "placeholders": {} }, - "@joinCourseWithCode": { - "type": "String", - "placeholders": {} - }, "@joinPublicCourse": { "type": "String", "placeholders": {} @@ -11816,7 +9328,1193 @@ "type": "String", "placeholders": {} }, - "@highlightVocabTooltip": { + "emptyChatSearch": "未找到私訊或聊天。請確保您的搜尋拼寫正確。", + "activityAnalyticsTooltipBody": "這些是您保存的活動,供回顧和練習使用。", + "numSavedActivities": "保存的活動數量", + "saveActivityTitle": "保存活動", + "saveActivityDesc": "做得好!保存此活動以便稍後回顧和練習", + "levelInfoTooltip": "在這裡您可以看到您獲得的所有積分及其來源!", + "alreadyInCourseWithID": "您已經在這個計劃的課程中。您想創建一個相同計劃的課程,還是去現有的課程?", + "goToExistingCourse": "前往現有課程", + "emojiView": "表情符號視圖", + "feedbackDialogDesc": "我也會犯錯!有什麼可以幫助我改進的嗎?", + "contactHasBeenInvitedToTheCourse": "聯絡人已被邀請參加課程", + "activityStatsButtonTooltip": "活動資訊", + "allow": "允許", + "deny": "拒絕", + "enabledRenewal": "啟用訂閱續訂", + "subscriptionEndsOn": "訂閱結束於", + "subscriptionRenewsOn": "訂閱續訂於", + "waitForSubscriptionChanges": "您的訂閱變更可能需要一些時間才能在應用程式中反映。", + "subscribeReadingAssistance": "訂閱以解鎖消息工具", + "aceDisplayName": "阿齊尼語", + "achDisplayName": "阿科利語", + "afDisplayName": "南非荷蘭語", + "akDisplayName": "阿坎語", + "alzDisplayName": "阿盧爾語", + "amDisplayName": "阿姆哈拉語", + "arDisplayName": "阿拉伯語", + "asDisplayName": "阿薩姆語", + "awaDisplayName": "阿瓦迪語", + "ayDisplayName": "艾馬拉語", + "azDisplayName": "阿塞拜疆語", + "baDisplayName": "巴什基爾", + "banDisplayName": "巴厘語", + "bbcDisplayName": "巴塔克托巴", + "beDisplayName": "白俄羅斯語", + "bemDisplayName": "本巴語", + "bewDisplayName": "貝塔維語", + "bgDisplayName": "保加利亞語", + "bhoDisplayName": "博傑普里語", + "bikDisplayName": "比科爾語", + "bmDisplayName": "班巴拉語", + "bnDisplayName": "孟加拉語", + "bnBDDisplayName": "孟加拉語(孟加拉)", + "bnINDisplayName": "孟加拉語(印度)", + "brDisplayName": "布列塔尼語", + "bsDisplayName": "波士尼亞語", + "btsDisplayName": "巴塔克西馬隆根語", + "btxDisplayName": "巴塔克卡羅語", + "buaDisplayName": "布里亞特語", + "caDisplayName": "加泰羅尼亞語", + "cebDisplayName": "宿霧語", + "cggDisplayName": "奇加", + "chmDisplayName": "瑪莉", + "ckbDisplayName": "中央庫爾德語", + "cnhDisplayName": "哈卡欽", + "coDisplayName": "科西嘉語", + "crhDisplayName": "克里米亞土耳其語", + "crsDisplayName": "塞舌爾克里奧爾法語", + "csDisplayName": "捷克語", + "cvDisplayName": "楚瓦什語", + "cyDisplayName": "威爾士語", + "daDisplayName": "丹麥語", + "deDisplayName": "德語", + "dinDisplayName": "丁卡語", + "doiDisplayName": "多格里語", + "dovDisplayName": "多姆貝語", + "dzDisplayName": "宗喀語", + "eeDisplayName": "埃維語", + "enDisplayName": "英語", + "enAUDisplayName": "英語(澳大利亞)", + "enGBDisplayName": "英語(英國)", + "enINDisplayName": "英語(印度)", + "enUSDisplayName": "英語(美國)", + "eoDisplayName": "世界語", + "esDisplayName": "西班牙語", + "esESDisplayName": "西班牙語(西班牙)", + "esMXDisplayName": "西班牙語(墨西哥)", + "euDisplayName": "巴斯克語", + "faDisplayName": "波斯語", + "ffDisplayName": "富拉語", + "fiDisplayName": "芬蘭語", + "filDisplayName": "菲律賓語", + "fjDisplayName": "斐濟語", + "foDisplayName": "法羅語", + "frDisplayName": "法語", + "frCADisplayName": "法語(加拿大)", + "frFRDisplayName": "法語(法國)", + "fyDisplayName": "西弗里西語", + "gaDisplayName": "愛爾蘭語", + "gaaDisplayName": "加語", + "gdDisplayName": "蘇格蘭蓋爾語", + "glDisplayName": "加利西亞語", + "gnDisplayName": "瓜拉尼語", + "gomDisplayName": "果阿孔卡尼語", + "guDisplayName": "古吉拉特語", + "haDisplayName": "豪薩語", + "hawDisplayName": "夏威夷語", + "heDisplayName": "希伯來語", + "hiDisplayName": "印地語", + "hilDisplayName": "希利蓋農語", + "hmnDisplayName": "苗族語", + "hneDisplayName": "恰蒂斯加爾語", + "hrDisplayName": "克羅地亞語", + "hrxDisplayName": "亨斯里克語", + "htDisplayName": "海地克里奧爾語", + "huDisplayName": "匈牙利語", + "hyDisplayName": "亞美尼亞語", + "idDisplayName": "印尼語", + "igDisplayName": "伊博語", + "iloDisplayName": "伊洛卡諾語", + "isDisplayName": "冰島語", + "itDisplayName": "義大利語", + "jaDisplayName": "日語", + "jvDisplayName": "爪哇語", + "kaDisplayName": "喬治亞語", + "kkDisplayName": "哈薩克語", + "kmDisplayName": "高棉語", + "knDisplayName": "卡納達語", + "koDisplayName": "韓語", + "kokDisplayName": "孔卡尼語", + "kriDisplayName": "克里奧語", + "ksDisplayName": "克什米爾語", + "ktuDisplayName": "基圖巴語(剛果民主共和國)", + "kuDisplayName": "庫爾德語", + "kyDisplayName": "吉爾吉斯語", + "laDisplayName": "拉丁語", + "lbDisplayName": "盧森堡語", + "lgDisplayName": "甘達語", + "liDisplayName": "林堡語", + "lijDisplayName": "利古里亞語", + "lmoDisplayName": "倫巴第語", + "lnDisplayName": "林加拉語", + "loDisplayName": "老撾語", + "ltDisplayName": "立陶宛語", + "ltgDisplayName": "拉脫維亞語", + "luoDisplayName": "盧奧語(肯尼亞和坦尚尼亞)", + "lusDisplayName": "米佐語", + "lvDisplayName": "拉脫維亞語", + "maiDisplayName": "馬義提語", + "makDisplayName": "馬卡薩語", + "mgDisplayName": "馬達加斯加語", + "miDisplayName": "毛利語", + "minDisplayName": "米南加保語", + "mkDisplayName": "馬其頓語", + "mlDisplayName": "馬拉雅拉姆語", + "mnDisplayName": "蒙古語", + "mniDisplayName": "曼尼普爾語", + "mrDisplayName": "馬拉地語", + "msDisplayName": "馬來語", + "msArabDisplayName": "馬來語(阿拉伯文)", + "msMYDisplayName": "馬來語(馬來西亞)", + "mtDisplayName": "馬耳他語", + "mwrDisplayName": "馬瓦里語", + "myDisplayName": "緬甸語", + "nanDisplayName": "閩南語", + "nbDisplayName": "挪威語(博克馬爾)", + "neDisplayName": "尼泊爾語", + "newDisplayName": "尼瓦爾語", + "nlDisplayName": "荷蘭語", + "nlBEDisplayName": "弗拉芒語", + "noDisplayName": "挪威語", + "nrDisplayName": "南恩德貝勒語", + "nsoDisplayName": "北索托語", + "nusDisplayName": "努爾語", + "nyDisplayName": "尼揚賈語", + "ocDisplayName": "奧克西坦語", + "omDisplayName": "奧羅莫語", + "orDisplayName": "奧里亞語", + "paDisplayName": "旁遮普語", + "paArabDisplayName": "旁遮普語(沙赫穆基)", + "paINDisplayName": "旁遮普語(古爾穆基)", + "pagDisplayName": "邦阿西南", + "pamDisplayName": "旁帕省", + "papDisplayName": "帕皮阿門托", + "plDisplayName": "波蘭語", + "psDisplayName": "普什圖語", + "ptDisplayName": "葡萄牙語", + "ptBRDisplayName": "葡萄牙語(巴西)", + "ptPTDisplayName": "葡萄牙語(葡萄牙)", + "quDisplayName": "克丘亞語", + "rajDisplayName": "拉賈斯坦語", + "rnDisplayName": "倫迪語", + "roDisplayName": "羅馬尼亞語", + "roMDDisplayName": "摩爾多瓦語", + "romDisplayName": "羅曼尼語", + "ruDisplayName": "俄語", + "rwDisplayName": "基尼亞萬達語", + "saDisplayName": "梵語", + "satDisplayName": "桑塔利語", + "scnDisplayName": "西西里語", + "sdDisplayName": "信德語", + "sgDisplayName": "桑戈", + "shnDisplayName": "山", + "siDisplayName": "僧伽羅語", + "skDisplayName": "斯洛伐克語", + "slDisplayName": "斯洛文尼亞語", + "smDisplayName": "薩摩亞語", + "snDisplayName": "肖納語", + "soDisplayName": "索馬利語", + "sqDisplayName": "阿爾巴尼亞語", + "srDisplayName": "塞爾維亞語", + "srMEDisplayName": "黑山語", + "ssDisplayName": "斯瓦蒂語", + "stDisplayName": "南索托語", + "suDisplayName": "巽他語", + "svDisplayName": "瑞典語", + "swDisplayName": "斯瓦希里語", + "szlDisplayName": "西里西亞語", + "taDisplayName": "泰米爾語", + "teDisplayName": "泰盧固語", + "tetDisplayName": "特圖姆語", + "tgDisplayName": "塔吉克語", + "thDisplayName": "泰語", + "tiDisplayName": "提格利尼亞語", + "tkDisplayName": "土庫曼語", + "tlDisplayName": "他加祿語", + "tnDisplayName": "茨瓦納語", + "trDisplayName": "土耳其語", + "tsDisplayName": "宗加語", + "ttDisplayName": "塔塔爾語", + "ugDisplayName": "維吾爾語", + "ukDisplayName": "烏克蘭語", + "urDisplayName": "烏爾都語", + "urINDisplayName": "烏爾都語(印度)", + "urPKDisplayName": "烏爾都語(巴基斯坦)", + "uzDisplayName": "烏茲別克語", + "viDisplayName": "越南語", + "wuuDisplayName": "吳語", + "xhDisplayName": "科薩語", + "yiDisplayName": "意第緒語", + "yoDisplayName": "約魯巴語", + "yuaDisplayName": "尤卡坦語", + "yueDisplayName": "廣東話", + "yueCNDisplayName": "廣東話(中國)", + "yueHKDisplayName": "廣東話(香港)", + "zhDisplayName": "中文", + "zhCNDisplayName": "中文(簡體)", + "zhTWDisplayName": "中文(繁體)", + "zuDisplayName": "祖魯語", + "@emptyChatSearch": { + "type": "String", + "placeholders": {} + }, + "@activityAnalyticsTooltipBody": { + "type": "String", + "placeholders": {} + }, + "@numSavedActivities": { + "type": "String", + "placeholders": {} + }, + "@saveActivityTitle": { + "type": "String", + "placeholders": {} + }, + "@saveActivityDesc": { + "type": "String", + "placeholders": {} + }, + "@levelInfoTooltip": { + "type": "String", + "placeholders": {} + }, + "@alreadyInCourseWithID": { + "type": "String", + "placeholders": {} + }, + "@goToExistingCourse": { + "type": "String", + "placeholders": {} + }, + "@emojiView": { + "type": "String", + "placeholders": {} + }, + "@feedbackDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@contactHasBeenInvitedToTheCourse": { + "type": "String", + "placeholders": {} + }, + "@activityStatsButtonTooltip": { + "type": "String", + "placeholders": {} + }, + "@allow": { + "type": "String", + "placeholders": {} + }, + "@deny": { + "type": "String", + "placeholders": {} + }, + "@enabledRenewal": { + "type": "String", + "placeholders": {} + }, + "@subscriptionEndsOn": { + "type": "String", + "placeholders": {} + }, + "@subscriptionRenewsOn": { + "type": "String", + "placeholders": {} + }, + "@waitForSubscriptionChanges": { + "type": "String", + "placeholders": {} + }, + "@subscribeReadingAssistance": { + "type": "String", + "placeholders": {} + }, + "@aceDisplayName": { + "type": "String", + "placeholders": {} + }, + "@achDisplayName": { + "type": "String", + "placeholders": {} + }, + "@afDisplayName": { + "type": "String", + "placeholders": {} + }, + "@akDisplayName": { + "type": "String", + "placeholders": {} + }, + "@alzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@amDisplayName": { + "type": "String", + "placeholders": {} + }, + "@arDisplayName": { + "type": "String", + "placeholders": {} + }, + "@asDisplayName": { + "type": "String", + "placeholders": {} + }, + "@awaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ayDisplayName": { + "type": "String", + "placeholders": {} + }, + "@azDisplayName": { + "type": "String", + "placeholders": {} + }, + "@baDisplayName": { + "type": "String", + "placeholders": {} + }, + "@banDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bbcDisplayName": { + "type": "String", + "placeholders": {} + }, + "@beDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bemDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bewDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bhoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bikDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnBDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bnINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@brDisplayName": { + "type": "String", + "placeholders": {} + }, + "@bsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@btxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@buaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@caDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cebDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cggDisplayName": { + "type": "String", + "placeholders": {} + }, + "@chmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ckbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cnhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@coDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@crsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@csDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@cyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@daDisplayName": { + "type": "String", + "placeholders": {} + }, + "@deDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dinDisplayName": { + "type": "String", + "placeholders": {} + }, + "@doiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dovDisplayName": { + "type": "String", + "placeholders": {} + }, + "@dzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eeDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enAUDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enGBDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@enUSDisplayName": { + "type": "String", + "placeholders": {} + }, + "@eoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esESDisplayName": { + "type": "String", + "placeholders": {} + }, + "@esMXDisplayName": { + "type": "String", + "placeholders": {} + }, + "@euDisplayName": { + "type": "String", + "placeholders": {} + }, + "@faDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ffDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@filDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fjDisplayName": { + "type": "String", + "placeholders": {} + }, + "@foDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frDisplayName": { + "type": "String", + "placeholders": {} + }, + "@frCADisplayName": { + "type": "String", + "placeholders": {} + }, + "@frFRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@fyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gaaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@glDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@gomDisplayName": { + "type": "String", + "placeholders": {} + }, + "@guDisplayName": { + "type": "String", + "placeholders": {} + }, + "@haDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hawDisplayName": { + "type": "String", + "placeholders": {} + }, + "@heDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hilDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hmnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hneDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hrxDisplayName": { + "type": "String", + "placeholders": {} + }, + "@htDisplayName": { + "type": "String", + "placeholders": {} + }, + "@huDisplayName": { + "type": "String", + "placeholders": {} + }, + "@hyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@idDisplayName": { + "type": "String", + "placeholders": {} + }, + "@igDisplayName": { + "type": "String", + "placeholders": {} + }, + "@iloDisplayName": { + "type": "String", + "placeholders": {} + }, + "@isDisplayName": { + "type": "String", + "placeholders": {} + }, + "@itDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@jvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kmDisplayName": { + "type": "String", + "placeholders": {} + }, + "@knDisplayName": { + "type": "String", + "placeholders": {} + }, + "@koDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kokDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kriDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ksDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ktuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@kyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@laDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@liDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lijDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lmoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@loDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ltgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@luoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@lvDisplayName": { + "type": "String", + "placeholders": {} + }, + "@maiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@makDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@miDisplayName": { + "type": "String", + "placeholders": {} + }, + "@minDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mniDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@msMYDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mtDisplayName": { + "type": "String", + "placeholders": {} + }, + "@mwrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@myDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nanDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nbDisplayName": { + "type": "String", + "placeholders": {} + }, + "@neDisplayName": { + "type": "String", + "placeholders": {} + }, + "@newDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nlBEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@noDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nrDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nsoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nusDisplayName": { + "type": "String", + "placeholders": {} + }, + "@nyDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ocDisplayName": { + "type": "String", + "placeholders": {} + }, + "@omDisplayName": { + "type": "String", + "placeholders": {} + }, + "@orDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paArabDisplayName": { + "type": "String", + "placeholders": {} + }, + "@paINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pagDisplayName": { + "type": "String", + "placeholders": {} + }, + "@pamDisplayName": { + "type": "String", + "placeholders": {} + }, + "@papDisplayName": { + "type": "String", + "placeholders": {} + }, + "@plDisplayName": { + "type": "String", + "placeholders": {} + }, + "@psDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptBRDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ptPTDisplayName": { + "type": "String", + "placeholders": {} + }, + "@quDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rajDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roDisplayName": { + "type": "String", + "placeholders": {} + }, + "@roMDDisplayName": { + "type": "String", + "placeholders": {} + }, + "@romDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ruDisplayName": { + "type": "String", + "placeholders": {} + }, + "@rwDisplayName": { + "type": "String", + "placeholders": {} + }, + "@saDisplayName": { + "type": "String", + "placeholders": {} + }, + "@satDisplayName": { + "type": "String", + "placeholders": {} + }, + "@scnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sdDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@shnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@siDisplayName": { + "type": "String", + "placeholders": {} + }, + "@skDisplayName": { + "type": "String", + "placeholders": {} + }, + "@slDisplayName": { + "type": "String", + "placeholders": {} + }, + "@smDisplayName": { + "type": "String", + "placeholders": {} + }, + "@snDisplayName": { + "type": "String", + "placeholders": {} + }, + "@soDisplayName": { + "type": "String", + "placeholders": {} + }, + "@sqDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srDisplayName": { + "type": "String", + "placeholders": {} + }, + "@srMEDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ssDisplayName": { + "type": "String", + "placeholders": {} + }, + "@stDisplayName": { + "type": "String", + "placeholders": {} + }, + "@suDisplayName": { + "type": "String", + "placeholders": {} + }, + "@svDisplayName": { + "type": "String", + "placeholders": {} + }, + "@swDisplayName": { + "type": "String", + "placeholders": {} + }, + "@szlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@taDisplayName": { + "type": "String", + "placeholders": {} + }, + "@teDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tetDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tgDisplayName": { + "type": "String", + "placeholders": {} + }, + "@thDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tkDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tlDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tnDisplayName": { + "type": "String", + "placeholders": {} + }, + "@trDisplayName": { + "type": "String", + "placeholders": {} + }, + "@tsDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ttDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ugDisplayName": { + "type": "String", + "placeholders": {} + }, + "@ukDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urINDisplayName": { + "type": "String", + "placeholders": {} + }, + "@urPKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@uzDisplayName": { + "type": "String", + "placeholders": {} + }, + "@viDisplayName": { + "type": "String", + "placeholders": {} + }, + "@wuuDisplayName": { + "type": "String", + "placeholders": {} + }, + "@xhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yiDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yoDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yuaDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@yueHKDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhCNDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zhTWDisplayName": { + "type": "String", + "placeholders": {} + }, + "@zuDisplayName": { "type": "String", "placeholders": {} }, @@ -11883,6 +10581,7 @@ "notStartedActivitiesTitle": "開放的會議 ({num})", "inProgressActivitiesTitle": "正在進行中 ({num})", "completedActivitiesTitle": "已完成 ({num})", + "pickDifferentActivity": "選擇其他活動", "inOngoingActivity": "您有一個正在進行的活動!", "@notStartedActivitiesTitle": { "type": "String", @@ -11908,10 +10607,128 @@ } } }, + "@pickDifferentActivity": { + "type": "String", + "placeholders": {} + }, + "messageLanguageMismatchMessage": "您的目標語言與此消息不匹配。要更新您的目標語言嗎?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} + }, + "courseParticipantTooltip": "這是這門課程中的所有人。點擊任何用戶的頭像並選擇「開始對話」以發送私信。", + "@courseParticipantTooltip": { + "type": "String", + "placeholders": {} + }, + "blockLemmaConfirmation": "此詞彙將永久從您的分析中移除", + "woman": "女性", + "man": "男性", + "otherGender": "其他", + "unselectedGender": "選擇性別選項", + "gender": "性別", + "chatParticipantTooltip": "這是此聊天中的所有人。點擊任何用戶的頭像並選擇「開始對話」以發送私信。", + "@blockLemmaConfirmation": { + "type": "String", + "placeholders": {} + }, + "@woman": { + "type": "String", + "placeholders": {} + }, + "@man": { + "type": "String", + "placeholders": {} + }, + "@otherGender": { + "type": "String", + "placeholders": {} + }, + "@unselectedGender": { + "type": "String", + "placeholders": {} + }, + "@gender": { + "type": "String", + "placeholders": {} + }, + "@chatParticipantTooltip": { + "type": "String", + "placeholders": {} + }, "@inOngoingActivity": { "type": "String", "placeholders": {} }, + "modeDisabled": "學習工具對於不在目標語言中的消息已被禁用。", + "vocabEmoji": "詞彙表情符號", + "@modeDisabled": { + "type": "String", + "placeholders": {} + }, + "@vocabEmoji": { + "type": "String", + "placeholders": {} + }, + "requestRegeneration": "請求再生", + "optionalRegenerateReason": "(選填) 原因", + "@requestRegeneration": { + "type": "String", + "placeholders": {} + }, + "@optionalRegenerateReason": { + "type": "String", + "placeholders": {} + }, + "emojiSelectedSnackbar": "您已為 {lemma} 設定了表情符號!我們將在未來的練習活動中使用這個表情符號來代表這個詞。", + "@emojiSelectedSnackbar": { + "type": "String", + "placeholders": { + "lemma": { + "type": "String" + } + } + }, + "ssoDialogTitle": "等待登入完成", + "ssoDialogDesc": "我們已開啟一個新標籤頁,以便您安全地登入。", + "ssoDialogHelpText": "🤔 如果您沒有看到新標籤頁,請檢查您的彈出式窗口阻擋器。", + "@ssoDialogTitle": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogDesc": { + "type": "String", + "placeholders": {} + }, + "@ssoDialogHelpText": { + "type": "String", + "placeholders": {} + }, + "disableLanguageToolsTitle": "禁用語言工具", + "disableLanguageToolsDesc": "您想要禁用自動語言輔助嗎?", + "@disableLanguageToolsTitle": { + "type": "String", + "placeholders": {} + }, + "@disableLanguageToolsDesc": { + "type": "String", + "placeholders": {} + }, + "recordingPermissionDenied": "權限被拒絕。請啟用錄音權限以錄製音頻消息。", + "genericWebRecordingError": "發生錯誤。我們建議在錄製消息時使用 Chrome 瀏覽器。", + "@recordingPermissionDenied": { + "type": "String", + "placeholders": {} + }, + "@genericWebRecordingError": { + "type": "String", + "placeholders": {} + }, + "screenSizeWarning": "為了獲得最佳的應用體驗,請擴大您的螢幕大小。", + "@screenSizeWarning": { + "type": "String", + "placeholders": {} + }, "activitiesToUnlockTopicTitle": "解鎖下一主題的活動", "activitiesToUnlockTopicDesc": "設定解鎖下一課程主題所需的活動數量", "@activitiesToUnlockTopicTitle": { @@ -11921,5 +10738,90 @@ "@activitiesToUnlockTopicDesc": { "type": "String", "placeholders": {} + }, + "constructUseCorLMDesc": "正確的詞彙定義練習", + "constructUseIncLMDesc": "不正確的詞彙定義練習", + "constructUseCorLADesc": "正確的詞彙音頻練習", + "constructUseIncLADesc": "不正確的詞彙音頻練習", + "constructUseBonus": "詞彙練習期間的獎勵", + "practiceVocab": "練習詞彙", + "selectMeaning": "選擇意思", + "selectAudio": "選擇匹配的音頻", + "congratulations": "恭喜!", + "anotherRound": "再來一輪", + "noActivityRequest": "目前沒有活動請求。", + "quit": "退出", + "congratulationsYouveCompletedPractice": "恭喜!您已完成練習課程。", + "mustHave10Words": "您必須至少有 10 個詞彙來進行練習。嘗試與朋友或 Pangea Bot 交談以發現更多!", + "botSettings": "機器人設定", + "activitySettingsOverrideWarning": "語言和語言級別由活動計劃決定", + "voice": "聲音", + "@constructUseCorLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLMDesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseCorLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseIncLADesc": { + "type": "String", + "placeholders": {} + }, + "@constructUseBonus": { + "type": "String", + "placeholders": {} + }, + "@practiceVocab": { + "type": "String", + "placeholders": {} + }, + "@selectMeaning": { + "type": "String", + "placeholders": {} + }, + "@selectAudio": { + "type": "String", + "placeholders": {} + }, + "@congratulations": { + "type": "String", + "placeholders": {} + }, + "@anotherRound": { + "type": "String", + "placeholders": {} + }, + "@noActivityRequest": { + "type": "String", + "placeholders": {} + }, + "@quit": { + "type": "String", + "placeholders": {} + }, + "@congratulationsYouveCompletedPractice": { + "type": "String", + "placeholders": {} + }, + "@mustHave10Words": { + "type": "String", + "placeholders": {} + }, + "@botSettings": { + "type": "String", + "placeholders": {} + }, + "@activitySettingsOverrideWarning": { + "type": "String", + "placeholders": {} + }, + "@voice": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 8fe1712c5..ac55d22a4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -13,8 +13,8 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/locale_provider.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/languages/locale_provider.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'config/setting_keys.dart'; @@ -42,7 +42,12 @@ void main() async { /// Then where ever you need language functions simply call PangeaLanguage pangeaLanguage = PangeaLanguage() /// pangeaLanguage.getList or whatever function you need /// - await GetStorage.init(); + final List initFutures = [ + GetStorage.init(), + GetStorage.init("subscription_storage"), + GetStorage.init('class_storage'), + ]; + await Future.wait(initFutures); // Pangea# // Our background push shared isolate accesses flutter-internal things very early in the startup proccess diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 149a36e20..38dc0583e 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:developer'; import 'dart:io'; import 'package:flutter/foundation.dart'; @@ -28,29 +27,33 @@ import 'package:fluffychat/pages/chat/event_info_dialog.dart'; import 'package:fluffychat/pages/chat/events/audio_player.dart'; import 'package:fluffychat/pages/chat/recording_dialog.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_chat_controller.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_update_dispatcher.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_updater_mixin.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/constructs_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/gain_points_animation.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/level_up_banner.dart'; -import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics_misc/message_analytics_feedback.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/chat/utils/unlocked_morphs_snackbar.dart'; import 'package:fluffychat/pangea/chat/widgets/event_too_large_dialog.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/enums/edit_type.dart'; -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; -import 'package:fluffychat/pangea/choreographer/utils/language_mismatch_repo.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/language_mismatch_popup.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/message_analytics_feedback.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/choreographer/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; +import 'package:fluffychat/pangea/choreographer/text_editing/edit_type_enum.dart'; +import 'package:fluffychat/pangea/choreographer/text_editing/pangea_text_controller.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/common/widgets/transparent_backdrop.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; @@ -58,12 +61,19 @@ import 'package:fluffychat/pangea/events/models/representation_content_model.dar import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; -import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; -import 'package:fluffychat/pangea/spaces/utils/load_participants_util.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/learning_settings/disable_language_tools_popup.dart'; +import 'package:fluffychat/pangea/learning_settings/language_mismatch_repo.dart'; +import 'package:fluffychat/pangea/learning_settings/p_language_dialog.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; +import 'package:fluffychat/pangea/spaces/load_participants_builder.dart'; +import 'package:fluffychat/pangea/subscription/widgets/paywall_card.dart'; +import 'package:fluffychat/pangea/token_info_feedback/show_token_feedback_dialog.dart'; +import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; @@ -78,11 +88,18 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart' import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/share_scaffold_dialog.dart'; -import '../../utils/account_bundles.dart'; import '../../utils/localized_exception_extension.dart'; import 'send_file_dialog.dart'; import 'send_location_dialog.dart'; +// #Pangea +class _TimelineUpdateNotifier extends ChangeNotifier { + void notify() { + notifyListeners(); + } +} +// Pangea# + class ChatPage extends StatelessWidget { final String roomId; final List? shareItems; @@ -113,7 +130,7 @@ class ChatPage extends StatelessWidget { s: StackTrace.current, data: {"roomId": roomId}, ); - context.go("/rooms"); + NavigationUtil.goToSpaceRoute(null, [], context); } if (room == null || room.membership == Membership.leave) { @@ -166,15 +183,17 @@ class ChatPageWithRoom extends StatefulWidget { } class ChatController extends State - with WidgetsBindingObserver { + with WidgetsBindingObserver, AnalyticsUpdater { // #Pangea final PangeaController pangeaController = MatrixState.pangeaController; - late Choreographer choreographer = Choreographer(pangeaController, this); + late Choreographer choreographer; late GoRouter _router; StreamSubscription? _levelSubscription; - StreamSubscription? _analyticsSubscription; + StreamSubscription? _constructsSubscription; StreamSubscription? _botAudioSubscription; + final timelineUpdateNotifier = _TimelineUpdateNotifier(); + late final ActivityChatController activityController; // Pangea# Room get room => sendingClient.getRoomById(roomId) ?? widget.room; @@ -269,7 +288,10 @@ class ChatController extends State future: room.leave, ); if (success.error != null) return; - context.go('/rooms'); + // #Pangea + // context.go('/rooms'); + NavigationUtil.goToSpaceRoute(null, [], context); + // Pangea# } // #Pangea @@ -296,13 +318,15 @@ class ChatController extends State return; } if (!scrollController.hasClients) return; - if (timeline?.allowNewEvent == false || - scrollController.position.pixels > 0 && _scrolledUp == false) { - setState(() => _scrolledUp = true); - } else if (scrollController.position.pixels <= 0 && _scrolledUp == true) { - setState(() => _scrolledUp = false); - setReadMarker(); - } + // #Pangea + // if (timeline?.allowNewEvent == false || + // scrollController.position.pixels > 0 && _scrolledUp == false) { + // setState(() => _scrolledUp = true); + // } else if (scrollController.position.pixels <= 0 && _scrolledUp == true) { + // setState(() => _scrolledUp = false); + // setReadMarker(); + // } + // Pangea# if (scrollController.position.pixels == 0 || scrollController.position.pixels == 64) { @@ -316,7 +340,7 @@ class ChatController extends State if (draft != null && draft.isNotEmpty) { // #Pangea // sendController.text = draft; - sendController.setSystemText(draft, EditType.other); + sendController.setSystemText(draft, EditTypeEnum.other); // Pangea# } } @@ -368,7 +392,7 @@ class ChatController extends State if (evt is KeyDownEvent) { // #Pangea // send(); - choreographer.send(context); + onInputBarSubmitted(); // Pangea# } return KeyEventResult.handled; @@ -412,7 +436,9 @@ class ChatController extends State inputFocus = FocusNode(onKeyEvent: _customEnterKeyHandling); scrollController.addListener(_updateScrollController); - inputFocus.addListener(_inputFocusListener); + // #Pangea + // inputFocus.addListener(_inputFocusListener); + // Pangea# _loadDraft(); WidgetsBinding.instance.addPostFrameCallback(_shareItems); @@ -424,121 +450,100 @@ class ChatController extends State sendingClient = Matrix.of(context).client; readMarkerEventId = room.hasNewMessages ? room.fullyRead : ''; WidgetsBinding.instance.addObserver(this); - // #Pangea - if (!mounted) return; - Future.delayed(const Duration(seconds: 1), () async { - if (!mounted) return; - debugPrint( - "chat.dart l1 ${pangeaController.languageController.userL1?.langCode}", - ); - debugPrint( - "chat.dart l2 ${pangeaController.languageController.userL2?.langCode}", - ); - if (mounted) { - pangeaController.languageController.showDialogOnEmptyLanguage( - context, - () => Future.delayed( - Duration.zero, - () => setState(() {}), - ), - ); - } - }); - - _levelSubscription = pangeaController.getAnalytics.stateStream - .where( - (update) => - update is Map && - (update['level_up'] != null || update['unlocked_constructs'] != null), - ) - .listen( - (update) { - if (update['level_up'] != null) { - LevelUpUtil.showLevelUpDialog( - update['upper_level'], - update['lower_level'], - context, - ); - } else if (update['unlocked_constructs'] != null) { - ConstructNotificationUtil.addUnlockedConstruct( - List.from(update['unlocked_constructs']), - context, - ); - } - }, - ); - - _analyticsSubscription = - pangeaController.getAnalytics.analyticsStream.stream.listen((update) { - if (update.targetID == null) return; - OverlayUtil.showOverlay( - overlayKey: "${update.targetID ?? ""}_points", - followerAnchor: Alignment.bottomCenter, - targetAnchor: Alignment.bottomCenter, - context: context, - child: PointsGainedAnimation( - points: update.points, - targetID: update.targetID!, - ), - transformTargetId: update.targetID ?? "", - closePrevOverlay: false, - backDropToDismiss: false, - ignorePointer: true, - ); - }); - - _botAudioSubscription = room.client.onSync.stream - .where( - (update) => update.rooms?.join?[roomId]?.timeline?.events != null, - ) - .listen((update) async { - final timeline = update.rooms!.join![roomId]!.timeline!; - final botAudioEvent = timeline.events!.firstWhereOrNull( - (e) => - e.senderId == BotName.byEnvironment && - e.content.tryGet('msgtype') == MessageTypes.Audio && - DateTime.now().difference(e.originServerTs) < - const Duration(seconds: 10), - ); - if (botAudioEvent == null) return; - - final matrix = Matrix.of(context); - matrix.voiceMessageEventId.value = botAudioEvent.eventId; - matrix.audioPlayer?.dispose(); - matrix.audioPlayer = AudioPlayer(); - - final event = Event.fromMatrixEvent(botAudioEvent, room); - final audioFile = await event.getPangeaAudioFile(); - debugPrint( - "audiofile: ${audioFile?.mimeType} ${audioFile?.bytes.length}", - ); - if (audioFile == null) return; - - if (!kIsWeb) { - final tempDir = await getTemporaryDirectory(); - - File? file; - file = File('${tempDir.path}/${audioFile.name}'); - await file.writeAsBytes(audioFile.bytes); - matrix.audioPlayer!.setFilePath(file.path); - } else { - matrix.audioPlayer!.setAudioSource( - BytesAudioSource( - audioFile.bytes, - audioFile.mimeType, - ), - ); - } - - matrix.audioPlayer!.play(); - }); - // Pangea# _tryLoadTimeline(); if (kIsWeb) { onFocusSub = html.window.onFocus.listen((_) => setReadMarker()); } + + // #Pangea + _pangeaInit(); + // Pangea# } + // #Pangea + void _onLevelUp(LevelUpdate update) { + LevelUpUtil.showLevelUpDialog( + update.newLevel, + update.prevLevel, + context, + ); + } + + void _onUnlockConstructs(Set constructs) { + if (constructs.isEmpty) return; + ConstructNotificationUtil.addUnlockedConstruct( + List.from(constructs), + context, + ); + } + + Future _botAudioListener(SyncUpdate update) async { + if (update.rooms?.join?[roomId]?.timeline?.events == null) return; + final timeline = update.rooms!.join![roomId]!.timeline!; + final botAudioEvent = timeline.events!.firstWhereOrNull( + (e) => + e.senderId == BotName.byEnvironment && + e.content.tryGet('msgtype') == MessageTypes.Audio && + DateTime.now().difference(e.originServerTs) < + const Duration(seconds: 10), + ); + if (botAudioEvent == null) return; + + final matrix = Matrix.of(context); + matrix.voiceMessageEventId.value = botAudioEvent.eventId; + matrix.audioPlayer?.dispose(); + matrix.audioPlayer = AudioPlayer(); + + final event = Event.fromMatrixEvent(botAudioEvent, room); + final audioFile = await event.getPangeaAudioFile(); + if (audioFile == null) return; + + if (!kIsWeb) { + final tempDir = await getTemporaryDirectory(); + + File? file; + file = File('${tempDir.path}/${audioFile.name}'); + await file.writeAsBytes(audioFile.bytes); + matrix.audioPlayer!.setFilePath(file.path); + } else { + matrix.audioPlayer!.setAudioSource( + BytesAudioSource( + audioFile.bytes, + audioFile.mimeType, + ), + ); + } + + matrix.audioPlayer!.play(); + } + + void _pangeaInit() { + choreographer = Choreographer(inputFocus); + choreographer.timesDismissedIT.addListener(_onCloseIT); + final updater = Matrix.of(context).analyticsDataService.updateDispatcher; + + _levelSubscription = updater.levelUpdateStream.stream.listen(_onLevelUp); + + _constructsSubscription = + updater.unlockedConstructsStream.stream.listen(_onUnlockConstructs); + + _botAudioSubscription = room.client.onSync.stream.listen(_botAudioListener); + + activityController = ActivityChatController( + userID: Matrix.of(context).client.userID!, + room: room, + ); + + Future.delayed(const Duration(seconds: 1), () async { + if (!mounted) return; + LanguageService.showDialogOnEmptyLanguage( + context, + () => () => setState(() {}), + ); + }); + } + // Pangea# + void _tryLoadTimeline() async { final initialEventId = widget.eventId; loadTimelineFuture = _getTimeline(); @@ -592,7 +597,10 @@ class ChatController extends State void updateView() { if (!mounted) return; setReadMarker(); - setState(() {}); + // #Pangea + // setState(() {}); + if (mounted) timelineUpdateNotifier.notify(); + // Pangea# } Future? loadTimelineFuture; @@ -601,14 +609,6 @@ class ChatController extends State void onInsert(int i) { // setState will be called by updateView() anyway - // #Pangea - // If fake event was sent, don't animate in the next event. - // It makes the replacement of the fake event jumpy. - if (_fakeEventIDs.isNotEmpty) { - animateInEventIndex = null; - return; - } - // Pangea# animateInEventIndex = i; } @@ -676,6 +676,7 @@ class ChatController extends State @override void didChangeAppLifecycleState(AppLifecycleState state) { // #Pangea + super.didChangeAppLifecycleState(state); // On iOS, if the toolbar is open and the app is closed, then the user goes // back to do more toolbar activities, the toolbar buttons / selection don't // update properly. So, when the user closes the app, close the toolbar overlay. @@ -770,19 +771,30 @@ class ChatController extends State void dispose() { timeline?.cancelSubscriptions(); timeline = null; - inputFocus.removeListener(_inputFocusListener); + // #Pangea + // inputFocus.removeListener(_inputFocusListener); + // Pangea# onFocusSub?.cancel(); - //#Pangea - choreographer.stateStream.close(); + // #Pangea + WidgetsBinding.instance.removeObserver(this); + _storeInputTimeoutTimer?.cancel(); + _displayChatDetailsColumn.dispose(); + timelineUpdateNotifier.dispose(); + typingCoolDown?.cancel(); + typingTimeout?.cancel(); + scrollController.removeListener(_updateScrollController); choreographer.dispose(); + activityController.dispose(); MatrixState.pAnyState.closeAllOverlays(force: true); - showToolbarStream.close(); stopMediaStream.close(); _levelSubscription?.cancel(); - _analyticsSubscription?.cancel(); _botAudioSubscription?.cancel(); + _constructsSubscription?.cancel(); _router.routeInformationProvider.removeListener(_onRouteChanged); - carouselController.dispose(); + choreographer.timesDismissedIT.removeListener(_onCloseIT); + scrollController.dispose(); + inputFocus.dispose(); + depressMessageButton.dispose(); TokensUtil.clearNewTokenCache(); //Pangea# super.dispose(); @@ -800,7 +812,7 @@ class ChatController extends State s: StackTrace.current, data: {"roomId": roomId}, ); - context.go("/rooms"); + NavigationUtil.goToSpaceRoute(null, [], context); } } @@ -813,97 +825,76 @@ class ChatController extends State // TextEditingController sendController = TextEditingController(); PangeaTextController get sendController => choreographer.textController; - // #Pangea + // Pangea# void setSendingClient(Client c) { - // first cancel typing with the old sending client - if (currentlyTyping) { - // no need to have the setting typing to false be blocking - typingCoolDown?.cancel(); - typingCoolDown = null; - room.setTyping(false); - currentlyTyping = false; - } - // then cancel the old timeline - // fixes bug with read reciepts and quick switching - loadTimelineFuture = _getTimeline(eventContextId: room.fullyRead).onError( - ErrorReporter( - context, - 'Unable to load timeline after changing sending Client', - ).onErrorCallback, - ); + // #Pangea + // // first cancel typing with the old sending client + // if (currentlyTyping) { + // // no need to have the setting typing to false be blocking + // typingCoolDown?.cancel(); + // typingCoolDown = null; + // room.setTyping(false); + // currentlyTyping = false; + // } + // // then cancel the old timeline + // // fixes bug with read reciepts and quick switching + // loadTimelineFuture = _getTimeline(eventContextId: room.fullyRead).onError( + // ErrorReporter( + // context, + // 'Unable to load timeline after changing sending Client', + // ).onErrorCallback, + // ); - // then set the new sending client - setState(() => sendingClient = c); + // // then set the new sending client + // setState(() => sendingClient = c); + // } + + // void setActiveClient(Client c) { + // setState(() { + // Matrix.of(context).setActiveClient(c); + // }); + // Pangea# } - void setActiveClient(Client c) => setState(() { - Matrix.of(context).setActiveClient(c); - }); - // #Pangea Event? pangeaEditingEvent; void clearEditingEvent() { pangeaEditingEvent = null; } - final List _fakeEventIDs = []; - bool get obscureText => _fakeEventIDs.isNotEmpty; - /// Add a fake event to the timeline to visually indicate that a message is being sent. /// Used when tokenizing after message send, specifically because tokenization for some /// languages takes some time. - String? sendFakeMessage() { + Future sendFakeMessage(Event? edit, Event? reply) async { if (sendController.text.trim().isEmpty) return null; + final message = sendController.text; + inputFocus.unfocus(); + sendController.setSystemText("", EditTypeEnum.other); - final eventID = room.sendFakeMessage( - text: sendController.text, - inReplyTo: replyEvent, - editEventId: editEvent?.eventId, + return room.sendFakeMessage( + text: message, + inReplyTo: reply, + editEventId: edit?.eventId, ); - sendController.setSystemText("", EditType.other); - setState(() => _fakeEventIDs.add(eventID)); - - // wait for the next event to come through before clearing any fake event, - // to make the replacement look smooth - room.client.onTimelineEvent.stream - .firstWhere((event) => event.content[ModelKey.tempEventId] == eventID) - .then( - (_) => clearFakeEvent(eventID), - ); - - return eventID; - } - - void clearFakeEvent(String? eventId) { - if (eventId == null) return; - - final inTimeline = timeline != null && - timeline!.events.any( - (e) => e.eventId == eventId, - ); - - if (!inTimeline) return; - timeline?.events.removeWhere((e) => e.eventId == eventId); - - setState(() { - _fakeEventIDs.remove(eventId); - }); } // Future send() async { // Original send function gets the tx id within the matrix lib, // but for choero, the tx id is generated before the message send. // Also, adding PangeaMessageData - Future send({ - required String message, - PangeaRepresentation? originalSent, - PangeaRepresentation? originalWritten, - PangeaMessageTokens? tokensSent, - PangeaMessageTokens? tokensWritten, - ChoreoRecord? choreo, - String? tempEventId, - }) async { + Future send() async { + final message = sendController.text; + final edit = editEvent; + final reply = replyEvent; + editEvent = null; + replyEvent = null; + pendingText = ''; + + final tempEventId = await sendFakeMessage(edit, reply); + final content = await choreographer.getMessageContent(message); + choreographer.clear(); + if (message.trim().isEmpty) return; // if (sendController.text.trim().isEmpty) return; // Pangea# @@ -945,7 +936,7 @@ class ChatController extends State // typing a new message. We don't want to erase that, so only reset the input // bar text if the message is the same as the sendController text. if (message == sendController.text) { - sendController.setSystemText("", EditType.other); + sendController.setSystemText("", EditTypeEnum.other); } final previousEdit = editEvent; @@ -953,15 +944,14 @@ class ChatController extends State room .pangeaSendTextEvent( message, - inReplyTo: replyEvent, - editEventId: editEvent?.eventId, + inReplyTo: reply, + editEventId: edit?.eventId, parseCommands: parseCommands, - originalSent: originalSent, - originalWritten: originalWritten, - tokensSent: tokensSent, - tokensWritten: tokensWritten, - choreo: choreo, - tempEventId: tempEventId, + originalWritten: content.originalWritten, + tokensSent: content.tokensSent, + tokensWritten: content.tokensWritten, + choreo: content.choreo, + txid: tempEventId, ) .then( (String? msgEventId) async { @@ -971,9 +961,15 @@ class ChatController extends State // stream sends the data for newly sent messages. _sendMessageAnalytics( msgEventId, - originalSent: originalSent, - tokensSent: tokensSent, - choreo: choreo, + originalSent: PangeaRepresentation( + langCode: content.tokensSent?.detections?.firstOrNull?.langCode ?? + LanguageKeys.unknownLanguage, + text: message, + originalSent: true, + originalWritten: false, + ), + tokensSent: content.tokensSent, + choreo: content.choreo, ); if (previousEdit != null) { @@ -1003,7 +999,6 @@ class ChatController extends State } }, ).catchError((err, s) { - clearFakeEvent(tempEventId); if (err is EventTooLarge) { showAdaptiveDialog( context: context, @@ -1022,20 +1017,20 @@ class ChatController extends State }, ); }); + // #Pangea // sendController.value = TextEditingValue( // text: pendingText, // selection: const TextSelection.collapsed(offset: 0), // ); - setState(() { - // #Pangea - // sendController.text = pendingText; - // Pangea# - _inputTextIsEmpty = pendingText.isEmpty; - replyEvent = null; - editEvent = null; - pendingText = ''; - }); + // setState(() { + // sendController.text = pendingText; + // _inputTextIsEmpty = pendingText.isEmpty; + // replyEvent = null; + // editEvent = null; + // pendingText = ''; + // }); + // Pangea# } void sendFileAction({FileSelectorType type = FileSelectorType.any}) async { @@ -1145,10 +1140,18 @@ class ChatController extends State name: result.fileName ?? audioFile.path, ); + // #Pangea + final reply = replyEvent; + replyEvent = null; + // Pangea# + await room .sendFileEvent( file, - inReplyTo: replyEvent, + // #Pangea + // inReplyTo: replyEvent, + inReplyTo: reply, + // Pangea# extraContent: { 'info': { ...file.info, @@ -1159,6 +1162,10 @@ class ChatController extends State 'duration': result.duration, 'waveform': result.waveform, }, + // #Pangea + 'speaker_l1': pangeaController.userController.userL1Code, + 'speaker_l2': pangeaController.userController.userL2Code, + // Pangea# }, // #Pangea ) @@ -1196,24 +1203,13 @@ class ChatController extends State // setState(() { // replyEvent = null; // }); - if (mounted) setState(() => replyEvent = null); // Pangea# } void hideEmojiPicker() { - // #Pangea - clearSelectedEvents(); - // Pangea# setState(() => showEmojiPicker = false); } - // #Pangea - void hideOverlayEmojiPicker() { - MatrixState.pAnyState.closeOverlay(); - setState(() => showEmojiPicker = false); - } - // Pangea - void emojiPickerAction() { if (showEmojiPicker) { inputFocus.requestFocus(); @@ -1223,11 +1219,13 @@ class ChatController extends State setState(() => showEmojiPicker = !showEmojiPicker); } - void _inputFocusListener() { - if (showEmojiPicker && inputFocus.hasFocus) { - setState(() => showEmojiPicker = false); - } - } + // #Pangea + // void _inputFocusListener() { + // if (showEmojiPicker && inputFocus.hasFocus) { + // setState(() => showEmojiPicker = false); + // } + // } + // Pangea# void sendLocationAction() async { await showAdaptiveDialog( @@ -1255,13 +1253,13 @@ class ChatController extends State void copyEventsAction() { Clipboard.setData(ClipboardData(text: _getSelectedEventString())); - setState(() { - showEmojiPicker = false; - // #Pangea - // selectedEvents.clear(); - clearSelectedEvents(); - // Pangea# - }); + // #Pangea + // setState(() { + // showEmojiPicker = false; + // selectedEvents.clear(); + // }); + clearSelectedEvents(); + // Pangea# } void reportEventAction() async { @@ -1305,10 +1303,13 @@ class ChatController extends State ), ); if (result.error != null) return; - setState(() { - showEmojiPicker = false; - selectedEvents.clear(); - }); + // #Pangea + // setState(() { + // showEmojiPicker = false; + // selectedEvents.clear(); + // }); + clearSelectedEvents(); + // Pangea# ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(L10n.of(context).contentHasBeenReported)), ); @@ -1399,12 +1400,12 @@ class ChatController extends State ); } // #Pangea + // setState(() { + // showEmojiPicker = false; + // selectedEvents.clear(); + // }); clearSelectedEvents(); // Pangea# - setState(() { - showEmojiPicker = false; - selectedEvents.clear(); - }); } List get currentRoomBundle { @@ -1502,17 +1503,20 @@ class ChatController extends State for (final e in allEditEvents) { e.sendAgain(); } - setState(() => selectedEvents.clear()); + // #Pangea + // setState(() => selectedEvents.clear()); + // Pangea# } void replyAction({Event? replyTo}) { - setState(() { - replyEvent = replyTo ?? selectedEvents.first; - selectedEvents.clear(); - }); // #Pangea + replyEvent = replyTo ?? selectedEvents.first; clearSelectedEvents(); - // Pangea + // setState(() { + // replyEvent = replyTo ?? selectedEvents.first; + // selectedEvents.clear(); + // }); + // Pangea# inputFocus.requestFocus(); } @@ -1617,8 +1621,11 @@ class ChatController extends State // }); void clearSelectedEvents() { if (!mounted) return; + if (!_isToolbarOpen && selectedEvents.isEmpty) return; + MatrixState.pAnyState.closeAllOverlays(); + depressMessageButton.value = false; + setState(() { - MatrixState.pAnyState.closeAllOverlays(); selectedEvents.clear(); showEmojiPicker = false; }); @@ -1631,32 +1638,45 @@ class ChatController extends State }); } - void clearSingleSelectedEvent() { - if (selectedEvents.length <= 1) { - clearSelectedEvents(); - } - } + // #Pangea + // void clearSingleSelectedEvent() { + // if (selectedEvents.length <= 1) { + // clearSelectedEvents(); + // } + // } + // Pangea# void editSelectedEventAction() { - final client = currentRoomBundle.firstWhere( - (cl) => selectedEvents.first.senderId == cl!.userID, - orElse: () => null, - ); - if (client == null) { - return; - } - setSendingClient(client); - setState(() { - pendingText = sendController.text; - editEvent = selectedEvents.first; - sendController.text = - editEvent!.getDisplayEvent(timeline!).calcLocalizedBodyFallback( - MatrixLocals(L10n.of(context)), - withSenderNamePrefix: false, - hideReply: true, - ); - selectedEvents.clear(); - }); + // #Pangea + // final client = currentRoomBundle.firstWhere( + // (cl) => selectedEvents.first.senderId == cl!.userID, + // orElse: () => null, + // ); + // if (client == null) { + // return; + // } + // setSendingClient(client); + // setState(() { + // pendingText = sendController.text; + // editEvent = selectedEvents.first; + // sendController.text = + // editEvent!.getDisplayEvent(timeline!).calcLocalizedBodyFallback( + // MatrixLocals(L10n.of(context)), + // withSenderNamePrefix: false, + // hideReply: true, + // ); + // selectedEvents.clear(); + // }); + pendingText = sendController.text; + editEvent = selectedEvents.first; + sendController.text = + editEvent!.getDisplayEvent(timeline!).calcLocalizedBodyFallback( + MatrixLocals(L10n.of(context)), + withSenderNamePrefix: false, + hideReply: true, + ); + clearSelectedEvents(); + // Pangea# inputFocus.requestFocus(); } @@ -1685,35 +1705,24 @@ class ChatController extends State ); } - void onSelectMessage(Event event) { - // #Pangea - if (choreographer.itController.willOpen) { - return; - } - // Pangea# - if (!event.redacted) { - // #Pangea - // if (selectedEvents.contains(event)) { - // setState( - // () => selectedEvents.remove(event), - // ); - // } - - // If delete first selected event with the selected eventID - final matches = selectedEvents.where((e) => e.eventId == event.eventId); - if (matches.isNotEmpty) { - setState(() => selectedEvents.remove(matches.first)); - // Pangea# - } else { - setState( - () => selectedEvents.add(event), - ); - } - selectedEvents.sort( - (a, b) => a.originServerTs.compareTo(b.originServerTs), - ); - } - } + // #Pangea + // void onSelectMessage(Event event) { + // if (!event.redacted) { + // if (selectedEvents.contains(event)) { + // setState( + // () => selectedEvents.remove(event), + // ); + // } else { + // setState( + // () => selectedEvents.add(event), + // ); + // } + // selectedEvents.sort( + // (a, b) => a.originServerTs.compareTo(b.originServerTs), + // ); + // } + // } + // Pangea# int? findChildIndexCallback(Key key, Map thisEventsKeyMap) { // this method is called very often. As such, it has to be optimized for speed. @@ -1734,12 +1743,16 @@ class ChatController extends State } // #Pangea - void onInputBarSubmitted(String _, BuildContext context) { - // void onInputBarSubmitted(_) { + // void onInputBarSubmitted(String _) { + Future onInputBarSubmitted() async { // send(); - choreographer.send(context); + if (MatrixState.pangeaController.subscriptionController.shouldShowPaywall) { + PaywallCard.show(context, ChoreoConstants.inputTransformTargetKey); + return; + } + await onRequestWritingAssistance(manual: false, autosend: true); + // FocusScope.of(context).requestFocus(inputFocus); // Pangea# - FocusScope.of(context).requestFocus(inputFocus); } void onAddPopupMenuButtonSelected(String choice) { @@ -1781,9 +1794,7 @@ class ChatController extends State ..removeWhere((oldEvent) => oldEvent == eventId); // #Pangea if (scrollToEventIdMarker == eventId) { - setState(() { - scrollToEventIdMarker = null; - }); + scrollToEventIdMarker = null; } // Pangea# showFutureLoadingDialog( @@ -1826,31 +1837,38 @@ class ChatController extends State static const Duration _storeInputTimeout = Duration(milliseconds: 500); void onInputBarChanged(String text) { - if (_inputTextIsEmpty != text.isEmpty) { - setState(() { - _inputTextIsEmpty = text.isEmpty; - }); - } + // #Pangea + // if (_inputTextIsEmpty != text.isEmpty) { + // setState(() { + // _inputTextIsEmpty = text.isEmpty; + // }); + // } + // if (_inputTextIsEmpty.value != text.isEmpty) { + // _inputTextIsEmpty.value = text.isEmpty; + // } + // Pangea# _storeInputTimeoutTimer?.cancel(); _storeInputTimeoutTimer = Timer(_storeInputTimeout, () async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('draft_$roomId', text); }); - if (text.endsWith(' ') && Matrix.of(context).hasComplexBundles) { - final clients = currentRoomBundle; - for (final client in clients) { - final prefix = client!.sendPrefix; - if ((prefix.isNotEmpty) && - text.toLowerCase() == '${prefix.toLowerCase()} ') { - setSendingClient(client); - setState(() { - sendController.clear(); - }); - return; - } - } - } + // #Pangea + // if (text.endsWith(' ') && Matrix.of(context).hasComplexBundles) { + // final clients = currentRoomBundle; + // for (final client in clients) { + // final prefix = client!.sendPrefix; + // if ((prefix.isNotEmpty) && + // text.toLowerCase() == '${prefix.toLowerCase()} ') { + // setSendingClient(client); + // setState(() { + // sendController.clear(); + // }); + // return; + // } + // } + // } + // Pangea# if (AppConfig.sendTypingNotifications) { typingCoolDown?.cancel(); typingCoolDown = Timer(const Duration(seconds: 2), () { @@ -1872,7 +1890,9 @@ class ChatController extends State } } - bool _inputTextIsEmpty = true; + // #Pangea + // bool _inputTextIsEmpty = true; + // Pangea# bool get isArchived => {Membership.leave, Membership.ban}.contains(room.membership); @@ -1935,7 +1955,7 @@ class ChatController extends State if (editEvent != null) { // #Pangea // sendController.text = pendingText; - sendController.setSystemText(pendingText, EditType.other); + sendController.setSystemText(pendingText, EditTypeEnum.other); // Pangea# pendingText = ''; } @@ -1943,6 +1963,8 @@ class ChatController extends State editEvent = null; }); // #Pangea + ValueNotifier depressMessageButton = ValueNotifier(false); + String? get buttonEventID => timeline!.events .firstWhereOrNull( (event) => @@ -1952,16 +1974,45 @@ class ChatController extends State ) ?.eventId; - final StreamController showToolbarStream = - StreamController.broadcast(); + String? get refreshEventID { + final candidate = timeline!.events.firstWhereOrNull( + (event) => + event.isVisibleInGui && + event.senderId != room.client.userID && + event.senderId == BotName.byEnvironment && + !event.redacted, + ); + if (candidate?.hasAggregatedEvents( + timeline!, + RelationshipTypes.edit, + ) == + true) { + return null; + } + return candidate?.eventId; + } final StreamController stopMediaStream = StreamController.broadcast(); + bool get _isToolbarOpen => + MatrixState.pAnyState.isOverlayOpen(RegExp(r'^message_toolbar_overlay$')); + + bool showMessageShimmer(Event event) { + if (event.type != EventTypes.Message) return false; + if (event.messageType == MessageTypes.Text) { + return !InstructionsEnum.clickTextMessages.isToggledOff; + } + if (event.messageType == MessageTypes.Audio) { + return !InstructionsEnum.clickAudioMessages.isToggledOff; + } + return false; + } + void showToolbar( Event event, { PangeaMessageEvent? pangeaMessageEvent, PangeaToken? selectedToken, - MessageMode? mode, + MessagePracticeMode? mode, Event? nextEvent, Event? prevEvent, }) { @@ -1979,73 +2030,102 @@ class ChatController extends State } // Check if the user has set their languages. If not, prompt them to do so. - if (!MatrixState.pangeaController.languageController.languagesSet) { + if (!MatrixState.pangeaController.userController.languagesSet) { pLanguageDialog(context, () {}); return; } - Widget? overlayEntry; - try { - overlayEntry = MessageSelectionOverlay( - chatController: this, - event: event, - timeline: timeline!, - initialSelectedToken: selectedToken, - nextEvent: nextEvent, - prevEvent: prevEvent, - ); - } catch (err) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: StackTrace.current, - data: { - 'roomId': roomId, - 'event': event.toJson(), - 'selectedToken': selectedToken?.toJson(), - 'nextEvent': nextEvent?.toJson(), - 'prevEvent': prevEvent?.toJson(), - }, + final langCode = + pangeaMessageEvent?.originalSent?.langCode.split('-').first; + + if (LanguageMismatchRepo.shouldShowByEvent(event.eventId) && + langCode != null && + pangeaMessageEvent?.originalSent?.content.langCodeMatchesL2 == false && + room.client.allMyAnalyticsRooms.any((r) => r.madeForLang == langCode)) { + LanguageMismatchRepo.setEvent(event.eventId); + OverlayUtil.showLanguageMismatchPopup( + context: context, + targetId: event.eventId, + message: L10n.of(context).messageLanguageMismatchMessage, + targetLanguage: pangeaMessageEvent!.originalSent!.langCode, + onConfirm: () => showToolbar( + event, + pangeaMessageEvent: pangeaMessageEvent, + selectedToken: selectedToken, + mode: mode, + nextEvent: nextEvent, + prevEvent: prevEvent, + ), ); return; } + final overlayEntry = MessageSelectionOverlay( + chatController: this, + event: event, + timeline: timeline!, + initialSelectedToken: selectedToken, + nextEvent: nextEvent, + prevEvent: prevEvent, + ); + // you've clicked a message so lets turn this off InstructionsEnum.clickMessage.setToggledOff(true); + if (event.messageType == MessageTypes.Text && + !InstructionsEnum.clickTextMessages.isToggledOff) { + InstructionsEnum.clickTextMessages.setToggledOff(true); + } + if (event.messageType == MessageTypes.Audio && + !InstructionsEnum.clickAudioMessages.isToggledOff) { + InstructionsEnum.clickAudioMessages.setToggledOff(true); + } - showToolbarStream.add(event.eventId); if (!kIsWeb) { HapticFeedback.mediumImpact(); } - stopMediaStream.add(null); - Future.delayed( - Duration(milliseconds: buttonEventID == event.eventId ? 200 : 0), () { - if (_router.state.path != ':roomid') { - // The user has navigated away from the chat, - // so we don't want to show the overlay. - return; - } - + if (buttonEventID == event.eventId) { + depressMessageButton.value = true; OverlayUtil.showOverlay( context: context, - child: overlayEntry!, + child: TransparentBackdrop( + backgroundColor: Colors.black, + onDismiss: clearSelectedEvents, + blurBackground: true, + animateBackground: true, + backgroundAnimationDuration: const Duration(milliseconds: 200), + ), + position: OverlayPositionEnum.centered, + overlayKey: "button_message_backdrop", + ); + + Future.delayed(const Duration(milliseconds: 200), () { + if (_router.state.path != ':roomid') { + // The user has navigated away from the chat, + // so we don't want to show the overlay. + return; + } + OverlayUtil.showOverlay( + context: context, + child: overlayEntry, + position: OverlayPositionEnum.centered, + onDismiss: clearSelectedEvents, + blurBackground: true, + backgroundColor: Colors.black, + overlayKey: "message_toolbar_overlay", + ); + }); + } else { + OverlayUtil.showOverlay( + context: context, + child: overlayEntry, position: OverlayPositionEnum.centered, onDismiss: clearSelectedEvents, blurBackground: true, backgroundColor: Colors.black, + overlayKey: "message_toolbar_overlay", ); - - // select the message - onSelectMessage(event); - }); - } - - double inputBarHeight = 64; - void updateInputBarHeight(double height) { - if (mounted && height != inputBarHeight) { - setState(() => inputBarHeight = height); } } @@ -2062,13 +2142,12 @@ class ChatController extends State String? eventId, { PangeaRepresentation? originalSent, PangeaMessageTokens? tokensSent, - ChoreoRecord? choreo, + ChoreoRecordModel? choreo, }) { // There's a listen in my_analytics_controller that decides when to auto-update // analytics based on when / how many messages the logged in user send. This // stream sends the data for newly sent messages. - if (originalSent?.langCode.split("-").first != - choreographer.l2Lang?.langCodeShort) { + if (originalSent?.langCodeMatchesL2 != true) { return; } @@ -2088,15 +2167,7 @@ class ChatController extends State ]; _showAnalyticsFeedback(constructs, eventId); - - pangeaController.putAnalytics.setState( - AnalyticsStream( - eventId: eventId, - targetID: eventId, - roomId: room.id, - constructs: constructs, - ), - ); + addAnalytics(constructs, eventId); } } @@ -2131,23 +2202,21 @@ class ChatController extends State ownMessage: true, ); - final stt = await messageEvent.getSpeechToText( - choreographer.l1Lang?.langCodeShort ?? LanguageKeys.unknownLanguage, - choreographer.l2Lang?.langCodeShort ?? LanguageKeys.unknownLanguage, + final stt = await messageEvent.requestSpeechToText( + MatrixState.pangeaController.userController.userL1?.langCodeShort ?? + LanguageKeys.unknownLanguage, + MatrixState.pangeaController.userController.userL2?.langCodeShort ?? + LanguageKeys.unknownLanguage, ); - if (stt == null || stt.transcript.sttTokens.isEmpty) return; + if (stt.transcript.sttTokens.isEmpty) return; final constructs = stt.constructs(roomId, eventId); if (constructs.isEmpty) return; _showAnalyticsFeedback(constructs, eventId); - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - eventId: eventId, - targetID: eventId, - roomId: room.id, - constructs: constructs, - ), - ); + Matrix.of(context).analyticsDataService.updateService.addAnalytics( + eventId, + constructs, + ); } catch (e, s) { ErrorHandler.logError( e: e, @@ -2160,58 +2229,95 @@ class ChatController extends State } } - bool get shouldShowLanguageMismatchPopup { - if (!LanguageMismatchRepo.shouldShow) { - return false; + void showNextMatch() { + MatrixState.pAnyState.closeOverlay(); + final match = choreographer.igcController.openMatches.firstOrNull; + if (match == null) { + inputFocus.requestFocus(); + return; } - final l1 = choreographer.l1Lang?.langCodeShort; - final l2 = choreographer.l2Lang?.langCodeShort; - final activityLang = room.activityPlan?.req.targetLanguage.split('-').first; - - return activityLang != null && - l2 != null && - l2 != activityLang && - l1 != activityLang; + match.updatedMatch.isITStart + ? choreographer.itController.openIT(sendController.text) + : OverlayUtil.showIGCMatch( + match, + choreographer, + context, + showNextMatch, + ); } - Future showLanguageMismatchPopup() async { - if (!shouldShowLanguageMismatchPopup) { + Future onRequestWritingAssistance({ + bool manual = false, + bool autosend = false, + }) async { + if (shouldShowLanguageMismatchPopupByActivity) { + return showLanguageMismatchPopup(); + } + + await choreographer.requestWritingAssistance(manual: manual); + if (choreographer.assistanceState == AssistanceStateEnum.fetched) { + showNextMatch(); + } else if (autosend) { + await send(); + } else { + inputFocus.requestFocus(); + } + } + + void showLanguageMismatchPopup() { + if (!shouldShowLanguageMismatchPopupByActivity) { return; } final targetLanguage = room.activityPlan!.req.targetLanguage; - LanguageMismatchRepo.set(); - OverlayUtil.showPositionedCard( + LanguageMismatchRepo.setRoom(roomId); + OverlayUtil.showLanguageMismatchPopup( context: context, - cardToShow: LanguageMismatchPopup( - targetLanguage: targetLanguage, - choreographer: choreographer, - onUpdate: () async { - await choreographer.getLanguageHelp(manual: true); - final matches = choreographer.igc.igcTextData?.matches; - if (matches?.isNotEmpty == true) { - choreographer.igc.showFirstMatch(context); - } - }, + targetId: ChoreoConstants.inputTransformTargetKey, + message: L10n.of(context).languageMismatchDesc, + targetLanguage: targetLanguage, + onConfirm: () => WidgetsBinding.instance.addPostFrameCallback( + (_) => onRequestWritingAssistance(manual: false, autosend: true), ), - maxHeight: 325, - maxWidth: 325, - transformTargetId: choreographer.inputTransformTargetKey, ); } - void _showAnalyticsFeedback( + void _onCloseIT() { + if (choreographer.timesDismissedIT.value >= 3) { + showDisableLanguageToolsPopup(); + } + } + + void showDisableLanguageToolsPopup() { + if (InstructionsEnum.disableLanguageTools.isToggledOff) { + return; + } + + InstructionsEnum.disableLanguageTools.setToggledOff(true); + OverlayUtil.showPositionedCard( + context: context, + cardToShow: const DisableLanguageToolsPopup( + overlayId: 'disable_language_tools_popup', + ), + maxHeight: 325, + maxWidth: 325, + transformTargetId: ChoreoConstants.inputTransformTargetKey, + overlayKey: 'disable_language_tools_popup', + ); + } + + Future _showAnalyticsFeedback( List constructs, String eventId, - ) { - final newGrammarConstructs = - pangeaController.getAnalytics.newConstructCount( + ) async { + final analyticsService = Matrix.of(context).analyticsDataService; + final newGrammarConstructs = await analyticsService.getNewConstructCount( constructs, ConstructTypeEnum.morph, ); - final newVocabConstructs = pangeaController.getAnalytics.newConstructCount( + final newVocabConstructs = await analyticsService.getNewConstructCount( constructs, ConstructTypeEnum.vocab, ); @@ -2222,9 +2328,10 @@ class ChatController extends State targetAnchor: Alignment.topRight, context: context, child: MessageAnalyticsFeedback( - overlayId: "msg_analytics_feedback_$eventId", newGrammarConstructs: newGrammarConstructs, newVocabConstructs: newVocabConstructs, + close: () => MatrixState.pAnyState + .closeOverlay("msg_analytics_feedback_$eventId"), ), transformTargetId: eventId, ignorePointer: true, @@ -2232,35 +2339,85 @@ class ChatController extends State ); } - final ScrollController carouselController = ScrollController(); - - ActivityRoleModel? highlightedRole; - void highlightRole(ActivityRoleModel role) { - if (mounted) setState(() => highlightedRole = role); + Future showTokenFeedbackDialog( + TokenInfoFeedbackRequestData requestData, + String langCode, + PangeaMessageEvent event, + ) async { + clearSelectedEvents(); + await TokenFeedbackUtil.showTokenFeedbackDialog( + context, + requestData: requestData, + langCode: langCode, + event: event, + ); } - bool showInstructions = false; - void toggleShowInstructions() { - if (mounted) setState(() => showInstructions = !showInstructions); - } + void toggleShowDropdown() { + inputFocus.unfocus(); + activityController.toggleShowDropdown(); - bool showActivityDropdown = false; - void setShowDropdown(bool show) async { - if (show && !AppConfig.showedActivityMenu) { + if (!AppConfig.showedActivityMenu) { AppConfig.showedActivityMenu = true; Matrix.of(context).store.setBool( SettingKeys.showedActivityMenu, AppConfig.showedActivityMenu, ); } - setState(() => showActivityDropdown = show); } - bool hasRainedConfetti = false; - void setHasRainedConfetti(bool show) { - if (mounted) { - setState(() => hasRainedConfetti = show); + Future onLeave() async { + final confirmed = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context).areYouSure, + message: L10n.of(context).leaveRoomDescription, + okLabel: L10n.of(context).leave, + cancelLabel: L10n.of(context).cancel, + isDestructive: true, + ); + if (confirmed != OkCancelResult.ok) return; + final result = await showFutureLoadingDialog( + context: context, + future: widget.room.leave, + ); + + if (result.isError) return; + final r = Matrix.of(context).client.getRoomById(widget.room.id); + if (r != null && r.membership != Membership.leave) { + await Matrix.of(context).client.waitForRoomInSync( + widget.room.id, + leave: true, + ); } + + NavigationUtil.goToSpaceRoute(null, [], context); + } + + Future requestRegeneration(String eventId) async { + final reason = await showTextInputDialog( + context: context, + title: L10n.of(context).requestRegeneration, + hintText: L10n.of(context).optionalRegenerateReason, + autoSubmit: true, + maxLines: 5, + ); + + if (reason == null) return; + await showFutureLoadingDialog( + context: context, + future: () => room.sendEvent( + { + "m.relates_to": { + "rel_type": PangeaEventTypes.regenerationRequest, + "event_id": eventId, + }, + PangeaEventTypes.regenerationRequest: { + "reason": reason, + }, + }, + type: PangeaEventTypes.regenerationRequest, + ), + ); } // Pangea# @@ -2285,14 +2442,6 @@ class ChatController extends State child: CircularProgressIndicator.adaptive(), ); } - - if (room.isActivitySession && !room.isActivityStarted) { - return ActivitySessionStartPage( - activityId: room.activityId!, - roomId: room.id, - parentId: room.courseParent?.id, - ); - } // Pangea# final theme = Theme.of(context); return Row( diff --git a/lib/pages/chat/chat_app_bar_title.dart b/lib/pages/chat/chat_app_bar_title.dart index f05f139c0..714f7ac00 100644 --- a/lib/pages/chat/chat_app_bar_title.dart +++ b/lib/pages/chat/chat_app_bar_title.dart @@ -1,13 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/sync_status_localization.dart'; @@ -30,23 +28,6 @@ class ChatAppBarTitle extends StatelessWidget { // ), // ); // } - if (controller.room.showActivityChatUI) { - return Padding( - padding: const EdgeInsets.all(12.0), - child: Column( - spacing: 4.0, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - controller.room.getLocalizedDisplayname(), - style: Theme.of(context).textTheme.titleLarge, - textAlign: TextAlign.center, - ), - ActivityStatsButton(controller: controller), - ], - ), - ); - } // Pangea# return InkWell( hoverColor: Colors.transparent, @@ -56,7 +37,14 @@ class ChatAppBarTitle extends StatelessWidget { ? null : () => FluffyThemes.isThreeColumnMode(context) ? controller.toggleDisplayChatDetailsColumn() - : context.go('/rooms/${room.id}/details'), + // #Pangea + // : context.go('/rooms/${room.id}/details'), + : NavigationUtil.goToSpaceRoute( + room.id, + ['details'], + context, + ), + // Pangea# child: Row( children: [ Hero( diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart index 19c8d3503..d154b0839 100644 --- a/lib/pages/chat/chat_emoji_picker.dart +++ b/lib/pages/chat/chat_emoji_picker.dart @@ -1,11 +1,9 @@ import 'package:flutter/material.dart'; import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; -import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/chat/sticker_picker_dialog.dart'; import 'chat.dart'; class ChatEmojiPicker extends StatelessWidget { @@ -25,13 +23,18 @@ class ChatEmojiPicker extends StatelessWidget { : 0, child: controller.showEmojiPicker ? DefaultTabController( - length: 2, + // #Pangea + // length: 2, + length: 1, + // Pangea# child: Column( children: [ TabBar( tabs: [ Tab(text: L10n.of(context).emojis), - Tab(text: L10n.of(context).stickers), + // #Pangea + // Tab(text: L10n.of(context).stickers), + // Pangea# ], ), Expanded( @@ -67,20 +70,22 @@ class ChatEmojiPicker extends StatelessWidget { ), ), ), - StickerPickerDialog( - room: controller.room, - onSelected: (sticker) { - controller.room.sendEvent( - { - 'body': sticker.body, - 'info': sticker.info ?? {}, - 'url': sticker.url.toString(), - }, - type: EventTypes.Sticker, - ); - controller.hideEmojiPicker(); - }, - ), + // #Pangea + // StickerPickerDialog( + // room: controller.room, + // onSelected: (sticker) { + // controller.room.sendEvent( + // { + // 'body': sticker.body, + // 'info': sticker.info ?? {}, + // 'url': sticker.url.toString(), + // }, + // type: EventTypes.Sticker, + // ); + // controller.hideEmojiPicker(); + // }, + // ), + // Pangea# ], ), ), diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart index 8f806f725..4fa2a92a3 100644 --- a/lib/pages/chat/chat_event_list.dart +++ b/lib/pages/chat/chat_event_list.dart @@ -167,6 +167,7 @@ class ChatEventList extends StatelessWidget { // #Pangea controller: controller, isButton: event.eventId == controller.buttonEventID, + canRefresh: event.eventId == controller.refreshEventID, // Pangea# selected: controller.selectedEvents .any((e) => e.eventId == event.eventId), diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart index 1dd9c1dd4..97dbc47b3 100644 --- a/lib/pages/chat/chat_input_row.dart +++ b/lib/pages/chat/chat_input_row.dart @@ -1,406 +1,394 @@ -import 'package:flutter/material.dart'; +// import 'package:flutter/material.dart'; -import 'package:animations/animations.dart'; -import 'package:matrix/matrix.dart'; +// import 'package:animations/animations.dart'; +// import 'package:matrix/matrix.dart'; -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/utils/other_party_can_receive.dart'; -import 'package:fluffychat/utils/platform_infos.dart'; -import 'package:fluffychat/widgets/avatar.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../config/themes.dart'; -import 'chat.dart'; -import 'input_bar.dart'; +// import 'package:fluffychat/config/app_config.dart'; +// import 'package:fluffychat/l10n/l10n.dart'; +// import 'package:fluffychat/utils/other_party_can_receive.dart'; +// import 'package:fluffychat/utils/platform_infos.dart'; +// import 'package:fluffychat/widgets/avatar.dart'; +// import 'package:fluffychat/widgets/matrix.dart'; +// import '../../config/themes.dart'; +// import 'chat.dart'; +// import 'input_bar.dart'; -class ChatInputRow extends StatelessWidget { - final ChatController controller; +// class ChatInputRow extends StatelessWidget { +// final ChatController controller; - const ChatInputRow(this.controller, {super.key}); +// const ChatInputRow(this.controller, {super.key}); - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); +// @override +// Widget build(BuildContext context) { +// final theme = Theme.of(context); - const height = 48.0; +// const height = 48.0; - if (!controller.room.otherPartyCanReceiveMessages) { - return Center( - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Text( - L10n.of(context).otherPartyNotLoggedIn, - style: theme.textTheme.bodySmall, - textAlign: TextAlign.center, - ), - ), - ); - } +// if (!controller.room.otherPartyCanReceiveMessages) { +// return Center( +// child: Padding( +// padding: const EdgeInsets.all(12.0), +// child: Text( +// L10n.of(context).otherPartyNotLoggedIn, +// style: theme.textTheme.bodySmall, +// textAlign: TextAlign.center, +// ), +// ), +// ); +// } - final selectedTextButtonStyle = TextButton.styleFrom( - foregroundColor: theme.colorScheme.onTertiaryContainer, - ); +// final selectedTextButtonStyle = TextButton.styleFrom( +// foregroundColor: theme.colorScheme.onTertiaryContainer, +// ); - return Row( - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: controller.selectMode - ? [ - if (controller.selectedEvents - .every((event) => event.status == EventStatus.error)) - SizedBox( - height: height, - child: TextButton( - style: TextButton.styleFrom( - foregroundColor: Colors.orange, - ), - onPressed: controller.deleteErrorEventsAction, - child: Row( - children: [ - const Icon(Icons.delete), - Text(L10n.of(context).delete), - ], - ), - ), - ) - else - SizedBox( - height: height, - child: TextButton( - style: selectedTextButtonStyle, - onPressed: controller.forwardEventsAction, - child: Row( - children: [ - const Icon(Icons.keyboard_arrow_left_outlined), - Text(L10n.of(context).forward), - ], - ), - ), - ), - controller.selectedEvents.length == 1 - ? controller.selectedEvents.first - .getDisplayEvent(controller.timeline!) - .status - .isSent - ? SizedBox( - height: height, - child: TextButton( - style: selectedTextButtonStyle, - onPressed: controller.replyAction, - child: Row( - children: [ - Text(L10n.of(context).reply), - const Icon(Icons.keyboard_arrow_right), - ], - ), - ), - ) - : SizedBox( - height: height, - child: TextButton( - style: selectedTextButtonStyle, - onPressed: controller.sendAgainAction, - child: Row( - children: [ - Text(L10n.of(context).tryToSendAgain), - const SizedBox(width: 4), - const Icon(Icons.send_outlined, size: 16), - ], - ), - ), - ) - : const SizedBox.shrink(), - ] - : [ - const SizedBox(width: 4), - AnimatedContainer( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - width: controller.sendController.text.isNotEmpty ? 0 : height, - height: height, - alignment: Alignment.center, - decoration: const BoxDecoration(), - clipBehavior: Clip.hardEdge, - child: PopupMenuButton( - useRootNavigator: true, - icon: const Icon(Icons.add_circle_outline), - iconColor: theme.colorScheme.onPrimaryContainer, - onSelected: controller.onAddPopupMenuButtonSelected, - itemBuilder: (BuildContext context) => - >[ - if (PlatformInfos.isMobile) - PopupMenuItem( - value: 'location', - child: ListTile( - leading: CircleAvatar( - backgroundColor: - theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.gps_fixed_outlined), - ), - title: Text(L10n.of(context).shareLocation), - contentPadding: const EdgeInsets.all(0), - ), - ), - PopupMenuItem( - value: 'image', - child: ListTile( - leading: CircleAvatar( - backgroundColor: theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.photo_outlined), - ), - title: Text(L10n.of(context).sendImage), - contentPadding: const EdgeInsets.all(0), - ), - ), - PopupMenuItem( - value: 'video', - child: ListTile( - leading: CircleAvatar( - backgroundColor: theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.video_camera_back_outlined), - ), - title: Text(L10n.of(context).sendVideo), - contentPadding: const EdgeInsets.all(0), - ), - ), - PopupMenuItem( - value: 'file', - child: ListTile( - leading: CircleAvatar( - backgroundColor: theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.attachment_outlined), - ), - title: Text(L10n.of(context).sendFile), - contentPadding: const EdgeInsets.all(0), - ), - ), - ], - ), - ), - if (PlatformInfos.isMobile) - AnimatedContainer( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - width: controller.sendController.text.isNotEmpty ? 0 : height, - height: height, - alignment: Alignment.center, - decoration: const BoxDecoration(), - clipBehavior: Clip.hardEdge, - child: PopupMenuButton( - useRootNavigator: true, - icon: const Icon(Icons.camera_alt_outlined), - onSelected: controller.onAddPopupMenuButtonSelected, - iconColor: theme.colorScheme.onPrimaryContainer, - itemBuilder: (context) => [ - PopupMenuItem( - value: 'camera-video', - child: ListTile( - leading: CircleAvatar( - backgroundColor: - theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.videocam_outlined), - ), - title: Text(L10n.of(context).recordAVideo), - contentPadding: const EdgeInsets.all(0), - ), - ), - PopupMenuItem( - value: 'camera', - child: ListTile( - leading: CircleAvatar( - backgroundColor: - theme.colorScheme.onPrimaryContainer, - foregroundColor: theme.colorScheme.primaryContainer, - child: const Icon(Icons.camera_alt_outlined), - ), - title: Text(L10n.of(context).takeAPhoto), - contentPadding: const EdgeInsets.all(0), - ), - ), - ], - ), - ), - Container( - height: height, - width: height, - alignment: Alignment.center, - child: IconButton( - tooltip: L10n.of(context).emojis, - color: theme.colorScheme.onPrimaryContainer, - icon: PageTransitionSwitcher( - transitionBuilder: ( - Widget child, - Animation primaryAnimation, - Animation secondaryAnimation, - ) { - return SharedAxisTransition( - animation: primaryAnimation, - secondaryAnimation: secondaryAnimation, - transitionType: SharedAxisTransitionType.scaled, - fillColor: Colors.transparent, - child: child, - ); - }, - child: Icon( - controller.showEmojiPicker - ? Icons.keyboard - : Icons.add_reaction_outlined, - key: ValueKey(controller.showEmojiPicker), - ), - ), - onPressed: controller.emojiPickerAction, - ), - ), - if (Matrix.of(context).isMultiAccount && - Matrix.of(context).hasComplexBundles && - Matrix.of(context).currentBundle!.length > 1) - Container( - width: height, - height: height, - alignment: Alignment.center, - child: _ChatAccountPicker(controller), - ), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 0.0), - child: InputBar( - room: controller.room, - minLines: 1, - maxLines: 8, - autofocus: !PlatformInfos.isMobile, - keyboardType: TextInputType.multiline, - textInputAction: - AppConfig.sendOnEnter == true && PlatformInfos.isMobile - ? TextInputAction.send - : null, - // #Pangea - // onSubmitted: controller.onInputBarSubmitted, - onSubmitted: (_) => - controller.onInputBarSubmitted(_, context), - // Pangea# - onSubmitImage: controller.sendImageFromClipBoard, - focusNode: controller.inputFocus, - controller: controller.sendController, - decoration: InputDecoration( - contentPadding: const EdgeInsets.only( - left: 6.0, - right: 6.0, - bottom: 6.0, - top: 3.0, - ), - hintText: L10n.of(context).writeAMessage, - hintMaxLines: 1, - border: InputBorder.none, - enabledBorder: InputBorder.none, - filled: false, - ), - onChanged: controller.onInputBarChanged, - // #Pangea - hintText: "", - // Pangea# - ), - ), - ), - Container( - height: height, - width: height, - alignment: Alignment.center, - child: PlatformInfos.platformCanRecord && - controller.sendController.text.isEmpty - ? FloatingActionButton.small( - tooltip: L10n.of(context).voiceMessage, - onPressed: controller.voiceMessageAction, - elevation: 0, - heroTag: null, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(height), - ), - backgroundColor: theme.bubbleColor, - foregroundColor: theme.onBubbleColor, - child: const Icon(Icons.mic_none_outlined), - ) - : FloatingActionButton.small( - tooltip: L10n.of(context).send, - // #Pangea - // onPressed: controller.send, - onPressed: () => controller.send( - message: controller.sendController.text, - ), - // Pangea# - elevation: 0, - heroTag: null, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(height), - ), - backgroundColor: theme.bubbleColor, - foregroundColor: theme.onBubbleColor, - child: const Icon(Icons.send_outlined), - ), - ), - ], - ); - } -} +// return Row( +// crossAxisAlignment: CrossAxisAlignment.end, +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// children: controller.selectMode +// ? [ +// if (controller.selectedEvents +// .every((event) => event.status == EventStatus.error)) +// SizedBox( +// height: height, +// child: TextButton( +// style: TextButton.styleFrom( +// foregroundColor: Colors.orange, +// ), +// onPressed: controller.deleteErrorEventsAction, +// child: Row( +// children: [ +// const Icon(Icons.delete), +// Text(L10n.of(context).delete), +// ], +// ), +// ), +// ) +// else +// SizedBox( +// height: height, +// child: TextButton( +// style: selectedTextButtonStyle, +// onPressed: controller.forwardEventsAction, +// child: Row( +// children: [ +// const Icon(Icons.keyboard_arrow_left_outlined), +// Text(L10n.of(context).forward), +// ], +// ), +// ), +// ), +// controller.selectedEvents.length == 1 +// ? controller.selectedEvents.first +// .getDisplayEvent(controller.timeline!) +// .status +// .isSent +// ? SizedBox( +// height: height, +// child: TextButton( +// style: selectedTextButtonStyle, +// onPressed: controller.replyAction, +// child: Row( +// children: [ +// Text(L10n.of(context).reply), +// const Icon(Icons.keyboard_arrow_right), +// ], +// ), +// ), +// ) +// : SizedBox( +// height: height, +// child: TextButton( +// style: selectedTextButtonStyle, +// onPressed: controller.sendAgainAction, +// child: Row( +// children: [ +// Text(L10n.of(context).tryToSendAgain), +// const SizedBox(width: 4), +// const Icon(Icons.send_outlined, size: 16), +// ], +// ), +// ), +// ) +// : const SizedBox.shrink(), +// ] +// : [ +// const SizedBox(width: 4), +// AnimatedContainer( +// duration: FluffyThemes.animationDuration, +// curve: FluffyThemes.animationCurve, +// width: controller.sendController.text.isNotEmpty ? 0 : height, +// height: height, +// alignment: Alignment.center, +// decoration: const BoxDecoration(), +// clipBehavior: Clip.hardEdge, +// child: PopupMenuButton( +// useRootNavigator: true, +// icon: const Icon(Icons.add_circle_outline), +// iconColor: theme.colorScheme.onPrimaryContainer, +// onSelected: controller.onAddPopupMenuButtonSelected, +// itemBuilder: (BuildContext context) => +// >[ +// if (PlatformInfos.isMobile) +// PopupMenuItem( +// value: 'location', +// child: ListTile( +// leading: CircleAvatar( +// backgroundColor: +// theme.colorScheme.onPrimaryContainer, +// foregroundColor: theme.colorScheme.primaryContainer, +// child: const Icon(Icons.gps_fixed_outlined), +// ), +// title: Text(L10n.of(context).shareLocation), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// PopupMenuItem( +// value: 'image', +// child: ListTile( +// leading: CircleAvatar( +// backgroundColor: theme.colorScheme.onPrimaryContainer, +// foregroundColor: theme.colorScheme.primaryContainer, +// child: const Icon(Icons.photo_outlined), +// ), +// title: Text(L10n.of(context).sendImage), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// PopupMenuItem( +// value: 'video', +// child: ListTile( +// leading: CircleAvatar( +// backgroundColor: theme.colorScheme.onPrimaryContainer, +// foregroundColor: theme.colorScheme.primaryContainer, +// child: const Icon(Icons.video_camera_back_outlined), +// ), +// title: Text(L10n.of(context).sendVideo), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// PopupMenuItem( +// value: 'file', +// child: ListTile( +// leading: CircleAvatar( +// backgroundColor: theme.colorScheme.onPrimaryContainer, +// foregroundColor: theme.colorScheme.primaryContainer, +// child: const Icon(Icons.attachment_outlined), +// ), +// title: Text(L10n.of(context).sendFile), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// ], +// ), +// ), +// if (PlatformInfos.isMobile) +// AnimatedContainer( +// duration: FluffyThemes.animationDuration, +// curve: FluffyThemes.animationCurve, +// width: controller.sendController.text.isNotEmpty ? 0 : height, +// height: height, +// alignment: Alignment.center, +// decoration: const BoxDecoration(), +// clipBehavior: Clip.hardEdge, +// child: PopupMenuButton( +// useRootNavigator: true, +// icon: const Icon(Icons.camera_alt_outlined), +// onSelected: controller.onAddPopupMenuButtonSelected, +// iconColor: theme.colorScheme.onPrimaryContainer, +// itemBuilder: (context) => [ +// PopupMenuItem( +// value: 'camera-video', +// child: ListTile( +// leading: CircleAvatar( +// backgroundColor: +// theme.colorScheme.onPrimaryContainer, +// foregroundColor: theme.colorScheme.primaryContainer, +// child: const Icon(Icons.videocam_outlined), +// ), +// title: Text(L10n.of(context).recordAVideo), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// PopupMenuItem( +// value: 'camera', +// child: ListTile( +// leading: CircleAvatar( +// backgroundColor: +// theme.colorScheme.onPrimaryContainer, +// foregroundColor: theme.colorScheme.primaryContainer, +// child: const Icon(Icons.camera_alt_outlined), +// ), +// title: Text(L10n.of(context).takeAPhoto), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// ], +// ), +// ), +// Container( +// height: height, +// width: height, +// alignment: Alignment.center, +// child: IconButton( +// tooltip: L10n.of(context).emojis, +// color: theme.colorScheme.onPrimaryContainer, +// icon: PageTransitionSwitcher( +// transitionBuilder: ( +// Widget child, +// Animation primaryAnimation, +// Animation secondaryAnimation, +// ) { +// return SharedAxisTransition( +// animation: primaryAnimation, +// secondaryAnimation: secondaryAnimation, +// transitionType: SharedAxisTransitionType.scaled, +// fillColor: Colors.transparent, +// child: child, +// ); +// }, +// child: Icon( +// controller.showEmojiPicker +// ? Icons.keyboard +// : Icons.add_reaction_outlined, +// key: ValueKey(controller.showEmojiPicker), +// ), +// ), +// onPressed: controller.emojiPickerAction, +// ), +// ), +// if (Matrix.of(context).isMultiAccount && +// Matrix.of(context).hasComplexBundles && +// Matrix.of(context).currentBundle!.length > 1) +// Container( +// width: height, +// height: height, +// alignment: Alignment.center, +// child: _ChatAccountPicker(controller), +// ), +// Expanded( +// child: Padding( +// padding: const EdgeInsets.symmetric(vertical: 0.0), +// child: InputBar( +// room: controller.room, +// minLines: 1, +// maxLines: 8, +// autofocus: !PlatformInfos.isMobile, +// keyboardType: TextInputType.multiline, +// textInputAction: +// AppConfig.sendOnEnter == true && PlatformInfos.isMobile +// ? TextInputAction.send +// : null, +// onSubmitted: controller.onInputBarSubmitted, +// onSubmitImage: controller.sendImageFromClipBoard, +// focusNode: controller.inputFocus, +// controller: controller.sendController, +// decoration: InputDecoration( +// contentPadding: const EdgeInsets.only( +// left: 6.0, +// right: 6.0, +// bottom: 6.0, +// top: 3.0, +// ), +// hintText: L10n.of(context).writeAMessage, +// hintMaxLines: 1, +// border: InputBorder.none, +// enabledBorder: InputBorder.none, +// filled: false, +// ), +// onChanged: controller.onInputBarChanged, +// ), +// ), +// ), +// Container( +// height: height, +// width: height, +// alignment: Alignment.center, +// child: PlatformInfos.platformCanRecord && +// controller.sendController.text.isEmpty +// ? FloatingActionButton.small( +// tooltip: L10n.of(context).voiceMessage, +// onPressed: controller.voiceMessageAction, +// elevation: 0, +// heroTag: null, +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.circular(height), +// ), +// backgroundColor: theme.bubbleColor, +// foregroundColor: theme.onBubbleColor, +// child: const Icon(Icons.mic_none_outlined), +// ) +// : FloatingActionButton.small( +// tooltip: L10n.of(context).send, +// onPressed: controller.send, +// elevation: 0, +// heroTag: null, +// shape: RoundedRectangleBorder( +// borderRadius: BorderRadius.circular(height), +// ), +// backgroundColor: theme.bubbleColor, +// foregroundColor: theme.onBubbleColor, +// child: const Icon(Icons.send_outlined), +// ), +// ), +// ], +// ); +// } +// } -class _ChatAccountPicker extends StatelessWidget { - final ChatController controller; +// class _ChatAccountPicker extends StatelessWidget { +// final ChatController controller; - const _ChatAccountPicker(this.controller); +// const _ChatAccountPicker(this.controller); - void _popupMenuButtonSelected(String mxid, BuildContext context) { - final client = Matrix.of(context) - .currentBundle! - .firstWhere((cl) => cl!.userID == mxid, orElse: () => null); - if (client == null) { - Logs().w('Attempted to switch to a non-existing client $mxid'); - return; - } - controller.setSendingClient(client); - } +// void _popupMenuButtonSelected(String mxid, BuildContext context) { +// final client = Matrix.of(context) +// .currentBundle! +// .firstWhere((cl) => cl!.userID == mxid, orElse: () => null); +// if (client == null) { +// Logs().w('Attempted to switch to a non-existing client $mxid'); +// return; +// } +// controller.setSendingClient(client); +// } - @override - Widget build(BuildContext context) { - final clients = controller.currentRoomBundle; - return Padding( - padding: const EdgeInsets.all(8.0), - child: FutureBuilder( - future: controller.sendingClient.fetchOwnProfile(), - builder: (context, snapshot) => PopupMenuButton( - useRootNavigator: true, - onSelected: (mxid) => _popupMenuButtonSelected(mxid, context), - itemBuilder: (BuildContext context) => clients - .map( - (client) => PopupMenuItem( - value: client!.userID, - child: FutureBuilder( - future: client.fetchOwnProfile(), - builder: (context, snapshot) => ListTile( - leading: Avatar( - mxContent: snapshot.data?.avatarUrl, - name: snapshot.data?.displayName ?? - client.userID!.localpart, - size: 20, - ), - title: Text(snapshot.data?.displayName ?? client.userID!), - contentPadding: const EdgeInsets.all(0), - ), - ), - ), - ) - .toList(), - child: Avatar( - mxContent: snapshot.data?.avatarUrl, - name: snapshot.data?.displayName ?? - Matrix.of(context).client.userID!.localpart, - size: 20, - ), - ), - ), - ); - } -} +// @override +// Widget build(BuildContext context) { +// final clients = controller.currentRoomBundle; +// return Padding( +// padding: const EdgeInsets.all(8.0), +// child: FutureBuilder( +// future: controller.sendingClient.fetchOwnProfile(), +// builder: (context, snapshot) => PopupMenuButton( +// useRootNavigator: true, +// onSelected: (mxid) => _popupMenuButtonSelected(mxid, context), +// itemBuilder: (BuildContext context) => clients +// .map( +// (client) => PopupMenuItem( +// value: client!.userID, +// child: FutureBuilder( +// future: client.fetchOwnProfile(), +// builder: (context, snapshot) => ListTile( +// leading: Avatar( +// mxContent: snapshot.data?.avatarUrl, +// name: snapshot.data?.displayName ?? +// client.userID!.localpart, +// size: 20, +// ), +// title: Text(snapshot.data?.displayName ?? client.userID!), +// contentPadding: const EdgeInsets.all(0), +// ), +// ), +// ), +// ) +// .toList(), +// child: Avatar( +// mxContent: snapshot.data?.avatarUrl, +// name: snapshot.data?.displayName ?? +// Matrix.of(context).client.userID!.localpart, +// size: 20, +// ), +// ), +// ), +// ); +// } +// } diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart index 90cf94d50..1d83d673d 100644 --- a/lib/pages/chat/chat_view.dart +++ b/lib/pages/chat/chat_view.dart @@ -15,12 +15,16 @@ import 'package:fluffychat/pages/chat/chat_event_list.dart'; import 'package:fluffychat/pages/chat/pinned_events.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_finished_status_message.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_menu_button.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/load_activity_summary_widget.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/star_rain_widget.dart'; +import 'package:fluffychat/pangea/chat/widgets/chat_floating_action_button.dart'; import 'package:fluffychat/pangea/chat/widgets/chat_input_bar.dart'; -import 'package:fluffychat/pangea/chat/widgets/chat_input_bar_header.dart'; import 'package:fluffychat/pangea/chat/widgets/chat_view_background.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/account_config.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -122,47 +126,68 @@ class ChatView extends StatelessWidget { // ], // ), // ]; - // } else - // Pangea# - if (!controller.room.isArchived) { - // #Pangea + // } else if (!controller.room.isArchived) { + // return [ + // if (AppConfig.experimentalVoip && + // Matrix.of(context).voipPlugin != null && + // controller.room.isDirectChat) + // IconButton( + // onPressed: controller.onPhoneButtonTap, + // icon: const Icon(Icons.call_outlined), + // tooltip: L10n.of(context).placeCall, + // ), + // EncryptionButton(controller.room), + // ChatSettingsPopupMenu(controller.room, true), + // ]; + // } + // return []; + if (controller.room.isArchived || controller.room.hasArchivedActivity) { + return []; + } + + if (controller.room.showActivityChatUI) { return [ - if (controller.room.activityPlan == null || - !controller.room.showActivityChatUI) - IconButton( - icon: const Icon(Icons.search_outlined), - tooltip: L10n.of(context).search, - onPressed: () { - context.go('/rooms/${controller.room.id}/search'); - }, - ), - IconButton( - icon: const Icon(Icons.settings_outlined), - tooltip: L10n.of(context).chatDetails, - onPressed: () { - if (GoRouterState.of(context).uri.path.endsWith('/details')) { - context.go('/rooms/${controller.room.id}'); - } else { - context.go('/rooms/${controller.room.id}/details'); - } - }, + ActivityMenuButton(controller: controller), + ActivitySessionPopupMenu( + controller.room, + onLeave: controller.onLeave, ), ]; - // return [ - // if (AppConfig.experimentalVoip && - // Matrix.of(context).voipPlugin != null && - // controller.room.isDirectChat) - // IconButton( - // onPressed: controller.onPhoneButtonTap, - // icon: const Icon(Icons.call_outlined), - // tooltip: L10n.of(context).placeCall, - // ), - // EncryptionButton(controller.room), - // ChatSettingsPopupMenu(controller.room, true), - // ]; - // Pangea# } - return []; + + return [ + IconButton( + icon: const Icon(Icons.search_outlined), + tooltip: L10n.of(context).search, + onPressed: () { + NavigationUtil.goToSpaceRoute( + controller.room.id, + ['search'], + context, + ); + }, + ), + IconButton( + icon: const Icon(Icons.settings_outlined), + tooltip: L10n.of(context).chatDetails, + onPressed: () { + if (GoRouterState.of(context).uri.path.endsWith('/details')) { + NavigationUtil.goToSpaceRoute( + controller.room.id, + [], + context, + ); + } else { + NavigationUtil.goToSpaceRoute( + controller.room.id, + ['details'], + context, + ); + } + }, + ), + ]; + // Pangea# } @override @@ -197,6 +222,16 @@ class ChatView extends StatelessWidget { builder: (context, snapshot) => FutureBuilder( future: controller.loadTimelineFuture, builder: (BuildContext context, snapshot) { + // #Pangea + if (controller.room.isActivitySession && + !controller.room.isActivityStarted) { + return ActivitySessionStartPage( + activityId: controller.room.activityId!, + roomId: controller.roomId, + parentId: controller.room.courseParent?.id, + ); + } + // Pangea# var appbarBottomHeight = 0.0; if (controller.room.pinnedEventIds.isNotEmpty) { appbarBottomHeight += ChatAppBarListTile.fixedHeight; @@ -207,9 +242,7 @@ class ChatView extends StatelessWidget { return Scaffold( appBar: AppBar( // #Pangea - // actionsIconTheme: - // IconThemeData( - // #Pangea + // actionsIconTheme: IconThemeData( // color: controller.selectedEvents.isEmpty // ? null // : theme.colorScheme.onTertiaryContainer, @@ -217,9 +250,6 @@ class ChatView extends StatelessWidget { // backgroundColor: controller.selectedEvents.isEmpty // ? null // : theme.colorScheme.tertiaryContainer, - toolbarHeight: - controller.room.showActivityChatUI ? 106.0 : null, - centerTitle: controller.room.showActivityChatUI, // Pangea# automaticallyImplyLeading: false, leading: controller.selectMode @@ -242,20 +272,25 @@ class ChatView extends StatelessWidget { ), // #Pangea // builder: (context, _) => UnreadRoomsBadge( + // filter: (r) => r.id != controller.roomId, + // badgePosition: + // BadgePosition.topEnd(end: 8, top: 4), + // child: const Center(child: BackButton()), + // ), builder: (context, _) => Center( child: SizedBox( height: kToolbarHeight, child: UnreadRoomsBadge( - // Pangea# filter: (r) => r.id != controller.roomId, badgePosition: BadgePosition.topEnd( end: 8, - top: 4, + top: 9, ), child: const Center(child: BackButton()), ), ), ), + // Pangea# ), titleSpacing: FluffyThemes.isColumnMode(context) ? 24 : 0, title: ChatAppBarTitle(controller), @@ -265,13 +300,6 @@ class ChatView extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - // #Pangea - if (!controller.showActivityDropdown) - Divider( - height: 1, - color: theme.dividerColor, - ), - // Pangea# PinnedEvents(controller), if (scrollUpBannerEventId != null) ChatAppBarListTile( @@ -316,214 +344,213 @@ class ChatView extends StatelessWidget { // ), // ) // : null, + floatingActionButton: Padding( + padding: const EdgeInsets.only(bottom: 56.0), + child: ChatFloatingActionButton(controller: controller), + ), // body: DropTarget( // onDragDone: controller.onDragDone, // onDragEntered: controller.onDragEntered, // onDragExited: controller.onDragExited, // child: Stack( - body: Stack( - // Pangea# - children: [ - if (accountConfig.wallpaperUrl != null) - Opacity( - opacity: accountConfig.wallpaperOpacity ?? 0.5, - child: ImageFiltered( - imageFilter: ui.ImageFilter.blur( - sigmaX: accountConfig.wallpaperBlur ?? 0.0, - sigmaY: accountConfig.wallpaperBlur ?? 0.0, - ), - child: MxcImage( - cacheKey: accountConfig.wallpaperUrl.toString(), - uri: accountConfig.wallpaperUrl, - fit: BoxFit.cover, - height: MediaQuery.of(context).size.height, - width: MediaQuery.of(context).size.width, - isThumbnail: false, - placeholder: (_) => Container(), + body: SafeArea( + child: Stack( + // Pangea# + children: [ + if (accountConfig.wallpaperUrl != null) + Opacity( + opacity: accountConfig.wallpaperOpacity ?? 0.5, + child: ImageFiltered( + imageFilter: ui.ImageFilter.blur( + sigmaX: accountConfig.wallpaperBlur ?? 0.0, + sigmaY: accountConfig.wallpaperBlur ?? 0.0, + ), + child: MxcImage( + cacheKey: accountConfig.wallpaperUrl.toString(), + uri: accountConfig.wallpaperUrl, + fit: BoxFit.cover, + height: MediaQuery.sizeOf(context).height, + width: MediaQuery.sizeOf(context).width, + isThumbnail: false, + placeholder: (_) => Container(), + ), ), ), - ), - SafeArea( - // #Pangea - // child: Column( - child: Stack( - children: [ - Column( - // Pangea# - children: [ - Expanded( - child: GestureDetector( - onTap: controller.clearSingleSelectedEvent, - child: ChatEventList(controller: controller), - ), - ), - // #Pangea - // if (controller.showScrollDownButton) - // Divider( - // height: 1, - // color: theme.dividerColor, - // ), - // Pangea# - if (controller.room.isExtinct) - Container( - margin: EdgeInsets.all(bottomSheetPadding), - width: double.infinity, - child: ElevatedButton.icon( - icon: const Icon(Icons.chevron_right), - label: Text(L10n.of(context).enterNewChat), - onPressed: controller.goToNewRoomAction, - ), - ) - // #Pangea - // else if (controller.room.canSendDefaultMessages && - // controller.room.membership == Membership.join) - else if (controller.room.canSendDefaultMessages && - controller.room.membership == Membership.join && - controller.room.isAbandonedDMRoom == true) - // Pangea# - Container( - margin: EdgeInsets.all(bottomSheetPadding), - constraints: const BoxConstraints( - maxWidth: FluffyThemes.maxTimelineWidth, - ), - alignment: Alignment.center, - child: Material( - clipBehavior: Clip.hardEdge, - color: controller.selectedEvents.isNotEmpty - ? theme.colorScheme.tertiaryContainer - : theme.colorScheme.surfaceContainerHigh, - borderRadius: const BorderRadius.all( - Radius.circular(24), + SafeArea( + child: Column( + children: [ + Expanded( + child: GestureDetector( + // #Pangea + // onTap: controller.clearSingleSelectedEvent, + // child: ChatEventList(controller: controller), + child: Stack( + children: [ + ListenableBuilder( + listenable: + controller.timelineUpdateNotifier, + builder: (context, _) { + return ChatEventList( + controller: controller, + ); + }, ), - child: controller.room.isAbandonedDMRoom == - true - ? Row( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - TextButton.icon( - style: TextButton.styleFrom( - padding: const EdgeInsets.all( - 16, - ), - foregroundColor: - theme.colorScheme.error, - ), - icon: const Icon( - Icons.archive_outlined, - ), - onPressed: controller.leaveChat, - label: Text( - L10n.of(context).leave, - ), - ), - TextButton.icon( - style: TextButton.styleFrom( - padding: const EdgeInsets.all( - 16, - ), - ), - icon: const Icon( - Icons.forum_outlined, - ), - onPressed: - controller.recreateChat, - label: Text( - L10n.of(context).reopenChat, - ), - ), - ], - ) - // #Pangea - : null, - // : Column( - // mainAxisSize: MainAxisSize.min, - // children: [ - // ReplyDisplay(controller), - // ChatInputRow(controller), - // ChatEmojiPicker(controller), - // ], - // ), - // Pangea# - ), + ChatViewBackground( + controller.choreographer.itController.open, + ), + ], ), - // #Pangea - // Keep messages above minimum input bar height - if (!controller.room.isAbandonedDMRoom && - controller.room.canSendDefaultMessages && - controller.room.membership == Membership.join && - (controller.room.activityPlan == null || - !controller.room.showActivityChatUI || - controller.room.isActiveInActivity)) - AnimatedSize( - duration: const Duration(milliseconds: 200), - child: SizedBox( - height: controller.inputBarHeight + - bottomSheetPadding, - ), + // Pangea# + ), + ), + // #Pangea + // if (controller.showScrollDownButton) + // Divider( + // height: 1, + // color: theme.dividerColor, + // ), + ListenableBuilder( + listenable: controller.scrollController, + builder: (context, _) { + if (controller.scrollController.hasClients && + controller.scrollController.position.pixels > + 0) { + return Divider( + height: 1, + color: theme.dividerColor, + ); + } else { + return const SizedBox.shrink(); + } + }, + ), + // Pangea# + if (controller.room.isExtinct) + Container( + margin: EdgeInsets.all(bottomSheetPadding), + width: double.infinity, + child: ElevatedButton.icon( + icon: const Icon(Icons.chevron_right), + label: Text(L10n.of(context).enterNewChat), + onPressed: controller.goToNewRoomAction, ), - if (controller.room.isActivityFinished) - LoadActivitySummaryWidget( - room: controller.room, - ), - + ) + // #Pangea + // else if (controller.room.canSendDefaultMessages && + // controller.room.membership == Membership.join) + // Container( + // margin: EdgeInsets.all(bottomSheetPadding), + // constraints: const BoxConstraints( + // maxWidth: FluffyThemes.maxTimelineWidth, + // ), + // alignment: Alignment.center, + // child: Material( + // clipBehavior: Clip.hardEdge, + // color: controller.selectedEvents.isNotEmpty + // ? theme.colorScheme.tertiaryContainer + // : theme.colorScheme.surfaceContainerHigh, + // borderRadius: const BorderRadius.all( + // Radius.circular(24), + // ), + // child: controller.room.isAbandonedDMRoom == true + // ? Row( + // mainAxisAlignment: + // MainAxisAlignment.spaceEvenly, + // children: [ + // TextButton.icon( + // style: TextButton.styleFrom( + // padding: const EdgeInsets.all( + // 16, + // ), + // foregroundColor: + // theme.colorScheme.error, + // ), + // icon: const Icon( + // Icons.archive_outlined, + // ), + // onPressed: controller.leaveChat, + // label: Text( + // L10n.of(context).leave, + // ), + // ), + // TextButton.icon( + // style: TextButton.styleFrom( + // padding: const EdgeInsets.all( + // 16, + // ), + // ), + // icon: const Icon( + // Icons.forum_outlined, + // ), + // onPressed: controller.recreateChat, + // label: Text( + // L10n.of(context).reopenChat, + // ), + // ), + // ], + // ) + // : Column( + // mainAxisSize: MainAxisSize.min, + // children: [ + // ReplyDisplay(controller), + // ChatInputRow(controller), + // ChatEmojiPicker(controller), + // ], + // ), + // ), + // ) + else if (controller.room.canSendDefaultMessages && + controller.room.membership == Membership.join && + (controller.room.activityPlan == null || + !controller.room.showActivityChatUI || + controller.room.isActiveInActivity)) + ChatInputBar( + controller: controller, + padding: bottomSheetPadding, + ) + else if (controller.room.activityPlan != null && + controller.room.showActivityChatUI && + !controller.room.isActiveInActivity) ActivityFinishedStatusMessage( controller: controller, ), - // Pangea# - ], - ), - // #Pangea - ChatViewBackground(controller.choreographer), - if (!controller.room.isAbandonedDMRoom && - controller.room.canSendDefaultMessages && - controller.room.membership == Membership.join && - (controller.room.activityPlan == null || - !controller.room.showActivityChatUI || - controller.room.isActiveInActivity)) - Positioned( - left: 0, - right: 0, - bottom: 16, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - ChatInputBarHeader( - controller: controller, - padding: bottomSheetPadding, - ), - ChatInputBar( - controller: controller, - padding: bottomSheetPadding, - ), - ], + if (controller.room.isActivityFinished) + LoadActivitySummaryWidget( + room: controller.room, ), - ), - ActivityStatsMenu(controller), - if (controller.room.activitySummary?.summary != null && - controller.hasRainedConfetti == false) - StarRainWidget( - showBlast: true, - onFinished: () => - controller.setHasRainedConfetti(true), - ), - // Pangea# - ], + // Pangea# + ], + ), ), - ), - // #Pangea - // if (controller.dragging) - // Container( - // color: theme.scaffoldBackgroundColor.withAlpha(230), - // alignment: Alignment.center, - // child: const Icon( - // Icons.upload_outlined, - // size: 100, - // ), - // ), - // Pangea# - ], + // #Pangea + ActivityStatsMenu(controller), + if (controller.room.activitySummary?.summary != null) + ValueListenableBuilder( + valueListenable: + controller.activityController.hasRainedConfetti, + builder: (context, hasRained, __) { + return hasRained + ? const SizedBox() + : StarRainWidget( + showBlast: true, + onFinished: () => controller + .activityController + .setHasRainedConfetti(true), + ); + }, + ), + // if (controller.dragging) + // Container( + // color: theme.scaffoldBackgroundColor.withAlpha(230), + // alignment: Alignment.center, + // child: const Icon( + // Icons.upload_outlined, + // size: 100, + // ), + // ), + // Pangea# + ], + ), ), ); }, diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index edfa12263..ee6490a5f 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -14,9 +14,7 @@ import 'package:path_provider/path_provider.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_audio_card.dart'; import 'package:fluffychat/utils/error_reporter.dart'; import 'package:fluffychat/utils/file_description.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; @@ -35,9 +33,8 @@ class AudioPlayerWidget extends StatefulWidget { final String roomId; final String senderId; final PangeaAudioFile? matrixFile; - final ChatController chatController; - final MessageOverlayController? overlayController; final bool autoplay; + final bool enableClicks; // Pangea# static const int wavesCount = 40; @@ -52,9 +49,8 @@ class AudioPlayerWidget extends StatefulWidget { required this.roomId, required this.senderId, this.matrixFile, - required this.chatController, - this.overlayController, this.autoplay = false, + this.enableClicks = true, // Pangea# super.key, }); @@ -75,7 +71,6 @@ class AudioPlayerState extends State { String? _durationString; // #Pangea - StreamSubscription? _onAudioPositionChanged; StreamSubscription? _onAudioStateChanged; double playbackSpeed = 1.0; @@ -157,7 +152,6 @@ class AudioPlayerState extends State { audioPlayer.dispose(); matrix.voiceMessageEventId.value = matrix.audioPlayer = null; // #Pangea - _onAudioPositionChanged?.cancel(); _onAudioStateChanged?.cancel(); // Pangea# } @@ -265,18 +259,6 @@ class AudioPlayerState extends State { // #Pangea audioPlayer.setSpeed(playbackSpeed); - _onAudioPositionChanged?.cancel(); - _onAudioPositionChanged = - matrix.audioPlayer!.positionStream.listen((state) { - // Pass current timestamp to overlay, so it can highlight as necessary - if (widget.matrixFile?.tokens != null) { - widget.overlayController?.highlightCurrentText( - state.inMilliseconds, - widget.matrixFile!.tokens!, - ); - } - }); - _onAudioStateChanged?.cancel(); _onAudioStateChanged = matrix.audioPlayer!.playerStateStream.listen((state) { @@ -584,13 +566,25 @@ class AudioPlayerState extends State { : Colors.transparent, max: maxPosition, value: currentPosition, - onChanged: (position) => audioPlayer == null - ? _onButtonTap() - : audioPlayer.seek( - Duration( - milliseconds: position.round(), - ), - ), + // #Pangea + onChanged: !widget.enableClicks + ? null + : (position) => audioPlayer == null + ? _onButtonTap() + : audioPlayer.seek( + Duration( + milliseconds: + position.round(), + ), + ), + // onChanged: (position) => audioPlayer == null + // ? _onButtonTap() + // : audioPlayer.seek( + // Duration( + // milliseconds: position.round(), + // ), + // ), + // Pangea# ), ), ], @@ -625,7 +619,7 @@ class AudioPlayerState extends State { child: InkWell( borderRadius: BorderRadius.circular(AppConfig.borderRadius), - onTap: _toggleSpeed, + onTap: !widget.enableClicks ? null : _toggleSpeed, child: SizedBox( width: 32, height: 20, diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index 33ba9f4b6..9cddf5570 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -13,16 +13,17 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/message_token_text/token_emoji_button.dart'; -import 'package:fluffychat/pangea/message_token_text/token_practice_button.dart'; -import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/utils/token_rendering_util.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/select_mode_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/token_practice_button.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/token_emoji_button.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/token_rendering_util.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; import 'package:fluffychat/utils/event_checkbox_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import '../../../utils/url_launcher.dart'; @@ -158,8 +159,7 @@ class HtmlMessage extends StatelessWidget { ?.where( (t) => !["SYM"].contains(t.pos) && - !t.lemma.text.contains(RegExp(r'[0-9]')) && - t.lemma.text.length <= 50, + !t.lemma.text.contains(RegExp(r'[0-9]')), ) .toList(); @@ -335,7 +335,13 @@ class HtmlMessage extends StatelessWidget { // Pangea# int depth = 1, }) { - final onlyElements = nodes.whereType().toList(); + // #Pangea + // final onlyElements = nodes.whereType().toList(); + final onlyElements = nodes + .whereType() + .where((e) => e.localName != 'nontoken') + .toList(); + // Pangea# return [ for (var i = 0; i < nodes.length; i++) ...[ // Actually render the node child: @@ -347,8 +353,10 @@ class HtmlMessage extends StatelessWidget { if (nodes[i] is dom.Element && onlyElements.indexOf(nodes[i] as dom.Element) < onlyElements.length - 1) ...[ - if (blockHtmlTags.contains((nodes[i] as dom.Element).localName)) - const TextSpan(text: '\n\n'), + // #Pangea + // if (blockHtmlTags.contains((nodes[i] as dom.Element).localName)) + // const TextSpan(text: '\n\n'), + // Pangea# if (fullLineHtmlTag.contains((nodes[i] as dom.Element).localName)) const TextSpan(text: '\n'), ], @@ -388,8 +396,6 @@ class HtmlMessage extends StatelessWidget { // #Pangea final renderer = TokenRenderingUtil( - pangeaMessageEvent: pangeaMessageEvent, - readingAssistanceMode: readingAssistanceMode, existingStyle: pangeaMessageEvent != null ? textStyle.merge( AppConfig.messageTextStyle( @@ -398,14 +404,21 @@ class HtmlMessage extends StatelessWidget { ), ) : textStyle, - overlayController: overlayController, - isTransitionAnimation: isTransitionAnimation, ); - final fontSize = renderer.fontSize(context) ?? this.fontSize; + double fontSize = this.fontSize; + if (readingAssistanceMode == ReadingAssistanceMode.practiceMode) { + fontSize = (overlayController != null && overlayController!.maxWidth > 600 + ? Theme.of(context).textTheme.titleLarge?.fontSize + : Theme.of(context).textTheme.bodyLarge?.fontSize) ?? + this.fontSize; + } + + final underlineColor = Theme.of(context).colorScheme.primary.withAlpha(200); + final newTokens = pangeaMessageEvent != null && !pangeaMessageEvent!.ownMessage - ? TokensUtil.getNewTokens(pangeaMessageEvent!) + ? TokensUtil.getNewTokensByEvent(pangeaMessageEvent!) : []; // Pangea# @@ -428,8 +441,9 @@ class HtmlMessage extends StatelessWidget { final isNew = token != null && newTokens.contains(token.text); final tokenWidth = renderer.tokenTextWidthForContainer( - context, node.text, + Theme.of(context).colorScheme.primary.withAlpha(200), + fontSize: fontSize, ); return TextSpan( @@ -441,32 +455,28 @@ class HtmlMessage extends StatelessWidget { : PlaceholderAlignment.middle, child: Column( children: [ - if (token != null && - overlayController?.selectedMode == SelectMode.emoji) + if (token != null && overlayController != null) TokenEmojiButton( token: token, - eventId: event.eventId, + enabled: token.lemma.saveVocab, targetId: overlayController!.tokenEmojiPopupKey(token), - onSelect: () => - overlayController!.showTokenEmojiPopup(token), + selectModeNotifier: overlayController!.selectedMode, + onTap: () => + overlayController!.onClickOverlayMessageToken(token), + textColor: textColor, ), - if (renderer.showCenterStyling && token != null) + if (readingAssistanceMode == + ReadingAssistanceMode.practiceMode && + token != null && + overlayController != null) TokenPracticeButton( token: token, - overlayController: overlayController, + controller: overlayController!.practiceController, textStyle: renderer.style( - context, - color: renderer.backgroundColor( - context, - selected, - highlighted, - isNew, - readingAssistanceMode == - ReadingAssistanceMode.practiceMode, - ), + fontSize: fontSize, + underlineColor: underlineColor, ), width: tokenWidth, - animateIn: isTransitionAnimation, textColor: textColor, ), CompositedTransformTarget( @@ -484,33 +494,58 @@ class HtmlMessage extends StatelessWidget { onTap: onClick != null && token != null ? () => onClick?.call(token) : null, - child: RichText( - textDirection: pangeaMessageEvent?.textDirection, - text: TextSpan( - children: [ - LinkifySpan( - text: node.text.trim(), - style: renderer.style( - context, - color: renderer.backgroundColor( - context, - selected, - highlighted, - isNew, - readingAssistanceMode == - ReadingAssistanceMode.practiceMode, + child: HoverBuilder( + builder: (context, hovered) { + return RichText( + textDirection: pangeaMessageEvent?.textDirection, + text: TextSpan( + children: [ + LinkifySpan( + text: node.text.trim(), + style: renderer.style( + fontSize: fontSize, + underlineColor: underlineColor, + selected: selected, + highlighted: highlighted, + isNew: isNew, + practiceMode: readingAssistanceMode == + ReadingAssistanceMode.practiceMode, + hovered: hovered, + ), + linkStyle: linkStyle, + onOpen: (url) => + UrlLauncher(context, url.url) + .launchUrl(), ), - ), - linkStyle: linkStyle, - onOpen: (url) => - UrlLauncher(context, url.url).launchUrl(), + ], ), - ], - ), + ); + }, ), ), ), ), + if (readingAssistanceMode == + ReadingAssistanceMode.practiceMode && + token != null && + overlayController != null) + ListenableBuilder( + listenable: overlayController!.practiceController, + builder: (context, _) => AnimatedSize( + duration: const Duration( + milliseconds: AppConfig.overlayAnimationDuration, + ), + curve: Curves.easeOut, + child: SizedBox( + height: overlayController! + .practiceController.practiceMode != + MessagePracticeMode.noneSelected + ? 4.0 + : 0.0, + width: tokenWidth, + ), + ), + ), ], // ), ), @@ -635,14 +670,8 @@ class HtmlMessage extends StatelessWidget { TextSpan( text: '• ', style: renderer.style( - context, - color: renderer.backgroundColor( - context, - false, - false, - false, - false, - ), + underlineColor: underlineColor, + fontSize: fontSize, ), ), // Pangea# @@ -653,14 +682,8 @@ class HtmlMessage extends StatelessWidget { // #Pangea // style: textStyle, style: renderer.style( - context, - color: renderer.backgroundColor( - context, - false, - false, - false, - false, - ), + underlineColor: underlineColor, + fontSize: fontSize, ), // Pangea# ), @@ -942,11 +965,13 @@ class HtmlMessage extends StatelessWidget { : PlaceholderAlignment.middle, child: Column( children: [ - if (node.localName == 'nontoken' && - overlayController?.selectedMode == SelectMode.emoji) + if (node.localName == 'nontoken' && overlayController != null) + // Use TokenEmojiButton to ensure consistent vertical alignment for non-token elements (e.g., emojis) in practice mode. TokenEmojiButton( - token: null, - eventId: event.eventId, + selectModeNotifier: overlayController!.selectedMode, + onTap: () {}, + enabled: false, + textColor: textColor, ), RichText( text: TextSpan( @@ -959,6 +984,24 @@ class HtmlMessage extends StatelessWidget { ), ), ), + if (overlayController != null) + ListenableBuilder( + listenable: overlayController!.practiceController, + builder: (context, _) => AnimatedSize( + duration: const Duration( + milliseconds: AppConfig.overlayAnimationDuration, + ), + curve: Curves.easeOut, + child: SizedBox( + height: + overlayController!.practiceController.practiceMode != + MessagePracticeMode.noneSelected + ? 4.0 + : 0.0, + width: 0, + ), + ), + ), ], ), ); @@ -1021,35 +1064,33 @@ class HtmlMessage extends StatelessWidget { // overflow: TextOverflow.fade, // ); final parsed = parser.parse(_addTokenTags()).body ?? dom.Element.html(''); - return SelectionArea( - child: GestureDetector( - onTap: () { - if (overlayController == null) { - controller.showToolbar( - pangeaMessageEvent?.event ?? event, - pangeaMessageEvent: pangeaMessageEvent, - nextEvent: nextEvent, - prevEvent: prevEvent, - ); - } - }, - child: Text.rich( - textScaler: TextScaler.noScaling, - _renderHtml( - parsed, - context, - TextStyle( - fontSize: fontSize, - color: textColor, - ), - ), - style: TextStyle( + return GestureDetector( + onTap: () { + if (overlayController == null) { + controller.showToolbar( + pangeaMessageEvent?.event ?? event, + pangeaMessageEvent: pangeaMessageEvent, + nextEvent: nextEvent, + prevEvent: prevEvent, + ); + } + }, + child: Text.rich( + textScaler: TextScaler.noScaling, + _renderHtml( + parsed, + context, + TextStyle( fontSize: fontSize, color: textColor, ), - maxLines: limitHeight ? 64 : null, - overflow: TextOverflow.fade, ), + style: TextStyle( + fontSize: fontSize, + color: textColor, + ), + maxLines: limitHeight ? 64 : null, + overflow: TextOverflow.fade, ), ); } diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 8177b3f52..15273e9fb 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -13,8 +13,12 @@ import 'package:fluffychat/pages/chat/events/room_creation_state_event.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_roles_event_widget.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_summary_widget.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_settings_language_icon.dart'; import 'package:fluffychat/pangea/chat/extensions/custom_room_display_extension.dart'; +import 'package:fluffychat/pangea/chat/widgets/request_regeneration_button.dart'; import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/common/widgets/shimmer_background.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; @@ -52,6 +56,7 @@ class Message extends StatelessWidget { // #Pangea final ChatController controller; final bool isButton; + final bool canRefresh; // Pangea# const Message( @@ -78,6 +83,7 @@ class Message extends StatelessWidget { // #Pangea required this.controller, this.isButton = false, + this.canRefresh = false, // Pangea# super.key, }); @@ -137,14 +143,25 @@ class Message extends StatelessWidget { // #Pangea if (event.type == PangeaEventTypes.activityPlan && event.room.activityPlan != null) { - return ActivitySummary( - activity: event.room.activityPlan!, - room: event.room, - showInstructions: controller.showInstructions, - toggleInstructions: controller.toggleShowInstructions, - getParticipantOpacity: (role) => - role == null || role.isFinished ? 0.5 : 1.0, - isParticipantSelected: (id) => controller.room.ownRoleState?.id == id, + return ValueListenableBuilder( + valueListenable: controller.activityController.showInstructions, + builder: (context, show, __) { + return ActivitySummary( + activity: event.room.activityPlan!, + room: event.room, + assignedRoles: event.room.hasArchivedActivity + ? event.room.activityRoles?.roles ?? {} + : event.room.assignedRoles ?? {}, + showInstructions: show, + toggleInstructions: + controller.activityController.toggleShowInstructions, + getParticipantOpacity: (role) => + role == null || role.isFinished ? 0.5 : 1.0, + isParticipantSelected: (id) => + controller.room.ownRoleState?.id == id, + usedVocab: controller.activityController.usedVocab, + ); + }, ); } @@ -165,7 +182,7 @@ class Message extends StatelessWidget { final ownMessage = event.senderId == client.userID; final alignment = ownMessage ? Alignment.topRight : Alignment.topLeft; - var color = theme.colorScheme.surfaceContainerHigh; + var color = theme.colorScheme.surfaceContainerHighest; final displayTime = event.type == EventTypes.RoomCreate || nextEvent == null || !event.originServerTs.sameEnvironment(nextEvent!.originServerTs); @@ -453,11 +470,26 @@ class Message extends StatelessWidget { context: context, user: user, onMention: onMention, + // #Pangea + room: controller.room, + // Pangea# ), presenceUserId: user.stateKey, presenceBackgroundColor: wallpaperMode ? Colors.transparent : null, + // #Pangea + miniIcon: + user.id == BotName.byEnvironment + ? BotSettingsLanguageIcon( + room: controller.room, + ) + : null, + presenceOffset: + user.id == BotName.byEnvironment + ? const Offset(0, 0) + : null, + // Pangea# ); }, ), @@ -564,236 +596,277 @@ class Message extends StatelessWidget { FluffyThemes.animationCurve, child: // #Pangea - PressableButton( - triggerAnimation: controller - .showToolbarStream.stream - .where( - (eventID) => - eventID == event.eventId, - ), - depressed: !isButton, - borderRadius: borderRadius, - onPressed: () { - showToolbar( - pangeaMessageEvent, - ); - }, - color: color, - visible: isButton && !noBubble, - child: - // Pangea# - Container( - decoration: BoxDecoration( - color: noBubble - ? Colors.transparent - : color, - borderRadius: borderRadius, - ), - clipBehavior: Clip.antiAlias, - // #Pangea - child: - CompositedTransformTarget( - link: MatrixState.pAnyState - .layerLinkAndKey( - event.eventId, - ) - .link, - // child: BubbleBackground( - // colors: colors, - // ignore: noBubble || !ownMessage, - // scrollController: scrollController, - // Pangea# - child: Container( - // #Pangea - key: MatrixState.pAnyState - .layerLinkAndKey( - event.eventId, - ) - .key, + SelectionContainer.disabled( + child: MouseRegion( + cursor: + SystemMouseCursors.click, + child: ValueListenableBuilder( + valueListenable: controller + .depressMessageButton, + // #Pangea + child: ShimmerBackground( + enabled: controller + .showMessageShimmer( + event, + ), // Pangea# - decoration: BoxDecoration( - borderRadius: - BorderRadius - .circular( - AppConfig - .borderRadius, + child: Container( + decoration: + BoxDecoration( + color: noBubble + ? Colors + .transparent + : color, + borderRadius: + borderRadius, + ), + clipBehavior: + Clip.antiAlias, + // #Pangea + child: + CompositedTransformTarget( + link: MatrixState + .pAnyState + .layerLinkAndKey( + event.eventId, + ) + .link, + // child: BubbleBackground( + // colors: colors, + // ignore: noBubble || !ownMessage, + // scrollController: scrollController, + // Pangea# + child: Container( + // #Pangea + key: MatrixState + .pAnyState + .layerLinkAndKey( + event.eventId, + ) + .key, + // Pangea# + decoration: + BoxDecoration( + borderRadius: + BorderRadius + .circular( + AppConfig + .borderRadius, + ), + ), + constraints: + const BoxConstraints( + maxWidth: FluffyThemes + .columnWidth * + 1.5, + ), + child: Column( + mainAxisSize: + MainAxisSize + .min, + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + if ({ + RelationshipTypes + .reply, + RelationshipTypes + .thread, + }.contains( + event + .relationshipType, + )) + FutureBuilder< + Event?>( + future: event + .getReplyEvent( + timeline, + ), + builder: ( + BuildContext + context, + snapshot, + ) { + final replyEvent = snapshot + .hasData + ? snapshot + .data! + : Event( + eventId: event.relationshipEventId!, + content: { + 'msgtype': 'm.text', + 'body': '...', + }, + // #Pangea + // senderId: event + // .senderId, + senderId: "", + // Pangea# + type: 'm.room.message', + room: event.room, + status: EventStatus.sent, + originServerTs: DateTime.now(), + ); + return Padding( + padding: + const EdgeInsets.only( + left: + 16, + right: + 16, + top: + 8, + ), + child: + Material( + color: + Colors.transparent, + borderRadius: + ReplyContent.borderRadius, + child: + InkWell( + borderRadius: + ReplyContent.borderRadius, + onTap: () => + scrollToEventId( + replyEvent.eventId, + ), + child: + AbsorbPointer( + child: ReplyContent( + replyEvent, + ownMessage: ownMessage, + timeline: timeline, + ), + ), + ), + ), + ); + }, + ), + MessageContent( + displayEvent, + textColor: + textColor, + linkColor: + linkColor, + onInfoTab: + onInfoTab, + borderRadius: + borderRadius, + timeline: + timeline, + selected: + selected, + // #Pangea + pangeaMessageEvent: + pangeaMessageEvent, + controller: + controller, + nextEvent: + nextEvent, + prevEvent: + previousEvent, + // Pangea# + ), + if (event + .hasAggregatedEvents( + timeline, + RelationshipTypes + .edit, + )) + Padding( + padding: + const EdgeInsets + .only( + bottom: + 8.0, + left: + 16.0, + right: + 16.0, + ), + child: Row( + mainAxisSize: + MainAxisSize + .min, + spacing: + 4.0, + children: [ + Icon( + Icons + .edit_outlined, + color: + textColor.withAlpha( + 164, + ), + size: + 14, + ), + Text( + displayEvent + .originServerTs + .localizedTimeShort( + context, + ), + style: + TextStyle( + color: + textColor.withAlpha( + 164, + ), + fontSize: + 11, + ), + ), + ], + ), + ) + // #Pangea + else if (canRefresh) + RequestRegenerationButton( + textColor: + textColor, + onPressed: () => + controller + .requestRegeneration( + event + .eventId, + ), + ), + // Pangea# + ], + ), + ), ), ), - constraints: - const BoxConstraints( - maxWidth: FluffyThemes - .columnWidth * - 1.5, - ), - child: Column( - mainAxisSize: - MainAxisSize.min, - crossAxisAlignment: - CrossAxisAlignment - .start, - children: [ - if ({ - RelationshipTypes - .reply, - RelationshipTypes - .thread, - }.contains( - event - .relationshipType, - )) - FutureBuilder< - Event?>( - future: event - .getReplyEvent( - timeline, - ), - builder: ( - BuildContext - context, - snapshot, - ) { - final replyEvent = - snapshot - .hasData - ? snapshot - .data! - : Event( - eventId: - event.relationshipEventId!, - content: { - 'msgtype': 'm.text', - 'body': '...', - }, - // #Pangea - // senderId: event - // .senderId, - senderId: - "", - // Pangea# - type: - 'm.room.message', - room: - event.room, - status: - EventStatus.sent, - originServerTs: - DateTime.now(), - ); - return Padding( - padding: - const EdgeInsets - .only( - left: 16, - right: 16, - top: 8, - ), - child: - Material( - color: Colors - .transparent, - borderRadius: - ReplyContent - .borderRadius, - child: - InkWell( - borderRadius: - ReplyContent - .borderRadius, - onTap: () => - scrollToEventId( - replyEvent - .eventId, - ), - child: - AbsorbPointer( - child: - ReplyContent( - replyEvent, - ownMessage: - ownMessage, - timeline: - timeline, - ), - ), - ), - ), - ); - }, - ), - MessageContent( - displayEvent, - textColor: - textColor, - linkColor: - linkColor, - onInfoTab: - onInfoTab, - borderRadius: - borderRadius, - timeline: timeline, - selected: selected, - // #Pangea - pangeaMessageEvent: - pangeaMessageEvent, - controller: - controller, - nextEvent: - nextEvent, - prevEvent: - previousEvent, - // Pangea# - ), - if (event - .hasAggregatedEvents( - timeline, - RelationshipTypes - .edit, - )) - Padding( - padding: - const EdgeInsets - .only( - bottom: 8.0, - left: 16.0, - right: 16.0, - ), - child: Row( - mainAxisSize: - MainAxisSize - .min, - spacing: 4.0, - children: [ - Icon( - Icons - .edit_outlined, - color: textColor - .withAlpha( - 164, - ), - size: 14, - ), - Text( - displayEvent - .originServerTs - .localizedTimeShort( - context, - ), - style: - TextStyle( - color: textColor - .withAlpha( - 164, - ), - fontSize: - 11, - ), - ), - ], - ), - ), - ], - ), ), + // #Pangea + builder: ( + context, + depressed, + child, + ) => + PressableButton( + buttonHeight: 5, + depressed: !isButton || + depressed, + borderRadius: + borderRadius, + onPressed: () { + showToolbar( + pangeaMessageEvent, + ); + }, + color: color, + visible: + isButton && !noBubble, + builder: + (context, _, __) => + child!, + ), + // Pangea# ), ), ), diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 213ff19f8..bcd3debff 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -10,9 +10,8 @@ import 'package:fluffychat/pages/chat/events/video_player.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; import 'package:fluffychat/utils/event_checkbox_extension.dart'; import '../../../config/app_config.dart'; import '../../../utils/platform_infos.dart'; @@ -135,16 +134,6 @@ class MessageContent extends StatelessWidget { if (overlayController != null) { overlayController?.onClickOverlayMessageToken(token); return; - } else { - Future.delayed( - const Duration( - milliseconds: AppConfig.overlayAnimationDuration, - ), () { - TtsController.tryToSpeak( - token.text.content, - langCode: pangeaMessageEvent!.messageDisplayLangCode, - ); - }); } controller.showToolbar( @@ -214,12 +203,12 @@ class MessageContent extends StatelessWidget { linkColor: linkColor, fontSize: fontSize, // #Pangea - chatController: controller, eventId: "${event.eventId}${overlayController != null ? '_overlay' : ''}", roomId: event.room.id, senderId: event.senderId, autoplay: overlayController != null && isTransitionAnimation, + enableClicks: overlayController != null, // Pangea# ); } diff --git a/lib/pages/chat/events/old.dart b/lib/pages/chat/events/old.dart deleted file mode 100644 index 8b1378917..000000000 --- a/lib/pages/chat/events/old.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/pages/chat/events/pangea_message_reactions.dart b/lib/pages/chat/events/pangea_message_reactions.dart index 4e98bb569..0150b63d4 100644 --- a/lib/pages/chat/events/pangea_message_reactions.dart +++ b/lib/pages/chat/events/pangea_message_reactions.dart @@ -10,9 +10,10 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/emoji_burst.dart'; +import 'package:fluffychat/pages/chat/events/reaction_listener.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/avatar.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; @@ -20,11 +21,13 @@ class PangeaMessageReactions extends StatefulWidget { final Event event; final Timeline timeline; final ChatController controller; + final double? width; const PangeaMessageReactions( this.event, this.timeline, this.controller, { + this.width, super.key, }); @@ -33,10 +36,10 @@ class PangeaMessageReactions extends StatefulWidget { } class _PangeaMessageReactionsState extends State { - StreamSubscription? _reactionSubscription; Map _reactionMap = {}; Set _newlyAddedReactions = {}; late Client client; + ReactionListener? _reactionListener; @override void initState() { @@ -46,23 +49,17 @@ class _PangeaMessageReactionsState extends State { _setupReactionStream(); } - void _setupReactionStream() { - _reactionSubscription = widget.controller.room.client.onSync.stream.where( - (update) { - final room = widget.controller.room; - final timelineEvents = update.rooms?.join?[room.id]?.timeline?.events; - if (timelineEvents == null) return false; + @override + void dispose() { + _reactionListener?.dispose(); + super.dispose(); + } - final eventID = widget.event.eventId; - return timelineEvents.any( - (e) => - e.type == EventTypes.Redaction || - (e.type == EventTypes.Reaction && - Event.fromMatrixEvent(e, room).relationshipEventId == - eventID), - ); - }, - ).listen(_onReactionUpdate); + void _setupReactionStream() { + _reactionListener = ReactionListener( + event: widget.event, + onUpdate: _onReactionUpdate, + ); } void _onReactionUpdate(SyncUpdate update) { @@ -104,12 +101,6 @@ class _PangeaMessageReactionsState extends State { _reactionMap = newReactionMap; } - @override - void dispose() { - _reactionSubscription?.cancel(); - super.dispose(); - } - @override Widget build(BuildContext context) { final reactionList = _reactionMap.values.toList() @@ -120,13 +111,12 @@ class _PangeaMessageReactionsState extends State { .aggregatedEvents(widget.timeline, RelationshipTypes.reaction) .toList(); - return Directionality( - textDirection: ownMessage ? TextDirection.rtl : TextDirection.ltr, - child: AnimatedSize( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - alignment: ownMessage ? Alignment.bottomRight : Alignment.bottomLeft, - clipBehavior: Clip.none, + return SizedBox( + width: allReactionEvents.any((e) => e.status.isSending) + ? null + : widget.width, + child: Directionality( + textDirection: ownMessage ? TextDirection.rtl : TextDirection.ltr, child: Wrap( crossAxisAlignment: WrapCrossAlignment.center, runSpacing: 4.0, @@ -171,10 +161,16 @@ class _PangeaMessageReactionsState extends State { e.senderId == e.room.client.userID && e.content.tryGetMap('m.relates_to')?['key'] == reaction.key, ); - if (evt != null) { - await showFutureLoadingDialog( - context: context, - future: () => evt.redactEvent(), + try { + await evt?.redactEvent(); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'message': 'Failed to redact reaction event', + 'event_id': evt?.eventId, + }, ); } } else { diff --git a/lib/pages/chat/events/reaction_listener.dart b/lib/pages/chat/events/reaction_listener.dart new file mode 100644 index 000000000..f0f51c0ee --- /dev/null +++ b/lib/pages/chat/events/reaction_listener.dart @@ -0,0 +1,34 @@ +import 'dart:async'; + +import 'package:matrix/matrix.dart'; + +class ReactionListener { + final Event event; + final Function(SyncUpdate) onUpdate; + + StreamSubscription? _reactionSub; + + ReactionListener({required this.event, required this.onUpdate}) { + _reactionSub = event.room.client.onSync.stream.where( + (update) { + final room = event.room; + final timelineEvents = update.rooms?.join?[room.id]?.timeline?.events; + if (timelineEvents == null) return false; + + final eventID = event.eventId; + return timelineEvents.any( + (e) => + e.type == EventTypes.Redaction || + (e.type == EventTypes.Reaction && + Event.fromMatrixEvent(e, room).relationshipEventId == + eventID), + ); + }, + ).listen(onUpdate); + } + + void dispose() { + _reactionSub?.cancel(); + _reactionSub = null; + } +} diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart index e6c056776..77d0bab05 100644 --- a/lib/pages/chat/input_bar.dart +++ b/lib/pages/chat/input_bar.dart @@ -1,15 +1,22 @@ -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:emojis/emoji.dart'; -import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:matrix/matrix.dart'; import 'package:slugify/slugify.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; -import 'package:fluffychat/pangea/toolbar/utils/shrinkable_text.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_mode_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/pangea/choreographer/text_editing/edit_type_enum.dart'; +import 'package:fluffychat/pangea/choreographer/text_editing/pangea_text_controller.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/common/widgets/shrinkable_text.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/widgets/paywall_card.dart'; import 'package:fluffychat/utils/markdown_context_builder.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; import '../../widgets/avatar.dart'; @@ -28,9 +35,10 @@ class InputBar extends StatelessWidget { // #Pangea // final TextEditingController? controller; final PangeaTextController? controller; - final String hintText; + final Choreographer choreographer; + final VoidCallback showNextMatch; // Pangea# - final InputDecoration? decoration; + final InputDecoration decoration; final ValueChanged? onChanged; final bool? autofocus; final bool readOnly; @@ -44,25 +52,24 @@ class InputBar extends StatelessWidget { this.onSubmitImage, this.focusNode, this.controller, - this.decoration, + required this.decoration, this.onChanged, this.autofocus, this.textInputAction, this.readOnly = false, // #Pangea - required this.hintText, + required this.choreographer, + required this.showNextMatch, // Pangea# super.key, }); - List> getSuggestions(String text) { - if (controller!.selection.baseOffset != - controller!.selection.extentOffset || - controller!.selection.baseOffset < 0) { + List> getSuggestions(TextEditingValue text) { + if (text.selection.baseOffset != text.selection.extentOffset || + text.selection.baseOffset < 0) { return []; // no entries if there is selected text } - final searchText = - controller!.text.substring(0, controller!.selection.baseOffset); + final searchText = text.text.substring(0, text.selection.baseOffset); final ret = >[]; const maxResults = 30; @@ -229,36 +236,28 @@ class InputBar extends StatelessWidget { Widget buildSuggestion( BuildContext context, Map suggestion, + void Function(Map) onSelected, Client? client, ) { final theme = Theme.of(context); const size = 30.0; - // #Pangea - // const padding = EdgeInsets.all(4.0); - const padding = EdgeInsets.all(8.0); - // Pangea# if (suggestion['type'] == 'command') { final command = suggestion['name']!; final hint = commandHint(L10n.of(context), command); return Tooltip( message: hint, waitDuration: const Duration(days: 1), // don't show on hover - child: Container( - padding: padding, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - commandExample(command), - style: const TextStyle(fontFamily: 'RobotoMono'), - ), - Text( - hint, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: theme.textTheme.bodySmall, - ), - ], + child: ListTile( + onTap: () => onSelected(suggestion), + title: Text( + commandExample(command), + style: const TextStyle(fontFamily: 'RobotoMono'), + ), + subtitle: Text( + hint, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: theme.textTheme.bodySmall, ), ), ); @@ -268,29 +267,28 @@ class InputBar extends StatelessWidget { return Tooltip( message: label, waitDuration: const Duration(days: 1), // don't show on hover - child: Container( - padding: padding, - child: Text(label, style: const TextStyle(fontFamily: 'RobotoMono')), + child: ListTile( + onTap: () => onSelected(suggestion), + title: Text(label, style: const TextStyle(fontFamily: 'RobotoMono')), ), ); } if (suggestion['type'] == 'emote') { - return Container( - padding: padding, - child: Row( + return ListTile( + onTap: () => onSelected(suggestion), + leading: MxcImage( + // ensure proper ordering ... + key: ValueKey(suggestion['name']), + uri: suggestion['mxc'] is String + ? Uri.parse(suggestion['mxc'] ?? '') + : null, + width: size, + height: size, + isThumbnail: false, + ), + title: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ - MxcImage( - // ensure proper ordering ... - key: ValueKey(suggestion['name']), - uri: suggestion['mxc'] is String - ? Uri.parse(suggestion['mxc'] ?? '') - : null, - width: size, - height: size, - isThumbnail: false, - ), - const SizedBox(width: 6), Text(suggestion['name']!), Expanded( child: Align( @@ -316,39 +314,22 @@ class InputBar extends StatelessWidget { } if (suggestion['type'] == 'user' || suggestion['type'] == 'room') { final url = Uri.parse(suggestion['avatar_url'] ?? ''); - return Container( - padding: padding, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Avatar( - mxContent: url, - name: suggestion.tryGet('displayname') ?? - suggestion.tryGet('mxid'), - size: size, - client: client, - // #Pangea - userId: suggestion.tryGet('mxid'), - // Pangea# - ), - const SizedBox(width: 6), - // #Pangea - // Text(suggestion['displayname'] ?? suggestion['mxid']!), - Flexible( - child: Text( - suggestion['displayname'] ?? suggestion['mxid']!, - overflow: TextOverflow.ellipsis, - ), - ), - // Pangea# - ], + return ListTile( + onTap: () => onSelected(suggestion), + leading: Avatar( + mxContent: url, + name: suggestion.tryGet('displayname') ?? + suggestion.tryGet('mxid'), + size: size, + client: client, ), + title: Text(suggestion['displayname'] ?? suggestion['mxid']!), ); } return const SizedBox.shrink(); } - void insertSuggestion(_, Map suggestion) { + String insertSuggestion(Map suggestion) { final replaceText = controller!.text.substring(0, controller!.selection.baseOffset); var startText = ''; @@ -412,165 +393,186 @@ class InputBar extends StatelessWidget { (Match m) => '${m[1]}$insertText', ); } - if (insertText.isNotEmpty && startText.isNotEmpty) { - controller!.text = startText + afterText; - controller!.selection = TextSelection( - baseOffset: startText.length, - extentOffset: startText.length, + + return startText + afterText; + } + + // #Pangea + SubscriptionStatus get _subscriptionStatus => + MatrixState.pangeaController.subscriptionController.subscriptionStatus; + + String _defaultHintText(BuildContext context) { + return MatrixState.pangeaController.userController.languagesSet + ? L10n.of(context).writeAMessageLangCodes( + MatrixState.pangeaController.userController.userL1!.displayName, + MatrixState.pangeaController.userController.userL2!.displayName, + ) + : L10n.of(context).writeAMessage; + } + + void _onInputTap(BuildContext context) { + if (_shouldShowPaywall(context)) return; + + final baseOffset = controller!.selection.baseOffset; + final adjustedOffset = _adjustOffsetForNormalization(baseOffset); + final match = choreographer.igcController.getMatchByOffset(adjustedOffset); + if (match == null) return; + + if (match.updatedMatch.isITStart) { + choreographer.itController.openIT(controller!.text); + } else { + OverlayUtil.showIGCMatch( + match, + choreographer, + context, + showNextMatch, + ); + + // rebuild the text field to highlight the newly selected match + choreographer.textController.setSystemText( + choreographer.textController.text, + EditTypeEnum.other, + ); + choreographer.textController.selection = TextSelection.collapsed( + offset: baseOffset, ); } } + bool _shouldShowPaywall(BuildContext context) { + if (_subscriptionStatus == SubscriptionStatus.shouldShowPaywall) { + PaywallCard.show(context, ChoreoConstants.inputTransformTargetKey); + return true; + } + return false; + } + + int _adjustOffsetForNormalization(int baseOffset) { + int adjustedOffset = baseOffset; + final corrections = choreographer.igcController.recentAutomaticCorrections; + + for (final correction in corrections) { + final match = correction.updatedMatch.match; + if (match.offset < adjustedOffset && match.length > 0) { + adjustedOffset += (match.length - 1); + } + } + return adjustedOffset; + } + // Pangea# + @override Widget build(BuildContext context) { - // #Pangea - final enableAutocorrect = MatrixState - .pangeaController.userController.profile.toolSettings.enableAutocorrect; - // Pangea# - return TypeAheadField>( - direction: VerticalDirection.up, - hideOnEmpty: true, - hideOnLoading: true, - controller: controller, + final theme = Theme.of(context); + return Autocomplete>( focusNode: focusNode, - hideOnSelect: false, - debounceDuration: const Duration(milliseconds: 50), - // show suggestions after 50ms idle time (default is 300) - // #Pangea - builder: (context, _, focusNode) { - final textField = TextField( - enableSuggestions: enableAutocorrect, - readOnly: - controller != null && (controller!.choreographer.isRunningIT), - autocorrect: enableAutocorrect, - controller: controller, - focusNode: focusNode, - contextMenuBuilder: (c, e) => markdownContextBuilder( - c, - e, - _, - ), - contentInsertionConfiguration: ContentInsertionConfiguration( - onContentInserted: (KeyboardInsertedContent content) { - final data = content.data; - if (data == null) return; + textEditingController: controller, + optionsBuilder: getSuggestions, + fieldViewBuilder: (context, __, focusNode, _) => ValueListenableBuilder( + valueListenable: choreographer.itController.open, + builder: (context, _, __) { + return TextField( + controller: controller, + focusNode: focusNode, + // #Pangea + // readOnly: readOnly, + // contextMenuBuilder: (c, e) => markdownContextBuilder(c, e, controller), + contextMenuBuilder: (c, e) => + markdownContextBuilder(c, e, controller!), + onTap: () => _onInputTap(context), + readOnly: choreographer.choreoMode == ChoreoModeEnum.it, + autocorrect: MatrixState.pangeaController.userController + .isToolEnabled(ToolSetting.enableAutocorrect), + // Pangea# + contentInsertionConfiguration: ContentInsertionConfiguration( + onContentInserted: (KeyboardInsertedContent content) { + final data = content.data; + if (data == null) return; - final file = MatrixFile( - mimeType: content.mimeType, - bytes: data, - name: content.uri.split('/').last, - ); - room.sendFileEvent( - file, - shrinkImageMaxDimension: 1600, - ); + final file = MatrixFile( + mimeType: content.mimeType, + bytes: data, + name: content.uri.split('/').last, + ); + room.sendFileEvent( + file, + shrinkImageMaxDimension: 1600, + ); + }, + ), + minLines: minLines, + maxLines: maxLines, + keyboardType: keyboardType!, + textInputAction: textInputAction, + autofocus: autofocus!, + inputFormatters: [ + // #Pangea + //LengthLimitingTextInputFormatter((maxPDUSize / 3).floor()), + //setting max character count to 1000 + //after max, nothing else can be typed + LengthLimitingTextInputFormatter(1000), + // Pangea# + ], + onSubmitted: (text) { + // fix for library for now + // it sets the types for the callback incorrectly + onSubmitted!(text); }, - ), - minLines: minLines, - maxLines: maxLines, - keyboardType: keyboardType!, - textInputAction: textInputAction, - autofocus: autofocus!, - inputFormatters: [ - //LengthLimitingTextInputFormatter((maxPDUSize / 3).floor()), - //setting max character count to 1000 - //after max, nothing else can be typed - LengthLimitingTextInputFormatter(1000), - ], - onSubmitted: (text) { - // fix for library for now - // it sets the types for the callback incorrectly - onSubmitted!(text); - }, - style: controller?.exceededMaxLength ?? false - ? const TextStyle(color: Colors.red) - : null, - onTap: () { - controller?.onInputTap( - context, - fNode: focusNode, - ); - }, - decoration: decoration!, - onChanged: (text) { - // fix for the library for now - // it sets the types for the callback incorrectly - onChanged!(text); - }, - textCapitalization: TextCapitalization.sentences, - ); - // fix for issue with typing not working sometimes on Firefox and Safari - return Stack( - alignment: Alignment.centerLeft, - children: [ - if (controller != null && controller!.text.isEmpty) - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: ShrinkableText( - text: hintText, - maxWidth: double.infinity, - style: Theme.of(context).textTheme.bodyLarge?.copyWith( - color: Theme.of(context).disabledColor, - ), + // #Pangea + // maxLength: AppSettings.textMessageMaxLength.value, + // decoration: decoration!, + // Pangea# + decoration: decoration.copyWith( + // #Pangea + // hint: ShrinkableText( + hint: StreamBuilder( + stream: MatrixState + .pangeaController.userController.languageStream.stream, + builder: (context, _) => SizedBox( + height: 24, + child: ShrinkableText( + // Pangea# + text: choreographer.itController.open.value + ? L10n.of(context).buildTranslation + : _defaultHintText(context), + maxWidth: double.infinity, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + color: Theme.of(context).disabledColor, + ), + ), ), ), - kIsWeb ? SelectionArea(child: textField) : textField, - ], + ), + onChanged: (text) { + // fix for the library for now + // it sets the types for the callback incorrectly + onChanged!(text); + }, + textCapitalization: TextCapitalization.sentences, + ); + }, + ), + optionsViewBuilder: (c, onSelected, s) { + final suggestions = s.toList(); + return Material( + elevation: theme.appBarTheme.scrolledUnderElevation ?? 4, + shadowColor: theme.appBarTheme.shadowColor, + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + clipBehavior: Clip.hardEdge, + child: ListView.builder( + shrinkWrap: true, + itemCount: suggestions.length, + itemBuilder: (context, i) => buildSuggestion( + c, + suggestions[i], + onSelected, + Matrix.of(context).client, + ), + ), ); }, - // builder: (context, controller, focusNode) => TextField( - // controller: controller, - // focusNode: focusNode, - // readOnly: readOnly, - // contextMenuBuilder: (c, e) => markdownContextBuilder(c, e, controller), - // contentInsertionConfiguration: ContentInsertionConfiguration( - // onContentInserted: (KeyboardInsertedContent content) { - // final data = content.data; - // if (data == null) return; - - // final file = MatrixFile( - // mimeType: content.mimeType, - // bytes: data, - // name: content.uri.split('/').last, - // ); - // room.sendFileEvent( - // file, - // shrinkImageMaxDimension: 1600, - // ); - // }, - // ), - // minLines: minLines, - // maxLines: maxLines, - // keyboardType: keyboardType!, - // textInputAction: textInputAction, - // autofocus: autofocus!, - // inputFormatters: [ - // LengthLimitingTextInputFormatter((maxPDUSize / 3).floor()), - // ], - // onSubmitted: (text) { - // // fix for library for now - // // it sets the types for the callback incorrectly - // onSubmitted!(text); - // }, - // decoration: decoration!, - // onChanged: (text) { - // // fix for the library for now - // // it sets the types for the callback incorrectly - // onChanged!(text); - // }, - // textCapitalization: TextCapitalization.sentences, - // ), - // Pangea# - suggestionsCallback: getSuggestions, - itemBuilder: (c, s) => buildSuggestion(c, s, Matrix.of(context).client), - onSelected: (Map suggestion) => - insertSuggestion(context, suggestion), - errorBuilder: (BuildContext context, Object? error) => - const SizedBox.shrink(), - loadingBuilder: (BuildContext context) => const SizedBox.shrink(), - // fix loading briefly flickering a dark box - emptyBuilder: (BuildContext context) => - const SizedBox.shrink(), // fix loading briefly showing no suggestions + displayStringForOption: insertSuggestion, + optionsViewOpenDirection: OptionsViewOpenDirection.up, ); } } diff --git a/lib/pages/chat/recording_dialog.dart b/lib/pages/chat/recording_dialog.dart index 93ef79f1a..bf10421aa 100644 --- a/lib/pages/chat/recording_dialog.dart +++ b/lib/pages/chat/recording_dialog.dart @@ -12,11 +12,13 @@ import 'package:wakelock_plus/wakelock_plus.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/toolbar/utils/update_version_dialog.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'events/audio_player.dart'; +class PermissionException implements Exception {} + class RecordingDialog extends StatefulWidget { const RecordingDialog({ super.key, @@ -30,7 +32,10 @@ class RecordingDialogState extends State { Timer? _recorderSubscription; Duration _duration = Duration.zero; - bool error = false; + // #Pangea + // bool error = false; + Object? error; + // Pangea# final _audioRecorder = AudioRecorder(); final List amplitudeTimeline = []; @@ -61,37 +66,27 @@ class RecordingDialogState extends State { final result = await _audioRecorder.hasPermission(); if (result != true) { - setState(() => error = true); - return; + // #Pangea + throw PermissionException(); + // setState(() => error = true); + // return; + // Pangea# } await WakelockPlus.enable(); - // #Pangea - final isNotError = await showUpdateVersionDialog( - future: () async => - // Pangea# - await _audioRecorder.start( - RecordConfig( - bitRate: AppSettings.audioRecordingBitRate.getItem(store), - sampleRate: AppSettings.audioRecordingSamplingRate.getItem(store), - numChannels: AppSettings.audioRecordingNumChannels.getItem(store), - autoGain: AppSettings.audioRecordingAutoGain.getItem(store), - echoCancel: AppSettings.audioRecordingEchoCancel.getItem(store), - noiseSuppress: - AppSettings.audioRecordingNoiseSuppress.getItem(store), - encoder: codec, - ), - path: path ?? '', + await _audioRecorder.start( + RecordConfig( + bitRate: AppSettings.audioRecordingBitRate.getItem(store), + sampleRate: AppSettings.audioRecordingSamplingRate.getItem(store), + numChannels: AppSettings.audioRecordingNumChannels.getItem(store), + autoGain: AppSettings.audioRecordingAutoGain.getItem(store), + echoCancel: AppSettings.audioRecordingEchoCancel.getItem(store), + noiseSuppress: AppSettings.audioRecordingNoiseSuppress.getItem(store), + encoder: codec, ), - // #Pangea - context: context, + path: path ?? '', ); - if (!isNotError) { - Navigator.of(context).pop(); - return; - } - // Pangea# setState(() => _duration = Duration.zero); _recorderSubscription?.cancel(); _recorderSubscription = @@ -104,8 +99,12 @@ class RecordingDialogState extends State { _duration += const Duration(milliseconds: 100); }); }); - } catch (_) { - setState(() => error = true); + // #Pangea + // } catch (_) { + // setState(() => error = true); + } catch (e) { + setState(() => error = e); + // Pangea# rethrow; } } @@ -154,8 +153,19 @@ class RecordingDialogState extends State { const maxDecibalWidth = 64.0; final time = '${_duration.inMinutes.toString().padLeft(2, '0')}:${(_duration.inSeconds % 60).toString().padLeft(2, '0')}'; - final content = error - ? Text(L10n.of(context).oopsSomethingWentWrong) + // #Pangea + // final content = error + // ? Text(L10n.of(context).oopsSomethingWentWrong) + final content = error != null + ? ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 250.0), + child: error is PermissionException + ? Text(L10n.of(context).recordingPermissionDenied) + : kIsWeb + ? Text(L10n.of(context).genericWebRecordingError) + : Text(error!.toLocalizedString(context)), + ) + // Pangea# : Row( children: [ Container( @@ -209,7 +219,10 @@ class RecordingDialogState extends State { ), ), ), - if (error != true) + // #Pangea + // if (error != true) + if (error == null) + // Pangea# CupertinoDialogAction( onPressed: _stopAndSend, child: Text(L10n.of(context).send), @@ -229,7 +242,10 @@ class RecordingDialogState extends State { ), ), ), - if (error != true) + // #Pangea + // if (error != true) + if (error == null) + // Pangea# TextButton( onPressed: _stopAndSend, child: Text(L10n.of(context).send), diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart index df5fa727f..b1cac71cf 100644 --- a/lib/pages/chat_details/chat_details.dart +++ b/lib/pages/chat_details/chat_details.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; @@ -7,6 +9,7 @@ import 'package:matrix/matrix.dart' as sdk; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat_details/chat_download_provider.dart'; import 'package:fluffychat/pages/settings/settings.dart'; import 'package:fluffychat/pangea/chat/constants/default_power_level.dart'; import 'package:fluffychat/pangea/chat_settings/pages/pangea_room_details.dart'; @@ -14,10 +17,9 @@ import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/course_plans/course_activities/activity_summaries_provider.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart'; -import 'package:fluffychat/pangea/download/download_room_extension.dart'; -import 'package:fluffychat/pangea/download/download_type_enum.dart'; import 'package:fluffychat/pangea/extensions/join_rule_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -51,24 +53,47 @@ class ChatDetails extends StatefulWidget { // #Pangea // class ChatDetailsController extends State { class ChatDetailsController extends State - with ActivitySummariesProvider, CoursePlanProvider { + with ActivitySummariesProvider, CoursePlanProvider, ChatDownloadProvider { bool loadingActivities = true; bool loadingCourseSummary = true; + // listen to language updates to refresh course info + StreamSubscription? _languageSubscription; + @override void initState() { super.initState(); _loadCourseInfo(); _loadSummaries(); + + _languageSubscription = MatrixState + .pangeaController.userController.languageStream.stream + .listen((update) { + if (update.prevBaseLang != update.baseLang) { + _loadCourseInfo(); + } + }); } @override void didUpdateWidget(covariant ChatDetails oldWidget) { super.didUpdateWidget(oldWidget); - if (oldWidget.roomId != widget.roomId) { + final room = Matrix.of(context).client.getRoomById(widget.roomId); + if (oldWidget.roomId != widget.roomId || + course?.uuid != room?.coursePlan?.uuid) { _loadCourseInfo(); _loadSummaries(); } + + if (widget.activeTab == 'course' && oldWidget.activeTab != 'course') { + _loadSummaries(); + } + } + + @override + void dispose() { + _languageSubscription?.cancel(); + super.dispose(); } // Pangea# @@ -227,52 +252,6 @@ class ChatDetailsController extends State } // #Pangea - void downloadChatAction() async { - if (roomId == null) return; - final Room? room = Matrix.of(context).client.getRoomById(roomId!); - if (room == null) return; - - final type = await showModalActionPopup( - context: context, - title: L10n.of(context).downloadGroupText, - actions: [ - AdaptiveModalAction( - value: DownloadType.csv, - label: L10n.of(context).downloadCSVFile, - ), - AdaptiveModalAction( - value: DownloadType.txt, - label: L10n.of(context).downloadTxtFile, - ), - AdaptiveModalAction( - value: DownloadType.xlsx, - label: L10n.of(context).downloadXLSXFile, - ), - ], - ); - if (type == null) return; - - try { - await room.download(type, context); - } on EmptyChatException { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - L10n.of(context).emptyChatDownloadWarning, - ), - ), - ); - } catch (e) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - "${L10n.of(context).oopsSomethingWentWrong} ${L10n.of(context).errorPleaseRefresh}", - ), - ), - ); - } - } - Future setRoomCapacity() async { if (roomId == null) return; final Room? room = Matrix.of(context).client.getRoomById(roomId!); @@ -381,7 +360,7 @@ class ChatDetailsController extends State ); if (resp.isError || resp.result == null || !mounted) return; - context.go('/rooms/${resp.result}/invite'); + NavigationUtil.goToSpaceRoute(resp.result, ['invite'], context); } Future _loadCourseInfo() async { diff --git a/lib/pages/chat_details/chat_download_provider.dart b/lib/pages/chat_details/chat_download_provider.dart new file mode 100644 index 000000000..ce1d9be0a --- /dev/null +++ b/lib/pages/chat_details/chat_download_provider.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/download/download_room_extension.dart'; +import 'package:fluffychat/pangea/download/download_type_enum.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +mixin ChatDownloadProvider { + void downloadChatAction(String roomId, BuildContext context) async { + final Room? room = Matrix.of(context).client.getRoomById(roomId); + if (room == null) return; + + final type = await showModalActionPopup( + context: context, + title: L10n.of(context).downloadGroupText, + actions: [ + AdaptiveModalAction( + value: DownloadType.csv, + label: L10n.of(context).downloadCSVFile, + ), + AdaptiveModalAction( + value: DownloadType.txt, + label: L10n.of(context).downloadTxtFile, + ), + AdaptiveModalAction( + value: DownloadType.xlsx, + label: L10n.of(context).downloadXLSXFile, + ), + ], + ); + if (type == null) return; + + try { + await room.download(type, context); + } on EmptyChatException { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + L10n.of(context).emptyChatDownloadWarning, + ), + ), + ); + } catch (e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + "${L10n.of(context).oopsSomethingWentWrong} ${L10n.of(context).errorPleaseRefresh}", + ), + ), + ); + } + } +} diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart index bd402ab4d..d0f2d8948 100644 --- a/lib/pages/chat_list/chat_list.dart +++ b/lib/pages/chat_list/chat_list.dart @@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:app_links/app_links.dart'; import 'package:cross_file/cross_file.dart'; import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart'; import 'package:go_router/go_router.dart'; @@ -21,6 +20,9 @@ import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart import 'package:fluffychat/pangea/chat_settings/widgets/chat_context_menu_action.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_controller.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/pangea/subscription/widgets/subscription_snackbar.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -105,7 +107,9 @@ class ChatListController extends State StreamSubscription? _intentFileStreamSubscription; - StreamSubscription? _intentUriStreamSubscription; + // #Pangea + // StreamSubscription? _intentUriStreamSubscription; + // Pangea# ActiveFilter activeFilter = AppConfig.separateChatTypes ? ActiveFilter.messages @@ -247,7 +251,10 @@ class ChatListController extends State return; } - context.go('/rooms/${room.id}'); + // #Pangea + // context.go('/rooms/${room.id}'); + NavigationUtil.goToSpaceRoute(room.id, [], context); + // Pangea# } bool Function(Room) getRoomFilterByActiveFilter(ActiveFilter activeFilter) { @@ -255,36 +262,24 @@ class ChatListController extends State case ActiveFilter.allChats: // #Pangea // return (room) => true; - return (room) => - !room.isHiddenRoom && - !room.isSpace && - room.firstSpaceParent == null; + return (room) => !room.isHiddenRoom && !room.isSpace; // Pangea# case ActiveFilter.messages: // #Pangea // return (room) => !room.isSpace && room.isDirectChat; return (room) => - !room.isSpace && - room.isDirectChat && - !room.isHiddenRoom && - room.firstSpaceParent == null; + !room.isSpace && room.isDirectChat && !room.isHiddenRoom; // Pangea# case ActiveFilter.groups: // #Pangea // return (room) => !room.isSpace && !room.isDirectChat; return (room) => - !room.isSpace && - !room.isDirectChat && - !room.isHiddenRoom && - room.firstSpaceParent == null; + !room.isSpace && !room.isDirectChat && !room.isHiddenRoom; // Pangea# case ActiveFilter.unread: // #Pangea // return (room) => room.isUnreadOrInvited; - return (room) => - room.isUnreadOrInvited && - !room.isHiddenRoom && - room.firstSpaceParent == null; + return (room) => room.isUnreadOrInvited && !room.isHiddenRoom; // Pangea# case ActiveFilter.spaces: return (room) => room.isSpace; @@ -463,6 +458,9 @@ class ChatListController extends State void _processIncomingSharedMedia(List files) { if (files.isEmpty) return; + // #Pangea + if (files.every((f) => f.type == SharedMediaType.url)) return; + // Pangea# showScaffoldDialog( context: context, @@ -487,13 +485,15 @@ class ChatListController extends State ); } - void _processIncomingUris(Uri? uri) async { - if (uri == null) return; - context.go('/rooms'); - WidgetsBinding.instance.addPostFrameCallback((_) { - UrlLauncher(context, uri.toString()).openMatrixToUrl(); - }); - } + // #Pangea + // void _processIncomingUris(Uri? uri) async { + // if (uri == null) return; + // context.go('/rooms'); + // WidgetsBinding.instance.addPostFrameCallback((_) { + // UrlLauncher(context, uri.toString()).openMatrixToUrl(); + // }); + // } + // Pangea# void _initReceiveSharingIntent() { if (!PlatformInfos.isMobile) return; @@ -508,9 +508,11 @@ class ChatListController extends State .getInitialMedia() .then(_processIncomingSharedMedia); - // For receiving shared Uris - _intentUriStreamSubscription = - AppLinks().uriLinkStream.listen(_processIncomingUris); + // #Pangea + // // For receiving shared Uris + // _intentUriStreamSubscription = + // AppLinks().uriLinkStream.listen(_processIncomingUris); + // Pangea# if (PlatformInfos.isAndroid) { final shortcuts = FlutterShortcuts(); @@ -525,7 +527,6 @@ class ChatListController extends State //#Pangea StreamSubscription? _invitedSpaceSubscription; - StreamSubscription? _subscriptionStatusStream; StreamSubscription? _roomCapacitySubscription; //Pangea# @@ -556,8 +557,10 @@ class ChatListController extends State _checkTorBrowser(); //#Pangea - _invitedSpaceSubscription = MatrixState - .pangeaController.matrixState.client.onSync.stream + _invitedSpaceSubscription = Matrix.of(context) + .client + .onSync + .stream .where((event) => event.rooms?.invite != null) .listen((event) async { for (final inviteEntry in event.rooms!.invite!.entries) { @@ -575,15 +578,12 @@ class ChatListController extends State if (isSpace) { final spaceId = inviteEntry.key; - final space = - MatrixState.pangeaController.matrixState.client.getRoomById( - spaceId, - ); + final space = Matrix.of(context).client.getRoomById( + spaceId, + ); - final String? justInputtedCode = - MatrixState.pangeaController.spaceCodeController.justInputtedCode; - final newSpaceCode = space?.classCode; - if (newSpaceCode?.toLowerCase() == justInputtedCode?.toLowerCase()) { + if (space?.classCode?.toLowerCase() == + SpaceCodeRepo.recentCode?.toLowerCase()) { return; } @@ -596,8 +596,8 @@ class ChatListController extends State } if (isAnalytics) { - final analyticsRoom = MatrixState.pangeaController.matrixState.client - .getRoomById(inviteEntry.key); + final analyticsRoom = + Matrix.of(context).client.getRoomById(inviteEntry.key); try { await analyticsRoom?.join(); } catch (err, s) { @@ -613,18 +613,13 @@ class ChatListController extends State } }); - _subscriptionStatusStream ??= MatrixState - .pangeaController.subscriptionController.subscriptionStream.stream - .listen((event) { - if (mounted) { - showSubscribedSnackbar(context); - } - }); + MatrixState.pangeaController.subscriptionController.subscriptionNotifier + .addListener(_onSubscribe); // listen for space child updates for any space that is not the active space // so that when the user navigates to the space that was updated, it will // reload any rooms that have been added / removed - final client = MatrixState.pangeaController.matrixState.client; + final client = Matrix.of(context).client; // listen for room join events and leave room if over capacity _roomCapacitySubscription ??= client.onSync.stream @@ -656,7 +651,7 @@ class ChatListController extends State future: () async { await room.leave(); if (GoRouterState.of(context).uri.toString().contains(roomID)) { - context.go("/rooms"); + NavigationUtil.goToSpaceRoute(null, [], context); } throw L10n.of(context).roomFull; }, @@ -673,6 +668,10 @@ class ChatListController extends State } // #Pangea + void _onSubscribe() { + if (mounted) showSubscribedSnackbar(context); + } + Future _joinInvitedSpaces() async { final invitedSpaces = Matrix.of(context).client.rooms.where( (r) => r.isSpace && r.membership == Membership.invite, @@ -688,11 +687,13 @@ class ChatListController extends State void dispose() { _intentDataStreamSubscription?.cancel(); _intentFileStreamSubscription?.cancel(); - _intentUriStreamSubscription?.cancel(); //#Pangea + // _intentUriStreamSubscription?.cancel(); _invitedSpaceSubscription?.cancel(); - _subscriptionStatusStream?.cancel(); _roomCapacitySubscription?.cancel(); + MatrixState.pangeaController.subscriptionController.subscriptionNotifier + .removeListener(_onSubscribe); + SpaceCodeController.codeNotifier.removeListener(_onCacheSpaceCode); //Pangea# scrollController.removeListener(_onScroll); super.dispose(); @@ -1103,10 +1104,15 @@ class ChatListController extends State void _initPangeaControllers(Client client) { MatrixState.pangeaController.initControllers(); if (mounted) { - MatrixState.pangeaController.spaceCodeController - .joinCachedSpaceCode(context); + SpaceCodeController.joinCachedSpaceCode(context); + SpaceCodeController.codeNotifier.addListener(_onCacheSpaceCode); } } + + void _onCacheSpaceCode() { + if (!mounted) return; + SpaceCodeController.joinCachedSpaceCode(context); + } // Pangea# void setActiveFilter(ActiveFilter filter) { diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart index 200160a83..b8aae527f 100644 --- a/lib/pages/chat_list/chat_list_body.dart +++ b/lib/pages/chat_list/chat_list_body.dart @@ -8,16 +8,13 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pages/chat_list/chat_list_item.dart'; import 'package:fluffychat/pages/chat_list/dummy_chat_list_item.dart'; -import 'package:fluffychat/pages/chat_list/search_title.dart'; import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; import 'package:fluffychat/pangea/chat_list/widgets/pangea_chat_list_header.dart'; import 'package:fluffychat/pangea/chat_settings/utils/bot_client_extension.dart'; import 'package:fluffychat/pangea/course_chats/course_chats_page.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -import 'package:fluffychat/pangea/public_spaces/public_room_bottom_sheet.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/stream_extension.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/public_room_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import '../../config/themes.dart'; @@ -68,11 +65,11 @@ class ChatListViewBody extends StatelessWidget { // final publicRooms = controller.roomSearchResult?.chunk // .where((room) => room.roomType != 'm.space') // .toList(); + // final publicSpaces = controller.roomSearchResult?.chunk + // .where((room) => room.roomType == 'm.space') + // .toList(); + // final userSearchResult = controller.userSearchResult; // Pangea# - final publicSpaces = controller.roomSearchResult?.chunk - .where((room) => room.roomType == 'm.space') - .toList(); - final userSearchResult = controller.userSearchResult; const dummyChatCount = 4; final filter = controller.searchController.text.toLowerCase(); return StreamBuilder( @@ -106,53 +103,44 @@ class ChatListViewBody extends StatelessWidget { // icon: const Icon(Icons.explore_outlined), // ), // PublicRoomsHorizontalList(publicRooms: publicRooms), - // Pangea# - SearchTitle( - // #Pangea - // title: L10n.of(context).publicSpaces, - title: L10n.of(context).publicCourses, - // icon: const Icon(Icons.workspaces_outlined), - icon: const Icon(Icons.groups_outlined), - // Pangea# - ), - PublicRoomsHorizontalList(publicRooms: publicSpaces), - SearchTitle( - title: L10n.of(context).users, - icon: const Icon(Icons.group_outlined), - ), - AnimatedContainer( - clipBehavior: Clip.hardEdge, - decoration: const BoxDecoration(), - height: userSearchResult == null || - userSearchResult.results.isEmpty - ? 0 - : 106, - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - child: userSearchResult == null - ? null - // #Pangea - : UserSearchResultsList( - userSearchResult: userSearchResult, - ), - // : ListView.builder( - // scrollDirection: Axis.horizontal, - // itemCount: userSearchResult.results.length, - // itemBuilder: (context, i) => _SearchItem( - // title: - // userSearchResult.results[i].displayName ?? - // userSearchResult - // .results[i].userId.localpart ?? - // L10n.of(context).unknownDevice, - // avatar: userSearchResult.results[i].avatarUrl, - // onPressed: () => UserDialog.show( - // context: context, - // profile: userSearchResult.results[i], - // ), - // ), - // ), - // Pangea# - ), + // SearchTitle( + // title: L10n.of(context).publicSpaces, + // icon: const Icon(Icons.workspaces_outlined), + // ), + // PublicRoomsHorizontalList(publicRooms: publicSpaces), + // SearchTitle( + // title: L10n.of(context).users, + // icon: const Icon(Icons.group_outlined), + // ), + // AnimatedContainer( + // clipBehavior: Clip.hardEdge, + // decoration: const BoxDecoration(), + // height: userSearchResult == null || + // userSearchResult.results.isEmpty + // ? 0 + // : 106, + // duration: FluffyThemes.animationDuration, + // curve: FluffyThemes.animationCurve, + // child: userSearchResult == null + // ? null + // : ListView.builder( + // scrollDirection: Axis.horizontal, + // itemCount: userSearchResult.results.length, + // itemBuilder: (context, i) => _SearchItem( + // title: + // userSearchResult.results[i].displayName ?? + // userSearchResult + // .results[i].userId.localpart ?? + // L10n.of(context).unknownDevice, + // avatar: userSearchResult.results[i].avatarUrl, + // onPressed: () => UserDialog.show( + // context: context, + // profile: userSearchResult.results[i], + // ), + // ), + // ), + // ), + // Pangea# ], // #Pangea // if (!controller.isSearchMode && AppConfig.showPresences) @@ -220,21 +208,29 @@ class ChatListViewBody extends StatelessWidget { // .toList(), // ), // ), - // Pangea# - if (controller.isSearchMode) - SearchTitle( - title: L10n.of(context).chats, - icon: const Icon(Icons.forum_outlined), + // if (controller.isSearchMode) + // SearchTitle( + // title: L10n.of(context).chats, + // icon: const Icon(Icons.forum_outlined), + // ), + if (controller.isSearchMode && + rooms + .where( + (room) => room + .getLocalizedDisplayname( + MatrixLocals(L10n.of(context)), + ) + .toLowerCase() + .contains(filter), + ) + .isEmpty) + Padding( + padding: const EdgeInsetsGeometry.all(16.0), + child: Text( + L10n.of(context).emptyChatSearch, + textAlign: TextAlign.center, + ), ), - // #Pangea - const InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.chatListTooltip, - padding: EdgeInsets.only( - left: 16.0, - right: 16.0, - bottom: 16.0, - ), - ), // if (client.prevBatch != null && // rooms.isEmpty && // !controller.isSearchMode) ...[ @@ -356,10 +352,7 @@ class ChatListViewBody extends StatelessWidget { } } -// #Pangea -// class PublicRoomsHorizontalList extends StatelessWidget { -class PublicRoomsHorizontalList extends StatefulWidget { - // Pangea# +class PublicRoomsHorizontalList extends StatelessWidget { const PublicRoomsHorizontalList({ super.key, required this.publicRooms, @@ -367,23 +360,6 @@ class PublicRoomsHorizontalList extends StatefulWidget { final List? publicRooms; - // #Pagngea - @override - PublicRoomsHorizontalListState createState() => - PublicRoomsHorizontalListState(); -} - -class PublicRoomsHorizontalListState extends State { - List? get publicRooms => widget.publicRooms; - final ScrollController _scrollController = ScrollController(); - - @override - void dispose() { - _scrollController.dispose(); - super.dispose(); - } - // Pangea# - @override Widget build(BuildContext context) { final publicRooms = this.publicRooms; @@ -395,46 +371,21 @@ class PublicRoomsHorizontalListState extends State { curve: FluffyThemes.animationCurve, child: publicRooms == null ? null - : - // #Pangea - Scrollbar( - thumbVisibility: true, - controller: _scrollController, - child: - // Pangea# - ListView.builder( - // #Pangea - controller: _scrollController, - // Pangea# - scrollDirection: Axis.horizontal, - itemCount: publicRooms.length, - itemBuilder: (context, i) => _SearchItem( - title: publicRooms[i].name ?? - publicRooms[i].canonicalAlias?.localpart ?? - // #Pangea - // L10n.of(context).group, - L10n.of(context).chat, - // Pangea# - avatar: publicRooms[i].avatarUrl, - // #Pangea - onPressed: () => PublicRoomBottomSheet.show( - context: context, + : ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: publicRooms.length, + itemBuilder: (context, i) => _SearchItem( + title: publicRooms[i].name ?? + publicRooms[i].canonicalAlias?.localpart ?? + L10n.of(context).group, + avatar: publicRooms[i].avatarUrl, + onPressed: () => showAdaptiveDialog( + context: context, + builder: (c) => PublicRoomDialog( roomAlias: publicRooms[i].canonicalAlias ?? publicRooms[i].roomId, chunk: publicRooms[i], ), - // onPressed: () => showAdaptiveDialog( - // context: context, - // builder: (c) => PublicRoomDialog( - // roomAlias: publicRooms[i].canonicalAlias ?? - // publicRooms[i].roomId, - // chunk: publicRooms[i], - // ), - // ), - radius: BorderRadius.circular( - AppConfig.borderRadius / 2, - ), - // Pangea# ), ), ), @@ -446,19 +397,11 @@ class _SearchItem extends StatelessWidget { final String title; final Uri? avatar; final void Function() onPressed; - // #Pangea - final BorderRadius? radius; - final String? userId; - // Pangea# const _SearchItem({ required this.title, this.avatar, required this.onPressed, - // #Pangea - this.radius, - this.userId, - // Pangea# }); @override @@ -473,10 +416,6 @@ class _SearchItem extends StatelessWidget { Avatar( mxContent: avatar, name: title, - // #Pangea - borderRadius: radius, - userId: userId, - // Pangea# ), Padding( padding: const EdgeInsets.all(8.0), @@ -495,50 +434,3 @@ class _SearchItem extends StatelessWidget { ), ); } - -// #Pangea -class UserSearchResultsList extends StatefulWidget { - final SearchUserDirectoryResponse userSearchResult; - const UserSearchResultsList({ - required this.userSearchResult, - super.key, - }); - - @override - UserSearchResultsListState createState() => UserSearchResultsListState(); -} - -class UserSearchResultsListState extends State { - final ScrollController _scrollController = ScrollController(); - - @override - void dispose() { - _scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Scrollbar( - thumbVisibility: true, - controller: _scrollController, - child: ListView.builder( - controller: _scrollController, - scrollDirection: Axis.horizontal, - itemCount: widget.userSearchResult.results.length, - itemBuilder: (context, i) => _SearchItem( - title: widget.userSearchResult.results[i].displayName ?? - widget.userSearchResult.results[i].userId.localpart ?? - L10n.of(context).unknownDevice, - avatar: widget.userSearchResult.results[i].avatarUrl, - userId: widget.userSearchResult.results[i].userId, - onPressed: () => UserDialog.show( - context: context, - profile: widget.userSearchResult.results[i], - ), - ), - ), - ); - } -} -// Pangea# diff --git a/lib/pages/chat_list/navi_rail_item.dart b/lib/pages/chat_list/navi_rail_item.dart index dbc3c29bc..e90dacba6 100644 --- a/lib/pages/chat_list/navi_rail_item.dart +++ b/lib/pages/chat_list/navi_rail_item.dart @@ -17,6 +17,7 @@ class NaviRailItem extends StatelessWidget { // #Pangea final Color? backgroundColor; final BorderRadius? borderRadius; + final bool expanded; // Pangea# const NaviRailItem({ @@ -29,6 +30,7 @@ class NaviRailItem extends StatelessWidget { // #Pangea this.backgroundColor, this.borderRadius, + this.expanded = false, // Pangea# super.key, }); @@ -52,91 +54,121 @@ class NaviRailItem extends StatelessWidget { // #Pangea // return SizedBox( // height: 72, - return SizedBox( - height: width - (isColumnMode ? 16.0 : 12.0), - width: width, - // width: FluffyThemes.navRailWidth, - // Pangea# - child: Stack( - children: [ - Positioned( - top: 8, - bottom: 8, - left: 0, - child: AnimatedContainer( - width: isSelected - ? FluffyThemes.isColumnMode(context) - ? 8 - : 4 - : 0, - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - decoration: BoxDecoration( - color: theme.colorScheme.primary, - borderRadius: const BorderRadius.only( - topRight: Radius.circular(90), - bottomRight: Radius.circular(90), - ), - ), - ), - ), - Center( - child: AnimatedScale( - scale: hovered ? 1.1 : 1.0, - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - // #Pangea - // child: Material( - // borderRadius: borderRadius, - // color: isSelected - // ? theme.colorScheme.primaryContainer - // : theme.colorScheme.surfaceContainerHigh, - child: UnreadRoomsBadge( - filter: unreadBadgeFilter ?? (_) => false, - badgePosition: BadgePosition.topEnd( - top: -4, - end: isColumnMode ? 8 : 4, - ), - child: Container( - alignment: Alignment.center, + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + height: width - (isColumnMode ? 16.0 : 12.0), + width: width, + // width: FluffyThemes.navRailWidth, + // Pangea# + child: Stack( + children: [ + Positioned( + top: 8, + bottom: 8, + left: 0, + child: AnimatedContainer( + width: isSelected + ? FluffyThemes.isColumnMode(context) + ? 8 + : 4 + : 0, + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, decoration: BoxDecoration( - color: backgroundColor ?? - (isSelected - ? theme.colorScheme.primaryContainer - : theme.colorScheme.surfaceContainerHigh), - borderRadius: borderRadius, - ), - margin: EdgeInsets.symmetric( - horizontal: isColumnMode ? 16.0 : 12.0, - vertical: isColumnMode ? 8.0 : 6.0, - ), - // Pangea# - child: Tooltip( - message: toolTip, - child: InkWell( - borderRadius: borderRadius, - onTap: onTap, - // #Pangea - child: icon, - // child: unreadBadgeFilter == null - // ? icon - // : UnreadRoomsBadge( - // filter: unreadBadgeFilter, - // badgePosition: BadgePosition.topEnd( - // top: -12, - // end: -8, - // ), - // child: icon, - // ), - // Pangea# + color: theme.colorScheme.primary, + borderRadius: const BorderRadius.only( + topRight: Radius.circular(90), + bottomRight: Radius.circular(90), ), ), ), ), + Center( + child: AnimatedScale( + scale: hovered ? 1.1 : 1.0, + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + // #Pangea + // child: Material( + // borderRadius: borderRadius, + // color: isSelected + // ? theme.colorScheme.primaryContainer + // : theme.colorScheme.surfaceContainerHigh, + child: UnreadRoomsBadge( + filter: unreadBadgeFilter ?? (_) => false, + badgePosition: BadgePosition.topEnd( + top: 1, + end: isColumnMode ? 8 : 4, + ), + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + color: backgroundColor ?? + (isSelected + ? theme.colorScheme.primaryContainer + : theme.colorScheme.surfaceContainerHigh), + borderRadius: borderRadius, + ), + margin: EdgeInsets.symmetric( + horizontal: isColumnMode ? 16.0 : 12.0, + vertical: isColumnMode ? 8.0 : 6.0, + ), + child: TooltipVisibility( + visible: !expanded, + // Pangea# + child: Tooltip( + message: toolTip, + child: InkWell( + borderRadius: borderRadius, + onTap: onTap, + // #Pangea + child: icon, + // child: unreadBadgeFilter == null + // ? icon + // : UnreadRoomsBadge( + // filter: unreadBadgeFilter, + // badgePosition: BadgePosition.topEnd( + // top: -12, + // end: -8, + // ), + // child: icon, + // ), + // Pangea# + ), + ), + ), + ), + ), + ), + ), + ], + ), + ), + if (expanded) + Flexible( + child: Padding( + padding: const EdgeInsets.only(right: 16.0), + child: ListTile( + title: Text( + toolTip, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: theme.textTheme.bodyMedium, + ), + onTap: onTap, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + contentPadding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 0.0, + ), + ), ), ), - ], - ), + ], ); }, ); diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart index b01f18c3c..64d2000bc 100644 --- a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart +++ b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart @@ -83,6 +83,13 @@ class ChatPermissionsSettingsView extends StatelessWidget { eventsPowerLevels.removeWhere( (key, value) => excludedEvents.contains(key), ); + + final spaceEvents = ['ban', 'invite', 'kick', 'user_default']; + if (room.isSpace) { + powerLevels.removeWhere( + (key, value) => !spaceEvents.contains(key), + ); + } // Pangea# return Column( children: [ @@ -123,44 +130,50 @@ class ChatPermissionsSettingsView extends StatelessWidget { room: room, // Pangea# ), - Divider(color: theme.dividerColor), - ListTile( - title: Text( - L10n.of(context).notifications, - style: TextStyle( - color: theme.colorScheme.primary, - fontWeight: FontWeight.bold, + // #Pangea + if (!room.isSpace) ...[ + // Pangea# + Divider(color: theme.dividerColor), + ListTile( + title: Text( + L10n.of(context).notifications, + style: TextStyle( + color: theme.colorScheme.primary, + fontWeight: FontWeight.bold, + ), ), ), - ), - Builder( - builder: (context) { - const key = 'rooms'; - final value = powerLevelsContent - .containsKey('notifications') - ? powerLevelsContent - .tryGetMap('notifications') - ?.tryGet('rooms') ?? - 0 - : 0; - return PermissionsListTile( - permissionKey: key, - permission: value, - category: 'notifications', - canEdit: room.canChangePowerLevel, - onChanged: (level) => controller.editPowerLevel( - context, - key, - value, - newLevel: level, + Builder( + builder: (context) { + const key = 'rooms'; + final value = + powerLevelsContent.containsKey('notifications') + ? powerLevelsContent + .tryGetMap( + 'notifications', + ) + ?.tryGet('rooms') ?? + 0 + : 0; + return PermissionsListTile( + permissionKey: key, + permission: value, category: 'notifications', - ), - // #Pangea - room: room, - // Pangea# - ); - }, - ), + canEdit: room.canChangePowerLevel, + onChanged: (level) => controller.editPowerLevel( + context, + key, + value, + newLevel: level, + category: 'notifications', + ), + // #Pangea + room: room, + // Pangea# + ); + }, + ), + ], Divider(color: theme.dividerColor), ListTile( title: Text( diff --git a/lib/pages/chat_search/chat_search_message_tab.dart b/lib/pages/chat_search/chat_search_message_tab.dart index e8dcfd067..5896b5943 100644 --- a/lib/pages/chat_search/chat_search_message_tab.dart +++ b/lib/pages/chat_search/chat_search_message_tab.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/url_launcher.dart'; @@ -200,12 +200,20 @@ class _MessageSearchResultListTile extends StatelessWidget { icon: const Icon( Icons.chevron_right_outlined, ), - onPressed: () => context.go( - '/${Uri( - pathSegments: ['rooms', room.id], - queryParameters: {'event': event.eventId}, - )}', + // #Pangea + // onPressed: () => context.go( + // '/${Uri( + // pathSegments: ['rooms', room.id], + // queryParameters: {'event': event.eventId}, + // )}', + // ), + onPressed: () => NavigationUtil.goToSpaceRoute( + room.id, + [], + context, + queryParams: {'event': event.eventId}, ), + // Pangea# ), ); } diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart index 185753e49..98e811692 100644 --- a/lib/pages/login/login.dart +++ b/lib/pages/login/login.dart @@ -2,12 +2,11 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/authentication/p_login.dart'; import 'package:fluffychat/pangea/login/pages/login_options_view.dart'; import 'package:fluffychat/pangea/login/pages/pangea_login_view.dart'; -import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; -import 'package:fluffychat/pangea/user/utils/p_login.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; @@ -43,10 +42,7 @@ class LoginController extends State { // #Pangea bool loadingSignIn = false; - bool loadingAppleSSO = false; - bool loadingGoogleSSO = false; - final PangeaController pangeaController = MatrixState.pangeaController; final GlobalKey formKey = GlobalKey(); Client? client; @@ -61,7 +57,7 @@ class LoginController extends State { // TODO: implement initState super.initState(); loadingSignIn = true; - pangeaController.checkHomeServerAction().then((client) { + checkHomeServerAction().then((client) { if (mounted) { setState(() { loadingSignIn = false; @@ -98,17 +94,6 @@ class LoginController extends State { } } - void setLoadingSSO(bool loading, SSOProvider provider) { - if (provider == SSOProvider.apple) { - loadingAppleSSO = loading; - loadingGoogleSSO = false; - } else if (provider == SSOProvider.google) { - loadingGoogleSSO = loading; - loadingAppleSSO = false; - } - if (mounted) setState(() {}); - } - void login() async => pLoginAction(controller: this, context: context); // void login() async { // final matrix = Matrix.of(context); @@ -234,6 +219,30 @@ class LoginController extends State { // if (mounted) setState(() {}); // } // } + + Future checkHomeServerAction() async { + final client = await Matrix.of(context).getLoginClient(); + if (client.homeserver != null) { + await Future.delayed(Duration.zero); + return client; + } + + final String homeServer = + AppConfig.defaultHomeserver.trim().toLowerCase().replaceAll(' ', '-'); + var homeserver = Uri.parse(homeServer); + if (homeserver.scheme.isEmpty) { + homeserver = Uri.https(homeServer, ''); + } + + try { + await client.register(); + Matrix.of(context).loginRegistrationSupported = true; + } on MatrixException catch (e) { + Matrix.of(context).loginRegistrationSupported = + e.requireAdditionalAuthentication; + } + return client; + } // Pangea# void passwordForgotten() async { diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart index d2dace989..b30d78046 100644 --- a/lib/pages/new_group/new_group.dart +++ b/lib/pages/new_group/new_group.dart @@ -13,7 +13,7 @@ import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/extensions/join_rule_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/spaces/utils/client_spaces_extension.dart'; +import 'package:fluffychat/pangea/spaces/client_spaces_extension.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/widgets/matrix.dart'; diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index cc58dab88..2928126f6 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -5,7 +5,7 @@ import 'package:image_picker/image_picker.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/user/utils/p_logout.dart'; +import 'package:fluffychat/pangea/authentication/p_logout.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; diff --git a/lib/pages/settings_security/settings_security.dart b/lib/pages/settings_security/settings_security.dart index b8aa2584f..e55d4c3c2 100644 --- a/lib/pages/settings_security/settings_security.dart +++ b/lib/pages/settings_security/settings_security.dart @@ -102,30 +102,47 @@ class SettingsSecurityController extends State { if (mxid == null || mxid.isEmpty || mxid != supposedMxid) { return; } - final input = await showTextInputDialog( - useRootNavigator: false, + // #Pangea + // final input = await showTextInputDialog( + // useRootNavigator: false, + // context: context, + // title: L10n.of(context).pleaseEnterYourPassword, + // okLabel: L10n.of(context).ok, + // cancelLabel: L10n.of(context).cancel, + // isDestructive: true, + // obscureText: true, + // hintText: '******', + // minLines: 1, + // maxLines: 1, + // ); + // if (input == null) return; + // await showFutureLoadingDialog( + // context: context, + // future: () => Matrix.of(context).client.deactivateAccount( + // auth: AuthenticationPassword( + // password: input, + // identifier: AuthenticationUserIdentifier( + // user: Matrix.of(context).client.userID!, + // ), + // ), + // ), + // ); + // Pangea# + + final resp = await showFutureLoadingDialog( context: context, - title: L10n.of(context).pleaseEnterYourPassword, - okLabel: L10n.of(context).ok, - cancelLabel: L10n.of(context).cancel, - isDestructive: true, - obscureText: true, - hintText: '******', - minLines: 1, - maxLines: 1, - ); - if (input == null) return; - await showFutureLoadingDialog( - context: context, - future: () => Matrix.of(context).client.deactivateAccount( - auth: AuthenticationPassword( - password: input, - identifier: AuthenticationUserIdentifier( - user: Matrix.of(context).client.userID!, + delay: false, + future: () => + Matrix.of(context).client.uiaRequestBackground( + (auth) => Matrix.of(context).client.deactivateAccount( + auth: auth, + ), ), - ), - ), ); + + if (!resp.isError) { + await Matrix.of(context).client.logout(); + } } void showBootstrapDialog(BuildContext context) async { diff --git a/lib/pangea/activity_generator/activity_generator.dart b/lib/pangea/activity_generator/activity_generator.dart index 4e1e237d9..6073211ff 100644 --- a/lib/pangea/activity_generator/activity_generator.dart +++ b/lib/pangea/activity_generator/activity_generator.dart @@ -59,9 +59,9 @@ // super.initState(); // selectedLanguageOfInstructions = -// MatrixState.pangeaController.languageController.userL1?.langCode; +// MatrixState.pangeaController.userController.userL1?.langCode; // selectedTargetLanguage = -// MatrixState.pangeaController.languageController.userL2?.langCode; +// MatrixState.pangeaController.userController.userL2?.langCode; // selectedCefrLevel = LanguageLevelTypeEnum.a1; // selectedNumberOfParticipants = 3; // _setMode(); @@ -79,7 +79,7 @@ // ActivitySettingRequestSchema get req => ActivitySettingRequestSchema( // langCode: -// MatrixState.pangeaController.languageController.userL1?.langCode ?? +// MatrixState.pangeaController.userController.userL1?.langCode ?? // LanguageKeys.defaultLanguage, // ); @@ -139,9 +139,9 @@ // modeController.clear(); // selectedMedia = MediaEnum.nan; // selectedLanguageOfInstructions = -// MatrixState.pangeaController.languageController.userL1?.langCode; +// MatrixState.pangeaController.userController.userL1?.langCode; // selectedTargetLanguage = -// MatrixState.pangeaController.languageController.userL2?.langCode; +// MatrixState.pangeaController.userController.userL2?.langCode; // selectedCefrLevel = LanguageLevelTypeEnum.a1; // selectedNumberOfParticipants = 3; // }); diff --git a/lib/pangea/activity_generator/activity_generator_view.dart b/lib/pangea/activity_generator/activity_generator_view.dart index 218c1c03b..b10b2101d 100644 --- a/lib/pangea/activity_generator/activity_generator_view.dart +++ b/lib/pangea/activity_generator/activity_generator_view.dart @@ -158,7 +158,7 @@ // controller.selectedLanguageOfInstructions!, // ) // : MatrixState -// .pangeaController.languageController.userL1, +// .pangeaController.userController.userL1, // isL2List: false, // decorationText: // L10n.of(context).languageOfInstructionsLabel, @@ -174,7 +174,7 @@ // controller.selectedTargetLanguage!, // ) // : MatrixState -// .pangeaController.languageController.userL2, +// .pangeaController.userController.userL2, // decorationText: L10n.of(context).targetLanguageLabel, // isL2List: true, // ), diff --git a/lib/pangea/activity_planner/activity_plan_model.dart b/lib/pangea/activity_planner/activity_plan_model.dart index 1869be642..7b72b877e 100644 --- a/lib/pangea/activity_planner/activity_plan_model.dart +++ b/lib/pangea/activity_planner/activity_plan_model.dart @@ -1,8 +1,12 @@ import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; import 'package:fluffychat/pangea/activity_planner/activity_plan_request.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/lemmas/lemma.dart'; class ActivityPlanModel { final String activityId; @@ -80,7 +84,7 @@ class ActivityPlanModel { instructions: json[ModelKey.activityPlanInstructions], req: req, title: json[ModelKey.activityPlanTitle], - description: json[ModelKey.activityPlanDescription] ?? + description: json[ModelKey.description] ?? json[ModelKey.activityPlanLearningObjective], learningObjective: json[ModelKey.activityPlanLearningObjective], vocab: List.from( @@ -89,11 +93,11 @@ class ActivityPlanModel { endAt: json[ModelKey.activityPlanEndAt] != null ? DateTime.parse(json[ModelKey.activityPlanEndAt]) : null, - duration: json[ModelKey.activityPlanDuration] != null + duration: json[ModelKey.duration] != null ? Duration( - days: json[ModelKey.activityPlanDuration]['days'] ?? 0, - hours: json[ModelKey.activityPlanDuration]['hours'] ?? 0, - minutes: json[ModelKey.activityPlanDuration]['minutes'] ?? 0, + days: json[ModelKey.duration]['days'] ?? 0, + hours: json[ModelKey.duration]['hours'] ?? 0, + minutes: json[ModelKey.duration]['minutes'] ?? 0, ) : null, roles: roles, @@ -109,11 +113,11 @@ class ActivityPlanModel { ModelKey.activityPlanInstructions: instructions, ModelKey.activityPlanRequest: req.toJson(), ModelKey.activityPlanTitle: title, - ModelKey.activityPlanDescription: description, + ModelKey.description: description, ModelKey.activityPlanLearningObjective: learningObjective, ModelKey.activityPlanVocab: vocab.map((vocab) => vocab.toJson()).toList(), ModelKey.activityPlanEndAt: endAt?.toIso8601String(), - ModelKey.activityPlanDuration: { + ModelKey.duration: { 'days': duration?.inDays ?? 0, 'hours': duration?.inHours.remainder(24) ?? 0, 'minutes': duration?.inMinutes.remainder(60) ?? 0, @@ -177,14 +181,29 @@ class Vocab { factory Vocab.fromJson(Map json) { return Vocab( - lemma: json['lemma'], + lemma: json[ModelKey.lemma], pos: json['pos'], ); } + PangeaToken asToken() { + final text = PangeaTokenText( + content: lemma, + length: lemma.characters.length, + offset: 0, + ); + + return PangeaToken( + text: text, + lemma: Lemma(text: lemma, saveVocab: true, form: lemma), + pos: pos, + morph: {}, + ); + } + Map toJson() { return { - 'lemma': lemma, + ModelKey.lemma: lemma, 'pos': pos, }; } diff --git a/lib/pangea/activity_planner/activity_plan_request.dart b/lib/pangea/activity_planner/activity_plan_request.dart index d75772745..3e5672817 100644 --- a/lib/pangea/activity_planner/activity_plan_request.dart +++ b/lib/pangea/activity_planner/activity_plan_request.dart @@ -1,6 +1,6 @@ import 'package:fluffychat/pangea/activity_generator/media_enum.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; class ActivityPlanRequest { final String topic; @@ -30,12 +30,12 @@ class ActivityPlanRequest { Map toJson() { return { ModelKey.activityRequestTopic: topic, - ModelKey.activityRequestMode: mode, + ModelKey.mode: mode, ModelKey.activityRequestObjective: objective, ModelKey.activityRequestMedia: media.string, ModelKey.activityRequestCefrLevel: cefrLevel.string, ModelKey.activityRequestLanguageOfInstructions: languageOfInstructions, - ModelKey.activityRequestTargetLanguage: targetLanguage, + ModelKey.targetLanguage: targetLanguage, ModelKey.activityRequestCount: count, ModelKey.activityRequestNumberOfParticipants: numberOfParticipants, ModelKey.activityPlanLocation: location, @@ -45,17 +45,17 @@ class ActivityPlanRequest { factory ActivityPlanRequest.fromJson(Map json) => ActivityPlanRequest( topic: json[ModelKey.activityRequestTopic], - mode: json[ModelKey.activityRequestMode], + mode: json[ModelKey.mode], objective: json[ModelKey.activityRequestObjective], media: MediaEnum.nan.fromString(json[ModelKey.activityRequestMedia]), cefrLevel: json[ModelKey.activityRequestCefrLevel] != null - ? LanguageLevelTypeEnumExtension.fromString( + ? LanguageLevelTypeEnum.fromString( json[ModelKey.activityRequestCefrLevel], ) : LanguageLevelTypeEnum.a1, languageOfInstructions: json[ModelKey.activityRequestLanguageOfInstructions], - targetLanguage: json[ModelKey.activityRequestTargetLanguage], + targetLanguage: json[ModelKey.targetLanguage], count: json[ModelKey.activityRequestCount], numberOfParticipants: json[ModelKey.activityRequestNumberOfParticipants], diff --git a/lib/pangea/activity_sessions/activity_participant_indicator.dart b/lib/pangea/activity_sessions/activity_participant_indicator.dart index aaf54bb59..0f85ff327 100644 --- a/lib/pangea/activity_sessions/activity_participant_indicator.dart +++ b/lib/pangea/activity_sessions/activity_participant_indicator.dart @@ -2,8 +2,12 @@ import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:matrix/matrix.dart'; +import 'package:shimmer/shimmer.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_settings_language_icon.dart'; import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; @@ -13,10 +17,12 @@ class ActivityParticipantIndicator extends StatelessWidget { final String name; final String? userId; final User? user; + final Room? room; final VoidCallback? onTap; final bool selected; final bool selectable; + final bool shimmer; final double opacity; final EdgeInsetsGeometry? padding; @@ -26,9 +32,11 @@ class ActivityParticipantIndicator extends StatelessWidget { super.key, required this.name, this.user, + this.room, this.userId, this.selected = false, this.selectable = true, + this.shimmer = false, this.onTap, this.opacity = 1.0, this.padding, @@ -46,12 +54,48 @@ class ActivityParticipantIndicator extends StatelessWidget { ? () => showMemberActionsPopupMenu( context: context, user: user!, + room: room, ) : null), child: AbsorbPointer( absorbing: !selectable, child: HoverBuilder( builder: (context, hovered) { + final avatar = userId != null + ? user?.avatarUrl == null || + user!.avatarUrl!.toString().startsWith("mxc") + ? Avatar( + mxContent: + user?.avatarUrl != null ? user!.avatarUrl! : null, + name: userId!.localpart, + size: 60.0, + userId: userId, + miniIcon: + room != null && userId == BotName.byEnvironment + ? BotSettingsLanguageIcon(room: room!) + : null, + presenceOffset: + room != null && userId == BotName.byEnvironment + ? const Offset(0, 0) + : null, + ) + : ClipRRect( + borderRadius: BorderRadius.circular(30), + child: CachedNetworkImage( + imageUrl: user!.avatarUrl!.toString(), + width: 60.0, + height: 60.0, + fit: BoxFit.cover, + ), + ) + : CircleAvatar( + radius: 30.0, + backgroundColor: theme.colorScheme.primaryContainer, + child: const Icon( + Icons.question_mark, + size: 30.0, + ), + ); return Opacity( opacity: opacity, child: Container( @@ -64,41 +108,20 @@ class ActivityParticipantIndicator extends StatelessWidget { borderRadius: borderRadius ?? BorderRadius.circular(8.0), color: (hovered || selected) && selectable ? theme.colorScheme.surfaceContainerHighest - : Colors.transparent, + : theme.colorScheme.surface.withAlpha(130), ), - constraints: const BoxConstraints(maxWidth: 200.0), + height: 125.0, + constraints: const BoxConstraints(maxWidth: 100.0), child: Column( - mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - userId != null - ? user?.avatarUrl == null || - user!.avatarUrl!.toString().startsWith("mxc") - ? Avatar( - mxContent: user?.avatarUrl != null - ? user!.avatarUrl! - : null, - name: userId!.localpart, - size: 60.0, - userId: userId, - ) - : ClipRRect( - borderRadius: BorderRadius.circular(30), - child: CachedNetworkImage( - imageUrl: user!.avatarUrl!.toString(), - width: 60.0, - height: 60.0, - fit: BoxFit.cover, - ), - ) - : CircleAvatar( - radius: 30.0, - backgroundColor: - theme.colorScheme.primaryContainer, - child: const Icon( - Icons.question_mark, - size: 30.0, - ), - ), + shimmer && !selected + ? Shimmer.fromColors( + baseColor: AppConfig.gold.withAlpha(20), + highlightColor: AppConfig.gold.withAlpha(50), + child: avatar, + ) + : avatar, Text( name, style: const TextStyle( diff --git a/lib/pangea/activity_sessions/activity_participant_list.dart b/lib/pangea/activity_sessions/activity_participant_list.dart index 9cfb004ca..ecc3f7a7f 100644 --- a/lib/pangea/activity_sessions/activity_participant_list.dart +++ b/lib/pangea/activity_sessions/activity_participant_list.dart @@ -6,7 +6,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_participant_indicator.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; -import 'package:fluffychat/pangea/spaces/utils/load_participants_util.dart'; +import 'package:fluffychat/pangea/spaces/load_participants_builder.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart'; @@ -20,17 +20,19 @@ class ActivityParticipantList extends StatelessWidget { final bool Function(String)? canSelect; final bool Function(String)? isSelected; + final bool Function(String)? isShimmering; final double Function(ActivityRoleModel?)? getOpacity; const ActivityParticipantList({ super.key, required this.activity, required this.assignedRoles, - required this.room, + this.room, this.course, this.onTap, this.canSelect, this.isSelected, + this.isShimmering, this.getOpacity, }); @@ -77,6 +79,10 @@ class ActivityParticipantList extends StatelessWidget { final selectable = canSelect != null ? canSelect!(availableRole.id) : true; + final shimmering = isShimmering != null + ? isShimmering!(availableRole.id) + : false; + return ActivityParticipantIndicator( name: availableRole.name, userId: assignedRole?.userId, @@ -87,6 +93,8 @@ class ActivityParticipantList extends StatelessWidget { : null, selected: selected, selectable: selectable, + shimmer: shimmering, + room: room, ); }).toList(), ), @@ -99,6 +107,7 @@ class ActivityParticipantList extends StatelessWidget { onTap: () => showMemberActionsPopupMenu( context: context, user: member, + room: room, ), child: Container( decoration: BoxDecoration( diff --git a/lib/pangea/activity_sessions/activity_room_extension.dart b/lib/pangea/activity_sessions/activity_room_extension.dart index df5bc9fef..19bd114b9 100644 --- a/lib/pangea/activity_sessions/activity_room_extension.dart +++ b/lib/pangea/activity_sessions/activity_room_extension.dart @@ -8,11 +8,9 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_roles_model.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_session_analytics_repo.dart'; import 'package:fluffychat/pangea/activity_summary/activity_summary_analytics_model.dart'; import 'package:fluffychat/pangea/activity_summary/activity_summary_model.dart'; import 'package:fluffychat/pangea/activity_summary/activity_summary_request_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; @@ -22,7 +20,6 @@ import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extensio import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/widgets/matrix.dart'; import '../activity_summary/activity_summary_repo.dart'; class RoleException implements Exception { @@ -275,7 +272,6 @@ extension ActivityRoomExtension on Room { activity: activityPlan!, activityResults: messages, contentFeedback: [], - analytics: analytics, roleState: activityRoles, ), ); @@ -312,48 +308,6 @@ extension ActivityRoomExtension on Room { } } - Future getActivityAnalytics() async { - // wait for local storage box to init in getAnalytics initialization - if (!MatrixState.pangeaController.getAnalytics.initCompleter.isCompleted) { - await MatrixState.pangeaController.getAnalytics.initCompleter.future; - } - - final cached = ActivitySessionAnalyticsRepo.get(id); - final analytics = cached?.analytics ?? ActivitySummaryAnalyticsModel(); - - DateTime? timestamp = creationTimestamp; - if (cached != null) { - timestamp = cached.lastUseTimestamp; - } - - final List uses = []; - - for (final use - in MatrixState.pangeaController.getAnalytics.constructListModel.uses) { - final useTimestamp = use.metadata.timeStamp; - if (timestamp != null && - (useTimestamp == timestamp || useTimestamp.isBefore(timestamp))) { - break; - } - - if (use.metadata.roomId != id) continue; - uses.add(use); - } - - if (uses.isEmpty) { - return analytics; - } - - analytics.addConstructs(client.userID!, uses); - await ActivitySessionAnalyticsRepo.set( - id, - uses.first.metadata.timeStamp, - analytics, - ); - - return analytics; - } - // UI-related helper functions bool get showActivityChatUI { diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_chat_controller.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_chat_controller.dart new file mode 100644 index 000000000..d5a38e17b --- /dev/null +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_chat_controller.dart @@ -0,0 +1,131 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_analytics_repo.dart'; +import 'package:fluffychat/pangea/activity_summary/activity_summary_analytics_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class ActivityChatController { + final String userID; + final Room room; + + ActivityChatController({ + required this.userID, + required this.room, + }) { + init(); + } + + StreamSubscription? _analyticsSubscription; + bool _disposed = false; + + final ScrollController carouselController = ScrollController(); + final ValueNotifier> usedVocab = ValueNotifier({}); + final ValueNotifier highlightedRole = ValueNotifier(null); + final ValueNotifier showInstructions = ValueNotifier(false); + final ValueNotifier showActivityDropdown = ValueNotifier(false); + final ValueNotifier hasRainedConfetti = ValueNotifier(false); + + void init() { + _updateUsedVocab(); + _analyticsSubscription = MatrixState.pangeaController.matrixState + .analyticsDataService.updateDispatcher.constructUpdateStream.stream + .listen((_) => _updateUsedVocab()); + } + + void dispose() { + _disposed = true; + carouselController.dispose(); + _analyticsSubscription?.cancel(); + usedVocab.dispose(); + highlightedRole.dispose(); + showInstructions.dispose(); + showActivityDropdown.dispose(); + hasRainedConfetti.dispose(); + } + + void highlightRole(ActivityRoleModel role) { + if (!_disposed) { + highlightedRole.value = role; + } + } + + void toggleShowInstructions() { + if (!_disposed) { + showInstructions.value = !showInstructions.value; + } + } + + void toggleShowDropdown() { + if (!_disposed) { + showActivityDropdown.value = !showActivityDropdown.value; + } + } + + void setHasRainedConfetti(bool show) { + if (!_disposed) { + hasRainedConfetti.value = show; + } + } + + Future _updateUsedVocab() async { + try { + final analytics = await getActivityAnalytics(); + if (!_disposed) { + usedVocab.value = analytics.constructs[userID] + ?.constructsOfType(ConstructTypeEnum.vocab) + .map((id) => id.lemma.toLowerCase()) + .toSet() ?? + {}; + } + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + "message": "Failed to update used vocab in ActivityChatController", + }, + ); + } + } + + Future getActivityAnalytics() async { + final cached = ActivitySessionAnalyticsRepo.get(room.id); + final analytics = cached?.analytics ?? ActivitySummaryAnalyticsModel(); + + DateTime? timestamp = room.creationTimestamp; + if (cached != null) { + timestamp = cached.lastUseTimestamp; + } + + List uses = []; + final analyticsService = + MatrixState.pangeaController.matrixState.analyticsDataService; + + uses = await analyticsService.getUses( + since: timestamp ?? DateTime.fromMillisecondsSinceEpoch(0), + roomId: room.id, + ); + + if (uses.isEmpty) { + return analytics; + } + + analytics.addConstructs(userID, uses); + await ActivitySessionAnalyticsRepo.set( + room.id, + uses.first.metadata.timeStamp, + analytics, + ); + + return analytics; + } +} diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart new file mode 100644 index 000000000..b1f6ccb8c --- /dev/null +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart @@ -0,0 +1,56 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/language_mismatch_repo.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +extension ActivityMenuLogic on ChatController { + bool get shouldShowActivityInstructions { + if (AppConfig.showedActivityMenu || + InstructionsEnum.activityStatsMenu.isToggledOff || + MatrixState.pAnyState.isOverlayOpen(RegExp(r"^word-zoom-card-.*$")) || + timeline == null) { + return false; + } + + final userID = Matrix.of(context).client.userID!; + final activityRoles = room.activityRoles?.roles.values ?? []; + final finishedRoles = activityRoles.where((r) => r.isFinished); + + if (finishedRoles.isNotEmpty) { + return !finishedRoles.any((r) => r.userId == userID); + } + + final count = timeline!.events + .where( + (event) => + event.senderId == userID && + event.type == EventTypes.Message && + {MessageTypes.Text, MessageTypes.Audio} + .contains(event.messageType), + ) + .length; + + return count >= 3; + } + + bool get shouldShowLanguageMismatchPopupByActivity { + if (!LanguageMismatchRepo.shouldShowByRoom(roomId)) { + return false; + } + + final l1 = + MatrixState.pangeaController.userController.userL1?.langCodeShort; + final l2 = + MatrixState.pangeaController.userController.userL2?.langCodeShort; + final activityLang = room.activityPlan?.req.targetLanguage.split('-').first; + + return activityLang != null && + l2 != null && + l2 != activityLang && + l1 != activityLang; + } +} diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_finished_status_message.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_finished_status_message.dart index 2f1ceed70..cd2159910 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_finished_status_message.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_finished_status_message.dart @@ -6,7 +6,6 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/saved_activity_analytics_dialog.dart'; import 'package:fluffychat/pangea/activity_summary/activity_summary_model.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -21,32 +20,23 @@ class ActivityFinishedStatusMessage extends StatelessWidget { }); Future _onArchive(BuildContext context) async { - { - final resp = await showFutureLoadingDialog( - context: context, - future: () => _archiveToAnalytics(context), + final resp = await showFutureLoadingDialog( + context: context, + future: () => _archiveToAnalytics(context), + ); + + if (!resp.isError) { + context.go( + "/rooms/spaces/${controller.room.courseParent!.id}/details?tab=course", ); - - if (!resp.isError) { - final navigate = await showDialog( - context: context, - builder: (context) { - return const SavedActivityAnalyticsDialog(); - }, - ); - - if (navigate == true && controller.room.courseParent != null) { - context.push( - "/rooms/spaces/${controller.room.courseParent!.id}/details?tab=course", - ); - } - } } } Future _archiveToAnalytics(BuildContext context) async { await controller.room.archiveActivity(); - await MatrixState.pangeaController.putAnalytics + await Matrix.of(context) + .analyticsDataService + .updateService .sendActivityAnalytics(controller.room.id); } @@ -64,136 +54,216 @@ class ActivityFinishedStatusMessage extends StatelessWidget { final theme = Theme.of(context); final isSubscribed = - MatrixState.pangeaController.subscriptionController.isSubscribed; + MatrixState.pangeaController.subscriptionController.isSubscribed != + false; - return AnimatedSize( - duration: FluffyThemes.animationDuration, - child: Container( - padding: const EdgeInsets.all(12.0), - decoration: BoxDecoration( - color: theme.colorScheme.surface, - border: Border( - top: BorderSide(color: theme.dividerColor), - ), + return Container( + padding: const EdgeInsets.all(12.0), + decoration: BoxDecoration( + color: theme.colorScheme.surface, + border: Border( + top: BorderSide(color: theme.dividerColor), ), - child: Center( - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 400, - ), - child: Column( - spacing: 12.0, - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.center, - children: controller.room.isActivityFinished - ? [ - if (summary?.isLoading ?? false) ...[ - Text( - L10n.of(context).generatingSummary, - style: const TextStyle( - fontStyle: FontStyle.italic, - ), - ), - const SizedBox( - height: 36.0, - width: 36.0, - child: CircularProgressIndicator(), - ), - ] else if (isSubscribed == false) - ErrorIndicator( - message: L10n.of(context) - .subscribeToUnlockActivitySummaries, - onTap: () { - MatrixState.pangeaController.subscriptionController - .showPaywall(context); - }, - ) - else if (summary?.hasError ?? false) ...[ - Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon( - Icons.school_outlined, - size: 24.0, - ), - const SizedBox(width: 8), - Flexible( - child: Text( - L10n.of(context).activitySummaryError, - textAlign: TextAlign.center, - ), - ), - ], - ), - TextButton( - onPressed: () => controller.room.fetchSummaries(), - child: Text(L10n.of(context).requestSummaries), - ), - ], - if (!controller.room.hasArchivedActivity) - ElevatedButton( - style: ElevatedButton.styleFrom( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 8.0, - ), - foregroundColor: - theme.colorScheme.onPrimaryContainer, - backgroundColor: theme.colorScheme.primaryContainer, - ), - onPressed: - _enableArchive ? () => _onArchive(context) : null, - child: Row( - spacing: 12.0, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon(Icons.radar, size: 20.0), - Text( - L10n.of(context).saveToCompletedActivities, - style: const TextStyle(fontSize: 12.0), - ), - ], - ), - ), - ] - : [ - Text( - L10n.of(context).waitingForOthersToFinish, - style: const TextStyle( - fontSize: 12, - fontStyle: FontStyle.italic, - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 8.0, - ), - foregroundColor: theme.colorScheme.onSurface, - backgroundColor: theme.colorScheme.surface, - side: BorderSide( - color: theme.colorScheme.primaryContainer, - ), - ), - onPressed: controller.room.continueActivity, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - L10n.of(context).waitNotDone, - style: const TextStyle( - fontSize: 12, - ), - ), - ], - ), - ), - ], - ), + ), + child: Center( + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 400), + child: Column( + spacing: 12.0, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + AnimatedSize( + duration: FluffyThemes.animationDuration, + alignment: Alignment.topCenter, + child: _SummarySection( + controller: controller, + isSubscribed: isSubscribed, + ), + ), + if (controller.room.isActivityFinished && + !controller.room.hasArchivedActivity) + _ArchiveSection( + enabled: _enableArchive, + onArchive: () => _onArchive(context), + ), + if (!controller.room.isActivityFinished) + _WaitSection( + onContinue: controller.room.continueActivity, + ), + ], ), ), ), ); } } + +class _SummarySection extends StatelessWidget { + final ChatController controller; + final bool isSubscribed; + + const _SummarySection({ + required this.controller, + required this.isSubscribed, + }); + + ActivitySummaryModel? get summary => controller.room.activitySummary; + + @override + Widget build(BuildContext context) { + if (!controller.room.isActivityFinished) { + return const SizedBox.shrink(); + } + + if (summary?.summary != null) { + return const SizedBox.shrink(); + } + + if (summary?.isLoading ?? false) { + return Column( + spacing: 12, + children: [ + Text( + L10n.of(context).generatingSummary, + style: const TextStyle(fontStyle: FontStyle.italic), + textAlign: TextAlign.center, + ), + const SizedBox( + height: 36, + width: 36, + child: CircularProgressIndicator(), + ), + ], + ); + } + + if (!isSubscribed) { + return ErrorIndicator( + message: L10n.of(context).subscribeToUnlockActivitySummaries, + onTap: () { + MatrixState.pangeaController.subscriptionController + .showPaywall(context); + }, + ); + } + + if (summary?.hasError ?? false) { + return Column( + spacing: 8, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.school_outlined, size: 24), + const SizedBox(width: 8), + Flexible( + child: Text( + L10n.of(context).activitySummaryError, + textAlign: TextAlign.center, + ), + ), + ], + ), + TextButton( + onPressed: controller.room.fetchSummaries, + child: Text(L10n.of(context).requestSummaries), + ), + ], + ); + } + + return const SizedBox.shrink(); + } +} + +class _ArchiveSection extends StatelessWidget { + final bool enabled; + final VoidCallback onArchive; + + const _ArchiveSection({ + required this.enabled, + required this.onArchive, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Column( + spacing: 12, + children: [ + Text( + L10n.of(context).saveActivityDesc, + style: const TextStyle(fontStyle: FontStyle.italic), + textAlign: TextAlign.center, + ), + ElevatedButton( + onPressed: enabled ? onArchive : null, + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 8, + ), + foregroundColor: theme.colorScheme.onPrimaryContainer, + backgroundColor: theme.colorScheme.primaryContainer, + ), + child: Row( + spacing: 12, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.radar, size: 20), + Text( + L10n.of(context).saveActivityTitle, + style: const TextStyle(fontSize: 12), + ), + ], + ), + ), + ], + ); + } +} + +class _WaitSection extends StatelessWidget { + final VoidCallback onContinue; + + const _WaitSection({required this.onContinue}); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return Column( + spacing: 12, + children: [ + Text( + L10n.of(context).waitingForOthersToFinish, + style: const TextStyle( + fontSize: 12, + fontStyle: FontStyle.italic, + ), + textAlign: TextAlign.center, + ), + ElevatedButton( + onPressed: onContinue, + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 8, + ), + foregroundColor: theme.colorScheme.onSurface, + backgroundColor: theme.colorScheme.surface, + side: BorderSide( + color: theme.colorScheme.primaryContainer, + ), + ), + child: Text( + L10n.of(context).waitNotDone, + style: const TextStyle(fontSize: 12), + ), + ), + ], + ); + } +} diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_menu_button.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_menu_button.dart new file mode 100644 index 000000000..ffb7cb9af --- /dev/null +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_menu_button.dart @@ -0,0 +1,117 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:shimmer/shimmer.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/common/widgets/tutorial_overlay_message.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class ActivityMenuButton extends StatefulWidget { + final ChatController controller; + + const ActivityMenuButton({ + super.key, + required this.controller, + }); + + @override + State createState() => _ActivityMenuButtonState(); +} + +class _ActivityMenuButtonState extends State { + bool _showShimmer = false; + StreamSubscription? _rolesSubscription; + StreamSubscription? _analyticsSubscription; + + @override + void initState() { + super.initState(); + + _analyticsSubscription = Matrix.of(context) + .analyticsDataService + .updateDispatcher + .constructUpdateStream + .stream + .listen(_showStatsMenuDropdownInstructions); + + _rolesSubscription = widget.controller.room.client.onRoomState.stream + .where( + (u) => + u.roomId == widget.controller.room.id && + u.state.type == PangeaEventTypes.activityRole, + ) + .listen(_showStatsMenuDropdownInstructions); + } + + @override + void dispose() { + _analyticsSubscription?.cancel(); + _rolesSubscription?.cancel(); + super.dispose(); + } + + /// Show a tutorial overlay that blocks the screen and points + /// to the stats menu button with an explanation of what it does. + void _showStatsMenuDropdownInstructions(_) { + if (!mounted) return; + if (!widget.controller.shouldShowActivityInstructions) { + return; + } + + final renderObject = context.findRenderObject() as RenderBox; + final offset = renderObject.localToGlobal(Offset.zero); + final cellRect = Rect.fromLTWH( + offset.dx, + offset.dy, + renderObject.size.width, + renderObject.size.height, + ); + + FocusScope.of(context).unfocus(); + OverlayUtil.showTutorialOverlay( + context, + overlayContent: TutorialOverlayMessage( + L10n.of(context).activityStatsButtonInstruction, + ), + overlayKey: "activity_stats_menu_instruction", + anchorRect: cellRect, + borderRadius: 12.0, + padding: 8.0, + onClick: () { + setState(() => _showShimmer = false); + InstructionsEnum.activityStatsMenu.setToggledOff(true); + widget.controller.toggleShowDropdown(); + }, + ); + + setState(() => _showShimmer = true); + } + + @override + Widget build(BuildContext context) { + final content = IconButton( + icon: const Icon(Icons.radar_outlined), + tooltip: L10n.of(context).activityStatsButtonTooltip, + onPressed: widget.controller.toggleShowDropdown, + ); + return AnimatedSwitcher( + duration: const Duration(milliseconds: 300), + child: _showShimmer + ? Shimmer.fromColors( + enabled: _showShimmer, + baseColor: Theme.of(context).iconTheme.color!, + highlightColor: AppConfig.gold, + child: content, + ) + : content, + ); + } +} diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_role_tooltip.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_role_tooltip.dart index 33a5844bf..18e1819f2 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_role_tooltip.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_role_tooltip.dart @@ -1,69 +1,43 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -class ActivityRoleTooltip extends StatefulWidget { - final Choreographer choreographer; +class ActivityRoleTooltip extends StatelessWidget { + final Room room; + final ValueNotifier hide; const ActivityRoleTooltip({ - required this.choreographer, + required this.room, + required this.hide, super.key, }); - @override - State createState() => ActivityRoleTooltipState(); -} - -class ActivityRoleTooltipState extends State { - Room get room => widget.choreographer.chatController.room; - StreamSubscription? _choreoSub; - - @override - void initState() { - super.initState(); - _choreoSub = widget.choreographer.stateStream.stream.listen((event) { - if (mounted) setState(() {}); - }); - } - - @override - void dispose() { - _choreoSub?.cancel(); - super.dispose(); - } - @override Widget build(BuildContext context) { - if (!room.showActivityChatUI || - room.ownRole?.goal == null || - widget.choreographer.itController.willOpen) { - return const SizedBox(); - } + return ValueListenableBuilder( + valueListenable: hide, + builder: (context, hide, _) { + if (!room.showActivityChatUI || room.ownRole?.goal == null || hide) { + return const SizedBox(); + } - return Container( - decoration: BoxDecoration( - border: Border( - top: BorderSide( - color: Theme.of(context).colorScheme.outline, - width: 0.1, + return InlineTooltip( + message: room.ownRole!.goal!, + isClosed: room.hasDismissedGoalTooltip, + onClose: () async { + await room.dismissGoalTooltip(); + }, + padding: EdgeInsets.only( + left: 16.0, + right: 16.0, + top: FluffyThemes.isColumnMode(context) ? 16.0 : 8.0, ), - ), - ), - child: InlineTooltip( - message: room.ownRole!.goal!, - isClosed: room.hasDismissedGoalTooltip, - onClose: () async { - await room.dismissGoalTooltip(); - if (mounted) setState(() {}); - }, - padding: const EdgeInsets.all(16.0), - ), + ); + }, ); } } diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_roles_event_widget.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_roles_event_widget.dart index 5d7fde685..a6e3f3fd9 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_roles_event_widget.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_roles_event_widget.dart @@ -56,28 +56,25 @@ class ActivityRolesEvent extends StatelessWidget { } return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), + padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 4.0), child: Center( - child: Padding( - padding: const EdgeInsets.all(4), - child: Material( - color: theme.colorScheme.surface.withAlpha(128), - borderRadius: BorderRadius.circular(AppConfig.borderRadius / 3), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - vertical: 4.0, - ), - child: Text( - "${role.stateEventMessage(displayName, L10n.of(context))}", - textAlign: TextAlign.center, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 12 * AppConfig.fontSizeFactor, - decoration: - event.redacted ? TextDecoration.lineThrough : null, - ), + child: Material( + color: theme.colorScheme.surface.withAlpha(128), + borderRadius: BorderRadius.circular(AppConfig.borderRadius / 3), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 4.0, + ), + child: Text( + "${role.stateEventMessage(displayName, L10n.of(context))}", + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12 * AppConfig.fontSizeFactor, + decoration: + event.redacted ? TextDecoration.lineThrough : null, ), ), ), diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart new file mode 100644 index 000000000..b28b6813a --- /dev/null +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_session_popup_menu.dart @@ -0,0 +1,79 @@ +import 'package:flutter/material.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat_details/chat_download_provider.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; + +enum ActivityPopupMenuActions { invite, leave, download } + +class ActivitySessionPopupMenu extends StatefulWidget { + final Room room; + final VoidCallback onLeave; + + const ActivitySessionPopupMenu(this.room, {required this.onLeave, super.key}); + + @override + ActivitySessionPopupMenuState createState() => + ActivitySessionPopupMenuState(); +} + +class ActivitySessionPopupMenuState extends State + with ChatDownloadProvider { + @override + Widget build(BuildContext context) { + return PopupMenuButton( + useRootNavigator: true, + onSelected: (choice) async { + switch (choice) { + case ActivityPopupMenuActions.leave: + widget.onLeave(); + break; + case ActivityPopupMenuActions.invite: + NavigationUtil.goToSpaceRoute( + widget.room.id, + ['invite'], + context, + ); + break; + case ActivityPopupMenuActions.download: + downloadChatAction(widget.room.id, context); + break; + } + }, + itemBuilder: (BuildContext context) => [ + PopupMenuItem( + value: ActivityPopupMenuActions.invite, + child: Row( + children: [ + const Icon(Icons.person_add_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).invite), + ], + ), + ), + PopupMenuItem( + value: ActivityPopupMenuActions.download, + child: Row( + children: [ + const Icon(Icons.download_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).download), + ], + ), + ), + PopupMenuItem( + value: ActivityPopupMenuActions.leave, + child: Row( + children: [ + const Icon(Icons.logout_outlined), + const SizedBox(width: 12), + Text(L10n.of(context).leave), + ], + ), + ), + ], + ); + } +} diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart deleted file mode 100644 index 43375b10b..000000000 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_button.dart +++ /dev/null @@ -1,282 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -import 'package:material_symbols_icons/symbols.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/pangea/activity_summary/activity_summary_analytics_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class ActivityStatsButton extends StatefulWidget { - final ChatController controller; - - const ActivityStatsButton({ - super.key, - required this.controller, - }); - - @override - State createState() => _ActivityStatsButtonState(); -} - -class _ActivityStatsButtonState extends State { - StreamSubscription? _analyticsSubscription; - StreamSubscription? _rolesSubscription; - ActivitySummaryAnalyticsModel? analytics; - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback( - (_) => _updateAnalytics(), - ); - - _analyticsSubscription = widget - .controller.pangeaController.getAnalytics.analyticsStream.stream - .listen((_) => _updateAnalytics()); - - _rolesSubscription = widget.controller.room.client.onRoomState.stream - .where( - (u) => - u.roomId == widget.controller.room.id && - u.state.type == PangeaEventTypes.activityRole, - ) - .listen((_) { - _showStatsMenuDropdownInstructions(); - }); - } - - @override - void dispose() { - _analyticsSubscription?.cancel(); - _rolesSubscription?.cancel(); - super.dispose(); - } - - Client get _client => widget.controller.room.client; - - bool get _shouldShowInstructions { - if (AppConfig.showedActivityMenu || - InstructionsEnum.activityStatsMenu.isToggledOff || - MatrixState.pAnyState.isOverlayOpen(RegExp(r"^word-zoom-card-.*$")) || - widget.controller.timeline == null) { - return false; - } - - final userID = Matrix.of(context).client.userID!; - final activityRoles = - widget.controller.room.activityRoles?.roles.values ?? []; - final finishedRoles = activityRoles.where((r) => r.isFinished); - - if (finishedRoles.isNotEmpty) { - return !finishedRoles.any((r) => r.userId == userID); - } - - final count = widget.controller.timeline!.events - .where( - (event) => - event.senderId == userID && - event.type == EventTypes.Message && - {MessageTypes.Text, MessageTypes.Audio} - .contains(event.messageType), - ) - .length; - - return count >= 3; - } - - int get _xpCount => - analytics?.totalXPForUser( - _client.userID!, - ) ?? - 0; - - int? get _vocabCount => analytics?.uniqueConstructCountForUser( - _client.userID!, - ConstructTypeEnum.vocab, - ); - - int? get _grammarCount => analytics?.uniqueConstructCountForUser( - _client.userID!, - ConstructTypeEnum.morph, - ); - - /// Show a tutorial overlay that blocks the screen and points - /// to the stats menu button with an explanation of what it does. - void _showStatsMenuDropdownInstructions() { - if (!_shouldShowInstructions) { - return; - } - - final renderObject = context.findRenderObject() as RenderBox; - final offset = renderObject.localToGlobal(Offset.zero); - - final cellRect = Rect.fromLTWH( - offset.dx, - offset.dy, - renderObject.size.width, - renderObject.size.height, - ); - - OverlayUtil.showTutorialOverlay( - context, - overlayContent: Center( - child: Container( - padding: const EdgeInsets.all(16.0), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.onSurface, - borderRadius: BorderRadius.circular(12.0), - ), - width: 200, - alignment: Alignment.center, - child: RichText( - text: TextSpan( - style: TextStyle( - color: Theme.of(context).colorScheme.surface, - ), - children: [ - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: Icon( - Icons.info_outlined, - size: 16.0, - color: Theme.of(context).colorScheme.surface, - ), - ), - const WidgetSpan(child: SizedBox(width: 4.0)), - TextSpan( - text: L10n.of(context).activityStatsButtonInstruction, - ), - ], - ), - textAlign: TextAlign.center, - ), - ), - ), - overlayKey: "activity_stats_menu_instruction", - anchorRect: cellRect, - borderRadius: 12.0, - padding: 8.0, - onClick: () { - InstructionsEnum.activityStatsMenu.setToggledOff(true); - widget.controller.setShowDropdown(true); - }, - ); - } - - Future _updateAnalytics() async { - final analytics = await widget.controller.room.getActivityAnalytics(); - if (mounted) { - setState(() => this.analytics = analytics); - _showStatsMenuDropdownInstructions(); - } - } - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - final roleState = - widget.controller.room.activityRoles?.roles.values.toList() ?? []; - - final enabled = _xpCount > 0 || roleState.any((r) => r.isFinished); - - return PressableButton( - onPressed: () => widget.controller.setShowDropdown( - !widget.controller.showActivityDropdown, - ), - borderRadius: BorderRadius.circular(12), - color: enabled - ? (theme.brightness == Brightness.light - ? AppConfig.yellowLight - : Color.lerp(AppConfig.gold, Colors.black, 0.3)!) - : theme.colorScheme.surface, - depressed: !enabled || widget.controller.showActivityDropdown, - child: AnimatedContainer( - duration: FluffyThemes.animationDuration, - width: 300, - height: 55, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - decoration: BoxDecoration( - color: enabled - ? theme.brightness == Brightness.light - ? AppConfig.yellowLight - : Color.lerp(AppConfig.gold, Colors.black, 0.3)! - : theme.colorScheme.surface, - borderRadius: BorderRadius.circular(12), - ), - child: analytics == null - ? const CircularProgressIndicator.adaptive() - : Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - _StatsBadge( - icon: Icons.star, - value: "$_xpCount XP", - ), - _StatsBadge( - icon: Symbols.dictionary, - value: "$_vocabCount", - ), - _StatsBadge( - icon: Symbols.toys_and_games, - value: "$_grammarCount", - ), - ], - ), - ), - ); - } -} - -class _StatsBadge extends StatelessWidget { - final IconData icon; - final String value; - const _StatsBadge({ - required this.icon, - required this.value, - }); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - final screenWidth = MediaQuery.of(context).size.width; - final baseStyle = theme.textTheme.bodyMedium; - final double fontSize = (screenWidth < 400) ? 14 : 18; - final double iconSize = (screenWidth < 400) ? 18 : 22; - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - icon, - size: iconSize, - color: theme.colorScheme.onSurface, - ), - const SizedBox(width: 4), - Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - value, - style: baseStyle?.copyWith( - fontWeight: FontWeight.bold, - color: theme.colorScheme.onSurface, - fontSize: fontSize, - ), - ), - ], - ), - ], - ); - } -} diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart index ca7ebb0e2..52890bc1d 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_stats_menu.dart @@ -3,77 +3,26 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:material_symbols_icons/symbols.dart'; -import 'package:matrix/matrix.dart'; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_vocab_widget.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_details_row.dart'; -import 'package:fluffychat/pangea/activity_summary/activity_summary_analytics_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -class ActivityStatsMenu extends StatefulWidget { +class ActivityStatsMenu extends StatelessWidget { final ChatController controller; const ActivityStatsMenu( this.controller, { super.key, }); - @override - State createState() => ActivityStatsMenuState(); -} - -class ActivityStatsMenuState extends State { - ActivitySummaryAnalyticsModel? analytics; - Room get room => widget.controller.room; - - StreamSubscription? _analyticsSubscription; - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - _updateUsedVocab(); - }); - - _analyticsSubscription = widget - .controller.pangeaController.getAnalytics.analyticsStream.stream - .listen((_) { - _updateUsedVocab(); - }); - } - - @override - void dispose() { - _analyticsSubscription?.cancel(); - super.dispose(); - } - - Set? get _usedVocab => analytics?.constructs[room.client.userID!] - ?.constructsOfType(ConstructTypeEnum.vocab) - .map((id) => id.lemma.toLowerCase()) - .toSet(); - - Future _updateUsedVocab() async { - final analytics = await room.getActivityAnalytics(); - if (mounted) { - setState(() => this.analytics = analytics); - } - } - int _getAssignedRolesCount() { - final assignedRoles = room.assignedRoles; + final assignedRoles = controller.room.assignedRoles; if (assignedRoles == null) return 0; final nonBotRoles = assignedRoles.values.where( (role) => role.userId != BotName.byEnvironment, @@ -83,30 +32,31 @@ class ActivityStatsMenuState extends State { } bool _isBotParticipant() { - final assignedRoles = room.assignedRoles; + final assignedRoles = controller.room.assignedRoles; if (assignedRoles == null) return false; return assignedRoles.values.any( (role) => role.userId == BotName.byEnvironment, ); } - Future _finishActivity({bool forAll = false}) async { + Future _finishActivity( + BuildContext context, { + bool forAll = false, + }) async { await showFutureLoadingDialog( context: context, future: () async { forAll - ? await room.finishActivityForAll() - : await room.finishActivity(); - if (mounted) { - widget.controller.setShowDropdown(false); - } + ? await controller.room.finishActivityForAll() + : await controller.room.finishActivity(); + controller.toggleShowDropdown(); }, ); } @override Widget build(BuildContext context) { - if (!room.showActivityChatUI) { + if (!controller.room.showActivityChatUI) { return const SizedBox.shrink(); } @@ -114,12 +64,12 @@ class ActivityStatsMenuState extends State { final isColumnMode = FluffyThemes.isColumnMode(context); // Completion status variables - final bool userComplete = room.hasCompletedRole; - final bool activityComplete = room.isActivityFinished; + final bool userComplete = controller.room.hasCompletedRole; + final bool activityComplete = controller.room.isActivityFinished; bool shouldShowEndForAll = true; bool shouldShowImDone = true; - if (!room.isRoomAdmin) { + if (!controller.room.isRoomAdmin) { shouldShowEndForAll = false; } @@ -134,222 +84,141 @@ class ActivityStatsMenuState extends State { shouldShowEndForAll = false; } - return Positioned( - top: 0, - left: 0, - right: 0, - bottom: widget.controller.showActivityDropdown ? 0 : null, - child: Column( - children: [ - ClipRect( - child: AnimatedAlign( - duration: FluffyThemes.animationDuration, - curve: Curves.easeInOut, - heightFactor: widget.controller.showActivityDropdown ? 1.0 : 0.0, - alignment: Alignment.topCenter, - child: GestureDetector( - onPanUpdate: (details) { - if (details.delta.dy < -2) { - widget.controller.setShowDropdown(false); - } - }, - child: Container( - width: double.infinity, - decoration: BoxDecoration( - color: theme.colorScheme.surface, - ), - padding: const EdgeInsets.all(12.0), - child: Column( - spacing: 12.0, - mainAxisSize: MainAxisSize.min, - children: [ - Column( - spacing: 8.0, - mainAxisSize: MainAxisSize.min, - children: [ - ActivitySessionDetailsRow( - icon: Symbols.radar, - iconSize: 16.0, - child: Text( - room.activityPlan!.learningObjective, - style: const TextStyle(fontSize: 12.0), - ), - ), - ActivitySessionDetailsRow( - icon: Symbols.dictionary, - iconSize: 16.0, - child: Wrap( - spacing: 4.0, - runSpacing: 4.0, - children: [ - ...room.activityPlan!.vocab.map( - (v) => VocabTile( - vocab: v, - langCode: - room.activityPlan!.req.targetLanguage, - isUsed: (_usedVocab ?? {}) - .contains(v.lemma.toLowerCase()), - ), - ), - ], - ), - ), - ], - ), - if (!room.hasArchivedActivity) - Text( - L10n.of(context).activityDropdownDesc, - textAlign: TextAlign.center, - style: const TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.w600, - ), - ), - if (!userComplete) ...[ - if (shouldShowEndForAll) - ElevatedButton( - style: ElevatedButton.styleFrom( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 8.0, - ), - side: BorderSide( - color: theme.colorScheme.secondaryContainer, - width: 2, - ), - foregroundColor: theme.colorScheme.primary, - backgroundColor: theme.colorScheme.surface, - ), - onPressed: () => _finishActivity(forAll: true), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - L10n.of(context).endForAll, - style: TextStyle( - fontSize: isColumnMode ? 16.0 : 12.0, - ), - ), - ], - ), - ), - if (shouldShowImDone) - ElevatedButton( - style: ElevatedButton.styleFrom( - padding: const EdgeInsets.symmetric( - horizontal: 12.0, - vertical: 8.0, - ), - ), - onPressed: _finishActivity, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - L10n.of(context).endActivity, - style: TextStyle( - fontSize: isColumnMode ? 16.0 : 12.0, - ), - ), - ], - ), - ), - ], - ], + return ValueListenableBuilder( + valueListenable: controller.activityController.showActivityDropdown, + builder: (context, showDropdown, child) { + return Positioned( + top: 0, + left: 0, + right: 0, + bottom: showDropdown ? 0 : null, + child: Column( + children: [ + ClipRect( + child: AnimatedAlign( + duration: FluffyThemes.animationDuration, + curve: Curves.easeInOut, + heightFactor: showDropdown ? 1.0 : 0.0, + alignment: Alignment.topCenter, + child: GestureDetector( + onPanUpdate: (details) { + if (details.delta.dy < -2) { + controller.toggleShowDropdown(); + } + }, + child: child, ), ), ), - ), + if (showDropdown) + Expanded( + child: GestureDetector( + onTap: controller.toggleShowDropdown, + child: Container(color: Colors.black.withAlpha(100)), + ), + ), + ], ), - if (widget.controller.showActivityDropdown) - Expanded( - child: GestureDetector( - onTap: () => widget.controller.setShowDropdown(false), - child: Container(color: Colors.black.withAlpha(100)), - ), - ), - ], - ), - ); - } -} - -class VocabTile extends StatelessWidget { - final Vocab vocab; - final String langCode; - final bool isUsed; - - const VocabTile({ - super.key, - required this.vocab, - required this.langCode, - required this.isUsed, - }); - - @override - Widget build(BuildContext context) { - final color = - isUsed ? AppConfig.goldLight.withAlpha(100) : Colors.transparent; - return CompositedTransformTarget( - link: MatrixState.pAnyState - .layerLinkAndKey( - "activity-vocab-${vocab.lemma}", - ) - .link, - child: InkWell( - key: MatrixState.pAnyState - .layerLinkAndKey( - "activity-vocab-${vocab.lemma}", - ) - .key, - borderRadius: BorderRadius.circular( - 24.0, + ); + }, + child: Container( + width: double.infinity, + decoration: BoxDecoration( + color: theme.colorScheme.surface, ), - onTap: () { - OverlayUtil.showPositionedCard( - overlayKey: "activity-vocab-${vocab.lemma}", - context: context, - cardToShow: WordZoomWidget( - token: PangeaTokenText( - content: vocab.lemma, - length: vocab.lemma.characters.length, - offset: 0, - ), - construct: ConstructIdentifier( - lemma: vocab.lemma, - type: ConstructTypeEnum.vocab, - category: vocab.pos, - ), - langCode: langCode, - onClose: () { - MatrixState.pAnyState.closeOverlay( - "activity-vocab-${vocab.lemma}", - ); - }, + padding: const EdgeInsets.all(12.0), + child: Column( + spacing: 12.0, + mainAxisSize: MainAxisSize.min, + children: [ + Column( + spacing: 8.0, + mainAxisSize: MainAxisSize.min, + children: [ + ActivitySessionDetailsRow( + icon: Symbols.radar, + iconSize: 16.0, + child: Text( + controller.room.activityPlan!.learningObjective, + style: const TextStyle(fontSize: 12.0), + ), + ), + ActivitySessionDetailsRow( + icon: Symbols.dictionary, + iconSize: 16.0, + child: ActivityVocabWidget( + key: ValueKey( + "activity-stats-${controller.room.activityPlan!.activityId}", + ), + vocab: controller.room.activityPlan!.vocab, + langCode: controller.room.activityPlan!.req.targetLanguage, + targetId: "activity-vocab", + usedVocab: controller.activityController.usedVocab, + activityLangCode: + controller.room.activityPlan!.req.targetLanguage, + ), + ), + ], ), - transformTargetId: "activity-vocab-${vocab.lemma}", - closePrevOverlay: false, - addBorder: false, - maxWidth: AppConfig.toolbarMinWidth, - maxHeight: AppConfig.toolbarMaxHeight, - ); - }, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - vertical: 4.0, - ), - decoration: BoxDecoration( - color: color, - borderRadius: BorderRadius.circular(20), - ), - child: Text( - vocab.lemma, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface, - fontSize: 14.0, - ), - ), + if (!userComplete) ...[ + Text( + L10n.of(context).activityDropdownDesc, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.w600, + ), + ), + if (shouldShowEndForAll) + ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 12.0, + vertical: 8.0, + ), + side: BorderSide( + color: theme.colorScheme.secondaryContainer, + width: 2, + ), + foregroundColor: theme.colorScheme.primary, + backgroundColor: theme.colorScheme.surface, + ), + onPressed: () => _finishActivity(context, forAll: true), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + L10n.of(context).endForAll, + style: TextStyle( + fontSize: isColumnMode ? 16.0 : 12.0, + ), + ), + ], + ), + ), + if (shouldShowImDone) + ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 12.0, + vertical: 8.0, + ), + ), + onPressed: () => _finishActivity(context), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + L10n.of(context).endActivity, + style: TextStyle( + fontSize: isColumnMode ? 16.0 : 12.0, + ), + ), + ], + ), + ), + ], + ], ), ), ); diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_vocab_widget.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_vocab_widget.dart new file mode 100644 index 000000000..bd78b0538 --- /dev/null +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_vocab_widget.dart @@ -0,0 +1,210 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/token_rendering_util.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; +import 'package:fluffychat/pangea/toolbar/token_rendering_mixin.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/word_zoom_widget.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class ActivityVocabWidget extends StatelessWidget { + final List vocab; + final String langCode; + final String targetId; + final String activityLangCode; + final ValueNotifier>? usedVocab; + + const ActivityVocabWidget({ + super.key, + required this.vocab, + required this.langCode, + required this.targetId, + required this.activityLangCode, + this.usedVocab, + }); + + @override + Widget build(BuildContext context) { + if (usedVocab == null) { + return _VocabChips( + vocab: vocab, + targetId: targetId, + langCode: langCode, + usedVocab: const {}, + activityLangCode: activityLangCode, + ); + } + + return ValueListenableBuilder( + valueListenable: usedVocab!, + builder: (context, used, __) => _VocabChips( + vocab: vocab, + targetId: targetId, + langCode: langCode, + usedVocab: used, + activityLangCode: activityLangCode, + ), + ); + } +} + +class _VocabChips extends StatefulWidget { + final List vocab; + final String targetId; + final String langCode; + final String activityLangCode; + final Set usedVocab; + + const _VocabChips({ + required this.vocab, + required this.targetId, + required this.langCode, + required this.activityLangCode, + required this.usedVocab, + }); + + @override + State<_VocabChips> createState() => _VocabChipsState(); +} + +class _VocabChipsState extends State<_VocabChips> with TokenRenderingMixin { + Vocab? _selectedVocab; + + @override + void dispose() { + TokensUtil.clearNewTokenCache(); + super.dispose(); + } + + void _onTap( + Vocab v, + bool isNew, + ) { + setState(() { + _selectedVocab = v; + }); + + final target = "${widget.targetId}-${v.lemma}"; + if (isNew) { + final token = v.asToken(); + collectNewToken( + "activity_tokens", + widget.targetId, + token, + Matrix.of(context).analyticsDataService, + ).then((_) { + if (mounted) setState(() {}); + }); + } + OverlayUtil.showPositionedCard( + overlayKey: target, + context: context, + cardToShow: StatefulBuilder( + builder: (context, setState) => WordZoomWidget( + token: PangeaTokenText( + content: v.lemma, + length: v.lemma.characters.length, + offset: 0, + ), + construct: ConstructIdentifier( + lemma: v.lemma, + type: ConstructTypeEnum.vocab, + category: v.pos, + ), + langCode: widget.langCode, + onClose: () { + MatrixState.pAnyState.closeOverlay(target); + setState(() => _selectedVocab = null); + }, + onDismissNewWordOverlay: () { + if (mounted) setState(() {}); + }, + ), + ), + transformTargetId: target, + closePrevOverlay: false, + addBorder: false, + maxWidth: AppConfig.toolbarMinWidth, + maxHeight: AppConfig.toolbarMaxHeight, + ); + } + + @override + Widget build(BuildContext context) { + final tokens = widget.vocab.map((v) => v.asToken()).toList(); + final newTokens = TokensUtil.getNewTokens( + "activity_tokens", + tokens, + widget.activityLangCode, + ); + final renderer = TokenRenderingUtil( + existingStyle: TextStyle( + color: Theme.of(context).colorScheme.onSurface, + fontSize: 14.0, + ), + ); + + return Wrap( + spacing: 4.0, + runSpacing: 4.0, + children: [ + ...widget.vocab.map( + (v) { + final target = "${widget.targetId}-${v.lemma}"; + final color = widget.usedVocab.contains(v.lemma.toLowerCase()) + ? Color.alphaBlend( + Theme.of(context).colorScheme.surface.withAlpha(150), + AppConfig.gold, + ) + : Theme.of(context).colorScheme.primary.withAlpha(20); + + final linkAndKey = MatrixState.pAnyState.layerLinkAndKey(target); + final isNew = newTokens + .any((t) => t.content.toLowerCase() == v.lemma.toLowerCase()); + + return CompositedTransformTarget( + link: linkAndKey.link, + child: InkWell( + key: linkAndKey.key, + borderRadius: BorderRadius.circular( + 24.0, + ), + onTap: () => _onTap(v, isNew), + child: HoverBuilder( + builder: (context, hovered) => Container( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 4.0, + ), + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.circular(20), + ), + child: Text( + v.lemma, + style: renderer.style( + underlineColor: Theme.of(context) + .colorScheme + .primary + .withAlpha(200), + isNew: isNew, + selected: _selectedVocab == v, + hovered: hovered, + ), + ), + ), + ), + ), + ); + }, + ), + ], + ); + } +} diff --git a/lib/pangea/activity_sessions/activity_session_chat/saved_activity_analytics_dialog.dart b/lib/pangea/activity_sessions/activity_session_chat/saved_activity_analytics_dialog.dart deleted file mode 100644 index 5bb4780dc..000000000 --- a/lib/pangea/activity_sessions/activity_session_chat/saved_activity_analytics_dialog.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -import 'package:cached_network_image/cached_network_image.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_page/analytics_page_constants.dart'; - -class SavedActivityAnalyticsDialog extends StatelessWidget { - const SavedActivityAnalyticsDialog({ - super.key, - }); - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - return BackdropFilter( - filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), - child: Dialog( - backgroundColor: theme.colorScheme.surfaceContainerHigh, - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 450.0, - ), - child: ClipRRect( - borderRadius: BorderRadius.circular(12.0), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Column( - spacing: 16.0, - mainAxisSize: MainAxisSize.min, - children: [ - Column( - spacing: 10.0, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - L10n.of(context).niceJob, - style: theme.textTheme.headlineSmall, - ), - Text( - L10n.of(context).activityCompletedDesc, - textAlign: TextAlign.center, - style: theme.textTheme.bodyMedium, - ), - ], - ), - CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${AnalyticsPageConstants.dinoBotFileName}", - errorWidget: (context, e, s) => const SizedBox.shrink(), - progressIndicatorBuilder: (context, _, __) => - const SizedBox.shrink(), - width: 150.0, - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: theme.colorScheme.primaryContainer, - foregroundColor: theme.colorScheme.onPrimaryContainer, - padding: const EdgeInsets.all(4.0), - ), - onPressed: () => Navigator.of(context).pop(true), - child: Row( - spacing: 4.0, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon(Icons.map_outlined, size: 12.0), - Text( - L10n.of(context).continueText, - ), - ], - ), - ), - ], - ), - ), - ), - ), - ), - ); - } -} diff --git a/lib/pangea/activity_sessions/activity_session_start/activity_feedback_request_dialog.dart b/lib/pangea/activity_sessions/activity_session_start/activity_feedback_request_dialog.dart deleted file mode 100644 index adbed6422..000000000 --- a/lib/pangea/activity_sessions/activity_session_start/activity_feedback_request_dialog.dart +++ /dev/null @@ -1,121 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; - -class ActivityFeedbackRequestDialog extends StatefulWidget { - const ActivityFeedbackRequestDialog({super.key}); - - @override - State createState() => - ActivityFeedbackRequestDialogState(); -} - -class ActivityFeedbackRequestDialogState - extends State { - final TextEditingController _feedbackController = TextEditingController(); - - @override - void initState() { - super.initState(); - _feedbackController.addListener(() { - setState(() {}); - }); - } - - @override - void dispose() { - _feedbackController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return BackdropFilter( - filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), - child: Dialog( - backgroundColor: Theme.of(context).colorScheme.surfaceContainerHigh, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20.0), - ), - child: SizedBox( - width: 325.0, - child: Column( - spacing: 20.0, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - children: [ - IconButton( - icon: const Icon(Icons.close), - onPressed: () => Navigator.of(context).pop(), - ), - Expanded( - child: Text( - L10n.of(context).feedbackTitle, - style: Theme.of(context).textTheme.titleLarge, - textAlign: TextAlign.center, - ), - ), - const SizedBox( - width: 40.0, - height: 40.0, - child: Center( - child: Icon(Icons.flag_outlined), - ), - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 20.0, - ), - child: Column( - spacing: 20.0, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - L10n.of(context).feedbackDesc, - textAlign: TextAlign.center, - ), - SizedBox( - child: TextField( - controller: _feedbackController, - decoration: InputDecoration( - hintText: L10n.of(context).feedbackHint, - ), - keyboardType: TextInputType.multiline, - minLines: 1, - maxLines: 5, - ), - ), - ElevatedButton( - onPressed: _feedbackController.text.isNotEmpty - ? () { - Navigator.of(context).pop( - _feedbackController.text, - ); - } - : null, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(L10n.of(context).feedbackButton), - ], - ), - ), - const SizedBox.shrink(), - ], - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart b/lib/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart index 733381357..95a3366e2 100644 --- a/lib/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart +++ b/lib/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart @@ -8,6 +8,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_sessions_start_view.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_start/bot_join_error_dialog.dart'; @@ -19,6 +20,7 @@ import 'package:fluffychat/pangea/course_plans/course_activities/course_activity import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -67,6 +69,7 @@ class ActivitySessionStartController extends State String? _selectedRoleId; Timer? _pingCooldown; + final ScrollController scrollController = ScrollController(); @override void initState() { @@ -92,6 +95,7 @@ class ActivitySessionStartController extends State @override void dispose() { _pingCooldown?.cancel(); + scrollController.dispose(); super.dispose(); } @@ -114,13 +118,21 @@ class ActivitySessionStartController extends State false; SessionState get state { - if (activityRoom?.hasPickedRole == true) return SessionState.confirmedRole; - if (_selectedRoleId != null) return SessionState.selectedRole; - if (activityRoom == null) { + if (activityRoom?.membership == Membership.join && + activityRoom?.hasPickedRole == true) { + return SessionState.confirmedRole; + } + + if (_selectedRoleId != null) { + return SessionState.selectedRole; + } + + if (activityRoom == null || activityRoom!.membership != Membership.join) { return widget.roomId != null || widget.launch ? SessionState.notSelectedRole : SessionState.notStarted; } + return SessionState.notSelectedRole; } @@ -149,6 +161,13 @@ class ActivitySessionStartController extends State SessionState.selectedRole, ].contains(state); + Map get assignedRoles { + if (activityRoom != null && activityRoom!.membership == Membership.join) { + return activityRoom!.assignedRoles ?? {}; + } + return roomSummaries?[widget.roomId]?.joinedUsersWithRoles ?? {}; + } + bool canSelectParticipant(String id) { if (state == SessionState.confirmedRole || state == SessionState.notStarted) { @@ -165,6 +184,21 @@ class ActivitySessionStartController extends State return unassignedIds.contains(id); } + bool isParticipantShimmering(String id) { + if (state != SessionState.notSelectedRole) { + return false; + } + + final availableRoles = activity!.roles; + final assignedRoles = activityRoom?.assignedRoles ?? + roomSummaries?[widget.roomId]?.activityRoles.roles ?? + {}; + final unassignedIds = availableRoles.keys + .where((id) => !assignedRoles.containsKey(id)) + .toList(); + return unassignedIds.contains(id); + } + bool isParticipantSelected(String id) { if (state == SessionState.confirmedRole) { return activityRoom?.ownRoleState?.id == id; @@ -194,6 +228,13 @@ class ActivitySessionStartController extends State return false; } + void startNewActivity() { + scrollController.jumpTo(0); + context.go( + "/rooms/spaces/${widget.parentId}/activity/${widget.activityId}?launch=true", + ); + } + Map> get activityStatuses => activitySessionStatuses(widget.activityId); @@ -275,7 +316,7 @@ class ActivitySessionStartController extends State final activitiesResponse = await CourseActivityRepo.get( TranslateActivityRequest( activityIds: [widget.activityId], - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), widget.activityId, ); @@ -337,7 +378,11 @@ class ActivitySessionStartController extends State } } - context.go("/rooms/spaces/${widget.parentId}/${widget.roomId}"); + NavigationUtil.goToSpaceRoute( + widget.roomId, + [], + context, + ); } Future confirmRoleSelection() async { @@ -364,7 +409,11 @@ class ActivitySessionStartController extends State ); if (!resp.isError) { - context.go("/rooms/spaces/${widget.parentId}/${resp.result}"); + NavigationUtil.goToSpaceRoute( + resp.result, + [], + context, + ); } } } @@ -409,9 +458,7 @@ class ActivitySessionStartController extends State Future joinActivityByRoomId(String roomId) async { final room = Matrix.of(context).client.getRoomById(roomId); if (room != null && room.membership == Membership.join) { - widget.parentId != null - ? context.go("/rooms/spaces/${widget.parentId}/$roomId") - : context.go("/rooms/$roomId"); + NavigationUtil.goToSpaceRoute(roomId, [], context); return; } @@ -435,9 +482,7 @@ class ActivitySessionStartController extends State ); if (!resp.isError) { - widget.parentId != null - ? context.go("/rooms/spaces/${widget.parentId}/$roomId") - : context.go("/rooms/$roomId"); + NavigationUtil.goToSpaceRoute(roomId, [], context); } } diff --git a/lib/pangea/activity_sessions/activity_session_start/activity_sessions_start_view.dart b/lib/pangea/activity_sessions/activity_session_start/activity_sessions_start_view.dart index 984332b50..788a94f21 100644 --- a/lib/pangea/activity_sessions/activity_session_start/activity_sessions_start_view.dart +++ b/lib/pangea/activity_sessions/activity_session_start/activity_sessions_start_view.dart @@ -10,16 +10,17 @@ import 'package:fluffychat/pangea/activity_feedback/activity_feedback_repo.dart' import 'package:fluffychat/pangea/activity_feedback/activity_feedback_request.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_feedback_request_dialog.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_feedback_response_dialog.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_start/activity_session_start_page.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_summary_widget.dart'; import 'package:fluffychat/pangea/chat_settings/utils/room_summary_extension.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import 'package:fluffychat/pangea/common/widgets/feedback_dialog.dart'; +import 'package:fluffychat/pangea/common/widgets/feedback_response_dialog.dart'; import 'package:fluffychat/pangea/course_chats/open_roles_indicator.dart'; import 'package:fluffychat/pangea/course_plans/course_activities/activity_summaries_provider.dart'; import 'package:fluffychat/pangea/course_plans/course_activities/course_activity_repo.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -56,7 +57,19 @@ class ActivitySessionStartView extends StatelessWidget { leadingWidth: 52.0, title: controller.activity == null ? null - : Text(controller.activity!.title), + : Center( + child: Text( + controller.activity!.title, + maxLines: 2, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: !FluffyThemes.isColumnMode(context) + ? const TextStyle( + fontSize: 16, + ) + : null, + ), + ), leading: Padding( padding: const EdgeInsets.only(left: 12.0), child: Center( @@ -73,7 +86,13 @@ class ActivitySessionStartView extends StatelessWidget { final feedback = await showDialog( context: context, builder: (context) { - return const ActivityFeedbackRequestDialog(); + return FeedbackDialog( + title: L10n.of(context).feedbackTitle, + onSubmit: (feedback) { + Navigator.of(context).pop(feedback); + }, + scrollable: false, + ); }, ); @@ -88,10 +107,10 @@ class ActivitySessionStartView extends StatelessWidget { activityId: controller.widget.activityId, feedbackText: feedback, userId: Matrix.of(context).client.userID!, - userL1: MatrixState.pangeaController.languageController - .activeL1Code()!, - userL2: MatrixState.pangeaController.languageController - .activeL2Code()!, + userL1: MatrixState + .pangeaController.userController.userL1Code!, + userL2: MatrixState + .pangeaController.userController.userL2Code!, ), ), ); @@ -102,15 +121,16 @@ class ActivitySessionStartView extends StatelessWidget { CourseActivityRepo.setSentFeedback( controller.widget.activityId, - MatrixState.pangeaController.languageController - .activeL1Code()!, + MatrixState.pangeaController.userController.userL1Code!, ); await showDialog( context: context, builder: (context) { - return ActivityFeedbackResponseDialog( + return FeedbackResponseDialog( + title: L10n.of(context).feedbackTitle, feedback: resp.result!.userFriendlyResponse, + description: L10n.of(context).feedbackRespDesc, ); }, ); @@ -131,6 +151,7 @@ class ActivitySessionStartView extends StatelessWidget { children: [ Expanded( child: SingleChildScrollView( + controller: controller.scrollController, child: Container( constraints: const BoxConstraints( maxWidth: 600.0, @@ -149,15 +170,15 @@ class ActivitySessionStartView extends StatelessWidget { onTapParticipant: controller.selectRole, isParticipantSelected: controller.isParticipantSelected, + isParticipantShimmering: + controller.isParticipantShimmering, canSelectParticipant: controller.canSelectParticipant, - assignedRoles: controller - .roomSummaries?[ - controller.widget.roomId] - ?.joinedUsersWithRoles ?? - {}, + assignedRoles: controller.assignedRoles, ), - if (controller.courseParent != null) + if (controller.courseParent != null && + controller.state == + SessionState.notStarted) _ActivityStatuses( statuses: controller.activityStatuses, space: controller.courseParent!, @@ -252,20 +273,20 @@ class ActivitySessionStartView extends StatelessWidget { ), ElevatedButton( style: buttonStyle, - onPressed: () => context.go( - "/rooms/${controller.activityRoom!.id}/invite", - ), + onPressed: () { + NavigationUtil.goToSpaceRoute( + controller.activityRoom!.id, + ['invite'], + context, + ); + }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - controller.courseParent != - null - ? L10n.of(context) - .inviteFriendsToActivityCourse - : L10n.of(context) - .inviteFriendsToActivity, + L10n.of(context) + .inviteFriends, ), ], ), @@ -359,12 +380,30 @@ class _ActivityStartButtons extends StatelessWidget { ], ), ), + ElevatedButton( + style: buttonStyle, + onPressed: () => context.push( + "/rooms/spaces/${controller.courseParent!.id}/details?tab=course", + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + L10n.of(context).pickDifferentActivity, + ), + ], + ), + ), ] else if (joinedActivityRoom != null) ...[ ElevatedButton( style: buttonStyle, - onPressed: () => context.go( - "/rooms/spaces/${controller.widget.parentId}/$joinedActivityRoom", - ), + onPressed: () { + NavigationUtil.goToSpaceRoute( + joinedActivityRoom, + [], + context, + ); + }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -375,9 +414,7 @@ class _ActivityStartButtons extends StatelessWidget { ] else ...[ ElevatedButton( style: buttonStyle, - onPressed: () => context.go( - "/rooms/spaces/${controller.widget.parentId}/activity/${controller.widget.activityId}?launch=true", - ), + onPressed: controller.startNewActivity, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -399,8 +436,10 @@ class _ActivityStartButtons extends StatelessWidget { ); if (!resp.isError) { - context.go( - "/rooms/spaces/${controller.widget.parentId}/${resp.result}", + NavigationUtil.goToSpaceRoute( + resp.result, + [], + context, ); } }, diff --git a/lib/pangea/activity_sessions/activity_summary_widget.dart b/lib/pangea/activity_sessions/activity_summary_widget.dart index dfea580f2..df4bb64ed 100644 --- a/lib/pangea/activity_sessions/activity_summary_widget.dart +++ b/lib/pangea/activity_sessions/activity_summary_widget.dart @@ -9,28 +9,20 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:matrix/matrix.dart'; import 'package:matrix/src/utils/markdown.dart'; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_participant_list.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; -import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_vocab_widget.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_details_row.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/common/widgets/url_image_widget.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; -import 'package:fluffychat/widgets/matrix.dart'; class ActivitySummary extends StatelessWidget { final ActivityPlanModel activity; final Room? room; final Room? course; - final Map? assignedRoles; + final Map assignedRoles; final bool showInstructions; final VoidCallback toggleInstructions; @@ -38,17 +30,22 @@ class ActivitySummary extends StatelessWidget { final Function(String)? onTapParticipant; final bool Function(String)? canSelectParticipant; final bool Function(String)? isParticipantSelected; + final bool Function(String)? isParticipantShimmering; final double Function(ActivityRoleModel?)? getParticipantOpacity; + final ValueNotifier>? usedVocab; + const ActivitySummary({ super.key, required this.activity, required this.showInstructions, required this.toggleInstructions, - this.assignedRoles, + required this.assignedRoles, + this.usedVocab, this.onTapParticipant, this.canSelectParticipant, this.isParticipantSelected, + this.isParticipantShimmering, this.getParticipantOpacity, this.room, this.course, @@ -81,176 +78,124 @@ class ActivitySummary extends StatelessWidget { ActivityParticipantList( activity: activity, room: room, - assignedRoles: room?.assignedRoles ?? assignedRoles ?? {}, + assignedRoles: assignedRoles, course: course, onTap: onTapParticipant, canSelect: canSelectParticipant, isSelected: isParticipantSelected, + isShimmering: isParticipantShimmering, getOpacity: getParticipantOpacity, ), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, + DecoratedBox( + decoration: BoxDecoration( + color: theme.colorScheme.surface.withAlpha(128), + borderRadius: BorderRadius.circular(12.0), ), - child: Column( - spacing: 4.0, - mainAxisSize: MainAxisSize.min, - children: [ - InkWell( - onTap: toggleInstructions, - child: Column( - spacing: 4.0, - children: [ - Text( - activity.description, - style: theme.textTheme.bodyMedium, - ), - Padding( - padding: const EdgeInsets.symmetric( - vertical: 4.0, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + ), + child: Column( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + children: [ + InkWell( + hoverColor: theme.colorScheme.surfaceTint.withAlpha(55), + onTap: toggleInstructions, + child: Column( + spacing: 4.0, + children: [ + Text( + activity.description, + style: theme.textTheme.bodyMedium, ), - child: Row( + Padding( + padding: const EdgeInsets.symmetric( + vertical: 4.0, + ), + child: Row( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + L10n.of(context).details, + style: theme.textTheme.bodyMedium, + ), + Icon( + showInstructions + ? Icons.arrow_drop_up + : Icons.arrow_drop_down, + size: 22.0, + ), + ], + ), + ), + ], + ), + ), + if (showInstructions) ...[ + Row( + spacing: 8.0, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + activity.req.mode, + style: theme.textTheme.bodyMedium, + ), + Row( spacing: 4.0, mainAxisSize: MainAxisSize.min, children: [ + const Icon(Icons.school, size: 12.0), Text( - L10n.of(context).details, + activity.req.cefrLevel.string, style: theme.textTheme.bodyMedium, ), - Icon( - showInstructions - ? Icons.arrow_drop_up - : Icons.arrow_drop_down, - size: 20.0, - ), ], ), - ), - ], - ), - ), - if (showInstructions) ...[ - Row( - spacing: 8.0, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - activity.req.mode, + ], + ), + ActivitySessionDetailsRow( + icon: Symbols.target, + iconSize: 16.0, + child: Text( + activity.learningObjective, style: theme.textTheme.bodyMedium, ), - Row( - spacing: 4.0, - mainAxisSize: MainAxisSize.min, - children: [ - const Icon(Icons.school, size: 12.0), - Text( - activity.req.cefrLevel.string, - style: theme.textTheme.bodyMedium, + ), + ActivitySessionDetailsRow( + icon: Symbols.steps, + iconSize: 16.0, + child: Html( + data: markdown(activity.instructions), + style: { + "body": Style( + margin: Margins.all(0), + padding: HtmlPaddings.all(0), + fontSize: FontSize( + theme.textTheme.bodyMedium!.fontSize!, + ), ), - ], + }, ), - ], - ), - ActivitySessionDetailsRow( - icon: Symbols.target, - iconSize: 16.0, - child: Text( - activity.learningObjective, - style: theme.textTheme.bodyMedium, ), - ), - ActivitySessionDetailsRow( - icon: Symbols.steps, - iconSize: 16.0, - child: Html( - data: markdown(activity.instructions), - style: { - "body": Style( - margin: Margins.all(0), - padding: HtmlPaddings.all(0), - fontSize: FontSize( - theme.textTheme.bodyMedium!.fontSize!, - ), + ActivitySessionDetailsRow( + icon: Symbols.dictionary, + iconSize: 16.0, + child: ActivityVocabWidget( + key: ValueKey( + "activity-summary-${activity.activityId}", ), - }, + vocab: activity.vocab, + langCode: activity.req.targetLanguage, + targetId: "activity-summary-vocab", + usedVocab: usedVocab, + activityLangCode: activity.req.targetLanguage, + ), ), - ), - ActivitySessionDetailsRow( - icon: Symbols.dictionary, - iconSize: 16.0, - child: Wrap( - spacing: 4.0, - runSpacing: 4.0, - children: activity.vocab.map((vocab) { - return CompositedTransformTarget( - link: MatrixState.pAnyState - .layerLinkAndKey( - "activity-summary-vocab-${vocab.lemma}", - ) - .link, - child: InkWell( - key: MatrixState.pAnyState - .layerLinkAndKey( - "activity-summary-vocab-${vocab.lemma}", - ) - .key, - borderRadius: BorderRadius.circular( - 24.0, - ), - onTap: () { - OverlayUtil.showPositionedCard( - overlayKey: - "activity-summary-vocab-${vocab.lemma}", - context: context, - cardToShow: WordZoomWidget( - token: PangeaTokenText( - content: vocab.lemma, - length: vocab.lemma.characters.length, - offset: 0, - ), - construct: ConstructIdentifier( - lemma: vocab.lemma, - type: ConstructTypeEnum.vocab, - category: vocab.pos, - ), - langCode: activity.req.targetLanguage, - onClose: () { - MatrixState.pAnyState.closeOverlay( - "activity-summary-vocab-${vocab.lemma}", - ); - }, - ), - transformTargetId: - "activity-summary-vocab-${vocab.lemma}", - closePrevOverlay: false, - addBorder: false, - maxWidth: AppConfig.toolbarMinWidth, - maxHeight: AppConfig.toolbarMaxHeight, - ); - }, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - vertical: 4.0, - ), - decoration: BoxDecoration( - color: theme.colorScheme.primary.withAlpha( - 20, - ), - borderRadius: BorderRadius.circular(20), - ), - child: Text( - vocab.lemma, - style: theme.textTheme.bodyMedium, - ), - ), - ), - ); - }).toList(), - ), - ), + ], ], - ], + ), ), ), ], diff --git a/lib/pangea/activity_sessions/activity_user_summaries_widget.dart b/lib/pangea/activity_sessions/activity_user_summaries_widget.dart index 58dbbec08..2553f1a5a 100644 --- a/lib/pangea/activity_sessions/activity_user_summaries_widget.dart +++ b/lib/pangea/activity_sessions/activity_user_summaries_widget.dart @@ -9,6 +9,7 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_participant_indicator.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_role_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/activity_summary/activity_summary_response_model.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -34,12 +35,34 @@ class ActivityUserSummaries extends StatelessWidget { spacing: 4.0, mainAxisSize: MainAxisSize.min, children: [ - Text( - L10n.of(context).activityFinishedMessage, - ), - Text( - summary.summary, - textAlign: TextAlign.center, + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 12.0, vertical: 4.0), + child: Center( + child: Material( + color: Theme.of(context).colorScheme.surface.withAlpha(128), + borderRadius: BorderRadius.circular(AppConfig.borderRadius / 3), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 4.0, + ), + child: Column( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + L10n.of(context).activityFinishedMessage, + ), + Text( + summary.summary, + textAlign: TextAlign.center, + ), + ], + ), + ), + ), + ), ), const Padding( padding: EdgeInsets.symmetric( @@ -50,27 +73,6 @@ class ActivityUserSummaries extends StatelessWidget { summary: summary, controller: controller, ), - // Row( - // mainAxisSize: MainAxisSize.min, - // children: userSummaries.map((p) { - // final user = room.getParticipants().firstWhereOrNull( - // (u) => u.id == p.participantId, - // ); - // final userRole = assignedRoles.values.firstWhere( - // (role) => role.userId == p.participantId, - // ); - // final userRoleInfo = availableRoles[userRole.id]!; - // return ActivityParticipantIndicator( - // availableRole: userRoleInfo, - // assignedRole: userRole, - // avatarUrl: - // userRoleInfo.avatarUrl ?? user?.avatarUrl?.toString(), - // borderRadius: BorderRadius.circular(4), - // selected: controller.highlightedRole?.id == userRole.id, - // onTap: () => controller.highlightRole(userRole), - // ); - // }).toList(), - // ), ], ), ); @@ -86,6 +88,38 @@ class ButtonControlledCarouselView extends StatelessWidget { required this.controller, }); + void _scrollToUser( + ActivityRoleModel role, + int index, + double cardWidth, + ) { + controller.activityController.highlightRole(role); + + final scrollController = controller.activityController.carouselController; + + if (!scrollController.hasClients) return; + + const spacing = 5.0; + final itemExtent = cardWidth + spacing; + + final viewportWidth = scrollController.position.viewportDimension; + + final itemCenter = (index * itemExtent) + (cardWidth / 2); + + final targetOffset = itemCenter - (viewportWidth / 2); + + final clampedOffset = targetOffset.clamp( + scrollController.position.minScrollExtent, + scrollController.position.maxScrollExtent, + ); + + scrollController.animateTo( + clampedOffset, + duration: const Duration(milliseconds: 300), + curve: Curves.easeOutCubic, + ); + } + @override Widget build(BuildContext context) { final room = controller.room; @@ -103,15 +137,24 @@ class ButtonControlledCarouselView extends StatelessWidget { final isColumnMode = FluffyThemes.isColumnMode(context); + if (userSummaries.isEmpty) { + return const SizedBox(); + } + + final cardWidth = isColumnMode ? 400.0 : 350.0; + return Column( children: [ SizedBox( height: 270.0, - child: ListView( + child: ListView.builder( + key: PageStorageKey('summaries-carousel-${room.id}'), shrinkWrap: true, - controller: controller.carouselController, + controller: controller.activityController.carouselController, scrollDirection: Axis.horizontal, - children: userSummaries.mapIndexed((i, p) { + itemCount: userSummaries.length, + itemBuilder: (context, i) { + final p = userSummaries[i]; final user = room.getParticipants().firstWhereOrNull( (u) => u.id == p.participantId, ); @@ -119,13 +162,16 @@ class ButtonControlledCarouselView extends StatelessWidget { (role) => role.userId == p.participantId, ); return Container( - width: isColumnMode ? 400.0 : 350.0, - margin: const EdgeInsets.only(right: 5.0), + width: cardWidth, + margin: i == userSummaries.length - 1 + ? null + : const EdgeInsets.only(right: 5.0), padding: const EdgeInsets.all(12.0), decoration: ShapeDecoration( - color: Theme.of(context).brightness == Brightness.light - ? AppConfig.yellowLight - : Color.lerp(AppConfig.gold, Colors.black, 0.3), + color: Color.alphaBlend( + Theme.of(context).colorScheme.surface.withAlpha(70), + AppConfig.gold, + ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), @@ -148,7 +194,7 @@ class ButtonControlledCarouselView extends StatelessWidget { child: Text( "${userRole.role ?? L10n.of(context).participant} | ${user?.calcDisplayname() ?? p.participantId.localpart}", style: const TextStyle( - fontSize: 12.0, + fontSize: 14.0, ), overflow: TextOverflow.ellipsis, ), @@ -158,8 +204,12 @@ class ButtonControlledCarouselView extends StatelessWidget { Flexible( child: SingleChildScrollView( child: Text( - p.feedback, - style: const TextStyle(fontSize: 12.0), + p.displayFeedback( + user?.calcDisplayname() ?? + p.participantId.localpart ?? + p.participantId, + ), + style: const TextStyle(fontSize: 14.0), ), ), ), @@ -172,12 +222,11 @@ class ButtonControlledCarouselView extends StatelessWidget { alignment: WrapAlignment.center, spacing: 12, runSpacing: 8, - //crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( p.cefrLevel, style: const TextStyle( - fontSize: 12.0, + fontSize: 14.0, ), ), //const SizedBox(width: 8), @@ -206,10 +255,9 @@ class ButtonControlledCarouselView extends StatelessWidget { ), ], if (p.superlatives.isNotEmpty) ...[ - //const SizedBox(width: 8), Text( p.superlatives.first, - style: const TextStyle(fontSize: 12.0), + style: const TextStyle(fontSize: 14.0), ), ], ], @@ -220,32 +268,41 @@ class ButtonControlledCarouselView extends StatelessWidget { ], ), ); - }).toList(), + }, ), ), const SizedBox(height: 12), - Row( - mainAxisSize: MainAxisSize.min, - children: userSummaries.mapIndexed((i, p) { - final user = room.getParticipants().firstWhereOrNull( - (u) => u.id == p.participantId, - ); - final userRole = assignedRoles.values.firstWhere( - (role) => role.userId == p.participantId, - ); - final userRoleInfo = availableRoles[userRole.id]!; - return ActivityParticipantIndicator( - name: userRoleInfo.name, - userId: p.participantId, - user: user, - borderRadius: BorderRadius.circular(4), - selected: controller.highlightedRole?.id == userRole.id, - onTap: () { - controller.highlightRole(userRole); - controller.carouselController.jumpTo(i * 250.0); - }, - ); - }).toList(), + SizedBox( + height: 125.0, + child: ValueListenableBuilder( + valueListenable: controller.activityController.highlightedRole, + builder: (context, highlightedRole, __) { + return ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: userSummaries.length, + itemBuilder: (context, index) { + final p = userSummaries[index]; + final user = room.getParticipants().firstWhereOrNull( + (u) => u.id == p.participantId, + ); + final userRole = assignedRoles.values.firstWhere( + (role) => role.userId == p.participantId, + ); + final userRoleInfo = availableRoles[userRole.id]!; + return ActivityParticipantIndicator( + name: userRoleInfo.name, + userId: p.participantId, + user: user, + borderRadius: BorderRadius.circular(4), + selected: highlightedRole?.id == userRole.id, + onTap: () => _scrollToUser(userRole, index, cardWidth), + room: controller.room, + ); + }, + ); + }, + ), ), ], ); @@ -270,7 +327,7 @@ class SuperlativeTile extends StatelessWidget { const Text( "1st", style: TextStyle( - fontSize: 12.0, + fontSize: 14.0, ), ), ], diff --git a/lib/pangea/activity_suggestions/activity_suggestion_card.dart b/lib/pangea/activity_suggestions/activity_suggestion_card.dart index 46879ec81..51378853f 100644 --- a/lib/pangea/activity_suggestions/activity_suggestion_card.dart +++ b/lib/pangea/activity_suggestions/activity_suggestion_card.dart @@ -51,7 +51,10 @@ class ActivitySuggestionCard extends StatelessWidget { ), Expanded( child: Padding( - padding: const EdgeInsets.all(4.0), + padding: const EdgeInsets.symmetric( + vertical: 2.0, + horizontal: 4.0, + ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pangea/activity_suggestions/activity_suggestions_area.dart b/lib/pangea/activity_suggestions/activity_suggestions_area.dart index 98952559a..da888eb65 100644 --- a/lib/pangea/activity_suggestions/activity_suggestions_area.dart +++ b/lib/pangea/activity_suggestions/activity_suggestions_area.dart @@ -75,10 +75,10 @@ // double get cardWidth => _isColumnMode ? 225.0 : 150.0; // String get instructionLanguage => -// MatrixState.pangeaController.languageController.userL1?.langCode ?? +// MatrixState.pangeaController.userController.userL1?.langCode ?? // LanguageKeys.defaultLanguage; // String get targetLanguage => -// MatrixState.pangeaController.languageController.userL2?.langCode ?? +// MatrixState.pangeaController.userController.userL2?.langCode ?? // LanguageKeys.defaultLanguage; // ActivityPlanRequest get _request { diff --git a/lib/pangea/activity_summary/activity_summary_analytics_model.dart b/lib/pangea/activity_summary/activity_summary_analytics_model.dart index dc6b80581..32344a7c4 100644 --- a/lib/pangea/activity_summary/activity_summary_analytics_model.dart +++ b/lib/pangea/activity_summary/activity_summary_analytics_model.dart @@ -45,7 +45,7 @@ class ActivitySummaryAnalyticsModel { } void addMessageConstructs(PangeaMessageEvent event) { - final uses = event.originalSent?.vocabAndMorphUses(); + final uses = event.originalSent?.vocabAndMorphUses; if (uses == null || uses.isEmpty) return; addConstructs(event.senderId, uses); } diff --git a/lib/pangea/activity_summary/activity_summary_request_model.dart b/lib/pangea/activity_summary/activity_summary_request_model.dart index 0334be896..606e5a56b 100644 --- a/lib/pangea/activity_summary/activity_summary_request_model.dart +++ b/lib/pangea/activity_summary/activity_summary_request_model.dart @@ -2,7 +2,6 @@ import 'package:fluffychat/pangea/activity_planner/activity_plan_model.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_roles_model.dart'; -import 'package:fluffychat/pangea/activity_summary/activity_summary_analytics_model.dart'; import 'package:fluffychat/pangea/activity_summary/activity_summary_response_model.dart'; class ActivitySummaryResultsMessage { @@ -70,13 +69,11 @@ class ActivitySummaryRequestModel { final ActivityRolesModel? roleState; final List activityResults; final List contentFeedback; - final ActivitySummaryAnalyticsModel analytics; ActivitySummaryRequestModel({ required this.activity, required this.activityResults, required this.contentFeedback, - required this.analytics, this.roleState, }); @@ -85,7 +82,6 @@ class ActivitySummaryRequestModel { 'activity': activity.toJson(), 'activity_results': activityResults.map((e) => e.toJson()).toList(), 'content_feedback': contentFeedback.map((e) => e.toJson()).toList(), - 'analytics': analytics.toJson(), 'role_state': roleState?.toJson() ?? {}, }; } diff --git a/lib/pangea/activity_summary/activity_summary_response_model.dart b/lib/pangea/activity_summary/activity_summary_response_model.dart index 9954ad59a..497fa1846 100644 --- a/lib/pangea/activity_summary/activity_summary_response_model.dart +++ b/lib/pangea/activity_summary/activity_summary_response_model.dart @@ -29,6 +29,9 @@ class ParticipantSummaryModel { 'superlatives': superlatives, }; } + + String displayFeedback(String displayName) => + feedback.replaceAll(participantId, displayName); } class ActivitySummaryResponseModel { diff --git a/lib/pangea/analytics_data/analytics_data_service.dart b/lib/pangea/analytics_data/analytics_data_service.dart new file mode 100644 index 000000000..f3084c061 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_data_service.dart @@ -0,0 +1,492 @@ +import 'dart:async'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/analytics_data/analytics_database.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_database_builder.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_sync_controller.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_update_dispatcher.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_update_events.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_update_service.dart'; +import 'package:fluffychat/pangea/analytics_data/construct_merge_table.dart'; +import 'package:fluffychat/pangea/analytics_data/derived_analytics_data_model.dart'; +import 'package:fluffychat/pangea/analytics_data/level_up_analytics_service.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/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_event.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics_settings/analytics_settings_extension.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/user/analytics_profile_model.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class _AnalyticsClient { + final Client client; + final AnalyticsDatabase database; + + _AnalyticsClient({ + required this.client, + required this.database, + }); +} + +class AnalyticsStreamUpdate { + final int points; + final ConstructIdentifier? blockedConstruct; + final String? targetID; + + AnalyticsStreamUpdate({ + this.points = 0, + this.blockedConstruct, + this.targetID, + }); +} + +class AnalyticsDataService { + _AnalyticsClient? _analyticsClient; + + late final AnalyticsUpdateDispatcher updateDispatcher; + late final AnalyticsUpdateService updateService; + late final LevelUpAnalyticsService levelUpService; + AnalyticsSyncController? _syncController; + final ConstructMergeTable _mergeTable = ConstructMergeTable(); + + Completer initCompleter = Completer(); + + AnalyticsDataService(Client client) { + updateDispatcher = AnalyticsUpdateDispatcher(this); + updateService = AnalyticsUpdateService(this); + levelUpService = LevelUpAnalyticsService( + client: client, + ensureInitialized: () => _ensureInitialized(), + dataService: this, + ); + _initDatabase(client); + } + + static const int _morphUnlockXP = 30; + + int _cacheVersion = 0; + int _derivedCacheVersion = -1; + DerivedAnalyticsDataModel? _cachedDerivedStats; + + _AnalyticsClient get _analyticsClientGetter { + assert(_analyticsClient != null); + return _analyticsClient!; + } + + bool get isInitializing => !initCompleter.isCompleted; + + Future getAnalyticsRoom(LanguageModel l2) => + _analyticsClientGetter.client.getMyAnalyticsRoom(l2); + + void dispose() { + _syncController?.dispose(); + updateDispatcher.dispose(); + _closeDatabase(); + } + + void _invalidateCaches() { + _cacheVersion++; + _cachedDerivedStats = null; + } + + Future _initDatabase(Client client) async { + _invalidateCaches(); + + final database = await analyticsDatabaseBuilder( + "${client.clientName}_analytics", + ); + _analyticsClient = _AnalyticsClient(client: client, database: database); + + if (client.isLogged()) { + await _initAnalytics(); + } else { + await client.onLoginStateChanged.stream.firstWhere( + (state) => state == LoginState.loggedIn, + ); + await _initAnalytics(); + } + } + + Future _initAnalytics() async { + try { + Logs().i("Initializing analytics database."); + final client = _analyticsClientGetter.client; + if (client.prevBatch == null) { + await client.onSync.stream.first; + } + + _invalidateCaches(); + final analyticsUserId = await _analyticsClientGetter.database.getUserID(); + if (analyticsUserId != client.userID) { + await _clearDatabase(); + await _analyticsClientGetter.database.updateUserID(client.userID!); + } + + final resp = await client.getUserProfile(client.userID!); + final analyticsProfile = + AnalyticsProfileModel.fromJson(resp.additionalProperties); + + _syncController?.dispose(); + _syncController = AnalyticsSyncController( + client: client, + dataService: this, + ); + 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(); + } catch (e, s) { + Logs().e("Error initializing analytics: $e, $s"); + } finally { + Logs().i("Analytics database initialized."); + initCompleter.complete(); + updateDispatcher.sendConstructAnalyticsUpdate(AnalyticsUpdate([])); + } + } + + Future _initMergeTable() async { + final vocab = await _analyticsClientGetter.database + .getAggregatedConstructs(ConstructTypeEnum.vocab); + final morph = await _analyticsClientGetter.database + .getAggregatedConstructs(ConstructTypeEnum.morph); + + final blocked = blockedConstructs; + _mergeTable.addConstructs(vocab, blocked); + _mergeTable.addConstructs(morph, blocked); + } + + Future reinitialize() async { + Logs().i("Reinitializing analytics database."); + initCompleter = Completer(); + await _clearDatabase(); + await _initDatabase(_analyticsClientGetter.client); + } + + Future _clearDatabase() async { + await _analyticsClient?.database.clear(); + _invalidateCaches(); + _mergeTable.clear(); + } + + Future _closeDatabase() async { + await _analyticsClient?.database.delete(); + _analyticsClient = null; + _invalidateCaches(); + _mergeTable.clear(); + } + + Future _ensureInitialized() => + initCompleter.isCompleted ? Future.value() : initCompleter.future; + + int numConstructs(ConstructTypeEnum type) => + _mergeTable.uniqueConstructsByType(type); + + bool hasUsedConstruct(ConstructIdentifier id) => + _mergeTable.constructUsed(id); + + int uniqueConstructsByType(ConstructTypeEnum type) => + _mergeTable.uniqueConstructsByType(type); + + Set get blockedConstructs { + final analyticsRoom = _analyticsClientGetter.client.analyticsRoomLocal(); + return analyticsRoom?.blockedConstructs ?? {}; + } + + Future waitForSync() async { + await _syncController?.syncStream.stream.first; + } + + Future get derivedData async { + await _ensureInitialized(); + + if (_cachedDerivedStats == null || _derivedCacheVersion != _cacheVersion) { + _cachedDerivedStats = + await _analyticsClientGetter.database.getDerivedStats(); + _derivedCacheVersion = _cacheVersion; + } + + return _cachedDerivedStats!; + } + + Future getLastUpdatedAnalytics() async { + return _analyticsClientGetter.database.getLastEventTimestamp(); + } + + Future> getUses({ + int? count, + String? roomId, + DateTime? since, + }) async { + await _ensureInitialized(); + final uses = await _analyticsClientGetter.database.getUses( + count: count, + roomId: roomId, + since: since, + ); + + final blocked = blockedConstructs; + final List filtered = []; + + final Map cappedLastUseCache = {}; + for (final use in uses) { + if (blocked.contains(use.identifier)) continue; + if (!cappedLastUseCache.containsKey(use.identifier)) { + final constructs = await getConstructUse(use.identifier); + cappedLastUseCache[use.identifier] = constructs.cappedLastUse; + } + final cappedLastUse = cappedLastUseCache[use.identifier]; + if (cappedLastUse != null && use.timeStamp.isAfter(cappedLastUse)) { + continue; + } + filtered.add(use); + } + + return filtered; + } + + Future> getLocalUses() async { + await _ensureInitialized(); + return _analyticsClientGetter.database.getLocalUses(); + } + + Future getLocalConstructCount() async { + await _ensureInitialized(); + return _analyticsClientGetter.database.getLocalConstructCount(); + } + + Future getConstructUse(ConstructIdentifier id) async { + await _ensureInitialized(); + final blocked = blockedConstructs; + final ids = _mergeTable.groupedIds(_mergeTable.resolve(id), blocked); + if (ids.isEmpty) { + return ConstructUses( + uses: [], + constructType: id.type, + lemma: id.lemma, + category: id.category, + ); + } + + return _analyticsClientGetter.database.getConstructUse(ids); + } + + Future> getConstructUses( + List ids, + ) async { + await _ensureInitialized(); + final Map> request = {}; + final blocked = blockedConstructs; + for (final id in ids) { + if (blocked.contains(id)) continue; + request[id] = _mergeTable.groupedIds(_mergeTable.resolve(id), blocked); + } + + return _analyticsClientGetter.database.getConstructUses(request); + } + + Future> getAggregatedConstructs( + ConstructTypeEnum type, + ) async { + final combined = + await _analyticsClientGetter.database.getAggregatedConstructs(type); + + final stopwatch = Stopwatch()..start(); + + final cleaned = {}; + final blocked = blockedConstructs; + for (final entry in combined) { + final canonical = _mergeTable.resolve(entry.id); + + // Insert or merge + final existing = cleaned[canonical]; + if (existing != null) { + existing.merge(entry); + } else if (!blocked.contains(canonical)) { + cleaned[canonical] = entry; + } + } + + stopwatch.stop(); + Logs().i( + "Merging analytics took: ${stopwatch.elapsedMilliseconds} ms, total constructs: ${cleaned.length}", + ); + + return cleaned; + } + + Future getNewConstructCount( + List newConstructs, + ConstructTypeEnum type, + ) async { + await _ensureInitialized(); + final blocked = blockedConstructs; + final uses = newConstructs + .where( + (c) => c.constructType == type && !blocked.contains(c.identifier), + ) + .toList(); + + final Map constructPoints = {}; + for (final use in uses) { + constructPoints[use.identifier] ??= 0; + constructPoints[use.identifier] = + constructPoints[use.identifier]! + use.xp; + } + + final constructs = await getConstructUses(constructPoints.keys.toList()); + + int newConstructCount = 0; + for (final entry in constructPoints.entries) { + final construct = constructs[entry.key]!; + if (construct.points == entry.value) { + newConstructCount++; + } + } + + return newConstructCount; + } + + Future updateXPOffset(int offset) async { + _invalidateCaches(); + await _analyticsClientGetter.database.updateXPOffset(offset); + } + + Future> updateLocalAnalytics( + AnalyticsUpdate update, + ) async { + final events = []; + final updateIds = update.addedConstructs.map((c) => c.identifier).toList(); + + final prevData = await derivedData; + final prevConstructs = await getConstructUses(updateIds); + + _invalidateCaches(); + await _ensureInitialized(); + + final blocked = blockedConstructs; + _mergeTable.addConstructsByUses(update.addedConstructs, blocked); + await _analyticsClientGetter.database.updateLocalAnalytics( + update.addedConstructs, + ); + + final newConstructs = await getConstructUses(updateIds); + + int points = 0; + if (update.blockedConstruct == null || updateIds.isNotEmpty) { + 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. + // Do this on all updates (not just on level updates) to account for cases + // of target language updates being missed (https://github.com/pangeachat/client/issues/2006) + MatrixState.pangeaController.userController.updateAnalyticsProfile( + level: newData.level, + ); + + if (newData.level > prevData.level) { + events.add(LevelUpEvent(prevData.level, newData.level)); + } else if (newData.level < prevData.level) { + final lowerLevelXP = DerivedAnalyticsDataModel.calculateXpWithLevel( + prevData.level, + ); + + final offset = lowerLevelXP - newData.totalXP; + await MatrixState.pangeaController.userController.addXPOffset(offset); + await updateXPOffset( + MatrixState.pangeaController.userController.analyticsProfile!.xpOffset!, + ); + } + + 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(); + + if (newUnlockedMorphs.isNotEmpty) { + events.add(MorphUnlockedEvent(newUnlockedMorphs)); + } + + if (update.blockedConstruct != null) { + events.add(ConstructBlockedEvent(update.blockedConstruct!)); + } + + return events; + } + + Future updateServerAnalytics( + List events, + ) async { + _invalidateCaches(); + final blocked = blockedConstructs; + for (final event in events) { + _mergeTable.addConstructsByUses( + event.content.uses, + blocked, + ); + } + await _analyticsClientGetter.database.updateServerAnalytics(events); + } + + Future updateBlockedConstructs( + ConstructIdentifier constructId, + ) async { + await _ensureInitialized(); + _mergeTable.removeConstruct(constructId); + + final construct = + await _analyticsClientGetter.database.getConstructUse([constructId]); + + final derived = await derivedData; + final newXP = derived.totalXP - construct.points; + final newLevel = DerivedAnalyticsDataModel.calculateLevelWithXp(newXP); + + await MatrixState.pangeaController.userController.updateAnalyticsProfile( + level: newLevel, + ); + + await _analyticsClientGetter.database.updateDerivedStats( + DerivedAnalyticsDataModel(totalXP: newXP), + ); + + _invalidateCaches(); + updateDispatcher.sendConstructAnalyticsUpdate( + AnalyticsUpdate( + [], + blockedConstruct: constructId, + ), + ); + } + + Future clearLocalAnalytics() async { + _invalidateCaches(); + await _ensureInitialized(); + await _analyticsClientGetter.database.clearLocalConstructData(); + } +} diff --git a/lib/pangea/analytics_data/analytics_database.dart b/lib/pangea/analytics_data/analytics_database.dart new file mode 100644 index 000000000..8a1f089c5 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_database.dart @@ -0,0 +1,635 @@ +// ignore_for_file: implementation_imports, depend_on_referenced_packages + +import 'dart:async'; +import 'dart:math'; + +import 'package:matrix/matrix.dart'; +import 'package:sqflite_common/sqflite.dart'; +import 'package:synchronized/synchronized.dart'; + +import 'package:fluffychat/pangea/analytics_data/derived_analytics_data_model.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_misc/constructs_event.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; + +import 'package:matrix/src/database/database_file_storage_stub.dart' + if (dart.library.io) 'package:matrix/src/database/database_file_storage_io.dart'; +import 'package:matrix/src/database/indexeddb_box.dart' + if (dart.library.io) 'package:matrix/src/database/sqflite_box.dart'; + +class AnalyticsDatabase with DatabaseFileStorage { + final String name; + + late BoxCollection _collection; + late Box _lastEventTimestampBox; + + late Box _serverConstructsBox; + late Box _localConstructsBox; + late Box _aggregatedServerVocabConstructsBox; + late Box _aggregatedLocalVocabConstructsBox; + late Box _aggregatedServerMorphConstructsBox; + late Box _aggregatedLocalMorphConstructsBox; + late Box _derivedStatsBox; + + static const String _serverConstructsBoxName = 'box_server_constructs'; + + static const String _localConstructsBoxName = 'box_local_constructs'; + + /// Key is Tuple of construct lemma, type, and category + static const String _aggregatedServerVocabConstructsBoxName = + 'box_aggregated_server_vocab_constructs'; + + static const String _aggregatedLocalVocabConstructsBoxName = + 'box_aggregated_local_vocab_constructs'; + + static const String _aggregatedServerMorphConstructsBoxName = + 'box_aggregated_server_morph_constructs'; + + static const String _aggregatedLocalMorphConstructsBoxName = + 'box_aggregated_local_morph_constructs'; + + static const String _derivedStatsBoxName = 'box_derived_stats'; + + static const String _lastEventTimestampBoxName = 'box_last_event_timestamp'; + + Database? database; + + /// Custom IdbFactory used to create the indexedDB. On IO platforms it would + /// lead to an error to import "dart:indexed_db" so this is dynamically + /// typed. + final dynamic idbFactory; + + /// Custom SQFlite Database Factory used for high level operations on IO + /// like delete. Set it if you want to use sqlite FFI. + final DatabaseFactory? sqfliteFactory; + + static Future init( + String name, { + Database? database, + dynamic idbFactory, + DatabaseFactory? sqfliteFactory, + Uri? fileStorageLocation, + Duration? deleteFilesAfterDuration, + }) async { + final analyticsDatabase = AnalyticsDatabase._( + name, + database: database, + idbFactory: idbFactory, + sqfliteFactory: sqfliteFactory, + fileStorageLocation: fileStorageLocation, + deleteFilesAfterDuration: deleteFilesAfterDuration, + ); + await analyticsDatabase.open(); + return analyticsDatabase; + } + + AnalyticsDatabase._( + this.name, { + this.database, + this.idbFactory, + this.sqfliteFactory, + Uri? fileStorageLocation, + Duration? deleteFilesAfterDuration, + }) { + this.fileStorageLocation = fileStorageLocation; + this.deleteFilesAfterDuration = deleteFilesAfterDuration; + } + + final _lock = Lock(); + + Future open() async { + _collection = await BoxCollection.open( + name, + { + _lastEventTimestampBoxName, + _serverConstructsBoxName, + _localConstructsBoxName, + _aggregatedServerVocabConstructsBoxName, + _aggregatedLocalVocabConstructsBoxName, + _aggregatedServerMorphConstructsBoxName, + _aggregatedLocalMorphConstructsBoxName, + _derivedStatsBoxName, + }, + sqfliteDatabase: database, + sqfliteFactory: sqfliteFactory, + idbFactory: idbFactory, + version: MatrixSdkDatabase.version, + ); + + _lastEventTimestampBox = _collection.openBox( + _lastEventTimestampBoxName, + ); + _serverConstructsBox = _collection.openBox( + _serverConstructsBoxName, + ); + _localConstructsBox = _collection.openBox( + _localConstructsBoxName, + ); + _aggregatedServerVocabConstructsBox = _collection.openBox( + _aggregatedServerVocabConstructsBoxName, + ); + _aggregatedLocalVocabConstructsBox = _collection.openBox( + _aggregatedLocalVocabConstructsBoxName, + ); + _aggregatedServerMorphConstructsBox = _collection.openBox( + _aggregatedServerMorphConstructsBoxName, + ); + _aggregatedLocalMorphConstructsBox = _collection.openBox( + _aggregatedLocalMorphConstructsBoxName, + ); + _derivedStatsBox = _collection.openBox( + _derivedStatsBoxName, + ); + } + + Future delete() async { + await _collection.deleteDatabase( + database?.path ?? name, + sqfliteFactory ?? idbFactory, + ); + } + + Future clear() async { + _lastEventTimestampBox.clearQuickAccessCache(); + _serverConstructsBox.clearQuickAccessCache(); + _localConstructsBox.clearQuickAccessCache(); + _aggregatedServerVocabConstructsBox.clearQuickAccessCache(); + _aggregatedLocalVocabConstructsBox.clearQuickAccessCache(); + _aggregatedServerMorphConstructsBox.clearQuickAccessCache(); + _aggregatedLocalMorphConstructsBox.clearQuickAccessCache(); + _derivedStatsBox.clearQuickAccessCache(); + await _collection.clear(); + } + + Future _transaction(Future Function() action) { + return _lock.synchronized(action); + } + + Box _aggBox(ConstructTypeEnum type, bool local) => + switch ((type, local)) { + (ConstructTypeEnum.vocab, true) => _aggregatedLocalVocabConstructsBox, + (ConstructTypeEnum.vocab, false) => _aggregatedServerVocabConstructsBox, + (ConstructTypeEnum.morph, true) => _aggregatedLocalMorphConstructsBox, + (ConstructTypeEnum.morph, false) => _aggregatedServerMorphConstructsBox, + }; + + Future getUserID() => _lastEventTimestampBox.get('user_id'); + + Future getLastEventTimestamp() async { + final timestampString = + await _lastEventTimestampBox.get('last_event_timestamp'); + if (timestampString == null) return null; + return DateTime.parse(timestampString); + } + + Future getDerivedStats() async { + final raw = await _derivedStatsBox.get('derived_stats'); + return raw == null + ? DerivedAnalyticsDataModel() + : DerivedAnalyticsDataModel.fromJson( + Map.from(raw), + ); + } + + Future> getUses({ + int? count, + String? roomId, + DateTime? since, + }) async { + final stopwatch = Stopwatch()..start(); + final results = []; + + bool addUseIfValid(OneConstructUse use) { + if (since != null && use.timeStamp.isBefore(since)) { + return false; // stop iteration entirely + } + if (roomId != null && use.metadata.roomId != roomId) { + return true; // skip but continue + } + + results.add(use); + return count == null || results.length < count; + } + + // ---- Local uses ---- + final localUses = await getLocalUses() + ..sort((a, b) => b.timeStamp.compareTo(a.timeStamp)); + + for (final use in localUses) { + if (!addUseIfValid(use)) break; + } + + if (count != null && results.length >= count) { + stopwatch.stop(); + Logs().i("Get uses took ${stopwatch.elapsedMilliseconds} ms"); + return results; + } + + // ---- Server uses ---- + final serverKeys = await _serverConstructsBox.getAllKeys() + ..sort( + (a, b) => + int.parse(b.split('|')[1]).compareTo(int.parse(a.split('|')[1])), + ); + + for (final key in serverKeys) { + final serverUses = await getServerUses(key) + ..sort((a, b) => b.timeStamp.compareTo(a.timeStamp)); + + for (final use in serverUses) { + if (!addUseIfValid(use)) break; + } + + if (count != null && results.length >= count) break; + } + + stopwatch.stop(); + Logs().i("Get uses took ${stopwatch.elapsedMilliseconds} ms"); + return results; + } + + Future> getLocalUses() async { + final List uses = []; + final localKeys = await _localConstructsBox.getAllKeys(); + final localValues = await _localConstructsBox.getAll(localKeys); + for (final rawList in localValues) { + if (rawList == null) continue; + for (final raw in rawList) { + final use = OneConstructUse.fromJson( + Map.from(raw), + ); + uses.add(use); + } + } + return uses; + } + + Future> getServerUses(String key) async { + final List uses = []; + final serverValues = await _serverConstructsBox.get(key); + if (serverValues == null) return []; + + for (final entry in serverValues) { + uses.add( + OneConstructUse.fromJson( + Map.from(entry), + ), + ); + } + return uses; + } + + Future getLocalConstructCount() async { + final keys = await _localConstructsBox.getAllKeys(); + return keys.length; + } + + Future> getVocabConstructKeys() async { + final serverKeys = await _aggregatedServerVocabConstructsBox.getAllKeys(); + final localKeys = await _aggregatedLocalVocabConstructsBox.getAllKeys(); + return [...serverKeys, ...localKeys]; + } + + Future> getMorphConstructKeys() async { + final serverKeys = await _aggregatedServerMorphConstructsBox.getAllKeys(); + final localKeys = await _aggregatedLocalMorphConstructsBox.getAllKeys(); + return [...serverKeys, ...localKeys]; + } + + Future getConstructUse( + List ids, + ) async { + assert(ids.isNotEmpty); + + final ConstructUses construct = ConstructUses( + uses: [], + constructType: ids.first.type, + lemma: ids.first.lemma, + category: ids.first.category, + ); + + for (final id in ids) { + final key = id.storageKey; + + ConstructUses? server; + ConstructUses? local; + + final serverBox = _aggBox(id.type, false); + final localBox = _aggBox(id.type, true); + + final serverRaw = await serverBox.get(key); + if (serverRaw != null) { + server = ConstructUses.fromJson( + Map.from(serverRaw), + ); + } + + final localRaw = await localBox.get(key); + if (localRaw != null) { + local = ConstructUses.fromJson( + Map.from(localRaw), + ); + } + + if (server != null) construct.merge(server); + if (local != null) construct.merge(local); + } + return construct; + } + + Future> getConstructUses( + Map> ids, + ) async { + final Map results = {}; + for (final entry in ids.entries) { + final construct = await getConstructUse(entry.value); + results[entry.key] = construct; + } + return results; + } + + Future clearLocalConstructData() async { + await _transaction(() async { + await _localConstructsBox.clear(); + await _aggregatedLocalVocabConstructsBox.clear(); + await _aggregatedLocalMorphConstructsBox.clear(); + }); + } + + /// Group uses by aggregate key + Map> _groupUses( + List uses, + ) { + final Map> grouped = {}; + for (final u in uses) { + final key = u.identifier.storageKey; + (grouped[key] ??= []).add(u); + } + return grouped; + } + + Map _aggregateConstructs( + Map> groups, + Map?> existingRaw, + ) { + final Map updates = {}; + + for (final entry in groups.entries) { + final key = entry.key; + final usesForKey = entry.value; + final raw = existingRaw[key]; + + ConstructUses model; + + if (raw != null) { + model = ConstructUses.fromJson(Map.from(raw)); + } else { + final u = usesForKey.first; + model = ConstructUses( + uses: [], + constructType: u.constructType, + lemma: u.lemma, + category: u.category, + ); + } + + for (final u in usesForKey) { + model.addUse(u); + } + + updates[key] = model; + } + + return updates; + } + + Future> _aggregateFromBox( + Box box, + Map> grouped, + ) async { + final keys = grouped.keys.toList(); + final existing = await box.getAll(keys); + + final existingMap = Map.fromIterables(keys, existing); + return _aggregateConstructs(grouped, existingMap); + } + + Future> getAggregatedConstructs( + ConstructTypeEnum type, + ) async { + Map combined = {}; + final stopwatch = Stopwatch()..start(); + + final localKeys = await _aggBox(type, true).getAllKeys(); + final serverKeys = await _aggBox(type, false).getAllKeys(); + + final serverValues = await _aggBox(type, false).getAll(serverKeys); + final serverConstructs = serverValues + .map((e) => ConstructUses.fromJson(Map.from(e!))) + .toList(); + + final serverAgg = Map.fromIterables( + serverKeys, + serverConstructs, + ); + + if (localKeys.isEmpty) { + combined = serverAgg; + } else { + final localValues = await _aggBox(type, true).getAll(localKeys); + final localConstructs = localValues + .map((e) => ConstructUses.fromJson(Map.from(e!))) + .toList(); + + final localAgg = Map.fromIterables( + localKeys, + localConstructs, + ); + + combined = Map.from(serverAgg); + for (final entry in localAgg.entries) { + final key = entry.key; + final localModel = entry.value; + + if (combined.containsKey(key)) { + final serverModel = combined[key]!; + serverModel.merge(localModel); + combined[key] = serverModel; + } else { + combined[key] = localModel; + } + } + } + + stopwatch.stop(); + Logs().i( + "Combining aggregates took ${stopwatch.elapsedMilliseconds} ms", + ); + + return combined.values.toList(); + } + + Future updateUserID(String userID) { + return _transaction(() async { + await _lastEventTimestampBox.put( + 'user_id', + userID, + ); + }); + } + + Future updateXPOffset(int offset) { + return _transaction(() async { + final stats = await getDerivedStats(); + final updatedStats = stats.copyWith(offset: offset); + await _derivedStatsBox.put( + 'derived_stats', + updatedStats.toJson(), + ); + }); + } + + Future updateDerivedStats(DerivedAnalyticsDataModel newStats) => + _derivedStatsBox.put( + 'derived_stats', + newStats.toJson(), + ); + + Future updateServerAnalytics( + List events, + ) async { + if (events.isEmpty) return; + + final stopwatch = Stopwatch()..start(); + await _transaction(() async { + final lastUpdated = await getLastEventTimestamp(); + + DateTime mostRecent = lastUpdated ?? events.first.event.originServerTs; + final existingKeys = (await _serverConstructsBox.getAllKeys()).toSet(); + + final List aggregatedVocabUses = []; + final List aggregatedMorphUses = []; + final Map> pendingWrites = {}; + + for (final event in events) { + final ts = event.event.originServerTs; + final key = TupleKey( + event.event.eventId, + ts.millisecondsSinceEpoch.toString(), + ).toString(); + + if (lastUpdated != null && ts.isBefore(lastUpdated)) continue; + if (existingKeys.contains(key)) continue; + + if (ts.isAfter(mostRecent)) mostRecent = ts; + + pendingWrites[key] = event.content.uses; + for (final u in event.content.uses) { + u.constructType == ConstructTypeEnum.vocab + ? aggregatedVocabUses.add(u) + : aggregatedMorphUses.add(u); + } + } + + if (pendingWrites.isEmpty) return; + + // Write events sequentially + for (final e in pendingWrites.entries) { + _serverConstructsBox.put( + e.key, + e.value.map((u) => u.toJson()).toList(), + ); + } + + // Update aggregates + final aggVocabUpdates = await _aggregateFromBox( + _aggregatedServerVocabConstructsBox, + _groupUses(aggregatedVocabUses), + ); + + for (final entry in aggVocabUpdates.entries) { + await _aggregatedServerVocabConstructsBox.put( + entry.key, + entry.value.toJson(), + ); + } + + final aggMorphUpdates = await _aggregateFromBox( + _aggregatedServerMorphConstructsBox, + _groupUses(aggregatedMorphUses), + ); + + for (final entry in aggMorphUpdates.entries) { + await _aggregatedServerMorphConstructsBox.put( + entry.key, + entry.value.toJson(), + ); + } + + // Update timestamp + await _lastEventTimestampBox.put( + 'last_event_timestamp', + mostRecent.toIso8601String(), + ); + }); + + stopwatch.stop(); + Logs().i( + "Server analytics update took ${stopwatch.elapsedMilliseconds} ms", + ); + } + + Future updateLocalAnalytics( + List uses, + ) async { + if (uses.isEmpty) return; + + final stopwatch = Stopwatch()..start(); + await _transaction(() async { + // Store local constructs + final key = DateTime.now().millisecondsSinceEpoch; + _localConstructsBox.put( + key.toString(), + uses.map((u) => u.toJson()).toList(), + ); + + final List vocabUses = []; + final List morphUses = []; + for (final u in uses) { + u.constructType == ConstructTypeEnum.vocab + ? vocabUses.add(u) + : morphUses.add(u); + } + + // Update aggregates + final aggVocabUpdates = await _aggregateFromBox( + _aggregatedLocalVocabConstructsBox, + _groupUses(vocabUses), + ); + + for (final entry in aggVocabUpdates.entries) { + await _aggregatedLocalVocabConstructsBox.put( + entry.key, + entry.value.toJson(), + ); + } + + final aggMorphUpdates = await _aggregateFromBox( + _aggregatedLocalMorphConstructsBox, + _groupUses(morphUses), + ); + + for (final entry in aggMorphUpdates.entries) { + await _aggregatedLocalMorphConstructsBox.put( + entry.key, + entry.value.toJson(), + ); + } + }); + + stopwatch.stop(); + Logs().i("Local analytics update took ${stopwatch.elapsedMilliseconds} ms"); + } +} diff --git a/lib/pangea/analytics_data/analytics_database_builder.dart b/lib/pangea/analytics_data/analytics_database_builder.dart new file mode 100644 index 000000000..7f698aec8 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_database_builder.dart @@ -0,0 +1,95 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; + +import 'package:matrix/matrix.dart'; +import 'package:path/path.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:sqflite_common_ffi/sqflite_ffi.dart'; +import 'package:universal_html/html.dart' as html; + +import 'package:fluffychat/pangea/analytics_data/analytics_database.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/sqlcipher_stub.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; + +Future analyticsDatabaseBuilder(String name) async { + AnalyticsDatabase? database; + try { + database = await _constructDatabase(name); + await database.open(); + return database; + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {"clientID": name}, + m: "Failed to open analytics database. Opening fallback database.", + ); + + Logs().wtf('Unable to construct database!', e, s); + // Try to delete database so that it can created again on next init: + database?.delete().catchError((err, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {}, + m: "Failed to delete analytics database after failed construction.", + ); + }); + + // Delete database file: + if (database == null && !kIsWeb) { + final dbFile = File(await _getDatabasePath(name)); + if (await dbFile.exists()) await dbFile.delete(); + } + + rethrow; + } +} + +Future _constructDatabase(String name) async { + if (kIsWeb) { + html.window.navigator.storage?.persist(); + return await AnalyticsDatabase.init(name); + } + + Directory? fileStorageLocation; + try { + fileStorageLocation = await getTemporaryDirectory(); + } on MissingPlatformDirectoryException catch (_) { + Logs().w( + 'No temporary directory for file cache available on this platform.', + ); + } + + final path = await _getDatabasePath(name); + + // fix dlopen for old Android + await applyWorkaroundToOpenSqlCipherOnOldAndroidVersions(); + // import the SQLite / SQLCipher shared objects / dynamic libraries + final factory = + createDatabaseFactoryFfi(ffiInit: SQfLiteEncryptionHelper.ffiInit); + + // required for [getDatabasesPath] + databaseFactory = factory; + final database = await factory.openDatabase( + path, + options: OpenDatabaseOptions(version: 1), + ); + + return await AnalyticsDatabase.init( + name, + database: database, + fileStorageLocation: fileStorageLocation?.uri, + deleteFilesAfterDuration: const Duration(days: 30), + ); +} + +Future _getDatabasePath(String name) async { + final databaseDirectory = PlatformInfos.isIOS || PlatformInfos.isMacOS + ? await getLibraryDirectory() + : await getApplicationSupportDirectory(); + + return join(databaseDirectory.path, '$name.sqlite'); +} diff --git a/lib/pangea/analytics_data/analytics_sync_controller.dart b/lib/pangea/analytics_data/analytics_sync_controller.dart new file mode 100644 index 000000000..d0aaaccee --- /dev/null +++ b/lib/pangea/analytics_data/analytics_sync_controller.dart @@ -0,0 +1,85 @@ +import 'dart:async'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; +import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_event.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class AnalyticsSyncController { + final Client client; + final AnalyticsDataService dataService; + + StreamSubscription? _subscription; + StreamController> syncStream = + StreamController>.broadcast(); + + AnalyticsSyncController({ + required this.client, + required this.dataService, + }); + + void start() { + _subscription ??= client.onSync.stream.listen(_onSync); + } + + void dispose() { + _subscription?.cancel(); + _subscription = null; + syncStream.close(); + } + + Future _onSync(SyncUpdate update) async { + final analyticsRoom = _getAnalyticsRoom(); + if (analyticsRoom == null) return; + + final events = + update.rooms?.join?[analyticsRoom.id]?.timeline?.events?.where( + (e) => + e.type == PangeaEventTypes.construct && e.senderId == client.userID, + ); + + if (events == null || events.isEmpty) return; + + final constructEvents = events + .map( + (e) => ConstructAnalyticsEvent( + event: Event.fromMatrixEvent(e, analyticsRoom), + ), + ) + .where((e) => e.event.status == EventStatus.synced) + .toList(); + + if (constructEvents.isEmpty) return; + await dataService.updateServerAnalytics(constructEvents); + + syncStream.add( + List.from(constructEvents.map((e) => e.event.eventId)), + ); + } + + Future bulkUpdate() async { + final analyticsRoom = _getAnalyticsRoom(); + if (analyticsRoom == null) return; + + final lastUpdated = await dataService.getLastUpdatedAnalytics(); + + final events = await analyticsRoom.getAnalyticsEvents( + userId: client.userID!, + since: lastUpdated, + ); + + if (events == null || events.isEmpty) return; + + await dataService.updateServerAnalytics(events); + } + + Room? _getAnalyticsRoom() { + final l2 = MatrixState.pangeaController.userController.userL2; + if (l2 == null) return null; + return client.analyticsRoomLocal(l2); + } +} diff --git a/lib/pangea/analytics_data/analytics_update_dispatcher.dart b/lib/pangea/analytics_data/analytics_update_dispatcher.dart new file mode 100644 index 000000000..84d697020 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_update_dispatcher.dart @@ -0,0 +1,140 @@ +import 'dart:async'; + +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_update_events.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/lemmas/user_set_lemma_info.dart'; + +class LevelUpdate { + final int prevLevel; + final int newLevel; + + LevelUpdate({ + required this.prevLevel, + required this.newLevel, + }); +} + +class AnalyticsUpdate { + final List addedConstructs; + final ConstructIdentifier? blockedConstruct; + final String? targetID; + + AnalyticsUpdate( + this.addedConstructs, { + this.blockedConstruct, + this.targetID, + }); +} + +class AnalyticsUpdateDispatcher { + final AnalyticsDataService dataService; + + final StreamController constructUpdateStream = + StreamController.broadcast(); + + final StreamController activityAnalyticsStream = + StreamController.broadcast(); + + final StreamController> unlockedConstructsStream = + StreamController>.broadcast(); + + final StreamController levelUpdateStream = + StreamController.broadcast(); + + final StreamController> + _lemmaInfoUpdateStream = StreamController< + MapEntry>.broadcast(); + + AnalyticsUpdateDispatcher(this.dataService); + + void dispose() { + constructUpdateStream.close(); + activityAnalyticsStream.close(); + unlockedConstructsStream.close(); + levelUpdateStream.close(); + _lemmaInfoUpdateStream.close(); + } + + Stream lemmaUpdateStream( + ConstructIdentifier constructId, + ) => + _lemmaInfoUpdateStream.stream + .where((update) => update.key == constructId) + .map((update) => update.value); + + void sendActivityAnalyticsUpdate( + String activityAnalytics, + ) => + activityAnalyticsStream.add(activityAnalytics); + + void sendLemmaInfoUpdate( + ConstructIdentifier constructId, + UserSetLemmaInfo lemmaInfo, + ) => + _lemmaInfoUpdateStream.add(MapEntry(constructId, lemmaInfo)); + + Future sendConstructAnalyticsUpdate( + AnalyticsUpdate analyticsUpdate, + ) async { + final events = await dataService.updateLocalAnalytics(analyticsUpdate); + for (final event in events) { + _dispatch(event); + } + } + + void _dispatch(AnalyticsUpdateEvent event) { + switch (event) { + case final LevelUpEvent e: + _onLevelUp(e.from, e.to); + break; + case final MorphUnlockedEvent e: + _onUnlockMorphLemmas(e.unlocked); + break; + case final XPGainedEvent e: + _onXPGained(e.points, e.targetID); + break; + case final ConstructBlockedEvent e: + _onBlockedConstruct(e.blockedConstruct); + break; + } + } + + void _onLevelUp(final int lowerLevel, final int upperLevel) { + levelUpdateStream.add( + LevelUpdate( + prevLevel: lowerLevel, + newLevel: upperLevel, + ), + ); + } + + void _onUnlockMorphLemmas(Set unlocked) { + const excludedLemmas = {'not_proper'}; + + final filtered = { + for (final id in unlocked) + if (!excludedLemmas.contains(id.lemma.toLowerCase())) id, + }; + + if (filtered.isNotEmpty) { + unlockedConstructsStream.add(filtered); + } + } + + void _onXPGained(int points, String? targetID) { + final update = AnalyticsStreamUpdate( + points: points, + targetID: targetID, + ); + constructUpdateStream.add(update); + } + + void _onBlockedConstruct(ConstructIdentifier constructId) { + final update = AnalyticsStreamUpdate( + blockedConstruct: constructId, + ); + constructUpdateStream.add(update); + } +} diff --git a/lib/pangea/analytics_data/analytics_update_events.dart b/lib/pangea/analytics_data/analytics_update_events.dart new file mode 100644 index 000000000..511de32a5 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_update_events.dart @@ -0,0 +1,25 @@ +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; + +sealed class AnalyticsUpdateEvent {} + +class LevelUpEvent extends AnalyticsUpdateEvent { + final int from; + final int to; + LevelUpEvent(this.from, this.to); +} + +class MorphUnlockedEvent extends AnalyticsUpdateEvent { + final Set unlocked; + MorphUnlockedEvent(this.unlocked); +} + +class XPGainedEvent extends AnalyticsUpdateEvent { + final int points; + final String? targetID; + XPGainedEvent(this.points, this.targetID); +} + +class ConstructBlockedEvent extends AnalyticsUpdateEvent { + final ConstructIdentifier blockedConstruct; + ConstructBlockedEvent(this.blockedConstruct); +} diff --git a/lib/pangea/analytics_data/analytics_update_service.dart b/lib/pangea/analytics_data/analytics_update_service.dart new file mode 100644 index 000000000..29c0cbaf9 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_update_service.dart @@ -0,0 +1,164 @@ +import 'dart:async'; +import 'dart:developer'; + +import 'package:flutter/foundation.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_update_dispatcher.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/saved_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics_misc/user_lemma_info_extension.dart'; +import 'package:fluffychat/pangea/analytics_settings/analytics_settings_extension.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/user/user_controller.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class AnalyticsUpdateService { + static const int _maxMessagesCached = 10; + + final AnalyticsDataService dataService; + + AnalyticsUpdateService(this.dataService); + + Completer? _updateCompleter; + + LanguageModel? get _l2 => MatrixState.pangeaController.userController.userL2; + + Future _getAnalyticsRoom() async { + final l2 = _l2; + if (l2 == null) return null; + + final analyticsRoom = await dataService.getAnalyticsRoom(l2); + return analyticsRoom; + } + + Future onUpdateLanguages(LanguageUpdate update) async { + await sendLocalAnalyticsToAnalyticsRoom( + l2Override: update.prevTargetLang, + ); + await dataService.reinitialize(); + + final data = await dataService.derivedData; + MatrixState.pangeaController.userController + .updateAnalyticsProfile(level: data.level); + } + + Future addAnalytics( + String? targetID, + List newConstructs, + ) async { + await dataService.updateDispatcher.sendConstructAnalyticsUpdate( + AnalyticsUpdate( + newConstructs, + targetID: targetID, + ), + ); + + final localConstructCount = await dataService.getLocalConstructCount(); + final lastUpdated = await dataService.getLastUpdatedAnalytics(); + final difference = DateTime.now().difference(lastUpdated ?? DateTime.now()); + + if (localConstructCount > _maxMessagesCached || difference.inMinutes > 10) { + sendLocalAnalyticsToAnalyticsRoom(); + } + } + + Future sendLocalAnalyticsToAnalyticsRoom({ + LanguageModel? l2Override, + }) async { + final inProgress = + _updateCompleter != null && !_updateCompleter!.isCompleted; + + if (inProgress) { + await _updateCompleter!.future; + return; + } + + _updateCompleter = Completer(); + try { + await _updateAnalytics(l2Override: l2Override); + await dataService.clearLocalAnalytics(); + } catch (err, s) { + ErrorHandler.logError( + e: err, + m: "Failed to update analytics", + s: s, + data: { + "l2Override": l2Override, + }, + ); + } finally { + _updateCompleter?.complete(); + _updateCompleter = null; + } + } + + Future _updateAnalytics({LanguageModel? l2Override}) async { + final localConstructs = await dataService.getLocalUses(); + if (localConstructs.isEmpty) return; + final analyticsRoom = await _getAnalyticsRoom(); + + // and send cached analytics data to the room + final future = dataService.waitForSync(); + await analyticsRoom?.sendConstructsEvent(localConstructs); + await future; + } + + Future sendActivityAnalytics(String roomId) async { + final analyticsRoom = await _getAnalyticsRoom(); + if (analyticsRoom == null) return; + + await analyticsRoom.addActivityRoomId(roomId); + dataService.updateDispatcher.sendActivityAnalyticsUpdate(roomId); + } + + Future blockConstruct(ConstructIdentifier constructId) async { + final analyticsRoom = await _getAnalyticsRoom(); + if (analyticsRoom == null) return; + + final current = analyticsRoom.analyticsSettings; + final blockedConstructs = current.blockedConstructs; + final updated = current.copyWith( + blockedConstructs: { + ...blockedConstructs, + constructId, + }, + ); + + await analyticsRoom.setAnalyticsSettings(updated); + await dataService.updateBlockedConstructs(constructId); + } + + Future setLemmaInfo( + ConstructIdentifier constructId, { + String? emoji, + String? meaning, + }) async { + final analyticsRoom = await _getAnalyticsRoom(); + if (analyticsRoom == null) return; + + final userLemmaInfo = analyticsRoom.getUserSetLemmaInfo(constructId); + final updated = userLemmaInfo.copyWith( + emojis: emoji == null ? null : [emoji], + meaning: meaning, + ); + if (userLemmaInfo == updated) return; + dataService.updateDispatcher.sendLemmaInfoUpdate(constructId, updated); + + try { + await analyticsRoom.setUserSetLemmaInfo(constructId, updated); + } catch (err, s) { + debugger(when: kDebugMode); + ErrorHandler.logError( + e: err, + data: userLemmaInfo.toJson(), + s: s, + ); + } + } +} diff --git a/lib/pangea/analytics_data/analytics_updater_mixin.dart b/lib/pangea/analytics_data/analytics_updater_mixin.dart new file mode 100644 index 000000000..fa90aab51 --- /dev/null +++ b/lib/pangea/analytics_data/analytics_updater_mixin.dart @@ -0,0 +1,41 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +mixin AnalyticsUpdater on State { + StreamSubscription? _analyticsSubscription; + + @override + void initState() { + super.initState(); + final updater = Matrix.of(context).analyticsDataService.updateDispatcher; + _analyticsSubscription = + updater.constructUpdateStream.stream.listen(_onAnalyticsUpdate); + } + + @override + void dispose() { + _analyticsSubscription?.cancel(); + super.dispose(); + } + + Future addAnalytics( + List constructs, + String? targetId, + ) => + Matrix.of(context).analyticsDataService.updateService.addAnalytics( + targetId, + constructs, + ); + + void _onAnalyticsUpdate(AnalyticsStreamUpdate update) { + if (update.targetID != null) { + OverlayUtil.showPointsGained(update.targetID!, update.points, context); + } + } +} diff --git a/lib/pangea/analytics_data/construct_merge_table.dart b/lib/pangea/analytics_data/construct_merge_table.dart new file mode 100644 index 000000000..b84786568 --- /dev/null +++ b/lib/pangea/analytics_data/construct_merge_table.dart @@ -0,0 +1,158 @@ +import 'package:collection/collection.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_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; + +class ConstructMergeTable { + Map> lemmaTypeGroups = {}; + Map otherToSpecific = {}; + final Map caseInsensitive = {}; + + void addConstructs( + List constructs, + Set exclude, + ) { + addConstructsByUses( + constructs.expand((c) => c.cappedUses).toList(), + exclude, + ); + } + + void addConstructsByUses( + List uses, + Set exclude, + ) { + for (final use in uses) { + final id = use.identifier; + if (exclude.contains(id)) continue; + final composite = id.compositeKey; + (lemmaTypeGroups[composite] ??= {}).add(id); + } + + for (final use in uses) { + final id = use.identifier; + if (exclude.contains(id)) continue; + final group = lemmaTypeGroups[id.compositeKey]; + if (group == null) continue; + final matches = group.where((m) => m != id && m.string == id.string); + for (final match in matches) { + caseInsensitive[match] = id; + caseInsensitive[id] = id; + } + } + + for (final use in uses) { + if (exclude.contains(use.identifier)) continue; + final id = use.identifier; + final composite = id.compositeKey; + if (id.category == 'other' && !otherToSpecific.containsKey(id)) { + final specific = lemmaTypeGroups[composite]!.firstWhereOrNull( + (k) => k.category != 'other', + ); + if (specific != null) { + otherToSpecific[id] = caseInsensitive[specific] ?? specific; + } + } + } + } + + void removeConstruct(ConstructIdentifier id) { + final composite = id.compositeKey; + final group = lemmaTypeGroups[composite]; + if (group == null) return; + + group.remove(id); + if (group.isEmpty) { + lemmaTypeGroups.remove(composite); + } + + if (id.category != 'other') { + final otherId = ConstructIdentifier( + lemma: id.lemma, + type: id.type, + category: 'other', + ); + otherToSpecific.remove(otherId); + } else { + otherToSpecific.remove(id); + } + + final caseEntry = caseInsensitive[id]; + if (caseEntry != null && caseEntry != id) { + caseInsensitive.remove(caseEntry); + } + caseInsensitive.remove(id); + } + + ConstructIdentifier resolve(ConstructIdentifier key) { + final specific = otherToSpecific[key] ?? key; + return caseInsensitive[specific] ?? specific; + } + + List groupedIds( + ConstructIdentifier id, + Set exclude, + ) { + final keys = []; + if (!exclude.contains(id)) { + keys.add(id); + } + + // if this key maps to a different case variant, include that as well + final differentCase = caseInsensitive[id]; + if (differentCase != null && differentCase != id) { + if (!exclude.contains(differentCase)) { + keys.add(differentCase); + } + } + + // if this is an broad ('other') key, find the specific key it maps to + // and include it if available + if (id.category == 'other') { + final specificKey = otherToSpecific[id]; + if (specificKey != null) { + keys.add(specificKey); + } + return keys; + } + + // if this is a specific key, and there existing an 'other' construct + // in the same group, and that 'other' construct maps to this specific key, + // include the 'other' construct as well + final otherEntry = lemmaTypeGroups[id.compositeKey] + ?.firstWhereOrNull((k) => k.category == 'other'); + if (otherEntry == null) { + return keys; + } + + if (otherToSpecific[otherEntry] == id) { + keys.add(otherEntry); + } + return keys; + } + + int uniqueConstructsByType(ConstructTypeEnum type) { + final keys = lemmaTypeGroups.keys.where( + (composite) => composite.endsWith('|${type.name}'), + ); + + final Set unique = {}; + for (final composite in keys) { + final group = lemmaTypeGroups[composite]!; + unique.addAll(group.map((c) => resolve(c))); + } + + return unique.length; + } + + bool constructUsed(ConstructIdentifier id) => + lemmaTypeGroups[id.compositeKey]?.contains(id) ?? false; + + void clear() { + lemmaTypeGroups.clear(); + otherToSpecific.clear(); + caseInsensitive.clear(); + } +} diff --git a/lib/pangea/analytics_data/derived_analytics_data_model.dart b/lib/pangea/analytics_data/derived_analytics_data_model.dart new file mode 100644 index 000000000..04a0ccf92 --- /dev/null +++ b/lib/pangea/analytics_data/derived_analytics_data_model.dart @@ -0,0 +1,109 @@ +import 'dart:math'; + +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; + +class DerivedAnalyticsDataModel { + final int _totalXP; + final int offset; + + DerivedAnalyticsDataModel({ + int totalXP = 0, + this.offset = 0, + }) : _totalXP = totalXP; + + int get totalXP => _totalXP + offset; + + int get level => calculateLevelWithXp(_totalXP); + + // the minimum XP required for a given level + int get _minXPForLevel => calculateXpWithLevel(level); + + // the minimum XP required for the next level + int get minXPForNextLevel => calculateXpWithLevel(level + 1); + + // the progress within the current level as a percentage (0.0 to 1.0) + double get levelProgress { + final progress = + (_totalXP - _minXPForLevel) / (minXPForNextLevel - _minXPForLevel); + return progress >= 0 ? progress : 0; + } + + static final double D = Environment.isStagingEnvironment ? 500 : 1500; + + static int calculateXpWithLevel(int level) { + // If level <= 1, XP should be 0 or negative by this math. + // In practice, you might clamp it to 0: + if (level <= 1) { + return 0; + } + + // Convert level to double for the math + final double lc = level.toDouble(); + + // XP from the inverse formula: + final double xpDouble = (D / 8.0) * (2.0 * pow(lc - 1.0, 2.0) - 1.0); + + // Floor or clamp to ensure non-negative. + final int xp = xpDouble.floor(); + return (xp < 0) ? 0 : xp; + } + + static int calculateLevelWithXp(int totalXP) { + final doubleScore = (1 + sqrt((1 + (8.0 * totalXP / D)) / 2.0)); + if (!doubleScore.isNaN && doubleScore.isFinite) { + return doubleScore.floor(); + } else { + ErrorHandler.logError( + e: "Calculated level in Nan or Infinity", + data: { + "totalXP": totalXP, + "level": doubleScore, + }, + ); + return 1; + } + } + + DerivedAnalyticsDataModel update(List uses) { + int xp = _totalXP; + + for (final u in uses) { + xp += u.xp; + } + + return copyWith( + totalXP: xp, + ); + } + + DerivedAnalyticsDataModel merge(DerivedAnalyticsDataModel other) { + return DerivedAnalyticsDataModel( + totalXP: _totalXP + other.totalXP, + offset: offset, + ); + } + + DerivedAnalyticsDataModel copyWith({ + int? totalXP, + int? offset, + }) { + return DerivedAnalyticsDataModel( + totalXP: totalXP ?? this.totalXP, + offset: offset ?? this.offset, + ); + } + + factory DerivedAnalyticsDataModel.fromJson(Map map) { + return DerivedAnalyticsDataModel( + totalXP: map['total_xp'] ?? 0, + ); + } + + Map toJson() { + return { + 'total_xp': _totalXP, + }; + } +} diff --git a/lib/pangea/analytics_data/level_up_analytics_service.dart b/lib/pangea/analytics_data/level_up_analytics_service.dart new file mode 100644 index 000000000..2004638d7 --- /dev/null +++ b/lib/pangea/analytics_data/level_up_analytics_service.dart @@ -0,0 +1,106 @@ +import 'dart:async'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; +import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/constructs/construct_repo.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class LevelUpAnalyticsService { + final Client client; + final Future Function() ensureInitialized; + final AnalyticsDataService dataService; + + const LevelUpAnalyticsService({ + required this.client, + required this.ensureInitialized, + required this.dataService, + }); + + Future getLevelUpAnalytics( + int lowerLevel, + int upperLevel, + DateTime? lastLevelUpTimestamp, + ) async { + await ensureInitialized(); + + final uses = await dataService.getUses(since: lastLevelUpTimestamp); + final messages = await _buildMessageContext(uses); + + final userController = MatrixState.pangeaController.userController; + final request = ConstructSummaryRequest( + constructs: uses, + messages: messages, + userL1: userController.userL1!.langCodeShort, + userL2: userController.userL2!.langCodeShort, + lowerLevel: lowerLevel, + upperLevel: upperLevel, + ); + + final response = await ConstructRepo.generateConstructSummary(request); + final summary = response.summary; + + summary.levelVocabConstructs = + dataService.uniqueConstructsByType(ConstructTypeEnum.vocab); + summary.levelGrammarConstructs = + dataService.uniqueConstructsByType(ConstructTypeEnum.morph); + + return summary; + } + + Future>> _buildMessageContext( + List uses, + ) async { + final Map> useEventIds = {}; + + for (final use in uses) { + final roomId = use.metadata.roomId; + final eventId = use.metadata.eventId; + if (roomId == null || eventId == null) continue; + + useEventIds.putIfAbsent(roomId, () => {}).add(eventId); + } + + final List> messages = []; + + for (final entry in useEventIds.entries) { + final room = client.getRoomById(entry.key); + if (room == null) continue; + + final timeline = await room.getTimeline(); + + for (final eventId in entry.value) { + try { + final event = await room.getEventById(eventId); + if (event == null) continue; + + final pangeaEvent = PangeaMessageEvent( + event: event, + timeline: timeline, + ownMessage: room.client.userID == event.senderId, + ); + + messages.add({ + 'sent': pangeaEvent.originalSent?.text ?? pangeaEvent.body, + 'written': pangeaEvent.originalWrittenContent, + }); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'roomId': entry.key, + 'eventId': eventId, + }, + ); + } + } + } + + return messages; + } +} diff --git a/lib/pangea/analytics_details_popup/analytics_details_popup.dart b/lib/pangea/analytics_details_popup/analytics_details_popup.dart index 2ec51e746..c816dfb80 100644 --- a/lib/pangea/analytics_details_popup/analytics_details_popup.dart +++ b/lib/pangea/analytics_details_popup/analytics_details_popup.dart @@ -1,10 +1,18 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; import 'package:fluffychat/pangea/analytics_details_popup/morph_analytics_list_view.dart'; import 'package:fluffychat/pangea/analytics_details_popup/morph_details_view.dart'; import 'package:fluffychat/pangea/analytics_details_popup/vocab_analytics_details_view.dart'; 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'; @@ -33,24 +41,78 @@ class ConstructAnalyticsViewState extends State { MorphFeaturesAndTags morphs = defaultMorphMapping; List features = defaultMorphMapping.displayFeatures; + List? vocab; + bool isSearching = false; + FocusNode searchFocusNode = FocusNode(); ConstructLevelEnum? selectedConstructLevel; + StreamSubscription? _constructUpdateSub; @override void initState() { super.initState(); - _setMorphs(); + _setAnalyticsData(); + searchController.addListener(() { if (mounted) setState(() {}); }); + + _constructUpdateSub = Matrix.of(context) + .analyticsDataService + .updateDispatcher + .constructUpdateStream + .stream + .listen(_onConstructUpdate); } @override void dispose() { searchController.dispose(); + _constructUpdateSub?.cancel(); + searchFocusNode.dispose(); super.dispose(); } + Future _setAnalyticsData() async { + final future = [ + _setMorphs(), + _setVocab(), + ]; + await Future.wait(future); + } + + void _onConstructUpdate(AnalyticsStreamUpdate update) { + if (update.blockedConstruct != null) { + _onBlockConstruct(update); + } else { + _setAnalyticsData(); + } + } + + void _onBlockConstruct(AnalyticsStreamUpdate update) { + final blocked = update.blockedConstruct; + if (blocked == null) return; + vocab?.removeWhere((e) => e.id == blocked); + if (widget.view == ConstructTypeEnum.vocab && widget.construct == null) { + setState(() {}); + } + } + + Future _setVocab() async { + try { + final analyticsService = Matrix.of(context).analyticsDataService; + final data = await analyticsService + .getAggregatedConstructs(ConstructTypeEnum.vocab); + + vocab = data.values.toList(); + vocab!.sort( + (a, b) => a.lemma.toLowerCase().compareTo(b.lemma.toLowerCase()), + ); + } finally { + if (mounted) setState(() {}); + } + } + Future _setMorphs() async { try { final resp = await MorphsRepo.get(); @@ -60,7 +122,7 @@ class ConstructAnalyticsViewState extends State { ErrorHandler.logError( e: e, s: s, - data: {"l2": MatrixState.pangeaController.languageController.userL2}, + data: {"l2": MatrixState.pangeaController.userController.userL2}, ); } finally { features.sort( @@ -84,16 +146,109 @@ class ConstructAnalyticsViewState extends State { selectedConstructLevel = null; searchController.clear(); }); + + WidgetsBinding.instance.addPostFrameCallback((_) { + if (isSearching) { + FocusScope.of(context).requestFocus(searchFocusNode); + } else { + searchFocusNode.unfocus(); + } + }); } @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!), + ), + ], + ), + ), + ), + floatingActionButton: + widget.view == ConstructTypeEnum.vocab && widget.construct == null + ? _buildVocabPracticeButton(context) + : null, + ); } } + +Widget _buildVocabPracticeButton(BuildContext context) { + // Check if analytics is loaded first + if (MatrixState + .pangeaController.matrixState.analyticsDataService.isInitializing) { + return FloatingActionButton.extended( + onPressed: () { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text( + 'Loading vocabulary data...', + ), + behavior: SnackBarBehavior.floating, + ), + ); + }, + label: Text(L10n.of(context).practiceVocab), + backgroundColor: Theme.of(context).colorScheme.surface, + foregroundColor: + Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.5), + ); + } + + final vocabCount = MatrixState + .pangeaController.matrixState.analyticsDataService + .numConstructs(ConstructTypeEnum.vocab); + final hasEnoughVocab = vocabCount >= 10; + + return FloatingActionButton.extended( + onPressed: hasEnoughVocab + ? () { + context.go( + "/rooms/analytics/${ConstructTypeEnum.vocab.name}/practice", + ); + } + : () { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + L10n.of(context).mustHave10Words, + ), + behavior: SnackBarBehavior.floating, + ), + ); + }, + backgroundColor: + hasEnoughVocab ? null : Theme.of(context).colorScheme.surfaceContainer, + foregroundColor: hasEnoughVocab + ? null + : Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.5), + label: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (!hasEnoughVocab) ...[ + const Icon(Icons.lock_outline, size: 18), + const SizedBox(width: 4), + ], + Text(L10n.of(context).practiceVocab), + ], + ), + ); +} diff --git a/lib/pangea/analytics_details_popup/analytics_details_popup_content.dart b/lib/pangea/analytics_details_popup/analytics_details_popup_content.dart deleted file mode 100644 index ca8eefbe3..000000000 --- a/lib/pangea/analytics_details_popup/analytics_details_popup_content.dart +++ /dev/null @@ -1,91 +0,0 @@ -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_details_popup/lemma_usage_dots.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/lemma_use_example_messages.dart'; -import 'package:fluffychat/pangea/analytics_misc/analytics_constants.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/learning_skills_enum.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; - -class AnalyticsDetailsViewContent extends StatelessWidget { - final Widget title; - final Widget subtitle; - final Widget headerContent; - final Widget xpIcon; - final ConstructIdentifier constructId; - - const AnalyticsDetailsViewContent({ - required this.title, - required this.subtitle, - required this.xpIcon, - required this.headerContent, - required this.constructId, - super.key, - }); - - ConstructUses get construct => constructId.constructUses; - - @override - Widget build(BuildContext context) { - final Color textColor = (Theme.of(context).brightness != Brightness.light - ? construct.lemmaCategory.color(context) - : construct.lemmaCategory.darkColor(context)); - - return SingleChildScrollView( - child: Column( - children: [ - title, - const SizedBox(height: 16.0), - subtitle, - const SizedBox(height: 16.0), - headerContent, - Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${AnalyticsConstants.popupDividerFileName}", - placeholder: (context, url) => const CircularProgressIndicator(), - errorWidget: (context, url, error) => const Icon(Icons.error), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - xpIcon, - const SizedBox(width: 16.0), - Text( - "${construct.points} XP", - style: Theme.of(context).textTheme.titleMedium?.copyWith( - color: textColor, - ), - ), - ], - ), - const SizedBox(height: 20), - Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - children: [ - LemmaUseExampleMessages(construct: construct), - ...LearningSkillsEnum.values - .where((v) => v.isVisible) - .map((skill) { - return LemmaUsageDots( - construct: construct, - category: skill, - tooltip: skill.tooltip(context), - icon: skill.icon, - ); - }), - ], - ), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart b/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart new file mode 100644 index 000000000..dd258718d --- /dev/null +++ b/lib/pangea/analytics_details_popup/analytics_details_usage_content.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/analytics_details_popup/lemma_usage_dots.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/lemma_use_example_messages.dart'; +import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/learning_skills_enum.dart'; + +class AnalyticsDetailsUsageContent extends StatelessWidget { + final ConstructUses construct; + + const AnalyticsDetailsUsageContent({ + required this.construct, + super.key, + }); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: LemmaUseExampleMessages(construct: construct), + ), + ...LearningSkillsEnum.values.where((v) => v.isVisible).map((skill) { + return LemmaUsageDots( + construct: construct, + category: skill, + tooltip: skill.tooltip(context), + icon: skill.icon, + ); + }), + ], + ); + } +} diff --git a/lib/pangea/analytics_details_popup/construct_xp_progress_bar.dart b/lib/pangea/analytics_details_popup/construct_xp_progress_bar.dart new file mode 100644 index 000000000..4089a46b1 --- /dev/null +++ b/lib/pangea/analytics_details_popup/construct_xp_progress_bar.dart @@ -0,0 +1,85 @@ +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 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); + final level = + snapshot.data?.constructLevel ?? ConstructLevelEnum.seeds; + const iconSize = 40.0; + return Column( + spacing: 8.0, + children: [ + LayoutBuilder( + builder: (context, constraints) { + double availableGap = + constraints.maxWidth - (categories.length * iconSize); + const totalPoints = AnalyticsConstants.xpForFlower; + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ...categories.map( + (c) { + final gapPercent = (c.xpNeeded / totalPoints); + final gap = availableGap * gapPercent; + availableGap -= gap; + return Container( + width: iconSize + gap, + alignment: Alignment.centerRight, + child: Opacity( + opacity: level == c ? 1.0 : 0.4, + child: c.icon(iconSize), + ), + ); + }, + ), + ], + ); + }, + ), + AnimatedProgressBar( + height: 20.0, + widthPercent: progress, + barColor: AppConfig.goldLight, + backgroundColor: + Theme.of(context).colorScheme.secondaryContainer, + ), + ], + ); + }, + ); + }, + ); + } +} diff --git a/lib/pangea/analytics_details_popup/lemma_usage_dots.dart b/lib/pangea/analytics_details_popup/lemma_usage_dots.dart index b54d8d1f6..aa4e78e83 100644 --- a/lib/pangea/analytics_details_popup/lemma_usage_dots.dart +++ b/lib/pangea/analytics_details_popup/lemma_usage_dots.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; @@ -25,7 +26,7 @@ class LemmaUsageDots extends StatelessWidget { /// Find lemma uses for the given exercise type, to create dot list List sortedUses(LearningSkillsEnum category) { final List useList = []; - for (final OneConstructUse use in construct.uses) { + for (final OneConstructUse use in construct.cappedUses) { if (use.xp == 0) { continue; } @@ -58,42 +59,28 @@ 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: dots.isEmpty + ? Text( + L10n.of(context).noDataFound, + style: const TextStyle( + fontStyle: FontStyle.italic, + ), + ) + : Wrap( + spacing: 3, + runSpacing: 5, + children: dots, + ), ); } } diff --git a/lib/pangea/analytics_details_popup/lemma_use_example_messages.dart b/lib/pangea/analytics_details_popup/lemma_use_example_messages.dart index 5c3c9b4dc..86dbc3364 100644 --- a/lib/pangea/analytics_details_popup/lemma_use_example_messages.dart +++ b/lib/pangea/analytics_details_popup/lemma_use_example_messages.dart @@ -25,7 +25,7 @@ class LemmaUseExampleMessages extends StatelessWidget { Future> _getExampleMessages() async { final List examples = []; - for (final OneConstructUse use in construct.uses) { + for (final OneConstructUse use in construct.cappedUses) { if (use.useType.skillsEnumType != LearningSkillsEnum.writing || use.metadata.eventId == null || use.form == null || diff --git a/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart b/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart index 4966af84d..f923391e0 100644 --- a/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/morph_analytics_list_view.dart @@ -1,14 +1,13 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:collection/collection.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'; @@ -68,7 +67,6 @@ class MorphAnalyticsListView extends StatelessWidget { morphFeature: feature.feature, allTags: controller.morphs .getDisplayTags(feature.feature) - .map((tag) => tag.toLowerCase()) .toSet(), ), ) @@ -102,6 +100,7 @@ class MorphFeatureBox extends StatelessWidget { Widget build(BuildContext context) { final theme = Theme.of(context); + final analyticsService = Matrix.of(context).analyticsDataService; return Container( padding: const EdgeInsets.all(16.0), decoration: BoxDecoration( @@ -140,40 +139,31 @@ class MorphFeatureBox extends StatelessWidget { alignment: WrapAlignment.center, spacing: 16.0, runSpacing: 16.0, - children: allTags - .map( - (morphTag) { - final id = ConstructIdentifier( - lemma: morphTag, - type: ConstructTypeEnum.morph, - category: morphFeature, - ); + children: allTags.map( + (morphTag) { + final id = ConstructIdentifier( + lemma: morphTag, + type: ConstructTypeEnum.morph, + category: morphFeature, + ); - final analytics = MatrixState.pangeaController - .getAnalytics.constructListModel - .getConstructUses(id) ?? - ConstructUses( - lemma: morphTag, - constructType: ConstructTypeEnum.morph, - category: morphFeature, - uses: [], - ); - - return MorphTagChip( - morphFeature: morphFeature, - morphTag: morphTag, - constructAnalytics: analytics, - onTap: () => context.go( - "/rooms/analytics/${id.type.string}/${id.string}", - ), - ); - }, - ) - .sortedBy( - (chip) => chip.constructAnalytics.points, - ) - .reversed - .toList(), + return FutureBuilder( + future: analyticsService.getConstructUse(id), + builder: (context, snapshot) => MorphTagChip( + morphFeature: morphFeature, + morphTag: morphTag, + constructAnalytics: snapshot.data, + onTap: () { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.morphsUsed, + construct: id, + ); + }, + ), + ); + }, + ).toList(), ), ), ], @@ -187,7 +177,7 @@ class MorphFeatureBox extends StatelessWidget { class MorphTagChip extends StatelessWidget { final String morphFeature; final String morphTag; - final ConstructUses constructAnalytics; + final ConstructUses? constructAnalytics; final VoidCallback? onTap; const MorphTagChip({ @@ -204,76 +194,81 @@ class MorphTagChip extends StatelessWidget { @override Widget build(BuildContext context) { final theme = Theme.of(context); - final unlocked = constructAnalytics.points > 0 || - Matrix.of(context).client.userID == Environment.supportUserId; + final unlocked = + constructAnalytics != null && constructAnalytics!.numTotalUses > 0 || + Matrix.of(context).client.userID == Environment.supportUserId; - return InkWell( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - onTap: onTap, - child: Opacity( - opacity: unlocked ? 1.0 : 0.3, - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(32.0), - gradient: unlocked - ? LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - colors: [ - constructAnalytics.lemmaCategory.color(context), - Colors.transparent, - ], - ) - : null, - color: unlocked ? null : theme.disabledColor, - ), - padding: const EdgeInsets.symmetric( - vertical: 4.0, - horizontal: 8.0, - ), - child: Row( - mainAxisSize: MainAxisSize.min, - spacing: 8.0, - children: [ - SizedBox( - width: 28.0, - height: 28.0, - child: unlocked - ? Container( - decoration: BoxDecoration( - color: theme.colorScheme.surface.withAlpha(180), - borderRadius: BorderRadius.circular(20), + return Material( + type: MaterialType.transparency, + child: InkWell( + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + onTap: onTap, + child: Opacity( + opacity: unlocked ? 1.0 : 0.3, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(32.0), + gradient: unlocked + ? LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + constructAnalytics?.lemmaCategory.color(context) ?? + ConstructLevelEnum.seeds.color(context), + Colors.transparent, + ], + ) + : null, + color: unlocked ? null : theme.disabledColor, + ), + padding: const EdgeInsets.symmetric( + vertical: 4.0, + horizontal: 8.0, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 8.0, + children: [ + SizedBox( + width: 28.0, + height: 28.0, + child: unlocked + ? Container( + decoration: BoxDecoration( + color: theme.colorScheme.surface.withAlpha(180), + borderRadius: BorderRadius.circular(20), + ), + padding: const EdgeInsets.all(4), + child: MorphIcon( + morphFeature: feature, + morphTag: morphTag, + ), + ) + : const Icon( + Icons.lock, + color: Colors.white, ), - padding: const EdgeInsets.all(4), - child: MorphIcon( - morphFeature: feature, - morphTag: morphTag, - ), - ) - : const Icon( - Icons.lock, - color: Colors.white, - ), - ), - Flexible( - child: Text( - getGrammarCopy( - category: morphFeature, - lemma: morphTag, - context: context, - ) ?? - morphTag, - style: TextStyle( - fontWeight: FontWeight.bold, - color: theme.brightness == Brightness.dark - ? Colors.white - : Colors.black, - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, ), - ), - ], + Flexible( + child: Text( + getGrammarCopy( + category: morphFeature, + lemma: morphTag, + context: context, + ) ?? + morphTag, + style: TextStyle( + fontWeight: FontWeight.bold, + color: theme.brightness == Brightness.dark + ? Colors.white + : Colors.black, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), ), ), ), diff --git a/lib/pangea/analytics_details_popup/morph_analytics_xp_tile.dart b/lib/pangea/analytics_details_popup/morph_analytics_xp_tile.dart deleted file mode 100644 index 49e2c7487..000000000 --- a/lib/pangea/analytics_details_popup/morph_analytics_xp_tile.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.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/morphs/get_grammar_copy.dart'; - -class ConstructUsesXPTile extends StatelessWidget { - final ConstructUses constructUses; - - const ConstructUsesXPTile( - this.constructUses, { - super.key, - }); - - @override - Widget build(BuildContext context) { - final ProgressIndicatorEnum indicator = - constructUses.constructType == ConstructTypeEnum.morph - ? ProgressIndicatorEnum.morphsUsed - : ProgressIndicatorEnum.wordsUsed; - - return Tooltip( - message: - "${constructUses.points} / ${constructUses.constructType.maxXPPerLemma}", - child: ListTile( - onTap: () {}, - title: Text( - constructUses.constructType == ConstructTypeEnum.morph - ? getGrammarCopy( - category: constructUses.category, - lemma: constructUses.lemma, - context: context, - ) ?? - constructUses.lemma - : constructUses.lemma, - ), - subtitle: Row( - children: [ - Expanded( - child: LinearProgressIndicator( - value: constructUses.points / - constructUses.constructType.maxXPPerLemma, - minHeight: 20, - borderRadius: const BorderRadius.all( - Radius.circular(AppConfig.borderRadius), - ), - color: indicator.color(context), - ), - ), - const SizedBox(width: 12), - Text("${constructUses.points}xp"), - ], - ), - contentPadding: const EdgeInsets.symmetric( - horizontal: 20, - ), - ), - ); - } -} diff --git a/lib/pangea/analytics_details_popup/morph_details_view.dart b/lib/pangea/analytics_details_popup/morph_details_view.dart index 15cacb55c..6b22469a7 100644 --- a/lib/pangea/analytics_details_popup/morph_details_view.dart +++ b/lib/pangea/analytics_details_popup/morph_details_view.dart @@ -1,14 +1,15 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup_content.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_usage_content.dart'; import 'package:fluffychat/pangea/analytics_details_popup/morph_meaning_widget.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; 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 { final ConstructIdentifier constructId; @@ -18,31 +19,57 @@ class MorphDetailsView extends StatelessWidget { super.key, }); - ConstructUses get _construct => constructId.constructUses; MorphFeaturesEnum get _morphFeature => MorphFeaturesEnumExtension.fromString(constructId.category); String get _morphTag => constructId.lemma; @override Widget build(BuildContext context) { - final Color textColor = Theme.of(context).brightness != Brightness.light - ? _construct.lemmaCategory.color(context) - : _construct.lemmaCategory.darkColor(context); + return FutureBuilder( + future: + Matrix.of(context).analyticsDataService.getConstructUse(constructId), + builder: (context, snapshot) { + final construct = snapshot.data; + final level = construct?.lemmaCategory ?? ConstructLevelEnum.seeds; + final Color textColor = Theme.of(context).brightness != Brightness.light + ? level.color(context) + : level.darkColor(context); - return AnalyticsDetailsViewContent( - subtitle: MorphFeatureDisplay(morphFeature: _morphFeature), - title: MorphTagDisplay( - morphFeature: _morphFeature, - morphTag: _morphTag, - textColor: textColor, - ), - headerContent: MorphMeaningWidget( - feature: _morphFeature, - tag: _morphTag, - style: Theme.of(context).textTheme.bodyLarge, - ), - xpIcon: ConstructXpWidget(id: constructId), - constructId: constructId, + return MaxWidthBody( + maxWidth: 600.0, + showBorder: false, + child: Column( + spacing: 16.0, + children: [ + MorphTagDisplay( + morphFeature: _morphFeature, + morphTag: _morphTag, + textColor: textColor, + ), + MorphFeatureDisplay(morphFeature: _morphFeature), + MorphMeaningWidget( + feature: _morphFeature, + tag: _morphTag, + style: Theme.of(context).textTheme.bodyLarge, + ), + const Divider(), + if (construct != null) ...[ + ConstructXpWidget( + icon: construct.lemmaCategory.icon(30.0), + level: construct.lemmaCategory, + points: construct.points, + ), + Padding( + padding: const EdgeInsets.all(20.0), + child: AnalyticsDetailsUsageContent( + construct: construct, + ), + ), + ], + ], + ), + ); + }, ); } } diff --git a/lib/pangea/analytics_details_popup/morph_meaning_widget.dart b/lib/pangea/analytics_details_popup/morph_meaning_widget.dart index d97a2b15d..fd34f5c9d 100644 --- a/lib/pangea/analytics_details_popup/morph_meaning_widget.dart +++ b/lib/pangea/analytics_details_popup/morph_meaning_widget.dart @@ -4,11 +4,12 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; -import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/morphs/morph_meaning/morph_info_repo.dart'; +import 'package:fluffychat/pangea/morphs/morph_meaning/morph_info_request.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; class MorphMeaningWidget extends StatefulWidget { @@ -29,16 +30,16 @@ class MorphMeaningWidget extends StatefulWidget { class MorphMeaningWidgetState extends State { bool _editMode = false; + late TextEditingController _controller; static const int maxCharacters = 140; - String? _cachedResponse; + + String? _definition; bool _isLoading = true; - Object? _error; @override void didUpdateWidget(covariant MorphMeaningWidget oldWidget) { if (oldWidget.tag != widget.tag || oldWidget.feature != widget.feature) { - _cachedResponse = null; _isLoading = true; _loadMorphMeaning(); } @@ -58,28 +59,44 @@ class MorphMeaningWidgetState extends State { super.dispose(); } + MorphInfoRequest get _request => MorphInfoRequest( + userL1: MatrixState.pangeaController.userController.userL1?.langCode ?? + LanguageKeys.defaultLanguage, + userL2: MatrixState.pangeaController.userController.userL2?.langCode ?? + LanguageKeys.defaultLanguage, + ); + Future _loadMorphMeaning() async { - try { - final response = await _morphMeaning(); - _setMeaningText(response); - } catch (e) { - _error = e; - } finally { - if (mounted) setState(() => _isLoading = false); + if (mounted) { + setState(() { + _isLoading = true; + _definition = null; + }); } + + final response = await _morphMeaning(); + _controller.text = response.substring( + 0, + min(response.length, maxCharacters), + ); + _definition = response; + + if (mounted) setState(() => _isLoading = false); } Future _morphMeaning() async { - if (_cachedResponse != null) { - return _cachedResponse!; + final result = await MorphInfoRepo.get( + MatrixState.pangeaController.userController.accessToken, + _request, + ); + + if (result.isError) { + return L10n.of(context).meaningNotFound; } - final response = await MorphInfoRepo.get( - feature: widget.feature, - tag: widget.tag, - ); - _cachedResponse = response; - return response ?? L10n.of(context).meaningNotFound; + final morph = result.result!.getFeatureByCode(widget.feature.name); + final data = morph?.getTagByCode(widget.tag); + return data?.l1Description ?? L10n.of(context).meaningNotFound; } void _toggleEditMode(bool value) => setState(() => _editMode = value); @@ -90,22 +107,15 @@ class MorphMeaningWidgetState extends State { ? userEdit.substring(0, maxCharacters) : userEdit; - await MorphInfoRepo.setMorphDefinition( + await MorphInfoRepo.update( + _request, feature: widget.feature, tag: widget.tag, - defintion: truncatedEdit, + definition: truncatedEdit, ); - // Update the cached response - _cachedResponse = truncatedEdit; _toggleEditMode(false); - } - - void _setMeaningText(String initialText) { - _controller.text = initialText.substring( - 0, - min(initialText.length, maxCharacters), - ); + _loadMorphMeaning(); } @override @@ -114,27 +124,11 @@ class MorphMeaningWidgetState extends State { return const TextLoadingShimmer(); } - if (_error != null) { - return Center( - child: _error is UnsubscribedException - ? ErrorIndicator( - message: L10n.of(context).subscribeToUnlockDefinitions, - onTap: () { - MatrixState.pangeaController.subscriptionController - .showPaywall(context); - }, - ) - : ErrorIndicator( - message: L10n.of(context).errorFetchingDefinition, - ), - ); - } - if (_editMode) { return MorphEditView( morphFeature: widget.feature, morphTag: widget.tag, - meaning: _cachedResponse ?? "", + meaning: _definition ?? "", controller: _controller, toggleEditMode: _toggleEditMode, editMorphMeaning: editMorphMeaning, @@ -149,7 +143,7 @@ class MorphMeaningWidgetState extends State { onDoubleTap: () => _toggleEditMode(true), child: Text( textAlign: TextAlign.center, - _cachedResponse ?? L10n.of(context).meaningNotFound, + _definition ?? L10n.of(context).meaningNotFound, style: widget.style, ), ), diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart b/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart index 1434c29f9..6de39e654 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_details_view.dart @@ -3,19 +3,21 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup_content.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_model.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/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; -import 'package:fluffychat/pangea/lemmas/lemma_highlight_emoji_row.dart'; -import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; -import 'package:fluffychat/pangea/morphs/morph_icon.dart'; -import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_widget.dart'; -import 'package:fluffychat/pangea/toolbar/utils/shrinkable_text.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/lemmas/lemma.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; +import 'package:fluffychat/pangea/token_info_feedback/show_token_feedback_dialog.dart'; +import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.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 @@ -27,164 +29,186 @@ class VocabDetailsView extends StatelessWidget { required this.constructId, }); - ConstructUses get _construct => constructId.constructUses; + Future _blockLemma(BuildContext context) async { + final resp = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context).areYouSure, + message: L10n.of(context).blockLemmaConfirmation, + isDestructive: true, + ); - /// Get the language code for the current lemma - String? get _userL2 => - MatrixState.pangeaController.languageController.userL2?.langCode; + if (resp != OkCancelResult.ok) return; + final res = await showFutureLoadingDialog( + context: context, + future: () => Matrix.of(context) + .analyticsDataService + .updateService + .blockConstruct(constructId), + ); - List get forms => - MatrixState.pangeaController.getAnalytics.constructListModel - .getConstructUsesByLemma(_construct.lemma) - .map((e) => e.uses) - .expand((element) => element) - .map((e) => e.form?.toLowerCase()) - .toSet() - .whereType() - .toList(); - - final double _iconSize = 24.0; + if (!res.isError) { + Navigator.of(context).pop(); + } + } @override Widget build(BuildContext context) { - final Color textColor = (Theme.of(context).brightness != Brightness.light - ? _construct.lemmaCategory.color(context) - : _construct.lemmaCategory.darkColor(context)); + final analyticsService = Matrix.of(context).analyticsDataService; + return FutureBuilder( + future: analyticsService.getConstructUse(constructId), + builder: (context, snapshot) { + final construct = snapshot.data; + final level = construct?.lemmaCategory ?? ConstructLevelEnum.seeds; - return LemmaMeaningBuilder( - langCode: _userL2!, - constructId: _construct.id, - builder: (context, controller) { - return AnalyticsDetailsViewContent( - title: Column( + final Color textColor = + (Theme.of(context).brightness != Brightness.light + ? level.color(context) + : level.darkColor(context)); + + final forms = construct?.forms ?? []; + final tokenText = PangeaTokenText.fromString(constructId.lemma); + final token = PangeaToken( + text: tokenText, + pos: constructId.category, + morph: {}, + lemma: Lemma( + text: constructId.lemma, + form: constructId.lemma, + saveVocab: true, + ), + ); + + return MaxWidthBody( + maxWidth: 600.0, + showBorder: false, + child: Column( + spacing: 16.0, children: [ - LayoutBuilder( - builder: (context, constraints) { - return ShrinkableText( - text: _construct.lemma, - maxWidth: constraints.maxWidth - 40.0, - style: Theme.of(context).textTheme.headlineLarge?.copyWith( - color: textColor, - ), + WordZoomWidget( + token: tokenText, + langCode: + MatrixState.pangeaController.userController.userL2Code!, + construct: constructId, + onClose: Navigator.of(context).pop, + onFlagTokenInfo: + (LemmaInfoResponse lemmaInfo, String phonetics) { + final requestData = TokenInfoFeedbackRequestData( + userId: Matrix.of(context).client.userID!, + detectedLanguage: + MatrixState.pangeaController.userController.userL2Code!, + tokens: [token], + selectedToken: 0, + wordCardL1: + MatrixState.pangeaController.userController.userL1Code!, + lemmaInfo: lemmaInfo, + phonetics: phonetics, + ); + + TokenFeedbackUtil.showTokenFeedbackDialog( + context, + requestData: requestData, + langCode: + MatrixState.pangeaController.userController.userL2Code!, ); }, ), - if (MatrixState - .pangeaController.languageController.showTranscription) - Padding( - padding: const EdgeInsets.only(top: 4.0), - child: PhoneticTranscriptionWidget( - text: _construct.lemma, - textLanguage: - MatrixState.pangeaController.languageController.userL2!, - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: textColor.withAlpha((0.7 * 255).toInt()), - fontSize: 18, - ), - iconSize: _iconSize * 0.8, - ), - ), - ], - ), - subtitle: Column( - children: [ - Row( - mainAxisSize: MainAxisSize.min, - spacing: 8.0, - children: [ - Text( - getGrammarCopy( - category: "POS", - lemma: _construct.category, - context: context, - ) ?? - _construct.lemma, - style: Theme.of(context).textTheme.bodyLarge?.copyWith( - color: textColor, - ), - ), - SizedBox( - width: _iconSize, - height: _iconSize, - child: MorphIcon( - morphFeature: MorphFeaturesEnum.Pos, - morphTag: _construct.category, + if (construct != null) + Column( + spacing: 20.0, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: ConstructXPProgressBar( + construct: constructId, + ), ), - ), - ], - ), - const SizedBox(height: 16.0), - LemmaHighlightEmojiRow( - controller: controller, - cId: constructId, - ), - ], - ), - headerContent: Padding( - padding: const EdgeInsets.fromLTRB(20, 10, 20, 20), - child: Column( - spacing: 8.0, - children: [ - Align( - alignment: Alignment.topLeft, - child: _userL2 == null - ? Text(L10n.of(context).meaningNotFound) - : LemmaMeaningWidget( - controller: controller, - constructUse: _construct, - style: Theme.of(context).textTheme.bodyLarge, - leading: TextSpan( - text: L10n.of(context).meaningSectionHeader, - style: - Theme.of(context).textTheme.bodyLarge?.copyWith( - fontWeight: FontWeight.bold, - ), + Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Align( + alignment: Alignment.centerLeft, + child: _VocabForms( + lemma: constructId.lemma, + forms: forms, + textColor: textColor, + ), ), ), - ), - Align( - alignment: Alignment.topLeft, - child: Wrap( - alignment: WrapAlignment.start, - runAlignment: WrapAlignment.start, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - L10n.of(context).formSectionHeader, - style: Theme.of(context).textTheme.bodyLarge?.copyWith( - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(width: 6.0), - ...forms.mapIndexed( - (i, form) => Row( - mainAxisSize: MainAxisSize.min, - children: [ - WordTextWithAudioButton( - text: form, - style: Theme.of(context) - .textTheme - .bodyLarge - ?.copyWith( - color: textColor, - ), - uniqueID: "$form-${_construct.lemma}-$i", - langCode: _userL2!, - ), - if (i != forms.length - 1) const Text(", "), - ], + 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), + ), + ], + ), + ], ), - ], - ), + ], ), - xpIcon: _construct.lemmaCategory.icon(_iconSize + 6.0), - constructId: constructId, ); }, ); } } + +class _VocabForms extends StatelessWidget { + final String lemma; + final List forms; + final Color textColor; + + const _VocabForms({ + required this.lemma, + required this.forms, + required this.textColor, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Wrap( + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.start, + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Text( + L10n.of(context).formSectionHeader, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(width: 6.0), + ...forms.mapIndexed( + (i, form) => Row( + mainAxisSize: MainAxisSize.min, + children: [ + WordTextWithAudioButton( + text: form, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + color: textColor, + ), + uniqueID: "$form-$lemma-$i", + langCode: + MatrixState.pangeaController.userController.userL2Code!, + ), + if (i != forms.length - 1) const Text(", "), + ], + ), + ), + ], + ), + ); + } +} diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart b/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart index 6da22a845..564069291 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_list_tile.dart @@ -1,83 +1,96 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_model.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/pangea/toolbar/utils/shrinkable_text.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class VocabAnalyticsListTile extends StatelessWidget { + final void Function()? onTap; + final ConstructIdentifier constructId; + final ConstructLevelEnum level; + final Color textColor; + final bool selected; -class VocabAnalyticsListTile extends StatefulWidget { const VocabAnalyticsListTile({ super.key, - required this.emoji, - required this.constructUse, - required this.onTap, + required this.constructId, + this.level = ConstructLevelEnum.seeds, + required this.textColor, + this.onTap, + this.selected = false, }); - final String? emoji; - final void Function() onTap; - final ConstructUses constructUse; - - @override - VocabAnalyticsListTileState createState() => VocabAnalyticsListTileState(); -} - -class VocabAnalyticsListTileState extends State { - bool _isHovered = false; - final double maxWidth = 100; final double padding = 8.0; @override Widget build(BuildContext context) { - return MouseRegion( - onEnter: (_) => setState(() => _isHovered = true), - onExit: (_) => setState(() => _isHovered = false), - child: InkWell( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - onTap: widget.onTap, - child: Container( - height: maxWidth, - width: maxWidth, - padding: EdgeInsets.all(padding), - decoration: BoxDecoration( - color: _isHovered - ? widget.constructUse.constructLevel - .color(context) - .withAlpha(20) - : Colors.transparent, - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - alignment: Alignment.center, - height: (maxWidth - padding * 2) * 0.6, - child: widget.emoji != null - ? Text( - widget.emoji!, - style: const TextStyle( - fontSize: 22, - ), - ) - : widget.constructUse.constructLevel.icon(36.0), - ), - Container( - alignment: Alignment.topCenter, - padding: const EdgeInsets.only(top: 4), - height: (maxWidth - padding * 2) * 0.4, - child: ShrinkableText( - text: widget.constructUse.lemma, - maxWidth: maxWidth - padding * 2, - style: TextStyle( - fontSize: 16, - color: Theme.of(context).brightness == Brightness.light - ? widget.constructUse.constructLevel.darkColor(context) - : widget.constructUse.constructLevel.color(context), + final analyticsService = Matrix.of(context).analyticsDataService; + return HoverBuilder( + builder: (context, hovered) => Material( + type: MaterialType.transparency, + child: InkWell( + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + onTap: onTap, + child: Container( + height: maxWidth, + width: maxWidth, + padding: EdgeInsets.all(padding), + decoration: BoxDecoration( + color: hovered || selected + ? textColor.withAlpha(20) + : Colors.transparent, + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + StreamBuilder( + stream: analyticsService.updateDispatcher + .lemmaUpdateStream(constructId), + builder: (context, snapshot) { + final emoji = snapshot.data?.emojis?.firstOrNull ?? + constructId.userSetEmoji; + + return Container( + alignment: Alignment.center, + height: (maxWidth - padding * 2) * 0.6, + child: emoji != null + ? Text( + emoji, + style: const TextStyle( + fontSize: 22, + ), + ) + : Text( + "-", + style: TextStyle( + fontSize: 32, + fontWeight: FontWeight.bold, + color: textColor.withAlpha(100), + ), + ), + ); + }, + ), + Container( + alignment: Alignment.topCenter, + padding: const EdgeInsets.only(top: 4), + height: (maxWidth - padding * 2) * 0.4, + child: ShrinkableText( + text: constructId.lemma, + maxWidth: maxWidth - padding * 2, + style: TextStyle( + fontSize: 16, + color: textColor, + ), ), ), - ), - ], + ], + ), ), ), ), diff --git a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart index 78ae5dbe0..45181eea2 100644 --- a/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart +++ b/lib/pangea/analytics_details_popup/vocab_analytics_list_view.dart @@ -1,7 +1,9 @@ +import 'dart:convert'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:collection/collection.dart'; +import 'package:diacritic/diacritic.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/themes.dart'; @@ -9,11 +11,14 @@ 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'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Displays vocab analytics, sorted into categories @@ -26,33 +31,42 @@ class VocabAnalyticsListView extends StatelessWidget { required this.controller, }); - List get _vocab => MatrixState - .pangeaController.getAnalytics.constructListModel - .constructList(type: ConstructTypeEnum.vocab) - .sorted((a, b) => a.lemma.toLowerCase().compareTo(b.lemma.toLowerCase())); + List? get _filteredVocab => + controller.vocab?.where(_vocabFilter).toList(); - List get _filteredVocab => _vocab - .where( - (use) => - use.lemma.isNotEmpty && - (controller.selectedConstructLevel == null - ? true - : use.lemmaCategory == controller.selectedConstructLevel) && - (controller.isSearching - ? use.lemma - .toLowerCase() - .contains(controller.searchController.text.toLowerCase()) - : true), - ) - .toList(); + bool _vocabFilter(ConstructUses use) => + use.lemma.isNotEmpty && _levelFilter(use) && _searchFilter(use); + + bool _levelFilter(ConstructUses use) { + if (controller.selectedConstructLevel == null) { + return true; + } + return use.lemmaCategory == controller.selectedConstructLevel; + } + + bool _searchFilter(ConstructUses use) { + if (!controller.isSearching || + controller.searchController.text.trim().isEmpty) { + return true; + } + + final normalizedLemma = removeDiacritics(use.lemma).toLowerCase(); + final normalizedSearch = + removeDiacritics(controller.searchController.text).toLowerCase(); + + return normalizedLemma.contains(normalizedSearch); + } @override Widget build(BuildContext context) { + final vocab = controller.vocab; final List filters = ConstructLevelEnum.values.reversed .map((constructLevelCategory) { - final int count = _vocab - .where((e) => e.lemmaCategory == constructLevelCategory) - .length; + final int count = vocab + ?.where((e) => e.lemmaCategory == constructLevelCategory) + .length ?? + 0; + return InkWell( onTap: () => controller.setSelectedConstructLevel(constructLevelCategory), @@ -87,6 +101,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( @@ -109,6 +137,7 @@ class VocabAnalyticsListView extends StatelessWidget { Expanded( child: TextField( autofocus: true, + focusNode: controller.searchFocusNode, controller: controller.searchController, decoration: const InputDecoration( contentPadding: EdgeInsets.symmetric( @@ -149,41 +178,64 @@ class VocabAnalyticsListView extends StatelessWidget { ), // Grid of vocab tiles - _filteredVocab.isEmpty - ? SliverToBoxAdapter( - child: controller.selectedConstructLevel != null - ? Padding( - padding: const EdgeInsets.all(24.0), - child: Text( - L10n.of(context).vocabLevelsDesc, - style: Theme.of(context).textTheme.bodyMedium, - textAlign: TextAlign.center, - ), - ) - : const SizedBox.shrink(), - ) - : SliverGrid( - gridDelegate: - const SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 100.0, - mainAxisExtent: 100.0, - crossAxisSpacing: 8.0, - mainAxisSpacing: 8.0, + if (vocab == null) + const SliverFillRemaining( + hasScrollBody: false, + child: Center( + child: CircularProgressIndicator.adaptive(), + ), + ) + else + vocab.isEmpty + ? SliverToBoxAdapter( + child: controller.selectedConstructLevel != null + ? Padding( + padding: const EdgeInsets.all(24.0), + child: Text( + L10n.of(context).vocabLevelsDesc, + style: Theme.of(context).textTheme.bodyMedium, + textAlign: TextAlign.center, + ), + ) + : const SizedBox.shrink(), + ) + : SliverGrid( + gridDelegate: + const SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 100.0, + mainAxisExtent: 100.0, + crossAxisSpacing: 8.0, + mainAxisSpacing: 8.0, + ), + delegate: SliverChildBuilderDelegate( + (context, index) { + final vocabItem = _filteredVocab![index]; + return VocabAnalyticsListTile( + onTap: () { + TtsController.tryToSpeak( + vocabItem.id.lemma, + langCode: MatrixState.pangeaController + .userController.userL2Code!, + ); + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.wordsUsed, + construct: vocabItem.id, + ); + }, + constructId: vocabItem.id, + textColor: Theme.of(context).brightness == + Brightness.light + ? vocabItem.lemmaCategory.darkColor(context) + : vocabItem.lemmaCategory.color(context), + level: vocabItem.lemmaCategory, + selected: vocabItem.id == selectedConstruct, + ); + }, + childCount: _filteredVocab!.length, + ), ), - delegate: SliverChildBuilderDelegate( - (context, index) { - final vocabItem = _filteredVocab[index]; - return VocabAnalyticsListTile( - onTap: () => context.go( - "/rooms/analytics/${vocabItem.id.type.string}/${vocabItem.id.string}", - ), - constructUse: vocabItem, - emoji: vocabItem.id.userSetEmoji.firstOrNull, - ); - }, - childCount: _filteredVocab.length, - ), - ), + const SliverToBoxAdapter(child: SizedBox(height: 75.0)), ], ), ), diff --git a/lib/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart b/lib/pangea/analytics_details_popup/word_text_with_audio_button.dart similarity index 91% rename from lib/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart rename to lib/pangea/analytics_details_popup/word_text_with_audio_button.dart index 9297d3b3a..a2224cb66 100644 --- a/lib/pangea/toolbar/widgets/practice_activity/word_text_with_audio_button.dart +++ b/lib/pangea/analytics_details_popup/word_text_with_audio_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_audio_button.dart'; +import 'package:fluffychat/pangea/common/widgets/word_audio_button.dart'; class WordTextWithAudioButton extends StatelessWidget { final String text; diff --git a/lib/pangea/analytics_downloads/analytics_dowload_dialog.dart b/lib/pangea/analytics_downloads/analytics_dowload_dialog.dart index b18cb3f8c..f616a1be6 100644 --- a/lib/pangea/analytics_downloads/analytics_dowload_dialog.dart +++ b/lib/pangea/analytics_downloads/analytics_dowload_dialog.dart @@ -83,6 +83,7 @@ class AnalyticsDownloadDialogState extends State { return; } + final client = Matrix.of(context).client; try { if (_downloadType == DownloadType.csv) { final vocabContent = _getCSVFileContent( @@ -96,10 +97,10 @@ class AnalyticsDownloadDialogState extends State { ); final vocabFileName = - "analytics_vocab_${MatrixState.pangeaController.matrixState.client.userID?.localpart}_${DateFormat('yyyy-MM-dd-hh:mm:ss').format(DateTime.now())}.csv"; + "analytics_vocab_${client.userID?.localpart}_${DateFormat('yyyy-MM-dd-hh:mm:ss').format(DateTime.now())}.csv"; final morphFileName = - "analytics_morph_${MatrixState.pangeaController.matrixState.client.userID?.localpart}_${DateFormat('yyyy-MM-dd-hh:mm:ss').format(DateTime.now())}.csv"; + "analytics_morph_${client.userID?.localpart}_${DateFormat('yyyy-MM-dd-hh:mm:ss').format(DateTime.now())}.csv"; final futures = [ DownloadUtil.downloadFile( @@ -122,7 +123,7 @@ class AnalyticsDownloadDialogState extends State { }); final fileName = - "analytics_${MatrixState.pangeaController.matrixState.client.userID?.localpart}_${DateFormat('yyyy-MM-dd-hh:mm:ss').format(DateTime.now())}.xlsx'}"; + "analytics_${client.userID?.localpart}_${DateFormat('yyyy-MM-dd-hh:mm:ss').format(DateTime.now())}.xlsx"; await DownloadUtil.downloadFile( content, @@ -146,8 +147,11 @@ class AnalyticsDownloadDialogState extends State { } Future> _getVocabAnalytics() async { - final uses = MatrixState.pangeaController.getAnalytics.constructListModel - .constructList(type: ConstructTypeEnum.vocab); + final analyticsService = Matrix.of(context).analyticsDataService; + final aggregatedVocab = + await analyticsService.getAggregatedConstructs(ConstructTypeEnum.vocab); + + final uses = aggregatedVocab.values.toList(); final Map> lemmasToUses = {}; for (final use in uses) { lemmasToUses[use.lemma] ??= []; @@ -161,7 +165,8 @@ class AnalyticsDownloadDialogState extends State { final xp = uses.map((e) => e.points).reduce((a, total) => a + total); final exampleMessages = await _getExampleMessages(uses); - final allUses = uses.map((u) => u.uses).expand((element) => element); + final allUses = + uses.map((u) => u.cappedUses).expand((element) => element); int independantUseOccurrences = 0; int assistedUseOccurrences = 0; @@ -193,8 +198,7 @@ class AnalyticsDownloadDialogState extends State { } Future> _getMorphAnalytics() async { - final constructListModel = - MatrixState.pangeaController.getAnalytics.constructListModel; + final analyticsService = Matrix.of(context).analyticsDataService; final morphs = await MorphsRepo.get(); final List summaries = []; @@ -211,12 +215,11 @@ class AnalyticsDownloadDialogState extends State { category: feature.feature, ); - final uses = constructListModel.getConstructUses(id); - if (uses == null) continue; + final uses = await analyticsService.getConstructUse(id); final xp = uses.points; final exampleMessages = await _getExampleMessages([uses]); - final allUses = uses.uses; + final allUses = uses.cappedUses; int independantUseOccurrences = 0; int assistedUseOccurrences = 0; @@ -259,12 +262,13 @@ class AnalyticsDownloadDialogState extends State { Future> _getExampleMessages( List constructUses, ) async { - final allUses = constructUses.map((e) => e.uses).expand((e) => e).toList(); + final allUses = + constructUses.map((e) => e.cappedUses).expand((e) => e).toList(); final List examples = []; for (final OneConstructUse use in allUses) { if (use.metadata.roomId == null) continue; - final Room? room = MatrixState.pangeaController.matrixState.client - .getRoomById(use.metadata.roomId!); + final client = Matrix.of(context).client; + final Room? room = client.getRoomById(use.metadata.roomId!); if (room == null) continue; if (use.useType.skillsEnumType != LearningSkillsEnum.writing || @@ -287,12 +291,11 @@ class AnalyticsDownloadDialogState extends State { final Event? event = await room.getEventById(use.metadata.eventId!); - if (event == null || event.senderId != room.client.userID) continue; + if (event == null || event.senderId != client.userID) continue; final PangeaMessageEvent pangeaMessageEvent = PangeaMessageEvent( event: event, timeline: timeline!, - ownMessage: event.senderId == - MatrixState.pangeaController.matrixState.client.userID, + ownMessage: event.senderId == client.userID, ); examples.add(pangeaMessageEvent); if (examples.length >= 5) break; @@ -436,19 +439,20 @@ class AnalyticsDownloadDialogState extends State { ], ), ), - Padding( - padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), - child: OutlinedButton( - onPressed: _downloading ? null : _downloadAnalytics, - child: _downloading - ? const SizedBox( - height: 10, - width: 100, - child: LinearProgressIndicator(), - ) - : Text(L10n.of(context).download), + if (!_downloaded) + Padding( + padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + child: OutlinedButton( + onPressed: _downloading ? null : _downloadAnalytics, + child: _downloading + ? const SizedBox( + height: 10, + width: 100, + child: LinearProgressIndicator(), + ) + : Text(L10n.of(context).download), + ), ), - ), AnimatedSize( duration: FluffyThemes.animationDuration, child: _statusText != null diff --git a/lib/pangea/analytics_downloads/space_analytics_summary_enum.dart b/lib/pangea/analytics_downloads/space_analytics_summary_enum.dart index 09f2c7a2a..39d6bbe00 100644 --- a/lib/pangea/analytics_downloads/space_analytics_summary_enum.dart +++ b/lib/pangea/analytics_downloads/space_analytics_summary_enum.dart @@ -99,7 +99,7 @@ extension AnalyticsSummaryEnumExtension on SpaceAnalyticsSummaryEnum { case SpaceAnalyticsSummaryEnum.numChoicesIncorrect: return l10n.numIncorrectChoices; case SpaceAnalyticsSummaryEnum.numCompletedActivities: - return l10n.numCompletedActivities; + return l10n.numSavedActivities; } } } diff --git a/lib/pangea/analytics_downloads/space_analytics_summary_model.dart b/lib/pangea/analytics_downloads/space_analytics_summary_model.dart index 7017c1d3c..ddccf10e9 100644 --- a/lib/pangea/analytics_downloads/space_analytics_summary_model.dart +++ b/lib/pangea/analytics_downloads/space_analytics_summary_model.dart @@ -1,11 +1,15 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_data/construct_merge_table.dart'; +import 'package:fluffychat/pangea/analytics_data/derived_analytics_data_model.dart'; import 'package:fluffychat/pangea/analytics_downloads/space_analytics_summary_enum.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_list_model.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_misc/construct_use_type_enum.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_event.dart'; +import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; class SpaceAnalyticsSummaryModel { String username; @@ -87,127 +91,223 @@ class SpaceAnalyticsSummaryModel { ); } - static SpaceAnalyticsSummaryModel fromConstructListModel( - String userID, - ConstructListModel? model, + static SpaceAnalyticsSummaryModel fromEvents( + String username, + List events, + Set blockedConstructs, int numCompletedActivities, - String Function(ConstructUses) getCopy, - BuildContext context, ) { - final vocabLemmas = model != null - ? LemmasToUsesWrapper( - model.lemmasToUses(type: ConstructTypeEnum.vocab), - ) - : null; - final morphLemmas = model != null - ? LemmasToUsesWrapper( - model.lemmasToUses(type: ConstructTypeEnum.morph), - ) - : null; + int totalXP = 0; + int numWordsTyped = 0; + int numChoicesCorrect = 0; + int numChoicesIncorrect = 0; - final List correctOriginalUseLemmas = []; - final List correctSystemUseLemmas = []; - final List incorrectOriginalUseLemmas = []; - final List incorrectSystemUseLemmas = []; + final Set sentEventIds = {}; + final List allUses = []; - if (morphLemmas != null) { - final originalWrittenUses = morphLemmas.lemmasByPercent( - filter: (use) => - use.useType == ConstructUseTypeEnum.wa || - use.useType == ConstructUseTypeEnum.ga || - use.useType == ConstructUseTypeEnum.ta, - percent: 0.8, - context: context, - ); + final Map> aggregatedVocab = {}; + final Map> aggregatedMorph = {}; - correctOriginalUseLemmas.addAll(originalWrittenUses.over); - incorrectOriginalUseLemmas.addAll(originalWrittenUses.under); + final ConstructMergeTable mergeTable = ConstructMergeTable(); - final systemGeneratedUses = morphLemmas.lemmasByPercent( - filter: (use) => - use.useType != ConstructUseTypeEnum.wa && - use.useType != ConstructUseTypeEnum.ga && - use.useType != ConstructUseTypeEnum.ta && - use.useType != ConstructUseTypeEnum.unk && - use.xp != 0, - percent: 0.8, - context: context, - ); + for (final e in events) { + mergeTable.addConstructsByUses(e.content.uses, blockedConstructs); - correctSystemUseLemmas.addAll(systemGeneratedUses.over); - incorrectSystemUseLemmas.addAll(systemGeneratedUses.under); - } + for (final use in e.content.uses) { + totalXP += use.xp; + allUses.add(use); - final vocabLemmasCorrect = vocabLemmas?.lemmasByCorrectUse(); - - int? numWordsTyped; - int? numChoicesCorrect; - int? numChoicesIncorrect; - if (model != null) { - numWordsTyped = 0; - numChoicesCorrect = 0; - numChoicesIncorrect = 0; - for (final use in model.uses) { if (use.useType.summaryEnumType == SpaceAnalyticsSummaryEnum.numWordsTyped) { - numWordsTyped = numWordsTyped! + 1; + numWordsTyped = numWordsTyped + 1; } else if (use.useType.summaryEnumType == SpaceAnalyticsSummaryEnum.numChoicesCorrect) { - numChoicesCorrect = numChoicesCorrect! + 1; + numChoicesCorrect = numChoicesCorrect + 1; } else if (use.useType.summaryEnumType == SpaceAnalyticsSummaryEnum.numChoicesIncorrect) { - numChoicesIncorrect = numChoicesIncorrect! + 1; + numChoicesIncorrect = numChoicesIncorrect + 1; + } + + if (use.useType.sentByUser && use.metadata.eventId != null) { + sentEventIds.add(use.metadata.eventId!); + } + + final id = use.identifier; + final existing = id.type == ConstructTypeEnum.vocab + ? aggregatedVocab[id] + : aggregatedMorph[id]; + + if (existing != null) { + existing.add(use); + } else { + id.type == ConstructTypeEnum.vocab + ? aggregatedVocab[id] = [use] + : aggregatedMorph[id] = [use]; } } } - final numMessageSent = model?.uses - .where((use) => use.useType.sentByUser) - .map((use) => use.metadata.eventId) - .toSet() - .length; + final Map aggregatedVocabUses = {}; + for (final entry in aggregatedVocab.entries) { + aggregatedVocabUses[entry.key] = ConstructUses( + lemma: entry.value.first.lemma, + constructType: entry.value.first.constructType, + category: entry.value.first.category, + uses: entry.value, + ); + } + + final Map aggregatedMorphUses = {}; + for (final entry in aggregatedMorph.entries) { + aggregatedMorphUses[entry.key] = ConstructUses( + lemma: entry.value.first.lemma, + constructType: entry.value.first.constructType, + category: entry.value.first.category, + uses: entry.value, + ); + } + + final cleanedVocab = {}; + for (final entry in aggregatedVocabUses.values) { + final canonical = mergeTable.resolve(entry.id); + final existing = cleanedVocab[canonical]; + if (existing != null) { + existing.merge(entry); + } else { + cleanedVocab[canonical] = entry; + } + } + + final cleanedMorph = {}; + for (final entry in aggregatedMorphUses.values) { + final canonical = mergeTable.resolve(entry.id); + final existing = cleanedMorph[canonical]; + if (existing != null) { + existing.merge(entry); + } else { + cleanedMorph[canonical] = entry; + } + } + + final level = DerivedAnalyticsDataModel.calculateLevelWithXp(totalXP); + final uniqueVocabCount = cleanedVocab.length; + final uniqueMorphCount = cleanedMorph.length; + + int vocabUsedCorrectly = 0; + int vocabUsedIncorrectly = 0; + int vocabSmallXP = 0; + int vocabMediumXP = 0; + int vocabLargeXP = 0; + + for (final entry in cleanedVocab.values) { + final xp = entry.points; + + if (xp >= 0 && xp <= 29) { + vocabSmallXP += 1; + } else if (xp >= 30 && xp < 200) { + vocabMediumXP += 1; + } else if (xp >= 200) { + vocabLargeXP += 1; + } + + if (entry.hasCorrectUse) { + vocabUsedCorrectly += 1; + } else { + vocabUsedIncorrectly += 1; + } + } + + final originalUseTypes = { + ConstructUseTypeEnum.wa, + ConstructUseTypeEnum.ga, + ConstructUseTypeEnum.ta, + }; + + final List morphConstructs = []; + final List morphSmallXP = []; + final List morphMediumXP = []; + final List morphLargeXP = []; + final List morphHugeXP = []; + final List morphCorrectOriginal = []; + final List morphIncorrectOriginal = []; + final List morphCorrectSystem = []; + final List morphIncorrectSystem = []; + + for (final entry in cleanedMorph.values) { + morphConstructs.add(entry.lemma); + final xp = entry.points; + + if (xp >= 0 && xp <= 50) { + morphSmallXP.add(entry.lemma); + } else if (xp >= 51 && xp <= 200) { + morphMediumXP.add(entry.lemma); + } else if (xp >= 201 && xp <= 500) { + morphLargeXP.add(entry.lemma); + } else if (xp >= 501) { + morphHugeXP.add(entry.lemma); + } + + final originalUsesCorrect = []; + final originalUsesIncorrect = []; + final systemUsesCorrect = []; + final systemUsesIncorrect = []; + + for (final use in entry.cappedUses) { + if (originalUseTypes.contains(use.useType)) { + use.xp > 0 + ? originalUsesCorrect.add(use) + : originalUsesIncorrect.add(use); + } else { + use.xp > 0 + ? systemUsesCorrect.add(use) + : systemUsesIncorrect.add(use); + } + } + + // if >= 80% correct original uses + if (originalUsesCorrect.length + originalUsesIncorrect.length > 0) { + final percentCorrect = originalUsesCorrect.length / + (originalUsesCorrect.length + originalUsesIncorrect.length); + if (percentCorrect >= 0.8) { + morphCorrectOriginal.add(entry.lemma); + } else { + morphIncorrectOriginal.add(entry.lemma); + } + + if (systemUsesCorrect.length + systemUsesIncorrect.length > 0) { + final percentCorrectSystem = systemUsesCorrect.length / + (systemUsesCorrect.length + systemUsesIncorrect.length); + if (percentCorrectSystem >= 0.8) { + morphCorrectSystem.add(entry.lemma); + } else { + morphIncorrectSystem.add(entry.lemma); + } + } + } + } return SpaceAnalyticsSummaryModel( - username: userID, - dataAvailable: model != null, - level: model?.level, - totalXP: model?.totalXP, - numLemmas: model?.numConstructs(ConstructTypeEnum.vocab), - numLemmasUsedCorrectly: vocabLemmasCorrect?.over.length, - numLemmasUsedIncorrectly: vocabLemmasCorrect?.under.length, - numLemmasSmallXP: - vocabLemmas?.thresholdedLemmas(start: 0, end: 30).length, - numLemmasMediumXP: - vocabLemmas?.thresholdedLemmas(start: 31, end: 200).length, - numLemmasLargeXP: vocabLemmas?.thresholdedLemmas(start: 201).length, - numMorphConstructs: model?.numConstructs(ConstructTypeEnum.morph), - listMorphConstructs: morphLemmas?.lemmasToUses.entries - .map((entry) => getCopy(entry.value.first)) - .toList(), - listMorphConstructsUsedCorrectlyOriginal: correctOriginalUseLemmas, - listMorphConstructsUsedIncorrectlyOriginal: incorrectOriginalUseLemmas, - listMorphConstructsUsedCorrectlySystem: correctSystemUseLemmas, - listMorphConstructsUsedIncorrectlySystem: incorrectSystemUseLemmas, - listMorphSmallXP: morphLemmas?.thresholdedLemmas( - start: 0, - end: 50, - getCopy: getCopy, - ), - listMorphMediumXP: morphLemmas?.thresholdedLemmas( - start: 51, - end: 200, - getCopy: getCopy, - ), - listMorphLargeXP: morphLemmas?.thresholdedLemmas( - start: 201, - end: 500, - getCopy: getCopy, - ), - listMorphHugeXP: morphLemmas?.thresholdedLemmas( - start: 501, - getCopy: getCopy, - ), - numMessagesSent: numMessageSent, + username: username, + dataAvailable: true, + level: level, + totalXP: totalXP, + numLemmas: uniqueVocabCount, + numLemmasUsedCorrectly: vocabUsedCorrectly, + numLemmasUsedIncorrectly: vocabUsedIncorrectly, + numLemmasSmallXP: vocabSmallXP, + numLemmasMediumXP: vocabMediumXP, + numLemmasLargeXP: vocabLargeXP, + numMorphConstructs: uniqueMorphCount, + listMorphConstructs: morphConstructs, + listMorphSmallXP: morphSmallXP, + listMorphMediumXP: morphMediumXP, + listMorphLargeXP: morphLargeXP, + listMorphHugeXP: morphHugeXP, + listMorphConstructsUsedCorrectlyOriginal: morphCorrectOriginal, + listMorphConstructsUsedIncorrectlyOriginal: morphIncorrectOriginal, + listMorphConstructsUsedCorrectlySystem: morphCorrectSystem, + listMorphConstructsUsedIncorrectlySystem: morphIncorrectSystem, + numMessagesSent: sentEventIds.length, numWordsTyped: numWordsTyped, numChoicesCorrect: numChoicesCorrect, numChoicesIncorrect: numChoicesIncorrect, @@ -215,6 +315,134 @@ class SpaceAnalyticsSummaryModel { ); } + // static SpaceAnalyticsSummaryModel fromConstructListModel( + // String userID, + // ConstructListModel? model, + // int numCompletedActivities, + // String Function(ConstructUses) getCopy, + // BuildContext context, + // ) { + // final vocabLemmas = model != null + // ? LemmasToUsesWrapper( + // model.lemmasToUses(type: ConstructTypeEnum.vocab), + // ) + // : null; + // final morphLemmas = model != null + // ? LemmasToUsesWrapper( + // model.lemmasToUses(type: ConstructTypeEnum.morph), + // ) + // : null; + + // final List correctOriginalUseLemmas = []; + // final List correctSystemUseLemmas = []; + // final List incorrectOriginalUseLemmas = []; + // final List incorrectSystemUseLemmas = []; + + // if (morphLemmas != null) { + // final originalWrittenUses = morphLemmas.lemmasByPercent( + // filter: (use) => + // use.useType == ConstructUseTypeEnum.wa || + // use.useType == ConstructUseTypeEnum.ga || + // use.useType == ConstructUseTypeEnum.ta, + // percent: 0.8, + // context: context, + // ); + + // correctOriginalUseLemmas.addAll(originalWrittenUses.over); + // incorrectOriginalUseLemmas.addAll(originalWrittenUses.under); + + // final systemGeneratedUses = morphLemmas.lemmasByPercent( + // filter: (use) => + // use.useType != ConstructUseTypeEnum.wa && + // use.useType != ConstructUseTypeEnum.ga && + // use.useType != ConstructUseTypeEnum.ta && + // use.useType != ConstructUseTypeEnum.unk && + // use.xp != 0, + // percent: 0.8, + // context: context, + // ); + + // correctSystemUseLemmas.addAll(systemGeneratedUses.over); + // incorrectSystemUseLemmas.addAll(systemGeneratedUses.under); + // } + + // final vocabLemmasCorrect = vocabLemmas?.lemmasByCorrectUse(); + + // int? numWordsTyped; + // int? numChoicesCorrect; + // int? numChoicesIncorrect; + // if (model != null) { + // numWordsTyped = 0; + // numChoicesCorrect = 0; + // numChoicesIncorrect = 0; + // for (final use in model.uses) { + // if (use.useType.summaryEnumType == + // SpaceAnalyticsSummaryEnum.numWordsTyped) { + // numWordsTyped = numWordsTyped! + 1; + // } else if (use.useType.summaryEnumType == + // SpaceAnalyticsSummaryEnum.numChoicesCorrect) { + // numChoicesCorrect = numChoicesCorrect! + 1; + // } else if (use.useType.summaryEnumType == + // SpaceAnalyticsSummaryEnum.numChoicesIncorrect) { + // numChoicesIncorrect = numChoicesIncorrect! + 1; + // } + // } + // } + + // final numMessageSent = model?.uses + // .where((use) => use.useType.sentByUser) + // .map((use) => use.metadata.eventId) + // .toSet() + // .length; + + // return SpaceAnalyticsSummaryModel( + // username: userID, + // dataAvailable: model != null, + // level: model?.level, + // totalXP: model?.totalXP, + // numLemmas: model?.numConstructs(ConstructTypeEnum.vocab), + // numLemmasUsedCorrectly: vocabLemmasCorrect?.over.length, + // numLemmasUsedIncorrectly: vocabLemmasCorrect?.under.length, + // numLemmasSmallXP: + // vocabLemmas?.thresholdedLemmas(start: 0, end: 30).length, + // numLemmasMediumXP: + // vocabLemmas?.thresholdedLemmas(start: 31, end: 200).length, + // numLemmasLargeXP: vocabLemmas?.thresholdedLemmas(start: 201).length, + // numMorphConstructs: model?.numConstructs(ConstructTypeEnum.morph), + // listMorphConstructs: morphLemmas?.lemmasToUses.entries + // .map((entry) => getCopy(entry.value.first)) + // .toList(), + // listMorphConstructsUsedCorrectlyOriginal: correctOriginalUseLemmas, + // listMorphConstructsUsedIncorrectlyOriginal: incorrectOriginalUseLemmas, + // listMorphConstructsUsedCorrectlySystem: correctSystemUseLemmas, + // listMorphConstructsUsedIncorrectlySystem: incorrectSystemUseLemmas, + // listMorphSmallXP: morphLemmas?.thresholdedLemmas( + // start: 0, + // end: 50, + // getCopy: getCopy, + // ), + // listMorphMediumXP: morphLemmas?.thresholdedLemmas( + // start: 51, + // end: 200, + // getCopy: getCopy, + // ), + // listMorphLargeXP: morphLemmas?.thresholdedLemmas( + // start: 201, + // end: 500, + // getCopy: getCopy, + // ), + // listMorphHugeXP: morphLemmas?.thresholdedLemmas( + // start: 501, + // getCopy: getCopy, + // ), + // numMessagesSent: numMessageSent, + // numWordsTyped: numWordsTyped, + // numChoicesCorrect: numChoicesCorrect, + // numChoicesIncorrect: numChoicesIncorrect, + // numCompletedActivities: numCompletedActivities, + // ); + // } + dynamic getValue(SpaceAnalyticsSummaryEnum key, BuildContext context) { switch (key) { case SpaceAnalyticsSummaryEnum.username: diff --git a/lib/pangea/analytics_misc/analytics_constants.dart b/lib/pangea/analytics_misc/analytics_constants.dart index cff83fcc1..d680c1fd7 100644 --- a/lib/pangea/analytics_misc/analytics_constants.dart +++ b/lib/pangea/analytics_misc/analytics_constants.dart @@ -12,7 +12,6 @@ class AnalyticsConstants { static const String emojiForFlower = "🌸"; static const levelUpAudioFileName = "LevelUp_chime.mp3"; static const levelUpImageFileName = "LvL_Up_Full_Banner.png"; - static const popupDividerFileName = "divider.png"; static const vocabIconFileName = "Vocabulary_icon.png"; static const morphIconFileName = "grammar_icon.png"; } diff --git a/lib/pangea/analytics_misc/analytics_navigation_util.dart b/lib/pangea/analytics_misc/analytics_navigation_util.dart new file mode 100644 index 000000000..f6714618f --- /dev/null +++ b/lib/pangea/analytics_misc/analytics_navigation_util.dart @@ -0,0 +1,59 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; + +import 'package:go_router/go_router.dart'; + +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/analytics_details_popup/analytics_details_popup.dart'; +import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; + +class AnalyticsNavigationUtil { + static Future navigateToAnalytics({ + required BuildContext context, + ProgressIndicatorEnum? view, + ConstructIdentifier? construct, + String? activityRoomId, + }) async { + if (view == null) { + context.go('/rooms/analytics'); + return; + } + + if (view == ProgressIndicatorEnum.activities) { + if (activityRoomId != null) { + context.go('/rooms/analytics/activities/$activityRoomId'); + return; + } + context.go('/rooms/analytics/activities'); + return; + } + + if (construct == null || + !{ProgressIndicatorEnum.wordsUsed, ProgressIndicatorEnum.morphsUsed} + .contains(view)) { + context.go("/rooms/analytics/${view.route}"); + return; + } + + final isColumnMode = FluffyThemes.isColumnMode(context); + if (isColumnMode) { + context.go( + '/rooms/analytics/${view.route}/${Uri.encodeComponent(jsonEncode(construct.toJson()))}', + ); + return; + } + + await showAdaptiveBottomSheet( + context: context, + builder: (context) { + return ConstructAnalyticsView( + view: view.constructType, + construct: construct, + ); + }, + ); + } +} diff --git a/lib/pangea/analytics_misc/client_analytics_extension.dart b/lib/pangea/analytics_misc/client_analytics_extension.dart index ca92ff2cc..e4d36c11d 100644 --- a/lib/pangea/analytics_misc/client_analytics_extension.dart +++ b/lib/pangea/analytics_misc/client_analytics_extension.dart @@ -11,7 +11,7 @@ import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; extension AnalyticsClientExtension on Client { @@ -27,7 +27,7 @@ extension AnalyticsClientExtension on Client { /// optional userId (if not specified, uses current user). /// If user is invited to the room, joins the room. Room? analyticsRoomLocal([LanguageModel? lang, String? userIdParam]) { - lang ??= MatrixState.pangeaController.languageController.userL2; + lang ??= MatrixState.pangeaController.userController.userL2; if (lang == null) { debugger(when: kDebugMode); diff --git a/lib/pangea/analytics_misc/construct_list_model.dart b/lib/pangea/analytics_misc/construct_list_model.dart deleted file mode 100644 index 7e4e63ed8..000000000 --- a/lib/pangea/analytics_misc/construct_list_model.dart +++ /dev/null @@ -1,362 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -import 'package:collection/collection.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_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; - -/// A wrapper around a list of [OneConstructUse]s, used to simplify -/// the process of filtering / sorting / displaying the events. -class ConstructListModel { - final List _uses = []; - List get uses => _uses; - List get truncatedUses => _uses.take(100).toList(); - - /// A map of ConstructIdentifiers to ConstructUses, each of which contains a lemma - /// key = lemma + constructType.string, value = ConstructUses - final Map _constructMap = {}; - - /// Storing this to avoid re-running the sort operation each time this needs to - /// be accessed. It contains the same information as _constructMap, but sorted. - List _constructList = []; - - /// [D] is the "compression factor". It determines how quickly - /// or slowly the level grows relative to XP - - final double D = Environment.isStagingEnvironment ? 500 : 1500; - - /// Analytics data consumed by widgets. Updated each time new analytics come in. - int prevXP = 0; - int totalXP = 0; - int level = 0; - - ConstructListModel({ - required List uses, - int offset = 0, - }) { - updateConstructs(uses, offset); - } - - /// Given a list of new construct uses, update the map of construct - /// IDs to ConstructUses and re-sort the list of ConstructUses - void updateConstructs(List newUses, int offset) { - try { - _updateUsesList(newUses); - _updateConstructMap(newUses); - _updateConstructList(); - _updateMetrics(offset); - } catch (err, s) { - ErrorHandler.logError( - e: "Failed to update analytics: $err", - s: s, - data: { - "newUses": newUses.map((e) => e.toJson()), - }, - ); - } - } - - int _sortConstructs(ConstructUses a, ConstructUses b) { - final comp = b.points.compareTo(a.points); - if (comp != 0) return comp; - return a.lemma.compareTo(b.lemma); - } - - void _updateUsesList(List newUses) { - newUses.sort((a, b) => b.timeStamp.compareTo(a.timeStamp)); - _uses.insertAll(0, newUses); - } - - /// A map of lemmas to ConstructUses, each of which contains a lemma - /// key = lemmma + constructType.string, value = ConstructUses - void _updateConstructMap(final List newUses) { - for (final use in newUses) { - final currentUses = _constructMap[use.identifier.string] ?? - ConstructUses( - uses: [], - constructType: use.constructType, - lemma: use.lemma, - category: use.category, - ); - currentUses.uses.add(use); - currentUses.setLastUsed(use.timeStamp); - _constructMap[use.identifier.string] = currentUses; - } - - final broadKeys = _constructMap.keys.where((key) => key.endsWith('other')); - final replacedKeys = []; - for (final broadKey in broadKeys) { - final specificKeyPrefix = broadKey.split("-").first; - final specificKey = _constructMap.keys.firstWhereOrNull( - (key) => - key != broadKey && - key.startsWith(specificKeyPrefix) && - !key.endsWith('other'), - ); - if (specificKey == null) continue; - final broadConstructEntry = _constructMap[broadKey]; - final specificConstructEntry = _constructMap[specificKey]; - specificConstructEntry!.uses.addAll(broadConstructEntry!.uses); - _constructMap[specificKey] = specificConstructEntry; - replacedKeys.add(broadKey); - } - - for (final key in replacedKeys) { - _constructMap.remove(key); - } - } - - /// A list of ConstructUses, each of which contains a lemma and - /// a list of uses, sorted by the number of uses - void _updateConstructList() { - // TODO check how expensive this is - _constructList = _constructMap.values.toList(); - _constructList.sort(_sortConstructs); - } - - void _updateMetrics(int offset) { - prevXP = totalXP; - totalXP = (_constructList.fold( - 0, - (total, construct) => total + construct.points, - )) + - offset; - - if (totalXP < 0) { - totalXP = 0; - } - level = calculateLevelWithXp(totalXP); - } - - List constructList({ConstructTypeEnum? type}) => _constructList - .where( - (constructUse) => type == null || constructUse.constructType == type, - ) - .toList(); - - // TODO; make this non-nullable, returning empty if not found - ConstructUses? getConstructUses(ConstructIdentifier identifier) { - final partialKey = "${identifier.lemma}-${identifier.type.string}"; - - if (_constructMap.containsKey(identifier.string)) { - // try to get construct use entry with full ID key - return _constructMap[identifier.string]; - } else if (identifier.category == "other") { - // if the category passed to this function is "other", return the first - // construct use entry that starts with the partial key - return _constructMap.entries - .firstWhereOrNull((entry) => entry.key.startsWith(partialKey)) - ?.value; - } else { - // if the category passed to this function is not "other", return the first - // construct use entry that starts with the partial key and ends with "other" - return _constructMap.entries - .firstWhereOrNull( - (entry) => - entry.key.startsWith(partialKey) && entry.key.endsWith("other"), - ) - ?.value; - } - } - - List getConstructUsesByLemma(String lemma) => _constructList - .where( - (constructUse) => constructUse.lemma == lemma, - ) - .toList(); - - int numConstructs(ConstructTypeEnum type) => constructList(type: type).length; - - int calculateLevelWithXp(int totalXP) { - final doubleScore = (1 + sqrt((1 + (8.0 * totalXP / D)) / 2.0)); - if (!doubleScore.isNaN && doubleScore.isFinite) { - return doubleScore.floor(); - } else { - ErrorHandler.logError( - e: "Calculated level in Nan or Infinity", - data: { - "totalXP": totalXP, - "prevXP": prevXP, - "level": doubleScore, - }, - ); - return 1; - } - } - - int calculateXpWithLevel(int level) { - // If level <= 1, XP should be 0 or negative by this math. - // In practice, you might clamp it to 0: - if (level <= 1) { - return 0; - } - - // Convert level to double for the math - final double lc = level.toDouble(); - - // XP from the inverse formula: - final double xpDouble = (D / 8.0) * (2.0 * pow(lc - 1.0, 2.0) - 1.0); - - // Floor or clamp to ensure non-negative. - final int xp = xpDouble.floor(); - return (xp < 0) ? 0 : xp; - } - - /// Unique construct identifiers with XP >= [threshold] - /// Used on analytics update to determine newly 'unlocked' constructs - List unlockedLemmas( - ConstructTypeEnum type, { - int threshold = 0, - }) { - final constructs = constructList(type: type); - final List unlocked = []; - final constructsSet = constructList(type: type).map((e) => e.lemma).toSet(); - - for (final lemma in constructsSet) { - final matches = constructs.where((m) => m.lemma == lemma); - final totalPoints = matches.fold( - 0, - (total, match) => total + match.points, - ); - if (totalPoints > threshold) { - unlocked.add(matches.first.id); - } - } - return unlocked; - } - - // Not storing this for now to reduce memory load - // It's only used by downloads, so doesn't need to be accessible on the fly - Map> lemmasToUses({ - ConstructTypeEnum? type, - }) { - final Map> lemmasToUses = {}; - final constructs = constructList(type: type); - for (final ConstructUses use in constructs) { - final lemma = use.lemma; - lemmasToUses.putIfAbsent(lemma, () => []); - lemmasToUses[lemma]!.add(use); - } - return lemmasToUses; - } -} - -class LemmasToUsesWrapper { - final Map> lemmasToUses; - - LemmasToUsesWrapper(this.lemmasToUses); - - Map> lemmasToFilteredUses( - bool Function(OneConstructUse) filter, - ) { - final Map> lemmasToOneConstructUses = {}; - for (final entry in lemmasToUses.entries) { - final lemma = entry.key; - final uses = entry.value; - lemmasToOneConstructUses[lemma] = - uses.expand((use) => use.uses).toList().where(filter).toList(); - } - return lemmasToOneConstructUses; - } - - LemmasOverUnderList lemmasByPercent({ - required bool Function(OneConstructUse) filter, - required double percent, - required BuildContext context, - }) { - final List correctUseLemmas = []; - final List incorrectUseLemmas = []; - - final uses = lemmasToFilteredUses(filter); - for (final entry in uses.entries) { - if (entry.value.isEmpty) continue; - final List correctUses = []; - final List incorrectUses = []; - - final lemma = getGrammarCopy( - category: entry.value.first.category, - lemma: entry.key, - context: context, - ) ?? - entry.key; - final uses = entry.value.toList(); - - for (final use in uses) { - use.xp > 0 ? correctUses.add(use) : incorrectUses.add(use); - } - - final totalUses = correctUses.length + incorrectUses.length; - final percent = totalUses == 0 ? 0 : correctUses.length / totalUses; - - percent > 0.8 - ? correctUseLemmas.add(lemma) - : incorrectUseLemmas.add(lemma); - } - - return LemmasOverUnderList( - over: correctUseLemmas, - under: incorrectUseLemmas, - ); - } - - /// Return an object containing two lists, one of lemmas with - /// any correct uses and one of lemmas no correct uses - LemmasOverUnderList lemmasByCorrectUse({ - String Function(ConstructUses)? getCopy, - }) { - final List correctLemmas = []; - final List incorrectLemmas = []; - for (final entry in lemmasToUses.entries) { - final lemma = entry.key; - final constructUses = entry.value; - final copy = getCopy?.call(constructUses.first) ?? lemma; - if (constructUses.any((use) => use.hasCorrectUse)) { - correctLemmas.add(copy); - } else { - incorrectLemmas.add(copy); - } - } - return LemmasOverUnderList(over: correctLemmas, under: incorrectLemmas); - } - - int totalXP(String lemma) { - final uses = lemmasToUses[lemma]; - if (uses == null) return 0; - if (uses.length == 1) return uses.first.points; - return lemmasToUses[lemma]!.fold( - 0, - (total, use) => total + use.points, - ); - } - - List thresholdedLemmas({ - required int start, - int? end, - String Function(ConstructUses)? getCopy, - }) { - final filteredList = lemmasToUses.entries.where((entry) { - final xp = totalXP(entry.key); - return xp >= start && (end == null || xp <= end); - }); - return filteredList - .map((entry) => getCopy?.call(entry.value.first) ?? entry.key) - .toList(); - } -} - -class LemmasOverUnderList { - final List over; - final List under; - - LemmasOverUnderList({ - required this.over, - required this.under, - }); -} diff --git a/lib/pangea/analytics_misc/construct_use_model.dart b/lib/pangea/analytics_misc/construct_use_model.dart index e03d4c5f9..d1ef0eaeb 100644 --- a/lib/pangea/analytics_misc/construct_use_model.dart +++ b/lib/pangea/analytics_misc/construct_use_model.dart @@ -1,3 +1,7 @@ +import 'dart:math'; + +import 'package:collection/collection.dart'; + 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/construct_use_type_enum.dart'; @@ -7,47 +11,44 @@ import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; /// One lemma and a list of construct uses for that lemma class ConstructUses { - final List uses; + final List _uses; final ConstructTypeEnum constructType; final String lemma; - final String? _category; - DateTime? _lastUsed; + String? _category; ConstructUses({ - required this.uses, + required List uses, required this.constructType, required this.lemma, required category, - }) : _category = category; + }) : _category = category, + _uses = List.from(uses) { + _sortUses(); + } // Total points for all uses of this lemma int get points { - return uses.fold( - 0, - (total, use) => total + use.xp, + return min( + _uses.fold( + 0, + (total, use) => total + use.xp, + ), + AnalyticsConstants.xpForFlower, ); } - DateTime? get lastUsed { - if (_lastUsed != null) return _lastUsed; - final lastUse = uses.fold(null, (DateTime? last, use) { - if (last == null) return use.timeStamp; - return use.timeStamp.isAfter(last) ? use.timeStamp : last; - }); - return _lastUsed = lastUse; - } - - void setLastUsed(DateTime time) { - _lastUsed = time; - } + DateTime? get lastUsed => _uses.lastOrNull?.timeStamp; + DateTime? get cappedLastUse => cappedUses.lastOrNull?.timeStamp; String get category { if (_category == null || _category!.isEmpty) return "other"; return _category!.toLowerCase(); } - bool get hasCorrectUse => uses.any((use) => use.xp > 0); - bool get hasIncorrectUse => uses.any((use) => use.xp < 0); + bool get hasCorrectUse => _uses.any((use) => use.xp > 0); + bool get hasIncorrectUse => _uses.any((use) => use.xp < 0); + + int get numTotalUses => _uses.length; ConstructIdentifier get id => ConstructIdentifier( lemma: lemma, @@ -55,18 +56,6 @@ class ConstructUses { category: category, ); - Map toJson() { - final json = { - 'construct_id': id.toJson(), - 'xp': points, - 'last_used': lastUsed?.toIso8601String(), - - /// NOTE - sent to server as just the useTypes - 'uses': uses.map((e) => e.useType.string).toList(), - }; - return json; - } - /// Get the lemma category, based on points ConstructLevelEnum get lemmaCategory { if (points < AnalyticsConstants.xpForGreens) { @@ -90,13 +79,99 @@ class ConstructUses { } } - ConstructLevelEnum get constructLevel { - if (points < 30) { - return ConstructLevelEnum.seeds; - } else if (points < 100) { - return ConstructLevelEnum.greens; - } else { - return ConstructLevelEnum.flowers; + ConstructLevelEnum get constructLevel => switch (points) { + < AnalyticsConstants.xpForGreens => ConstructLevelEnum.seeds, + < AnalyticsConstants.xpForFlower => ConstructLevelEnum.greens, + _ => ConstructLevelEnum.flowers, + }; + + List get forms => + _uses.map((e) => e.form).whereType().toSet().toList(); + + List get cappedUses { + final result = []; + var totalXp = 0; + + for (final use in _uses) { + if (totalXp >= AnalyticsConstants.xpForFlower) break; + totalXp += use.xp; + result.add(use); + } + + return result; + } + + DateTime? lastUseByTypes(List types) => + _uses.lastWhereOrNull((u) => types.contains(u.useType))?.timeStamp; + + Map toJson() { + final json = { + 'construct_id': id.toJson(), + 'xp': points, + 'last_used': lastUsed?.toIso8601String(), + 'uses': _uses.map((e) => e.toJson()).toList(), + }; + return json; + } + + factory ConstructUses.fromJson(Map json) { + final constructId = ConstructIdentifier.fromJson( + Map.from(json['construct_id']), + ); + + List usesJson = []; + if (json['uses'] is List) { + usesJson = List.from(json['uses']); + } + + final uses = usesJson + .map((e) => OneConstructUse.fromJson(Map.from(e))) + .toList(); + + return ConstructUses( + uses: uses, + constructType: constructId.type, + lemma: constructId.lemma, + category: constructId.category, + ); + } + + void _sortUses() { + _uses.sort((a, b) => a.timeStamp.compareTo(b.timeStamp)); + } + + void addUse(OneConstructUse use) { + _uses.add(use); + _sortUses(); + } + + void merge(ConstructUses other) { + if (other.lemma.toLowerCase() != lemma.toLowerCase() || + other.constructType != constructType) { + throw ArgumentError( + 'Cannot merge ConstructUses with different lemmas or types', + ); + } + + _uses.addAll(other._uses); + _sortUses(); + + if (category == 'other' && other.category != 'other') { + _category = other.category; } } + + ConstructUses copyWith({ + List? uses, + ConstructTypeEnum? constructType, + String? lemma, + String? category, + }) { + return ConstructUses( + uses: uses ?? _uses, + constructType: constructType ?? this.constructType, + lemma: lemma ?? this.lemma, + category: category ?? _category, + ); + } } diff --git a/lib/pangea/analytics_misc/construct_use_type_enum.dart b/lib/pangea/analytics_misc/construct_use_type_enum.dart index 741480bca..9dd3ba4c0 100644 --- a/lib/pangea/analytics_misc/construct_use_type_enum.dart +++ b/lib/pangea/analytics_misc/construct_use_type_enum.dart @@ -69,8 +69,19 @@ enum ConstructUseTypeEnum { /// lemma collected by clicking on it click, + /// Bonus XP, ignored by level analytics page + bonus, + /// not defined, likely a new construct introduced by choreo and not yet classified by an old version of the client - nan + nan, + + // vocab lemma definition activity + corLM, + incLM, + + // vocab lemma audio activity + corLA, + incLA, } extension ConstructUseTypeExtension on ConstructUseTypeEnum { @@ -140,8 +151,18 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { return L10n.of(context).constructUseIgnMmDesc; case ConstructUseTypeEnum.click: return L10n.of(context).constructUseCollected; + case ConstructUseTypeEnum.bonus: + return L10n.of(context).constructUseBonus; case ConstructUseTypeEnum.nan: return L10n.of(context).constructUseNanDesc; + case ConstructUseTypeEnum.corLM: + return L10n.of(context).constructUseCorLMDesc; + case ConstructUseTypeEnum.incLM: + return L10n.of(context).constructUseIncLMDesc; + case ConstructUseTypeEnum.corLA: + return L10n.of(context).constructUseCorLADesc; + case ConstructUseTypeEnum.incLA: + return L10n.of(context).constructUseIncLADesc; } } @@ -152,20 +173,24 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.corIt: case ConstructUseTypeEnum.incIt: case ConstructUseTypeEnum.ignIt: + case ConstructUseTypeEnum.ta: return Icons.translate; case ConstructUseTypeEnum.ignIGC: case ConstructUseTypeEnum.incIGC: case ConstructUseTypeEnum.corIGC: case ConstructUseTypeEnum.ga: - case ConstructUseTypeEnum.ta: return Icons.spellcheck; case ConstructUseTypeEnum.corPA: case ConstructUseTypeEnum.incPA: case ConstructUseTypeEnum.ignPA: + case ConstructUseTypeEnum.corLM: + case ConstructUseTypeEnum.incLM: return ActivityTypeEnum.wordMeaning.icon; case ConstructUseTypeEnum.ignWL: case ConstructUseTypeEnum.incWL: case ConstructUseTypeEnum.corWL: + case ConstructUseTypeEnum.corLA: + case ConstructUseTypeEnum.incLA: return ActivityTypeEnum.wordFocusListening.icon; case ConstructUseTypeEnum.incHWL: case ConstructUseTypeEnum.ignHWL: @@ -192,6 +217,8 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { return Icons.help; case ConstructUseTypeEnum.click: return Icons.format_color_text; + case ConstructUseTypeEnum.bonus: + return Icons.star; } } @@ -206,6 +233,8 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.corPA: case ConstructUseTypeEnum.corWL: case ConstructUseTypeEnum.corM: + case ConstructUseTypeEnum.corLM: + case ConstructUseTypeEnum.corLA: return 5; case ConstructUseTypeEnum.pvm: @@ -223,6 +252,7 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.corIt: case ConstructUseTypeEnum.corMM: + case ConstructUseTypeEnum.bonus: return 1; case ConstructUseTypeEnum.ignIt: @@ -243,6 +273,8 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.incIt: case ConstructUseTypeEnum.incIGC: case ConstructUseTypeEnum.incM: + case ConstructUseTypeEnum.incLM: + case ConstructUseTypeEnum.incLA: return -1; case ConstructUseTypeEnum.incPA: @@ -289,6 +321,11 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.em: case ConstructUseTypeEnum.click: case ConstructUseTypeEnum.nan: + case ConstructUseTypeEnum.corLM: + case ConstructUseTypeEnum.incLM: + case ConstructUseTypeEnum.corLA: + case ConstructUseTypeEnum.incLA: + case ConstructUseTypeEnum.bonus: return false; } } @@ -313,6 +350,8 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.corHWL: case ConstructUseTypeEnum.ignHWL: case ConstructUseTypeEnum.incHWL: + case ConstructUseTypeEnum.corLA: + case ConstructUseTypeEnum.incLA: return LearningSkillsEnum.hearing; case ConstructUseTypeEnum.corPA: case ConstructUseTypeEnum.ignPA: @@ -328,9 +367,12 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.ignMM: case ConstructUseTypeEnum.em: case ConstructUseTypeEnum.click: + case ConstructUseTypeEnum.corLM: + case ConstructUseTypeEnum.incLM: return LearningSkillsEnum.reading; case ConstructUseTypeEnum.pvm: return LearningSkillsEnum.speaking; + case ConstructUseTypeEnum.bonus: case ConstructUseTypeEnum.nan: return LearningSkillsEnum.other; } @@ -354,6 +396,8 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.corM: case ConstructUseTypeEnum.em: case ConstructUseTypeEnum.corMM: + case ConstructUseTypeEnum.corLM: + case ConstructUseTypeEnum.corLA: return SpaceAnalyticsSummaryEnum.numChoicesCorrect; case ConstructUseTypeEnum.incIt: @@ -364,6 +408,8 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.incL: case ConstructUseTypeEnum.incM: case ConstructUseTypeEnum.incMM: + case ConstructUseTypeEnum.incLM: + case ConstructUseTypeEnum.incLA: return SpaceAnalyticsSummaryEnum.numChoicesIncorrect; case ConstructUseTypeEnum.ignIt: @@ -375,6 +421,7 @@ extension ConstructUseTypeExtension on ConstructUseTypeEnum { case ConstructUseTypeEnum.ignM: case ConstructUseTypeEnum.ignMM: case ConstructUseTypeEnum.click: + case ConstructUseTypeEnum.bonus: case ConstructUseTypeEnum.nan: return null; } diff --git a/lib/pangea/analytics_misc/constructs_model.dart b/lib/pangea/analytics_misc/constructs_model.dart index c252202c5..5f0ee420c 100644 --- a/lib/pangea/analytics_misc/constructs_model.dart +++ b/lib/pangea/analytics_misc/constructs_model.dart @@ -151,6 +151,28 @@ class OneConstructUse { 'xp': xp, }; + OneConstructUse copyWith({ + String? lemma, + String? form, + String? category, + ConstructTypeEnum? constructType, + ConstructUseTypeEnum? useType, + String? id, + ConstructUseMetaData? metadata, + int? xp, + }) { + return OneConstructUse( + lemma: lemma ?? this.lemma, + form: form ?? this.form, + category: category ?? this.category, + constructType: constructType ?? this.constructType, + useType: useType ?? this.useType, + id: id ?? this.id, + metadata: metadata ?? this.metadata, + xp: xp ?? this.xp, + ); + } + String get category { if (_category.isEmpty) return "other"; return _category.toLowerCase(); diff --git a/lib/pangea/analytics_misc/get_analytics_controller.dart b/lib/pangea/analytics_misc/get_analytics_controller.dart deleted file mode 100644 index f8963c88b..000000000 --- a/lib/pangea/analytics_misc/get_analytics_controller.dart +++ /dev/null @@ -1,644 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -import 'package:get_storage/get_storage.dart'; -import 'package:matrix/matrix.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - -import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_list_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_event.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/common/constants/local.key.dart'; -import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/constructs/construct_repo.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_selection_repo.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -/// A minimized version of AnalyticsController that get the logged in user's analytics -class GetAnalyticsController extends BaseController { - static final GetStorage analyticsBox = GetStorage("analytics_storage"); - late PangeaController _pangeaController; - late PracticeSelectionRepo perMessage; - - final List _cache = []; - StreamSubscription? _analyticsUpdateSubscription; - StreamController analyticsStream = - StreamController.broadcast(); - StreamSubscription? _joinSpaceSubscription; - - ConstructListModel constructListModel = ConstructListModel(uses: []); - Completer initCompleter = Completer(); - bool _initializing = false; - - GetAnalyticsController(PangeaController pangeaController) { - _pangeaController = pangeaController; - } - - LanguageModel? get _l1 => _pangeaController.languageController.userL1; - LanguageModel? get _l2 => _pangeaController.languageController.userL2; - - Client get _client => _pangeaController.matrixState.client; - - // the minimum XP required for a given level - int get _minXPForLevel { - return constructListModel.calculateXpWithLevel(constructListModel.level); - } - - // the minimum XP required for the next level - int get _minXPForNextLevel { - return constructListModel - .calculateXpWithLevel(constructListModel.level + 1); - } - - int get minXPForNextLevel => _minXPForNextLevel; - - // the progress within the current level as a percentage (0.0 to 1.0) - double get levelProgress { - final progress = (constructListModel.totalXP - _minXPForLevel) / - (_minXPForNextLevel - _minXPForLevel); - return progress >= 0 ? progress : 0; - } - - Future initialize() async { - if (_initializing || initCompleter.isCompleted) return; - _initializing = true; - - try { - await GetStorage.init("analytics_storage"); - await GetStorage.init("activity_analytics_storage"); - _client.updateAnalyticsRoomJoinRules(); - _client.addAnalyticsRoomsToSpaces(); - - _analyticsUpdateSubscription ??= _pangeaController - .putAnalytics.analyticsUpdateStream.stream - .listen(_onAnalyticsUpdate); - - // When a newly-joined space comes through in a sync - // update, add the analytics rooms to the space - _joinSpaceSubscription ??= _client.onSync.stream - .where(_client.isJoinSpaceSyncUpdate) - .listen((_) => _client.addAnalyticsRoomsToSpaces()); - - await _pangeaController.putAnalytics.lastUpdatedCompleter.future; - await _getConstructs(); - - final offset = - _pangeaController.userController.analyticsProfile?.xpOffset ?? 0; - constructListModel.updateConstructs( - [ - ...(_getConstructsLocal() ?? []), - ..._locallyCachedConstructs, - ], - offset, - ); - } catch (err, s) { - ErrorHandler.logError( - e: err, - s: s, - data: {}, - ); - } finally { - _updateAnalyticsStream( - type: AnalyticsUpdateType.local, - points: 0, - newConstructs: [], - ); - if (!initCompleter.isCompleted) initCompleter.complete(); - _initializing = false; - } - } - - /// Clear all cached analytics data. - @override - void dispose() { - constructListModel = ConstructListModel(uses: []); - _analyticsUpdateSubscription?.cancel(); - _analyticsUpdateSubscription = null; - _joinSpaceSubscription?.cancel(); - _joinSpaceSubscription = null; - initCompleter = Completer(); - _cache.clear(); - // perMessage.dispose(); - } - - Future _onAnalyticsUpdate( - AnalyticsUpdate analyticsUpdate, - ) async { - final validTypes = [AnalyticsUpdateType.local, AnalyticsUpdateType.server]; - if (!validTypes.contains(analyticsUpdate.type)) { - _updateAnalyticsStream( - type: analyticsUpdate.type, - points: 0, - newConstructs: [], - ); - return; - } - - if (analyticsUpdate.isLogout) return; - - final oldLevel = constructListModel.level; - - final offset = - _pangeaController.userController.analyticsProfile?.xpOffset ?? 0; - - final prevUnlockedMorphs = constructListModel - .unlockedLemmas( - ConstructTypeEnum.morph, - threshold: 30, - ) - .toSet(); - - final prevUnlockedVocab = - constructListModel.unlockedLemmas(ConstructTypeEnum.vocab).toSet(); - - constructListModel.updateConstructs(analyticsUpdate.newConstructs, offset); - - final newUnlockedMorphs = constructListModel - .unlockedLemmas( - ConstructTypeEnum.morph, - threshold: 30, - ) - .toSet() - .difference(prevUnlockedMorphs); - - final newUnlockedVocab = constructListModel - .unlockedLemmas(ConstructTypeEnum.vocab) - .toSet() - .difference(prevUnlockedVocab); - - if (analyticsUpdate.type == AnalyticsUpdateType.server) { - await _getConstructs(forceUpdate: true); - } - if (oldLevel < constructListModel.level) { - // do not await this - it's not necessary for this to finish - // before the function completes and it blocks the UI - _onLevelUp(oldLevel, constructListModel.level); - } - if (oldLevel > constructListModel.level) { - await _onLevelDown(constructListModel.level, oldLevel); - } - if (newUnlockedMorphs.isNotEmpty) { - _onUnlockMorphLemmas(newUnlockedMorphs); - } - _updateAnalyticsStream( - type: analyticsUpdate.type, - points: analyticsUpdate.newConstructs.fold( - 0, - (previousValue, element) => previousValue + element.xp, - ), - targetID: analyticsUpdate.targetID, - newConstructs: [...newUnlockedMorphs, ...newUnlockedVocab], - ); - // 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. - // Do this on all updates (not just on level updates) to account for cases - // of target language updates being missed (https://github.com/pangeachat/client/issues/2006) - _pangeaController.userController.updateAnalyticsProfile( - level: constructListModel.level, - ); - } - - void _updateAnalyticsStream({ - required AnalyticsUpdateType type, - required int points, - required List newConstructs, - String? targetID, - }) => - analyticsStream.add( - AnalyticsStreamUpdate( - type: type, - points: points, - newConstructs: newConstructs, - targetID: targetID, - ), - ); - - void _onLevelUp(final int lowerLevel, final int upperLevel) { - setState({ - 'level_up': constructListModel.level, - 'upper_level': upperLevel, - 'lower_level': lowerLevel, - }); - } - - Future _onLevelDown(final int lowerLevel, final int upperLevel) async { - final offset = constructListModel.calculateXpWithLevel(lowerLevel) - - constructListModel.totalXP; - await _pangeaController.userController.addXPOffset(offset); - constructListModel.updateConstructs( - [], - _pangeaController.userController.analyticsProfile!.xpOffset!, - ); - } - - void _onUnlockMorphLemmas(Set unlocked) { - setState({'unlocked_constructs': unlocked}); - } - - /// A local cache of eventIds and construct uses for messages sent since the last update. - /// It's a map of eventIDs to a list of OneConstructUses. Not just a list of OneConstructUses - /// because, with practice activity constructs, we might need to add to the list for a given - /// eventID. - Map> get messagesSinceUpdate { - try { - final dynamic locallySaved = analyticsBox.read( - PLocalKey.messagesSinceUpdate, - ); - if (locallySaved == null) return {}; - try { - // try to get the local cache of messages and format them as OneConstructUses - final Map> cache = - Map>.from(locallySaved); - final Map> formattedCache = {}; - for (final entry in cache.entries) { - try { - formattedCache[entry.key] = - entry.value.map((e) => OneConstructUse.fromJson(e)).toList(); - } catch (err, s) { - ErrorHandler.logError( - e: err, - s: s, - data: { - "key": entry.key, - }, - ); - continue; - } - } - return formattedCache; - } catch (err) { - // if something goes wrong while trying to format the local data, clear it - _pangeaController.putAnalytics - .clearMessagesSinceUpdate(clearDrafts: true); - return {}; - } - } catch (exception, stackTrace) { - ErrorHandler.logError( - e: PangeaWarningError( - "Failed to get messages since update: $exception", - ), - s: stackTrace, - m: 'Failed to retrieve messages since update', - data: { - "messagesSinceUpdate": PLocalKey.messagesSinceUpdate, - }, - ); - return {}; - } - } - - Future clearMessagesCache() async => - analyticsBox.remove(PLocalKey.messagesSinceUpdate); - - Future setMessagesCache(Map cacheValue) async => - analyticsBox.write( - PLocalKey.messagesSinceUpdate, - cacheValue, - ); - - /// A flat list of all locally cached construct uses - List get _locallyCachedConstructs => - messagesSinceUpdate.values.expand((e) => e).toList(); - - /// A flat list of all locally cached construct uses that are not drafts - List get locallyCachedSentConstructs => - messagesSinceUpdate.entries - .where((entry) => !entry.key.startsWith('draft')) - .expand((e) => e.value) - .toList(); - - /// Get a list of all constructs used by the logged in user in their current L2 - Future> _getConstructs({ - bool forceUpdate = false, - ConstructTypeEnum? constructType, - }) async { - // if the user isn't logged in, return an empty list - if (_client.userID == null) return []; - if (_client.prevBatch == null) { - await _client.onSync.stream.first; - } - - // don't try to get constructs until last updated time has been loaded - await _pangeaController.putAnalytics.lastUpdatedCompleter.future; - - // if forcing a refreshing, clear the cache - if (forceUpdate) _cache.clear(); - - final List? local = _getConstructsLocal( - constructType: constructType, - ); - - if (local != null) { - debugPrint("returning local constructs"); - return local; - } - debugPrint("fetching new constructs"); - - // if there is no cached data (or if force updating), - // get all the construct events for the user from analytics room - // and convert their content into a list of construct uses - final List constructEvents = - await _allMyConstructs(); - - final List uses = []; - for (final event in constructEvents) { - uses.addAll(event.content.uses); - } - - // if there isn't already a valid, local cache, cache the filtered uses - if (local == null) { - _cacheConstructs( - constructType: constructType, - uses: uses, - ); - } - - return uses; - } - - /// Get the last time the user updated their analytics for their current l2 - Future myAnalyticsLastUpdated() async { - // this function gets called soon after login, so first - // make sure that the user's l2 is loaded, if the user has set their l2 - if (_client.userID != null && _l2 == null) { - if (_pangeaController.matrixState.client.prevBatch == null) { - await _pangeaController.matrixState.client.onSync.stream.first; - } - if (_l2 == null) return null; - } - final Room? analyticsRoom = _client.analyticsRoomLocal(_l2!); - if (analyticsRoom == null) return null; - final DateTime? lastUpdated = await analyticsRoom.analyticsLastUpdated( - _client.userID!, - ); - return lastUpdated; - } - - /// Get all the construct analytics events for the logged in user - Future> _allMyConstructs() async { - if (_l2 == null) return []; - final Room? analyticsRoom = _client.analyticsRoomLocal(_l2!); - if (analyticsRoom == null) return []; - return await analyticsRoom.getAnalyticsEvents(userId: _client.userID!) ?? - []; - } - - /// Get the cached construct uses for the current user, if it exists - List? _getConstructsLocal({ - ConstructTypeEnum? constructType, - }) { - final index = _cache.indexWhere( - (e) => e.type == constructType && e.langCode == _l2?.langCodeShort, - ); - - if (index > -1) { - final DateTime? lastUpdated = _pangeaController.putAnalytics.lastUpdated; - if (_cache[index].needsUpdate(lastUpdated)) { - _cache.removeAt(index); - return null; - } - return _cache[index].uses; - } - - return null; - } - - /// Cache the construct uses for the current user - void _cacheConstructs({ - required List uses, - ConstructTypeEnum? constructType, - }) { - if (_l2 == null) return; - final entry = AnalyticsCacheEntry( - type: constructType, - uses: List.from(uses), - langCode: _l2!.langCodeShort, - ); - _cache.add(entry); - } - - Future _saveConstructSummaryResponseToStateEvent( - final ConstructSummary summary, - ) async { - final Room? analyticsRoom = _client.analyticsRoomLocal(_l2!); - final stateEventId = await _client.setRoomStateWithKey( - analyticsRoom!.id, - PangeaEventTypes.constructSummary, - '', - summary.toJson(), - ); - return stateEventId; - } - - int newConstructCount( - List newConstructs, - ConstructTypeEnum type, - ) { - final uses = newConstructs.where((c) => c.constructType == type); - final Map constructPoints = {}; - for (final use in uses) { - constructPoints[use.identifier] ??= 0; - constructPoints[use.identifier] = - constructPoints[use.identifier]! + use.xp; - } - - int newConstructCount = 0; - for (final entry in constructPoints.entries) { - final construct = constructListModel.getConstructUses(entry.key); - if (construct == null || construct.points == entry.value) { - newConstructCount++; - } - } - - return newConstructCount; - } - -// Future -// _generateLevelUpAnalyticsAndSaveToStateEvent( -// final int lowerLevel, -// final int upperLevel, -// ) async { -// // generate level up analytics as a construct summary -// ConstructSummary summary; -// try { -// final int maxXP = constructListModel.calculateXpWithLevel(upperLevel); -// final int minXP = constructListModel.calculateXpWithLevel(lowerLevel); -// int diffXP = maxXP - minXP; -// if (diffXP < 0) diffXP = 0; - - ConstructSummary? getConstructSummaryFromStateEvent() { - try { - final Room? analyticsRoom = _client.analyticsRoomLocal(_l2!); - if (analyticsRoom == null) { - debugPrint("Analytics room is null"); - return null; - } - final state = - analyticsRoom.getState(PangeaEventTypes.constructSummary, ''); - if (state == null) return null; - return ConstructSummary.fromJson(state.content); - } catch (e) { - debugPrint("Error getting construct summary room: $e"); - ErrorHandler.logError(e: e, data: {'e': e}); - return null; - } - } - - Future generateLevelUpAnalytics( - final int lowerLevel, - final int upperLevel, - ) async { - final int maxXP = constructListModel.calculateXpWithLevel(upperLevel); - final int minXP = constructListModel.calculateXpWithLevel(lowerLevel); - int diffXP = maxXP - minXP; - if (diffXP < 0) diffXP = 0; - - // compute construct use of current level - final List constructUseOfCurrentLevel = []; - int score = constructListModel.totalXP; - for (final use in constructListModel.uses) { - constructUseOfCurrentLevel.add(use); - score -= use.xp; - if (score <= minXP) break; - } - - // extract construct use message bodies for analytics - final Map> useEventIds = {}; - for (final use in constructUseOfCurrentLevel) { - if (use.metadata.roomId == null) continue; - if (use.metadata.eventId == null) continue; - useEventIds[use.metadata.roomId!] ??= {}; - useEventIds[use.metadata.roomId!]!.add(use.metadata.eventId!); - } - - final List> messages = []; - for (final entry in useEventIds.entries) { - final String roomId = entry.key; - final room = _client.getRoomById(roomId); - if (room == null) continue; - - final timeline = await room.getTimeline(); - for (final eventId in entry.value) { - try { - final Event? event = await room.getEventById(eventId); - if (event == null) continue; - final pangeaMessageEvent = PangeaMessageEvent( - event: event, - timeline: timeline, - ownMessage: room.client.userID == event.senderId, - ); - - final Map entry = { - "sent": pangeaMessageEvent.originalSent?.text ?? - pangeaMessageEvent.body, - "written": pangeaMessageEvent.originalWrittenContent, - }; - - messages.add(entry); - } catch (e, s) { - debugPrint("Error getting event by ID: $e"); - ErrorHandler.logError( - e: e, - s: s, - data: { - 'roomId': roomId, - 'eventId': eventId, - }, - ); - continue; - } - } - } - - final request = ConstructSummaryRequest( - constructs: constructUseOfCurrentLevel, - messages: messages, - userL1: _l1!.langCodeShort, - userL2: _l2!.langCodeShort, - upperLevel: upperLevel, - lowerLevel: lowerLevel, - ); - - final response = await ConstructRepo.generateConstructSummary(request); - final ConstructSummary summary = response.summary; - summary.levelVocabConstructs = MatrixState - .pangeaController.getAnalytics.constructListModel - .numConstructs(ConstructTypeEnum.vocab); - summary.levelGrammarConstructs = MatrixState - .pangeaController.getAnalytics.constructListModel - .numConstructs(ConstructTypeEnum.morph); - - final Room? analyticsRoom = await _client.getMyAnalyticsRoom(_l2!); - if (analyticsRoom == null) { - throw "Analytics room not found for user"; - } - - // don't await this, just return the original response - _saveConstructSummaryResponseToStateEvent( - summary, - ); - - return summary; - } - - List get archivedActivities { - final Room? analyticsRoom = _client.analyticsRoomLocal(_l2!); - if (analyticsRoom == null) return []; - final ids = analyticsRoom.activityRoomIds; - return ids.map((id) => _client.getRoomById(id)).whereType().toList(); - } -} - -class AnalyticsCacheEntry { - final String langCode; - final ConstructTypeEnum? type; - final List uses; - late final DateTime _createdAt; - - AnalyticsCacheEntry({ - required this.langCode, - required this.type, - required this.uses, - }) { - _createdAt = DateTime.now(); - } - - bool needsUpdate(DateTime? lastEventUpdated) { - // cache entry is invalid if it's older than the last event update - // if lastEventUpdated is null, that would indicate that no events - // of this type have been sent to the room. In this case, there - // shouldn't be any cached data. - if (lastEventUpdated == null) { - Sentry.addBreadcrumb( - Breadcrumb(message: "lastEventUpdated is null in needsUpdate"), - ); - return false; - } - return _createdAt.isBefore(lastEventUpdated); - } -} - -class AnalyticsStreamUpdate { - final AnalyticsUpdateType type; - final int points; - final List newConstructs; - final String? targetID; - - AnalyticsStreamUpdate({ - required this.type, - required this.points, - required this.newConstructs, - this.targetID, - }); -} diff --git a/lib/pangea/analytics_misc/learning_skills_enum.dart b/lib/pangea/analytics_misc/learning_skills_enum.dart index ebe493b09..60fad7847 100644 --- a/lib/pangea/analytics_misc/learning_skills_enum.dart +++ b/lib/pangea/analytics_misc/learning_skills_enum.dart @@ -33,19 +33,4 @@ enum LearningSkillsEnum { return ""; } } - - String? description(BuildContext context) { - switch (this) { - case LearningSkillsEnum.reading: - return L10n.of(context).readingAnalyticsDesc; - case LearningSkillsEnum.hearing: - return L10n.of(context).audioAnalyticsDesc; - case LearningSkillsEnum.speaking: - return L10n.of(context).speakingAnalyticsDesc; - case LearningSkillsEnum.writing: - return L10n.of(context).writingAnalyticsDesc; - default: - return null; - } - } } diff --git a/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart b/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart new file mode 100644 index 000000000..65f4a7a09 --- /dev/null +++ b/lib/pangea/analytics_misc/lemma_emoji_setter_mixin.dart @@ -0,0 +1,116 @@ +import 'package:flutter/material.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'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +mixin LemmaEmojiSetter { + Future setLemmaEmoji( + ConstructIdentifier constructId, + String langCode, + String emoji, + String? targetId, + ) async { + final userL2 = + MatrixState.pangeaController.userController.userL2?.langCodeShort; + if (langCode.split("-").first != userL2) { + // only set emoji for user's L2 language + return; + } + + if (constructId.userSetEmoji == null) { + _getEmojiAnalytics( + constructId, + targetId: targetId, + ); + } + + await MatrixState + .pangeaController.matrixState.analyticsDataService.updateService + .setLemmaInfo(constructId, emoji: emoji); + } + + void showLemmaEmojiSnackbar( + ScaffoldMessengerState messenger, + BuildContext context, + ConstructIdentifier constructId, + String emoji, + ) { + if (InstructionsEnum.setLemmaEmoji.isToggledOff) return; + InstructionsEnum.setLemmaEmoji.setToggledOff(true); + + messenger.showSnackBar( + SnackBar( + padding: const EdgeInsets.all(8.0), + content: Row( + spacing: 8.0, + children: [ + VocabAnalyticsListTile( + constructId: constructId, + textColor: Theme.of(context).colorScheme.surface, + onTap: () { + messenger.hideCurrentSnackBar(); + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: constructId.type.indicator, + construct: constructId, + ); + }, + ), + Expanded( + child: Text( + L10n.of(context).emojiSelectedSnackbar(constructId.lemma), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + color: Theme.of(context).colorScheme.surface, + ), + ), + ), + IconButton( + icon: const Icon(Icons.close), + color: Theme.of(context).colorScheme.surface, + onPressed: () => + ScaffoldMessenger.of(context).hideCurrentSnackBar(), + ), + ], + ), + duration: const Duration(seconds: 30), + ), + ); + } + + void _getEmojiAnalytics( + ConstructIdentifier constructId, { + String? eventId, + String? roomId, + String? targetId, + }) { + final constructs = [ + OneConstructUse( + useType: ConstructUseTypeEnum.em, + lemma: constructId.lemma, + constructType: constructId.type, + metadata: ConstructUseMetaData( + roomId: roomId, + timeStamp: DateTime.now(), + eventId: eventId, + ), + category: constructId.category, + form: constructId.lemma, + xp: ConstructUseTypeEnum.em.pointValue, + ), + ]; + + MatrixState.pangeaController.matrixState.analyticsDataService.updateService + .addAnalytics( + targetId, + constructs, + ); + } +} diff --git a/lib/pangea/analytics_misc/level_summary.dart b/lib/pangea/analytics_misc/level_summary.dart deleted file mode 100644 index e7534a2b2..000000000 --- a/lib/pangea/analytics_misc/level_summary.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/constructs/construct_repo.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -// New component renamed to ConstructSummaryAlertDialog with a max width -class ConstructSummaryAlertDialog extends StatelessWidget { - final String title; - final String content; - - const ConstructSummaryAlertDialog({ - super.key, - required this.title, - required this.content, - }); - - @override - Widget build(BuildContext context) { - return AlertDialog( - title: Text(title), - content: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 400), - child: Text(content), - ), - actions: [ - TextButton( - onPressed: () => Navigator.of(context).pop(), - child: Text(L10n.of(context).close), - ), - ], - ); - } -} - -class LevelSummaryDialog extends StatelessWidget { - final int level; - final String analyticsRoomId; - final String summaryStateEventId; - final ConstructSummary? constructSummary; - - const LevelSummaryDialog({ - super.key, - required this.analyticsRoomId, - required this.level, - required this.summaryStateEventId, - this.constructSummary, - }); - - @override - Widget build(BuildContext context) { - final Client client = Matrix.of(context).client; - final futureSummary = client - .getOneRoomEvent(analyticsRoomId, summaryStateEventId) - .then((rawEvent) => ConstructSummary.fromJson(rawEvent.content)); - if (constructSummary != null) { - return ConstructSummaryAlertDialog( - title: L10n.of(context).levelSummaryPopupTitle(level), - content: constructSummary!.textSummary, - ); - } else { - return FutureBuilder( - future: futureSummary, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const Center(child: CircularProgressIndicator()); - } else if (snapshot.hasError) { - return ConstructSummaryAlertDialog( - title: L10n.of(context).levelSummaryPopupTitle(level), - content: L10n.of(context).error502504Desc, - ); - } else if (snapshot.hasData) { - final constructSummary = snapshot.data!; - return ConstructSummaryAlertDialog( - title: L10n.of(context).levelSummaryPopupTitle(level), - content: constructSummary.textSummary, - ); - } else { - return const SizedBox.shrink(); - } - }, - ); - } - } -} diff --git a/lib/pangea/analytics_misc/level_summary_extension.dart b/lib/pangea/analytics_misc/level_summary_extension.dart new file mode 100644 index 000000000..2cab1d179 --- /dev/null +++ b/lib/pangea/analytics_misc/level_summary_extension.dart @@ -0,0 +1,27 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/constructs/construct_repo.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; + +extension LevelSummaryExtension on Room { + ConstructSummary? get levelUpSummary { + final summaryEvent = getState(PangeaEventTypes.constructSummary); + if (summaryEvent != null) { + return ConstructSummary.fromJson(summaryEvent.content); + } + return null; + } + + DateTime? get lastLevelUpTimestamp { + final lastLevelUp = getState(PangeaEventTypes.constructSummary); + return lastLevelUp is Event ? lastLevelUp.originServerTs : null; + } + + Future setLevelUpSummary(ConstructSummary summary) => + client.setRoomStateWithKey( + id, + PangeaEventTypes.constructSummary, + '', + summary.toJson(), + ); +} diff --git a/lib/pangea/analytics_misc/level_up/level_popup_progess_bar.dart b/lib/pangea/analytics_misc/level_up/level_popup_progess_bar.dart new file mode 100644 index 000000000..893d1fcfc --- /dev/null +++ b/lib/pangea/analytics_misc/level_up/level_popup_progess_bar.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/analytics_summary/animated_progress_bar.dart'; + +class LevelPopupProgressBar extends StatefulWidget { + final double height; + final Duration duration; + + const LevelPopupProgressBar({ + required this.height, + required this.duration, + super.key, + }); + + @override + LevelPopupProgressBarState createState() => LevelPopupProgressBarState(); +} + +class LevelPopupProgressBarState extends State { + double width = 0.0; + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() { + width = 1.0; + }); + }); + } + + @override + Widget build(BuildContext context) { + return AnimatedProgressBar( + height: widget.height, + widthPercent: width, + duration: widget.duration, + ); + } +} diff --git a/lib/pangea/analytics_misc/level_up/level_up_banner.dart b/lib/pangea/analytics_misc/level_up/level_up_banner.dart index 7947a5794..a242bac38 100644 --- a/lib/pangea/analytics_misc/level_up/level_up_banner.dart +++ b/lib/pangea/analytics_misc/level_up/level_up_banner.dart @@ -9,6 +9,8 @@ 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/analytics_constants.dart'; +import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics_misc/level_summary_extension.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/level_up_manager.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/level_up_popup.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; @@ -105,10 +107,11 @@ class LevelUpBannerState extends State _loadConstructSummary(); + final analyticsService = Matrix.of(context).analyticsDataService; LevelUpManager.instance.preloadAnalytics( - context, widget.level, widget.prevLevel, + analyticsService, ); _slideController = AnimationController( @@ -163,9 +166,19 @@ class LevelUpBannerState extends State Future _loadConstructSummary() async { try { - final summary = MatrixState.pangeaController.getAnalytics - .generateLevelUpAnalytics(widget.prevLevel, widget.level); + final analyticsRoom = await Matrix.of(context).client.getMyAnalyticsRoom( + MatrixState.pangeaController.userController.userL2!, + ); + + final timestamp = analyticsRoom!.lastLevelUpTimestamp; + final analyticsService = Matrix.of(context).analyticsDataService; + final summary = await analyticsService.levelUpService.getLevelUpAnalytics( + widget.prevLevel, + widget.level, + timestamp, + ); _constructSummaryCompleter.complete(summary); + analyticsRoom.setLevelUpSummary(summary); } catch (e) { debugPrint("Error generating level up analytics: $e"); _constructSummaryCompleter.completeError(e); diff --git a/lib/pangea/analytics_misc/level_up/level_up_manager.dart b/lib/pangea/analytics_misc/level_up/level_up_manager.dart index d20622bfa..b358d7ad2 100644 --- a/lib/pangea/analytics_misc/level_up/level_up_manager.dart +++ b/lib/pangea/analytics_misc/level_up/level_up_manager.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - import 'package:matrix/matrix.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.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/constructs/construct_repo.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/level_summary_extension.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LevelUpManager { @@ -27,9 +25,9 @@ class LevelUpManager { bool shouldAutoPopup = false; Future preloadAnalytics( - BuildContext context, int level, int prevLevel, + AnalyticsDataService analyticsService, ) async { this.level = level; this.prevLevel = prevLevel; @@ -37,36 +35,16 @@ class LevelUpManager { //For on route change behavior, if added in the future shouldAutoPopup = true; - nextGrammar = MatrixState.pangeaController.getAnalytics.constructListModel - .numConstructs(ConstructTypeEnum.morph); - nextVocab = MatrixState.pangeaController.getAnalytics.constructListModel - .numConstructs(ConstructTypeEnum.vocab); + nextGrammar = analyticsService.numConstructs(ConstructTypeEnum.morph); + nextVocab = analyticsService.numConstructs(ConstructTypeEnum.vocab); final LanguageModel? l2 = - MatrixState.pangeaController.languageController.userL2; + MatrixState.pangeaController.userController.userL2; final Room? analyticsRoom = MatrixState.pangeaController.matrixState.client.analyticsRoomLocal(l2!); if (analyticsRoom != null) { - // How to get all summary events in the timeline - final timeline = await analyticsRoom.getTimeline(); - final summaryEvents = timeline.events - .where( - (e) => e.type == PangeaEventTypes.constructSummary, - ) - .map( - (e) => ConstructSummary.fromJson(e.content), - ) - .toList(); - - //Find previous summary to get grammar constructs and vocab numbers from - final lastSummary = summaryEvents - .where((summary) => summary.upperLevel == prevLevel) - .toList() - .isNotEmpty - ? summaryEvents - .firstWhere((summary) => summary.upperLevel == prevLevel) - : null; + final lastSummary = analyticsRoom.levelUpSummary; //Set grammar and vocab from last level summary, if there is one. Otherwise set to placeholder data if (lastSummary != null && @@ -75,8 +53,8 @@ class LevelUpManager { prevVocab = lastSummary.levelVocabConstructs!; prevGrammar = lastSummary.levelGrammarConstructs!; } else { - prevGrammar = (nextGrammar / prevLevel).round(); - prevVocab = (nextVocab / prevLevel).round(); + prevGrammar = nextGrammar - (nextGrammar / prevLevel).round(); + prevVocab = nextVocab - (nextVocab / prevLevel).round(); } } } diff --git a/lib/pangea/analytics_misc/level_up/level_up_popup.dart b/lib/pangea/analytics_misc/level_up/level_up_popup.dart index 5d9f7192e..8795ab461 100644 --- a/lib/pangea/analytics_misc/level_up/level_up_popup.dart +++ b/lib/pangea/analytics_misc/level_up/level_up_popup.dart @@ -12,15 +12,14 @@ import 'package:matrix/matrix_api_lite/generated/model.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/learning_skills_enum.dart'; +import 'package:fluffychat/pangea/analytics_misc/level_up/level_popup_progess_bar.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/level_up_banner.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/level_up_manager.dart'; import 'package:fluffychat/pangea/analytics_misc/level_up/star_rain_widget.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/level_bar.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar_details.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart'; import 'package:fluffychat/pangea/constructs/construct_repo.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; @@ -107,10 +106,9 @@ class _LevelUpPopupContentState extends State Uri? avatarUrl; final bool _hasBlastedConfetti = false; - String language = MatrixState.pangeaController.languageController - .activeL2Code() - ?.toUpperCase() ?? - LanguageKeys.unknownLanguage; + String language = + MatrixState.pangeaController.userController.userL2Code?.toUpperCase() ?? + LanguageKeys.unknownLanguage; ConstructSummary? _constructSummary; Object? _error; @@ -194,11 +192,6 @@ class _LevelUpPopupContentState extends State @override @override Widget build(BuildContext context) { - final Animation progressAnimation = - Tween(begin: 0, end: 1).animate( - CurvedAnimation(parent: _controller, curve: const Interval(0.0, 0.5)), - ); - final Animation vocabAnimation = IntTween(begin: _startVocab, end: _endVocab).animate( CurvedAnimation( @@ -283,23 +276,10 @@ class _LevelUpPopupContentState extends State animation: _controller, builder: (_, __) => Row( children: [ - Expanded( - child: LayoutBuilder( - builder: (context, constraints) { - return LevelBar( - details: const LevelBarDetails( - fillColor: AppConfig.goldLight, - currentPoints: 0, - widthMultiplier: 1, - ), - progressBarDetails: ProgressBarDetails( - totalWidth: constraints.maxWidth * - progressAnimation.value, - height: 20, - borderColor: colorScheme.primary, - ), - ); - }, + const Expanded( + child: LevelPopupProgressBar( + height: 20, + duration: Duration(milliseconds: 1000), ), ), const SizedBox(width: 8), diff --git a/lib/pangea/analytics_misc/level_up/star_rain_widget.dart b/lib/pangea/analytics_misc/level_up/star_rain_widget.dart index 56a730176..25e03ac2f 100644 --- a/lib/pangea/analytics_misc/level_up/star_rain_widget.dart +++ b/lib/pangea/analytics_misc/level_up/star_rain_widget.dart @@ -5,15 +5,18 @@ import 'package:flutter/material.dart'; import 'package:confetti/confetti.dart'; import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/widgets/matrix.dart'; class StarRainWidget extends StatefulWidget { final bool showBlast; final Duration rainDuration; final Duration blastDuration; final VoidCallback? onFinished; + final String? overlayKey; const StarRainWidget({ super.key, + this.overlayKey, this.showBlast = true, this.rainDuration = const Duration(seconds: 8), this.blastDuration = const Duration(seconds: 1), @@ -57,6 +60,10 @@ class _StarRainWidgetState extends State { }); } await Future.delayed(const Duration(milliseconds: 800)); + if (widget.overlayKey != null) { + MatrixState.pAnyState.closeOverlay(widget.overlayKey); + } + widget.onFinished?.call(); if (mounted) { _blastController.stop(); diff --git a/lib/pangea/analytics_misc/message_analytics_feedback.dart b/lib/pangea/analytics_misc/message_analytics_feedback.dart new file mode 100644 index 000000000..f9efe40ef --- /dev/null +++ b/lib/pangea/analytics_misc/message_analytics_feedback.dart @@ -0,0 +1,268 @@ +import 'package:flutter/material.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 { + final int newGrammarConstructs; + final int newVocabConstructs; + final VoidCallback close; + + const MessageAnalyticsFeedback({ + required this.newGrammarConstructs, + required this.newVocabConstructs, + required this.close, + super.key, + }); + + @override + State createState() => + MessageAnalyticsFeedbackState(); +} + +class MessageAnalyticsFeedbackState extends State + with TickerProviderStateMixin { + late AnimationController _numbersController; + late AnimationController _bubbleController; + late AnimationController _tickerController; + + late Animation _numbersOpacityAnimation; + late Animation _bubbleScaleAnimation; + late Animation _bubbleOpacityAnimation; + + Animation? _grammarTickerAnimation; + Animation? _vocabTickerAnimation; + + @override + void initState() { + super.initState(); + _numbersController = AnimationController( + vsync: this, + duration: FluffyThemes.animationDuration, + ); + + _numbersOpacityAnimation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation(parent: _numbersController, curve: Curves.easeInOut), + ); + + _bubbleController = AnimationController( + vsync: this, + duration: FluffyThemes.animationDuration, + ); + + _bubbleScaleAnimation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation(parent: _bubbleController, curve: Curves.easeInOut), + ); + + _bubbleOpacityAnimation = Tween(begin: 0.0, end: 0.9).animate( + CurvedAnimation(parent: _bubbleController, curve: Curves.easeInOut), + ); + + _tickerController = AnimationController( + vsync: this, + duration: FluffyThemes.animationDuration, + ); + + _numbersOpacityAnimation.addStatusListener((status) { + if (status == AnimationStatus.completed) { + _startTickerAnimations(); + } + }); + + _bubbleController.forward(); + Future.delayed( + const Duration(milliseconds: 400), + _numbersController.forward, + ); + Future.delayed(const Duration(milliseconds: 4000), () async { + if (mounted) { + await _bubbleController.reverse(); + widget.close(); + } + }); + } + + @override + void dispose() { + _numbersController.dispose(); + _bubbleController.dispose(); + _tickerController.dispose(); + super.dispose(); + } + + void _startTickerAnimations() { + _vocabTickerAnimation = IntTween( + begin: 0, + end: widget.newVocabConstructs, + ).animate( + CurvedAnimation( + parent: _tickerController, + curve: Curves.easeOutCubic, + ), + ); + + _grammarTickerAnimation = IntTween( + begin: 0, + end: widget.newGrammarConstructs, + ).animate( + CurvedAnimation( + parent: _tickerController, + curve: Curves.easeOutCubic, + ), + ); + + setState(() {}); + _tickerController.forward(); + } + + @override + Widget build(BuildContext context) { + if (widget.newVocabConstructs <= 0 && widget.newGrammarConstructs <= 0) { + return const SizedBox.shrink(); + } + + return Material( + type: MaterialType.transparency, + child: InkWell( + onTap: () => + AnalyticsNavigationUtil.navigateToAnalytics(context: context), + child: ScaleTransition( + scale: _bubbleScaleAnimation, + alignment: Alignment.bottomRight, + child: AnimatedBuilder( + animation: _bubbleController, + builder: (context, child) { + return Container( + decoration: BoxDecoration( + color: Theme.of(context) + .colorScheme + .surfaceContainer + .withAlpha((_bubbleOpacityAnimation.value * 255).round()), + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(16.0), + topRight: Radius.circular(16.0), + bottomLeft: Radius.circular(16.0), + bottomRight: Radius.circular(4.0), + ), + ), + padding: const EdgeInsets.symmetric( + vertical: 8.0, + horizontal: 16.0, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.newVocabConstructs > 0) + _NewConstructsBadge( + opacityAnimation: _numbersOpacityAnimation, + tickerAnimation: _vocabTickerAnimation, + type: ConstructTypeEnum.vocab, + tooltip: L10n.of(context).newVocab, + ), + if (widget.newGrammarConstructs > 0) + _NewConstructsBadge( + opacityAnimation: _numbersOpacityAnimation, + tickerAnimation: _grammarTickerAnimation, + type: ConstructTypeEnum.morph, + tooltip: L10n.of(context).newGrammar, + ), + ], + ), + ); + }, + ), + ), + ), + ); + } +} + +class _NewConstructsBadge extends StatelessWidget { + final Animation opacityAnimation; + final Animation? tickerAnimation; + final ConstructTypeEnum type; + final String tooltip; + + const _NewConstructsBadge({ + required this.opacityAnimation, + required this.tickerAnimation, + required this.type, + required this.tooltip, + }); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () => AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: type.indicator, + ), + child: Tooltip( + message: tooltip, + child: AnimatedBuilder( + animation: opacityAnimation, + builder: (context, child) { + return Opacity( + opacity: opacityAnimation.value, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + type.indicator.icon, + color: type.indicator.color(context), + size: 24, + ), + const SizedBox(width: 4.0), + _AnimatedCounter( + key: ValueKey("$type-counter"), + animation: tickerAnimation, + style: TextStyle( + color: type.indicator.color(context), + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ); + }, + ), + ), + ); + } +} + +class _AnimatedCounter extends StatelessWidget { + final Animation? animation; + final TextStyle? style; + + const _AnimatedCounter({ + super.key, + required this.animation, + this.style, + }); + + @override + Widget build(BuildContext context) { + if (animation == null) { + return Text( + "+ 0", + style: style, + ); + } + + return AnimatedBuilder( + animation: animation!, + builder: (context, child) { + return Text( + "+ ${animation!.value}", + style: style, + ); + }, + ); + } +} diff --git a/lib/pangea/analytics_misc/put_analytics_controller.dart b/lib/pangea/analytics_misc/put_analytics_controller.dart deleted file mode 100644 index 0df72b647..000000000 --- a/lib/pangea/analytics_misc/put_analytics_controller.dart +++ /dev/null @@ -1,482 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/foundation.dart'; - -import 'package:matrix/matrix.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/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -enum AnalyticsUpdateType { server, local, activities } - -/// handles the processing of analytics for -/// 1) messages sent by the user and -/// 2) constructs used by the user, both in sending messages and doing practice activities -class PutAnalyticsController extends BaseController { - late PangeaController _pangeaController; - StreamController analyticsUpdateStream = - StreamController.broadcast(); - - StreamSubscription? _analyticsStream; - StreamSubscription? _languageStream; - Timer? _updateTimer; - - Client get _client => _pangeaController.matrixState.client; - - /// the last time that matrix analytics events were updated for the user's current l2 - DateTime? lastUpdated; - - /// Last updated completer. Used to wait for the last - /// updated time to be set before setting analytics data. - Completer lastUpdatedCompleter = Completer(); - - /// the max number of messages that will be cached before - /// an automatic update is triggered - final int _maxMessagesCached = 10; - - /// the number of minutes before an automatic update is triggered - final int _minutesBeforeUpdate = 5; - - /// the time since the last update that will trigger an automatic update - final Duration _timeSinceUpdate = const Duration(days: 1); - - PutAnalyticsController(PangeaController pangeaController) { - _pangeaController = pangeaController; - } - - void initialize() { - // Listen for calls to setState on the analytics stream - // and update the analytics room if necessary - _analyticsStream ??= - stateStream.listen((data) => _onNewAnalyticsData(data)); - - // Listen for changes to the user's language settings - _languageStream ??= - _pangeaController.userController.languageStream.stream.listen((update) { - _onUpdateLanguages(update.prevTargetLang); - }); - - _refreshAnalyticsIfOutdated(); - } - - /// Reset analytics last updated time to null. - @override - void dispose() { - _updateTimer?.cancel(); - lastUpdated = null; - lastUpdatedCompleter = Completer(); - _analyticsStream?.cancel(); - _analyticsStream = null; - _languageStream?.cancel(); - _languageStream = null; - clearMessagesSinceUpdate(); - } - - /// If analytics haven't been updated in the last day, update them - Future _refreshAnalyticsIfOutdated() async { - // don't set anything is the user is not logged in - if (_pangeaController.matrixState.client.userID == null) return; - try { - // if lastUpdated hasn't been set yet, set it - lastUpdated ??= - await _pangeaController.getAnalytics.myAnalyticsLastUpdated(); - } catch (err, s) { - ErrorHandler.logError( - s: s, - e: err, - m: "Failed to get last updated time for analytics", - data: {}, - ); - } finally { - // if this is the initial load, complete the lastUpdatedCompleter - if (!lastUpdatedCompleter.isCompleted) { - lastUpdatedCompleter.complete(lastUpdated); - } - } - - final DateTime yesterday = DateTime.now().subtract(_timeSinceUpdate); - if (lastUpdated?.isBefore(yesterday) ?? true) { - debugPrint("analytics out-of-date, updating"); - await sendLocalAnalyticsToAnalyticsRoom(); - } - } - - /// Given new construct uses, format and cache - /// the data locally and reset the update timer - /// Decide whether to update the analytics room - void _onNewAnalyticsData(AnalyticsStream data) { - final String? eventID = data.eventId; - final String? roomID = data.roomId; - - final List constructs = []; - // if (roomID != null) { - // constructs = _getDraftUses(roomID); - // } - - constructs.addAll(data.constructs); - - if (kDebugMode) { - for (final use in constructs) { - debugPrint( - "_onNewAnalyticsData filtered use: ${use.constructType.string} ${use.useType.string} ${use.lemma} ${use.xp}", - ); - } - } - - final level = _pangeaController.getAnalytics.constructListModel.level; - - _addLocalMessage(eventID, constructs).then( - (_) { - if (roomID != null) _clearDraftUses(roomID); - _decideWhetherToUpdateAnalyticsRoom( - level, - data.targetID, - data.constructs, - ); - }, - ); - } - - Future _onUpdateLanguages(LanguageModel? previousL2) async { - await sendLocalAnalyticsToAnalyticsRoom( - l2Override: previousL2, - ); - _pangeaController.resetAnalytics().then((_) { - final level = _pangeaController.getAnalytics.constructListModel.level; - _pangeaController.userController.updateAnalyticsProfile(level: level); - }); - } - - // void addDraftUses( - // List tokens, - // String roomID, - // ConstructUseTypeEnum useType, { - // String? targetID, - // }) { - // final metadata = ConstructUseMetaData( - // roomId: roomID, - // timeStamp: DateTime.now(), - // ); - - // // we only save those with saveVocab == true - // final tokensToSave = - // tokens.where((token) => token.lemma.saveVocab).toList(); - - // // get all our vocab constructs - // final uses = tokensToSave - // .map( - // (token) => OneConstructUse( - // useType: useType, - // lemma: token.lemma.text, - // form: token.text.content, - // constructType: ConstructTypeEnum.vocab, - // metadata: metadata, - // category: token.pos, - // ), - // ) - // .toList(); - - // // get all our grammar constructs - // for (final token in tokensToSave) { - // uses.add( - // OneConstructUse( - // useType: useType, - // lemma: token.pos, - // form: token.text.content, - // category: "POS", - // constructType: ConstructTypeEnum.morph, - // metadata: metadata, - // ), - // ); - // for (final entry in token.morph.entries) { - // uses.add( - // OneConstructUse( - // useType: useType, - // lemma: entry.value, - // form: token.text.content, - // category: entry.key, - // constructType: ConstructTypeEnum.morph, - // metadata: metadata, - // ), - // ); - // } - // } - - // if (kDebugMode) { - // for (final use in uses) { - // debugPrint( - // "Draft use: ${use.constructType.string} ${use.useType.string} ${use.lemma} ${use.useType.pointValue}", - // ); - // } - // } - - // final level = _pangeaController.getAnalytics.constructListModel.level; - - // // the list 'uses' gets altered in the _addLocalMessage method, - // // so copy it here to that the list of new uses is accurate - // final List newUses = List.from(uses); - // _addLocalMessage('draft$roomID', uses).then( - // (_) => _decideWhetherToUpdateAnalyticsRoom( - // level, - // targetID, - // newUses, - // ), - // ); - // } - - // List _getDraftUses(String roomID) { - // final currentCache = _pangeaController.getAnalytics.messagesSinceUpdate; - // return currentCache['draft$roomID'] ?? []; - // } - - void _clearDraftUses(String roomID) { - final currentCache = _pangeaController.getAnalytics.messagesSinceUpdate; - currentCache.remove('draft$roomID'); - _setMessagesSinceUpdate(currentCache); - } - - /// Add a list of construct uses for a new message to the local - /// cache of recently sent messages - Future _addLocalMessage( - String? cacheKey, - List constructs, - ) async { - try { - final currentCache = _pangeaController.getAnalytics.messagesSinceUpdate; - constructs.addAll(currentCache[cacheKey] ?? []); - - // if this is not a draft message, add the eventId to the metadata - // if it's missing (it will be missing for draft constructs) - if (cacheKey != null && !cacheKey.startsWith('draft')) { - constructs = constructs.map((construct) { - if (construct.metadata.eventId != null) return construct; - construct.metadata.eventId = cacheKey; - return construct; - }).toList(); - } - - cacheKey ??= Object.hashAll(constructs).toString(); - currentCache[cacheKey] = constructs; - - await _setMessagesSinceUpdate(currentCache); - } catch (e, s) { - ErrorHandler.logError( - e: PangeaWarningError("Failed to add message since update: $e"), - s: s, - m: 'Failed to add message since update for eventId: $cacheKey', - data: { - "cacheKey": cacheKey, - }, - ); - } - } - - /// Handles cleanup after adding a new message to the local cache. - /// If the addition brought the total number of messages in the cache - /// to the max, or if the addition triggered a level-up, update the analytics. - /// Otherwise, add a local update to the alert stream. - void _decideWhetherToUpdateAnalyticsRoom( - int prevLevel, - String? targetID, - List newConstructs, - ) { - // cancel the last timer that was set on message event and - // reset it to fire after _minutesBeforeUpdate minutes - _updateTimer?.cancel(); - _updateTimer = Timer(Duration(minutes: _minutesBeforeUpdate), () { - debugPrint("timer fired, updating analytics"); - sendLocalAnalyticsToAnalyticsRoom(); - }); - - if (_pangeaController.getAnalytics.messagesSinceUpdate.length > - _maxMessagesCached) { - debugPrint("reached max messages, updating"); - sendLocalAnalyticsToAnalyticsRoom(); - return; - } - analyticsUpdateStream.add( - AnalyticsUpdate( - AnalyticsUpdateType.local, - newConstructs, - targetID: targetID, - ), - ); - } - - /// Clears the local cache of recently sent constructs. Called before updating analytics - void clearMessagesSinceUpdate({clearDrafts = false}) { - if (clearDrafts) { - MatrixState.pangeaController.getAnalytics.clearMessagesCache(); - return; - } - - final localCache = _pangeaController.getAnalytics.messagesSinceUpdate; - final draftKeys = localCache.keys.where((key) => key.startsWith('draft')); - if (draftKeys.isEmpty) { - MatrixState.pangeaController.getAnalytics.clearMessagesCache(); - return; - } - - final Map> newCache = {}; - for (final key in draftKeys) { - newCache[key] = localCache[key]!; - } - _setMessagesSinceUpdate(newCache); - } - - /// Save the local cache of recently sent constructs to the local storage - Future _setMessagesSinceUpdate( - Map> cache, - ) async { - final formattedCache = {}; - for (final entry in cache.entries) { - final constructJsons = entry.value.map((e) => e.toJson()).toList(); - formattedCache[entry.key] = constructJsons; - } - await MatrixState.pangeaController.getAnalytics - .setMessagesCache(formattedCache); - } - - /// Prevent concurrent updates to analytics - Completer? _updateCompleter; - - /// Updates learning analytics. - /// - /// This method is responsible for updating the analytics. It first checks if an update is already in progress - /// by checking the completion status of the [_updateCompleter]. If an update is already in progress, it waits - /// for the completion of the previous update and returns. Otherwise, it creates a new [_updateCompleter] and - /// proceeds with the update process. If the update is successful, it clears any messages that were received - /// since the last update and notifies the [analyticsUpdateStream]. - Future sendLocalAnalyticsToAnalyticsRoom({ - onLogout = false, - LanguageModel? l2Override, - }) async { - if (_pangeaController.matrixState.client.userID == null) return; - if (_pangeaController.getAnalytics.messagesSinceUpdate.isEmpty) return; - - if (!(_updateCompleter?.isCompleted ?? true)) { - await _updateCompleter!.future; - return; - } - _updateCompleter = Completer(); - try { - await _updateAnalytics(l2Override: l2Override); - clearMessagesSinceUpdate(); - - lastUpdated = DateTime.now(); - analyticsUpdateStream.add( - AnalyticsUpdate( - AnalyticsUpdateType.server, - [], - isLogout: onLogout, - ), - ); - } catch (err, s) { - ErrorHandler.logError( - e: err, - m: "Failed to update analytics", - s: s, - data: { - "l2Override": l2Override, - }, - ); - } finally { - _updateCompleter?.complete(); - _updateCompleter = null; - } - } - - /// Updates the analytics by sending cached analytics data to the analytics room. - /// The analytics room is determined based on the user's current target language. - Future _updateAnalytics({LanguageModel? l2Override}) async { - // if there's no cached construct data, there's nothing to send - final cachedConstructs = _pangeaController.getAnalytics.messagesSinceUpdate; - final bool onlyDraft = cachedConstructs.length == 1 && - cachedConstructs.keys.single.startsWith('draft'); - if (cachedConstructs.isEmpty || onlyDraft) return; - - // if missing important info, don't send analytics. Could happen if user just signed up. - final l2 = l2Override ?? _pangeaController.languageController.userL2; - if (l2 == null || _client.userID == null) return; - - // analytics room for the user and current target language - final Room? analyticsRoom = await _client.getMyAnalyticsRoom(l2); - - // and send cached analytics data to the room - await analyticsRoom?.sendConstructsEvent( - _pangeaController.getAnalytics.locallyCachedSentConstructs, - ); - } - - Future sendActivityAnalytics(String roomId) async { - if (_pangeaController.matrixState.client.userID == null) return; - if (_pangeaController.languageController.userL2 == null) return; - - final Room? analyticsRoom = await _client.getMyAnalyticsRoom( - _pangeaController.languageController.userL2!, - ); - if (analyticsRoom == null) return; - await analyticsRoom.addActivityRoomId(roomId); - - analyticsUpdateStream.add( - AnalyticsUpdate( - AnalyticsUpdateType.activities, - [], - ), - ); - } - - Future removeActivityAnalytics(String roomId) async { - if (_pangeaController.matrixState.client.userID == null) return; - if (_pangeaController.languageController.userL2 == null) return; - - final Room? analyticsRoom = await _client.getMyAnalyticsRoom( - _pangeaController.languageController.userL2!, - ); - if (analyticsRoom == null) return; - await analyticsRoom.removeActivityRoomId(roomId); - analyticsUpdateStream.add( - AnalyticsUpdate( - AnalyticsUpdateType.activities, - [], - ), - ); - } -} - -class AnalyticsStream { - final String? eventId; - final String? roomId; - final String? targetID; - - final List constructs; - - AnalyticsStream({ - required this.eventId, - required this.roomId, - required this.constructs, - this.targetID, - }); -} - -class AnalyticsUpdate { - final AnalyticsUpdateType type; - final List newConstructs; - final bool isLogout; - final String? targetID; - - AnalyticsUpdate( - this.type, - this.newConstructs, { - this.isLogout = false, - this.targetID, - }); -} diff --git a/lib/pangea/analytics_misc/room_analytics_extension.dart b/lib/pangea/analytics_misc/room_analytics_extension.dart index 2d4e6f6c7..375bce4c0 100644 --- a/lib/pangea/analytics_misc/room_analytics_extension.dart +++ b/lib/pangea/analytics_misc/room_analytics_extension.dart @@ -1,184 +1,16 @@ part of "../extensions/pangea_room_extension.dart"; extension AnalyticsRoomExtension on Room { - /// Get next n analytics rooms via the space hierarchy - /// If joined - /// If not in target language - /// If not created by user, leave - /// Else, add to list - /// Else - /// If room name does not match L2, skip - /// Join and wait for room in sync. - /// Repeat the same procedure as above. - /// - /// If not n analytics rooms in list, and nextBatch != null, repeat the above - /// procedure with nextBatch until n analytics rooms are found or nextBatch == null - /// - /// Yield this list of rooms. - /// Once analytics have been retrieved, leave analytics rooms not created by self. - Stream> getNextAnalyticsRoomBatch(String langCode) async* { - final List rooms = []; - String? nextBatch; - int spaceHierarchyCalls = 0; - int callsToServer = 0; - - while (spaceHierarchyCalls <= 5 && - (nextBatch != null || spaceHierarchyCalls == 0)) { - spaceHierarchyCalls++; - final resp = await _getNextBatch(nextBatch); - callsToServer++; - if (resp == null) return; - - rooms.addAll(resp.rooms); - nextBatch = resp.nextBatch; - - final List roomsBatch = []; - while (rooms.isNotEmpty) { - // prevent rate-limiting - if (callsToServer >= 5) { - callsToServer = 0; - await Future.delayed(const Duration(milliseconds: 7500)); - } - - final nextRoomChunk = rooms.removeAt(0); - if (nextRoomChunk.roomType != PangeaRoomTypes.analytics) { - continue; - } - - final matchingRoom = client.rooms.firstWhereOrNull( - (r) => r.id == nextRoomChunk.roomId, - ); - - final (analyticsRoom, calls) = matchingRoom != null - ? await _handleJoinedAnalyticsRoom(matchingRoom, langCode) - : await _handleUnjoinedAnalyticsRoom(nextRoomChunk, langCode); - - callsToServer += calls; - if (analyticsRoom == null) continue; - roomsBatch.add(analyticsRoom); - - if (roomsBatch.length >= 5) { - final roomsBatchCopy = List.from(roomsBatch); - roomsBatch.clear(); - yield roomsBatchCopy; - } - } - - yield roomsBatch; - } + String? get madeForLang { + final creationContent = getState(EventTypes.RoomCreate)?.content; + return creationContent?.tryGet(ModelKey.langCode) ?? + creationContent?.tryGet(ModelKey.oldLangCode); } - /// Return analytics room, given unjoined member of space hierarchy, - /// if should get analytics for that room, and number of call made - /// to the server to help prevent rate-limiting - Future<(Room?, int)> _handleUnjoinedAnalyticsRoom( - SpaceRoomsChunk chunk, - String l2, - ) async { - int callsToServer = 0; - final nameParts = chunk.name?.split(" "); - if (nameParts != null && nameParts.length >= 2) { - final roomLangCode = nameParts[1]; - if (roomLangCode != l2) return (null, callsToServer); - } - - Room? analyticsRoom = await _joinAnalyticsRoomChunk(chunk); - callsToServer++; - - if (analyticsRoom == null) return (null, callsToServer); - final (room, calls) = await _handleJoinedAnalyticsRoom(analyticsRoom, l2); - analyticsRoom = room; - callsToServer += calls; - - return (analyticsRoom, callsToServer); - } - - /// Return analytics room if should add to returned list - /// and the number of calls made to the server (used to prevent rate-limiting) - Future<(Room?, int)> _handleJoinedAnalyticsRoom( - Room analyticsRoom, - String l2, - ) async { - if (client.userID == null) return (null, 0); - if (analyticsRoom.madeForLang != l2) { - await _leaveNonTargetAnalyticsRoom(analyticsRoom, l2); - return (null, 1); - } - return (analyticsRoom, 0); - } - - Future _joinAnalyticsRoomChunk( - SpaceRoomsChunk chunk, - ) async { - final matchingRoom = client.rooms.firstWhereOrNull( - (r) => r.id == chunk.roomId, - ); - if (matchingRoom != null) return matchingRoom; - - try { - final syncFuture = client.waitForRoomInSync(chunk.roomId, join: true); - await client.joinRoom(chunk.roomId); - await syncFuture; - return client.getRoomById(chunk.roomId); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "roomID": chunk.roomId, - }, - ); - return null; - } - } - - Future _leaveNonTargetAnalyticsRoom(Room room, String userL2) async { - if (client.userID == null || - room.isMadeByUser(client.userID!) || - room.madeForLang == userL2) { - return; - } - - try { - await room.leave(); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "roomID": room.id, - }, - ); - } - } - - Future _getNextBatch(String? nextBatch) async { - try { - final resp = await client.getSpaceHierarchy( - id, - from: nextBatch, - limit: 100, - maxDepth: 1, - ); - return resp; - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "spaceID": id, - "nextBatch": nextBatch, - }, - ); - return null; - } - } - - Future analyticsLastUpdated(String userId) async { - final List events = - await getRoomAnalyticsEvents(count: 1, userID: userId); - if (events.isEmpty) return null; - return events.first.originServerTs; + bool isMadeForLang(String langCode) { + final creationContent = getState(EventTypes.RoomCreate)?.content; + return creationContent?.tryGet(ModelKey.langCode) == langCode || + creationContent?.tryGet(ModelKey.oldLangCode) == langCode; } Future?> getAnalyticsEvents({ @@ -194,18 +26,6 @@ extension AnalyticsRoomExtension on Room { return analyticsEvents; } - String? get madeForLang { - final creationContent = getState(EventTypes.RoomCreate)?.content; - return creationContent?.tryGet(ModelKey.langCode) ?? - creationContent?.tryGet(ModelKey.oldLangCode); - } - - bool isMadeForLang(String langCode) { - final creationContent = getState(EventTypes.RoomCreate)?.content; - return creationContent?.tryGet(ModelKey.langCode) == langCode || - creationContent?.tryGet(ModelKey.oldLangCode) == langCode; - } - /// Sends construct events to the server. /// /// The [uses] parameter is a list of [OneConstructUse] objects representing the @@ -268,87 +88,4 @@ extension AnalyticsRoomExtension on Room { ); } } - - UserSetLemmaInfo? getUserSetLemmaInfo(ConstructIdentifier cId) { - final state = getState(PangeaEventTypes.userSetLemmaInfo, cId.string); - if (state == null) return null; - try { - return UserSetLemmaInfo.fromJson(state.content); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "roomID": id, - "stateContent": state.content, - "stateKey": state.stateKey, - }, - ); - return null; - } - } - - Future setUserSetLemmaInfo( - ConstructIdentifier cId, - UserSetLemmaInfo info, - ) async { - final syncFuture = client.onRoomState.stream.firstWhere((event) { - return event.roomId == id && - event.state.type == PangeaEventTypes.userSetLemmaInfo; - }); - client.setRoomStateWithKey( - id, - PangeaEventTypes.userSetLemmaInfo, - cId.string, - info.toJson(), - ); - await syncFuture.timeout(const Duration(seconds: 10)); - } - - List get activityRoomIds { - final state = getState(PangeaEventTypes.activityRoomIds); - if (state?.content[ModelKey.roomIds] is List) { - return List.from(state!.content[ModelKey.roomIds] as List); - } - return []; - } - - Future addActivityRoomId(String roomId) async { - final List ids = List.from(activityRoomIds); - if (ids.contains(roomId)) return; - - final prevLength = ids.length; - ids.add(roomId); - - final syncFuture = client.waitForRoomInSync(id, join: true); - await client.setRoomStateWithKey( - id, - PangeaEventTypes.activityRoomIds, - "", - {ModelKey.roomIds: ids}, - ); - final newLength = activityRoomIds.length; - if (newLength == prevLength) { - await syncFuture; - } - } - - Future removeActivityRoomId(String roomId) async { - final List ids = List.from(activityRoomIds); - if (!ids.contains(roomId)) return; - final prevLength = ids.length; - ids.remove(roomId); - - final syncFuture = client.waitForRoomInSync(id, join: true); - await client.setRoomStateWithKey( - id, - PangeaEventTypes.activityRoomIds, - "", - {ModelKey.roomIds: ids}, - ); - final newLength = activityRoomIds.length; - if (newLength == prevLength) { - await syncFuture; - } - } } diff --git a/lib/pangea/analytics_misc/saved_analytics_extension.dart b/lib/pangea/analytics_misc/saved_analytics_extension.dart new file mode 100644 index 000000000..9e362baa8 --- /dev/null +++ b/lib/pangea/analytics_misc/saved_analytics_extension.dart @@ -0,0 +1,48 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; + +extension SavedAnalyticsExtension on Room { + List get _activityRoomIds { + final state = getState(PangeaEventTypes.activityRoomIds); + if (state?.content[ModelKey.roomIds] is List) { + return List.from(state!.content[ModelKey.roomIds] as List); + } + return []; + } + + List get archivedActivities { + return _activityRoomIds + .map((id) => client.getRoomById(id)) + .whereType() + .where( + (room) => + room.membership != Membership.leave && + room.membership != Membership.ban, + ) + .toList(); + } + + int get archivedActivitiesCount => archivedActivities.length; + + Future addActivityRoomId(String roomId) async { + final List ids = List.from(_activityRoomIds); + if (ids.contains(roomId)) return; + + final prevLength = ids.length; + ids.add(roomId); + + final syncFuture = client.waitForRoomInSync(id, join: true); + await client.setRoomStateWithKey( + id, + PangeaEventTypes.activityRoomIds, + "", + {ModelKey.roomIds: ids}, + ); + final newLength = _activityRoomIds.length; + if (newLength == prevLength) { + await syncFuture; + } + } +} diff --git a/lib/pangea/analytics_misc/text_loading_shimmer.dart b/lib/pangea/analytics_misc/text_loading_shimmer.dart index 77c565797..f22a87062 100644 --- a/lib/pangea/analytics_misc/text_loading_shimmer.dart +++ b/lib/pangea/analytics_misc/text_loading_shimmer.dart @@ -6,23 +6,27 @@ import 'package:fluffychat/config/app_config.dart'; class TextLoadingShimmer extends StatelessWidget { final double width; + final double? height; + const TextLoadingShimmer({ super.key, this.width = 140.0, + this.height, }); @override Widget build(BuildContext context) { return Shimmer.fromColors( - baseColor: Colors.transparent, // Base color of the shimmer effect - // for higlight, use white with 50 opacity + baseColor: Colors.transparent, highlightColor: Theme.of(context).colorScheme.primary.withAlpha(70), child: Container( - height: AppConfig.messageFontSize * AppConfig.fontSizeFactor, - width: width, // Width of the rectangle - color: Theme.of(context) - .colorScheme - .primary, // Background color of the rectangle + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4.0), + color: Theme.of(context).colorScheme.primary, + ), + height: + height ?? (AppConfig.messageFontSize * AppConfig.fontSizeFactor), + width: width, ), ); } diff --git a/lib/pangea/analytics_misc/user_lemma_info_extension.dart b/lib/pangea/analytics_misc/user_lemma_info_extension.dart new file mode 100644 index 000000000..3a38206c0 --- /dev/null +++ b/lib/pangea/analytics_misc/user_lemma_info_extension.dart @@ -0,0 +1,49 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/lemmas/user_set_lemma_info.dart'; + +extension UserLemmaInfoExtension on Room { + UserSetLemmaInfo getUserSetLemmaInfo(ConstructIdentifier cId) { + final state = getState(PangeaEventTypes.userSetLemmaInfo, cId.string); + if (state == null) return UserSetLemmaInfo(); + try { + return UserSetLemmaInfo.fromJson(state.content); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + "roomID": id, + "stateContent": state.content, + "stateKey": state.stateKey, + }, + ); + return UserSetLemmaInfo(); + } + } + + String? constructEmoji(ConstructIdentifier cId) { + final info = getUserSetLemmaInfo(cId); + return info.emojis?.firstOrNull; + } + + Future setUserSetLemmaInfo( + ConstructIdentifier cId, + UserSetLemmaInfo info, + ) async { + final syncFuture = client.onRoomState.stream.firstWhere((event) { + return event.roomId == id && + event.state.type == PangeaEventTypes.userSetLemmaInfo; + }); + client.setRoomStateWithKey( + id, + PangeaEventTypes.userSetLemmaInfo, + cId.string, + info.toJson(), + ); + await syncFuture.timeout(const Duration(seconds: 10)); + } +} diff --git a/lib/pangea/analytics_page/activity_archive.dart b/lib/pangea/analytics_page/activity_archive.dart index a40cdb9d5..ef5e2f6f9 100644 --- a/lib/pangea/analytics_page/activity_archive.dart +++ b/lib/pangea/analytics_page/activity_archive.dart @@ -1,11 +1,15 @@ import 'package:flutter/material.dart'; -import 'package:collection/collection.dart'; import 'package:go_router/go_router.dart'; 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'; @@ -15,34 +19,52 @@ import '../../config/themes.dart'; import '../../widgets/avatar.dart'; class ActivityArchive extends StatelessWidget { - final String? selectedRoomId; const ActivityArchive({ super.key, - this.selectedRoomId, }); - List get archive => - MatrixState.pangeaController.getAnalytics.archivedActivities; - @override Widget build(BuildContext context) { - return MaxWidthBody( - withScrolling: false, - child: ListView.builder( - itemCount: archive.length + 1, - itemBuilder: (BuildContext context, int i) { - if (i == 0) { - return const InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.activityAnalyticsList, - padding: EdgeInsets.all(8.0), - ); - } - i--; - return AnalyticsActivityItem( - room: archive[i], - selected: archive[i].id == selectedRoomId, - ); - }, + final Room? analyticsRoom = Matrix.of(context).client.analyticsRoomLocal(); + final archive = analyticsRoom?.archivedActivities ?? []; + 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, + ); + }, + ), + ), + ), + ], + ), + ), ), ); } @@ -60,11 +82,7 @@ class AnalyticsActivityItem extends StatelessWidget { @override Widget build(BuildContext context) { final objective = room.activityPlan?.learningObjective ?? ''; - final cefrLevel = room.activitySummary?.summary?.participants - .firstWhereOrNull( - (p) => p.participantId == room.client.userID, - ) - ?.cefrLevel; + final cefrLevel = room.activityPlan?.req.cefrLevel; final theme = Theme.of(context); return Padding( @@ -104,14 +122,18 @@ class AnalyticsActivityItem extends StatelessWidget { vertical: 4, ), child: Text( - cefrLevel.toUpperCase(), + cefrLevel.string, style: const TextStyle(fontSize: 14.0), ), ) : null, - onTap: () => context.go( - '/rooms/analytics/activities/${room.id}', - ), + onTap: () { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.activities, + activityRoomId: room.id, + ); + }, ), ), ); diff --git a/lib/pangea/analytics_page/analytics_page.dart b/lib/pangea/analytics_page/analytics_page.dart deleted file mode 100644 index d1efb4bd0..000000000 --- a/lib/pangea/analytics_page/analytics_page.dart +++ /dev/null @@ -1,112 +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/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_dialog_content.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.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 - State createState() => _AnalyticsPageState(); -} - -class _AnalyticsPageState extends State { - @override - void initState() { - super.initState(); - final analytics = MatrixState.pangeaController.getAnalytics; - - // Check if getAnalytics is initialized, if not wait for the first stream entry - if (!analytics.initCompleter.isCompleted) { - analytics.analyticsStream.stream.first.then((_) { - if (mounted) { - setState(() {}); - } - }); - } - } - - @override - Widget build(BuildContext context) { - final analyticsRoomId = GoRouterState.of(context).pathParameters['roomid']; - return Scaffold( - appBar: widget.construct != null ? AppBar() : 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 LevelDialogContent(); - } else if (widget.indicator == - ProgressIndicatorEnum.morphsUsed) { - return ConstructAnalyticsView( - construct: widget.construct, - view: ConstructTypeEnum.morph, - ); - } else if (widget.indicator == - ProgressIndicatorEnum.wordsUsed) { - return ConstructAnalyticsView( - construct: widget.construct, - view: ConstructTypeEnum.vocab, - ); - } else if (widget.indicator == - ProgressIndicatorEnum.activities) { - return ActivityArchive( - selectedRoomId: analyticsRoomId, - ); - } - - return Center( - child: SizedBox( - width: 250.0, - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${AnalyticsPageConstants.dinoBotFileName}", - errorWidget: (context, url, error) => const SizedBox(), - placeholder: (context, url) => const Center( - child: CircularProgressIndicator.adaptive(), - ), - ), - ), - ); - }(), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/analytics_page/empty_analytics_page.dart b/lib/pangea/analytics_page/empty_analytics_page.dart new file mode 100644 index 000000000..852dfa679 --- /dev/null +++ b/lib/pangea/analytics_page/empty_analytics_page.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; + +import 'package:cached_network_image/cached_network_image.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/analytics_page/analytics_page_constants.dart'; + +class EmptyAnalyticsPage extends StatelessWidget { + const EmptyAnalyticsPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + body: SafeArea( + child: Center( + child: SizedBox( + width: 250.0, + child: CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${AnalyticsPageConstants.dinoBotFileName}", + errorWidget: (context, url, error) => const SizedBox(), + placeholder: (context, url) => const Center( + child: CircularProgressIndicator.adaptive(), + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/pangea/analytics_settings/analytics_settings_extension.dart b/lib/pangea/analytics_settings/analytics_settings_extension.dart new file mode 100644 index 000000000..7e7316ea9 --- /dev/null +++ b/lib/pangea/analytics_settings/analytics_settings_extension.dart @@ -0,0 +1,29 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/analytics_settings/analytics_settings_model.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; + +extension AnalyticsSettingsRoomExtension on Room { + AnalyticsSettingsModel get analyticsSettings { + final event = getState(PangeaEventTypes.analyticsSettings); + if (event == null) { + return const AnalyticsSettingsModel(blockedConstructs: {}); + } + return AnalyticsSettingsModel.fromJson(event.content); + } + + Set get blockedConstructs => + analyticsSettings.blockedConstructs; + + Future setAnalyticsSettings( + AnalyticsSettingsModel settings, + ) async { + await client.setRoomStateWithKey( + id, + PangeaEventTypes.analyticsSettings, + "", + settings.toJson(), + ); + } +} diff --git a/lib/pangea/analytics_settings/analytics_settings_model.dart b/lib/pangea/analytics_settings/analytics_settings_model.dart new file mode 100644 index 000000000..149964747 --- /dev/null +++ b/lib/pangea/analytics_settings/analytics_settings_model.dart @@ -0,0 +1,36 @@ +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; + +class AnalyticsSettingsModel { + final Set blockedConstructs; + + const AnalyticsSettingsModel({ + required this.blockedConstructs, + }); + + AnalyticsSettingsModel copyWith({ + Set? blockedConstructs, + }) { + return AnalyticsSettingsModel( + blockedConstructs: blockedConstructs ?? this.blockedConstructs, + ); + } + + factory AnalyticsSettingsModel.fromJson(Map json) { + final blockedConstructs = {}; + if (json['blocked_constructs'] != null) { + final lemmas = json['blocked_constructs'] as List; + for (final lemma in lemmas) { + blockedConstructs.add(ConstructIdentifier.fromJson(lemma)); + } + } + return AnalyticsSettingsModel( + blockedConstructs: blockedConstructs, + ); + } + + Map toJson() { + return { + 'blocked_constructs': blockedConstructs.map((c) => c.toJson()).toList(), + }; + } +} diff --git a/lib/pangea/analytics_summary/animated_progress_bar.dart b/lib/pangea/analytics_summary/animated_progress_bar.dart new file mode 100644 index 000000000..eece5bf6d --- /dev/null +++ b/lib/pangea/analytics_summary/animated_progress_bar.dart @@ -0,0 +1,67 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/themes.dart'; + +class AnimatedProgressBar extends StatelessWidget { + final double height; + final double widthPercent; + + final Color barColor; + final Color? backgroundColor; + final Duration? duration; + + const AnimatedProgressBar({ + required this.height, + required this.widthPercent, + this.barColor = AppConfig.goldLight, + this.backgroundColor, + this.duration, + super.key, + }); + + @override + Widget build(BuildContext context) { + return LayoutBuilder( + builder: (context, constraints) { + return Stack( + alignment: Alignment.centerLeft, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 2), + child: Container( + height: height, + width: constraints.maxWidth, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all( + Radius.circular(AppConfig.borderRadius), + ), + color: backgroundColor ?? + Theme.of(context).colorScheme.secondaryContainer, + ), + ), + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 2), + child: AnimatedContainer( + duration: duration ?? FluffyThemes.animationDuration, + height: height, + width: widthPercent == 0 + ? 0 + : max(18, constraints.maxWidth * widthPercent), + decoration: BoxDecoration( + color: barColor, + borderRadius: const BorderRadius.all( + Radius.circular(AppConfig.borderRadius), + ), + ), + ), + ), + ], + ); + }, + ); + } +} diff --git a/lib/pangea/analytics_summary/learning_progress_bar.dart b/lib/pangea/analytics_summary/learning_progress_bar.dart index b9f413520..2292c2b94 100644 --- a/lib/pangea/analytics_summary/learning_progress_bar.dart +++ b/lib/pangea/analytics_summary/learning_progress_bar.dart @@ -1,21 +1,17 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar_details.dart'; -import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/pangea/analytics_summary/animated_progress_bar.dart'; class LearningProgressBar extends StatelessWidget { - final int level; - final int totalXP; - final double? height; + final double progress; + final double height; final bool loading; const LearningProgressBar({ - required this.level, - required this.totalXP, + required this.progress, required this.loading, - this.height, + required this.height, super.key, }); @@ -30,16 +26,12 @@ class LearningProgressBar extends StatelessWidget { ), ); } - return ProgressBar( + + return AnimatedProgressBar( height: height, - levelBars: [ - LevelBarDetails( - fillColor: Theme.of(context).colorScheme.primary, - currentPoints: totalXP, - widthMultiplier: - MatrixState.pangeaController.getAnalytics.levelProgress, - ), - ], + widthPercent: progress, + barColor: AppConfig.goldLight, + backgroundColor: Theme.of(context).colorScheme.secondaryContainer, ); } } diff --git a/lib/pangea/analytics_summary/learning_progress_indicators.dart b/lib/pangea/analytics_summary/learning_progress_indicators.dart index 3b2b7f14c..c15a11b05 100644 --- a/lib/pangea/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/analytics_summary/learning_progress_indicators.dart @@ -1,20 +1,15 @@ -import 'dart:async'; - 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_list_model.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics_misc/saved_analytics_extension.dart'; import 'package:fluffychat/pangea/analytics_summary/learning_progress_bar.dart'; import 'package:fluffychat/pangea/analytics_summary/learning_progress_indicator_button.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicator.dart'; import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -22,7 +17,7 @@ import 'package:fluffychat/widgets/matrix.dart'; /// It shows a variety of progress indicators such as /// messages sent, words used, and error types, which can /// be clicked to access more fine-grained analytics data. -class LearningProgressIndicators extends StatefulWidget { +class LearningProgressIndicators extends StatelessWidget { final ProgressIndicatorEnum? selected; final bool canSelect; @@ -32,66 +27,6 @@ class LearningProgressIndicators extends StatefulWidget { this.canSelect = true, }); - @override - State createState() => - LearningProgressIndicatorsState(); -} - -class LearningProgressIndicatorsState - extends State { - ConstructListModel get _constructsModel => - MatrixState.pangeaController.getAnalytics.constructListModel; - bool _loading = true; - - StreamSubscription? _analyticsSubscription; - StreamSubscription? _languageSubscription; - - @override - void initState() { - super.initState(); - - // if getAnalytics has already finished initializing, - // the data is loaded and should be displayed. - if (MatrixState.pangeaController.getAnalytics.initCompleter.isCompleted) { - updateData(null); - } - _analyticsSubscription = MatrixState - .pangeaController.getAnalytics.analyticsStream.stream - .listen(updateData); - - // rebuild when target language changes - _languageSubscription = MatrixState - .pangeaController.userController.languageStream.stream - .listen((_) { - if (mounted) setState(() {}); - }); - } - - @override - void dispose() { - _analyticsSubscription?.cancel(); - _analyticsSubscription = null; - _languageSubscription?.cancel(); - _languageSubscription = null; - super.dispose(); - } - - void updateData(AnalyticsStreamUpdate? _) { - if (_loading) _loading = false; - if (mounted) setState(() {}); - } - - int uniqueLemmas(ProgressIndicatorEnum indicator) { - switch (indicator) { - case ProgressIndicatorEnum.morphsUsed: - return _constructsModel.numConstructs(ConstructTypeEnum.morph); - case ProgressIndicatorEnum.wordsUsed: - return _constructsModel.numConstructs(ConstructTypeEnum.vocab); - default: - return 0; - } - } - @override Widget build(BuildContext context) { final client = Matrix.of(context).client; @@ -99,179 +34,209 @@ class LearningProgressIndicatorsState return const SizedBox(); } - final userL1 = MatrixState.pangeaController.languageController.userL1; - final userL2 = MatrixState.pangeaController.languageController.userL2; - final isColumnMode = FluffyThemes.isColumnMode(context); + final analyticsService = Matrix.of(context).analyticsDataService; - return Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: Row( - spacing: isColumnMode ? 16.0 : 4.0, - children: [ - ...ConstructTypeEnum.values.map( - (c) => HoverButton( - selected: widget.selected == c.indicator, - onPressed: () { - context.go( - "/rooms/analytics/${c.string}", - ); - }, - child: ProgressIndicatorBadge( - indicator: c.indicator, - loading: _loading, - points: uniqueLemmas(c.indicator), - ), - ), - ), - HoverButton( - selected: widget.selected == - ProgressIndicatorEnum.activities, - onPressed: () { - context.go( - "/rooms/analytics/activities", - ); - }, - child: Tooltip( - message: ProgressIndicatorEnum.activities - .tooltip(context), + return StreamBuilder( + stream: MatrixState.pangeaController.userController.languageStream.stream, + builder: (context, _) { + final userL1 = MatrixState.pangeaController.userController.userL1; + final userL2 = MatrixState.pangeaController.userController.userL2; + + final analyticsRoom = Matrix.of(context).client.analyticsRoomLocal(); + final archivedActivitiesCount = + analyticsRoom?.archivedActivitiesCount ?? 0; + + return StreamBuilder( + stream: + analyticsService.updateDispatcher.constructUpdateStream.stream, + builder: (context, _) { + return Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.only(left: 8.0), child: Row( - mainAxisSize: MainAxisSize.min, + spacing: isColumnMode ? 16.0 : 4.0, children: [ - Icon( - size: 18, - Icons.radar, - color: Theme.of(context).colorScheme.primary, - weight: 1000, + ...ConstructTypeEnum.values.map( + (c) => HoverButton( + selected: selected == c.indicator, + onPressed: () { + AnalyticsNavigationUtil + .navigateToAnalytics( + context: context, + view: c.indicator, + ); + }, + child: ProgressIndicatorBadge( + indicator: c.indicator, + loading: analyticsService.isInitializing, + points: analyticsService.numConstructs(c), + ), + ), ), - const SizedBox(width: 6.0), - AnimatedFloatingNumber( - number: Matrix.of(context) - .client - .analyticsRoomLocal() - ?.activityRoomIds - .length ?? - 0, + HoverButton( + selected: selected == + ProgressIndicatorEnum.activities, + onPressed: () { + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.activities, + ); + }, + child: Tooltip( + message: ProgressIndicatorEnum.activities + .tooltip(context), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + size: 18, + Icons.radar, + color: Theme.of(context) + .colorScheme + .primary, + weight: 1000, + ), + const SizedBox(width: 6.0), + AnimatedFloatingNumber( + number: archivedActivitiesCount, + ), + ], + ), + ), ), ], ), ), - ), - ], - ), - ), - HoverButton( - onPressed: () => showDialog( - context: context, - builder: (c) => const SettingsLearning(), - barrierDismissible: false, - ), - child: Row( - children: [ - if (userL1 != null && userL2 != null) - Text( - userL1.langCodeShort.toUpperCase(), - style: Theme.of(context) - .textTheme - .titleLarge - ?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context).colorScheme.primary, - ), + HoverButton( + onPressed: () => showDialog( + context: context, + builder: (c) => const SettingsLearning(), + barrierDismissible: false, + ), + child: Row( + children: [ + if (userL1 != null && userL2 != null) + Text( + userL1.langCodeShort.toUpperCase(), + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context) + .colorScheme + .primary, + ), + ), + if (userL1 != null && userL2 != null) + const Icon(Icons.chevron_right_outlined), + if (userL2 != null) + Text( + userL2.langCodeShort.toUpperCase(), + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context) + .colorScheme + .primary, + ), + ), + ], + ), ), - if (userL1 != null && userL2 != null) - const Icon(Icons.chevron_right_outlined), - if (userL2 != null) - Text( - userL2.langCodeShort.toUpperCase(), - style: Theme.of(context) - .textTheme - .titleLarge - ?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context).colorScheme.primary, - ), - ), - ], - ), - ), - ], - ), - const SizedBox(height: 6), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4.0), - child: HoverBuilder( - builder: (context, hovered) { - return Container( - decoration: BoxDecoration( - color: hovered && widget.canSelect - ? Theme.of(context) - .colorScheme - .primary - .withAlpha((0.2 * 255).round()) - : Colors.transparent, - borderRadius: BorderRadius.circular(36.0), + ], ), - padding: const EdgeInsets.symmetric( - vertical: 2.0, - horizontal: 4.0, - ), - child: MouseRegion( - cursor: widget.canSelect - ? SystemMouseCursors.click - : MouseCursor.defer, - child: GestureDetector( - onTap: widget.canSelect - ? () { - context.go("/rooms/analytics/level"); - } - : null, - child: Row( - spacing: 8.0, - children: [ - Expanded( - child: LearningProgressBar( - level: _constructsModel.level, - totalXP: _constructsModel.totalXP, - height: 24.0, - loading: _loading, + const SizedBox(height: 6), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 4.0), + child: HoverBuilder( + builder: (context, hovered) { + return Container( + decoration: BoxDecoration( + color: hovered && canSelect + ? Theme.of(context) + .colorScheme + .primary + .withAlpha((0.2 * 255).round()) + : Colors.transparent, + borderRadius: BorderRadius.circular(36.0), + ), + padding: const EdgeInsets.symmetric( + vertical: 2.0, + horizontal: 4.0, + ), + child: MouseRegion( + cursor: canSelect + ? SystemMouseCursors.click + : MouseCursor.defer, + child: GestureDetector( + onTap: canSelect + ? () { + AnalyticsNavigationUtil + .navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.level, + ); + } + : null, + child: FutureBuilder( + future: analyticsService.derivedData, + builder: (context, snapshot) { + return Row( + spacing: 8.0, + children: [ + Expanded( + child: LearningProgressBar( + height: 24.0, + loading: !snapshot.hasData, + progress: snapshot + .data?.levelProgress ?? + 0.0, + ), + ), + if (snapshot.hasData) + Text( + "⭐ ${snapshot.data!.level}", + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context) + .colorScheme + .primary, + ), + ), + ], + ); + }, + ), ), ), - if (!_loading) - Text( - "⭐ ${_constructsModel.level}", - style: Theme.of(context) - .textTheme - .titleLarge - ?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context) - .colorScheme - .primary, - ), - ), - ], - ), + ); + }, ), ), - ); - }, + const SizedBox(height: 16.0), + ], + ), ), - ), - const SizedBox(height: 16.0), - ], - ), - ), - ], + ], + ); + }, + ); + }, ); } } diff --git a/lib/pangea/analytics_summary/level_analytics_details_content.dart b/lib/pangea/analytics_summary/level_analytics_details_content.dart new file mode 100644 index 000000000..61c316ff9 --- /dev/null +++ b/lib/pangea/analytics_summary/level_analytics_details_content.dart @@ -0,0 +1,168 @@ +import 'package:flutter/material.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/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'; +import 'package:fluffychat/widgets/matrix.dart'; + +class LevelAnalyticsDetailsContent extends StatelessWidget { + const LevelAnalyticsDetailsContent({ + super.key, + }); + + @override + Widget build(BuildContext context) { + final isColumnMode = FluffyThemes.isColumnMode(context); + final analyticsService = Matrix.of(context).analyticsDataService; + + return Scaffold( + body: SafeArea( + child: Padding( + padding: const EdgeInsetsGeometry.all(16.0), + child: StreamBuilder( + stream: + analyticsService.updateDispatcher.constructUpdateStream.stream, + builder: (context, _) { + return Column( + children: [ + const LearningProgressIndicators( + selected: ProgressIndicatorEnum.level, + canSelect: false, + ), + FutureBuilder( + future: analyticsService.derivedData, + builder: (context, snapshot) { + if (snapshot.data == null) { + return const SizedBox(); + } + + 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), + ), + ), + ], + ), + ), + ], + ), + ), + ); + }, + ); + }, + ), + ), + ], + ); + }, + ), + ), + ), + ); + } +} diff --git a/lib/pangea/analytics_summary/level_dialog_content.dart b/lib/pangea/analytics_summary/level_dialog_content.dart deleted file mode 100644 index 8ee525a2b..000000000 --- a/lib/pangea/analytics_summary/level_dialog_content.dart +++ /dev/null @@ -1,143 +0,0 @@ -import 'package:flutter/material.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/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class LevelDialogContent extends StatelessWidget { - const LevelDialogContent({ - super.key, - }); - - GetAnalyticsController get analytics => - MatrixState.pangeaController.getAnalytics; - - int get level => analytics.constructListModel.level; - int get totalXP => analytics.constructListModel.totalXP; - int get maxLevelXP => analytics.minXPForNextLevel; - List get uses => analytics.constructListModel.truncatedUses; - - bool get _loading => - !MatrixState.pangeaController.getAnalytics.initCompleter.isCompleted; - - @override - Widget build(BuildContext context) { - final isColumnMode = FluffyThemes.isColumnMode(context); - - return StreamBuilder( - stream: analytics.analyticsStream.stream, - builder: (context, _) { - if (_loading) { - return const Center( - child: CircularProgressIndicator.adaptive(), - ); - } - - return Scaffold( - appBar: AppBar( - titleSpacing: 0, - automaticallyImplyLeading: false, - title: 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: Column( - children: [ - Expanded( - child: ListView.builder( - itemCount: uses.length, - itemBuilder: (context, 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), - ), - ), - ], - ), - ), - ], - ), - ), - ); - }, - ), - ), - ], - ), - ); - }, - ); - } -} diff --git a/lib/pangea/analytics_summary/progress_bar/animated_level_dart.dart b/lib/pangea/analytics_summary/progress_bar/animated_level_dart.dart deleted file mode 100644 index ccc966528..000000000 --- a/lib/pangea/analytics_summary/progress_bar/animated_level_dart.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; - -class AnimatedLevelBar extends StatefulWidget { - final double height; - final double beginWidth; - final double endWidth; - final Color primaryColor; - - const AnimatedLevelBar({ - super.key, - required this.height, - required this.beginWidth, - required this.endWidth, - required this.primaryColor, - }); - - @override - AnimatedLevelBarState createState() => AnimatedLevelBarState(); -} - -class AnimatedLevelBarState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - - double get _beginWidth => - widget.beginWidth == 0 ? 0 : max(20, widget.beginWidth); - double get _endWidth => widget.endWidth == 0 ? 0 : max(20, widget.endWidth); - - /// Whether the animation has run for the first time during initState. Don't - /// want the animation to run when the widget mounts, only when points are gained. - bool _init = true; - - @override - void initState() { - super.initState(); - _controller = AnimationController( - vsync: this, - duration: FluffyThemes.animationDuration, - ); - - _controller.forward().then((_) => _init = false); - } - - @override - void didUpdateWidget(covariant AnimatedLevelBar oldWidget) { - super.didUpdateWidget(oldWidget); - if ((oldWidget.endWidth == 0 ? 0 : max(20, oldWidget.endWidth)) != - (widget.endWidth == 0 ? 0 : max(20, widget.endWidth))) { - _controller.reset(); - _controller.forward(); - } - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - Animation get _animation { - // If this is the first run of the animation, don't animate. This is just the widget mounting, - // not a points gain. This could instead be 'if going from 0 to a non-zero value', but that - // would remove the animation for first points gained. It would remove the need for a flag though. - if (_init) { - return Tween( - begin: _endWidth, - end: _endWidth, - ).animate(_controller); - } - - // animate the width of the bar - return Tween( - begin: _beginWidth, - end: _endWidth, - ).animate(_controller); - } - - @override - Widget build(BuildContext context) { - return AnimatedBuilder( - animation: _animation, - builder: (context, child) { - return Stack( - children: [ - Container( - height: widget.height, - width: _animation.value, - decoration: BoxDecoration( - color: widget.primaryColor, - borderRadius: const BorderRadius.all( - Radius.circular(AppConfig.borderRadius), - ), - ), - ), - ], - ); - }, - ); - } -} diff --git a/lib/pangea/analytics_summary/progress_bar/level_bar.dart b/lib/pangea/analytics_summary/progress_bar/level_bar.dart deleted file mode 100644 index 3bf56c325..000000000 --- a/lib/pangea/analytics_summary/progress_bar/level_bar.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/animated_level_dart.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar_details.dart'; - -class LevelBar extends StatefulWidget { - final LevelBarDetails details; - final ProgressBarDetails progressBarDetails; - - const LevelBar({ - super.key, - required this.details, - required this.progressBarDetails, - }); - - @override - LevelBarState createState() => LevelBarState(); -} - -class LevelBarState extends State { - double prevWidth = 0; - double get width => - widget.progressBarDetails.totalWidth * widget.details.widthMultiplier; - - @override - void didUpdateWidget(covariant LevelBar oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.details.currentPoints != widget.details.currentPoints) { - setState(() => prevWidth = width); - } - } - - @override - Widget build(BuildContext context) { - return AnimatedLevelBar( - height: widget.progressBarDetails.height, - beginWidth: prevWidth, - endWidth: width, - primaryColor: AppConfig.goldLight, - ); - } -} diff --git a/lib/pangea/analytics_summary/progress_bar/progress_bar.dart b/lib/pangea/analytics_summary/progress_bar/progress_bar.dart deleted file mode 100644 index a257c1a21..000000000 --- a/lib/pangea/analytics_summary/progress_bar/progress_bar.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/analytics_summary/progress_bar/level_bar.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar_background.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar_details.dart'; - -// Provide an order list of level indicators, each with it's color -// and stream. Also provide an overall width and pointsPerLevel. - -class ProgressBar extends StatefulWidget { - final List levelBars; - final double? height; - - const ProgressBar({ - super.key, - required this.levelBars, - this.height, - }); - - @override - ProgressBarState createState() => ProgressBarState(); -} - -class ProgressBarState extends State { - double width = 0; - void setWidth(double newWidth) { - if (width != newWidth) { - setState(() => width = newWidth); - } - } - - get progressBarDetails => ProgressBarDetails( - totalWidth: width, - borderColor: Theme.of(context).colorScheme.secondaryContainer, - height: widget.height ?? 14, - ); - - @override - Widget build(BuildContext context) { - return LayoutBuilder( - builder: (context, constraints) { - if (width != constraints.maxWidth) { - WidgetsBinding.instance.addPostFrameCallback( - (_) => setWidth(constraints.maxWidth), - ); - } - return Stack( - alignment: Alignment.centerLeft, - children: [ - ProgressBarBackground(details: progressBarDetails), - for (final levelBar in widget.levelBars) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 2), - child: LevelBar( - details: levelBar, - progressBarDetails: progressBarDetails, - ), - ), - ], - ); - }, - ); - } -} diff --git a/lib/pangea/analytics_summary/progress_bar/progress_bar_background.dart b/lib/pangea/analytics_summary/progress_bar/progress_bar_background.dart deleted file mode 100644 index a3e320d07..000000000 --- a/lib/pangea/analytics_summary/progress_bar/progress_bar_background.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_bar/progress_bar_details.dart'; - -class ProgressBarBackground extends StatelessWidget { - final ProgressBarDetails details; - - const ProgressBarBackground({ - super.key, - required this.details, - }); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 2), - child: Container( - height: details.height, - width: details.totalWidth, - decoration: BoxDecoration( - borderRadius: const BorderRadius.all( - Radius.circular(AppConfig.borderRadius), - ), - color: details.borderColor, - ), - ), - ); - } -} diff --git a/lib/pangea/analytics_summary/progress_bar/progress_bar_details.dart b/lib/pangea/analytics_summary/progress_bar/progress_bar_details.dart deleted file mode 100644 index a5196bf65..000000000 --- a/lib/pangea/analytics_summary/progress_bar/progress_bar_details.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:ui'; - -class LevelBarDetails { - final Color fillColor; - final int currentPoints; - final double widthMultiplier; - - const LevelBarDetails({ - required this.fillColor, - required this.currentPoints, - required this.widthMultiplier, - }); -} - -class ProgressBarDetails { - final double totalWidth; - final Color borderColor; - final double height; - - const ProgressBarDetails({ - required this.totalWidth, - required this.borderColor, - this.height = 14, - }); -} diff --git a/lib/pangea/analytics_summary/progress_indicators_enum.dart b/lib/pangea/analytics_summary/progress_indicators_enum.dart index b5b5dd10a..81f4da73d 100644 --- a/lib/pangea/analytics_summary/progress_indicators_enum.dart +++ b/lib/pangea/analytics_summary/progress_indicators_enum.dart @@ -25,9 +25,7 @@ enum ProgressIndicatorEnum { return null; } } -} -extension ProgressIndicatorsExtension on ProgressIndicatorEnum { IconData get icon { switch (this) { case ProgressIndicatorEnum.wordsUsed: @@ -71,4 +69,17 @@ extension ProgressIndicatorsExtension on ProgressIndicatorEnum { return ConstructTypeEnum.vocab; } } + + String get route { + switch (this) { + case level: + return 'level'; + case wordsUsed: + return ConstructTypeEnum.vocab.name; + case morphsUsed: + return ConstructTypeEnum.morph.name; + case activities: + return 'activities'; + } + } } diff --git a/lib/pangea/user/utils/p_login.dart b/lib/pangea/authentication/p_login.dart similarity index 94% rename from lib/pangea/user/utils/p_login.dart rename to lib/pangea/authentication/p_login.dart index ff65cbb42..b805ce72c 100644 --- a/lib/pangea/user/utils/p_login.dart +++ b/lib/pangea/authentication/p_login.dart @@ -6,7 +6,6 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -27,8 +26,6 @@ void pLoginAction({ ), onError: (e, s) { controller.setLoadingSignIn(false); - controller.setLoadingSSO(false, SSOProvider.apple); - controller.setLoadingSSO(false, SSOProvider.google); return e is MatrixException ? e.errorMessage : L10n.of(context).oopsSomethingWentWrong; diff --git a/lib/pangea/user/utils/p_logout.dart b/lib/pangea/authentication/p_logout.dart similarity index 92% rename from lib/pangea/user/utils/p_logout.dart rename to lib/pangea/authentication/p_logout.dart index 626d5f05e..fdc2a25a8 100644 --- a/lib/pangea/user/utils/p_logout.dart +++ b/lib/pangea/authentication/p_logout.dart @@ -31,8 +31,10 @@ void pLogoutAction( final client = Matrix.of(context).client; // before wiping out locally cached construct data, save it to the server - await MatrixState.pangeaController.putAnalytics - .sendLocalAnalyticsToAnalyticsRoom(onLogout: true); + await Matrix.of(context) + .analyticsDataService + .updateService + .sendLocalAnalyticsToAnalyticsRoom(); final redirect = client.onLoginStateChanged.stream .where((state) => state != LoginState.loggedIn) diff --git a/lib/pangea/bot/utils/bot_room_extension.dart b/lib/pangea/bot/utils/bot_room_extension.dart index eef48a933..b658235ed 100644 --- a/lib/pangea/bot/utils/bot_room_extension.dart +++ b/lib/pangea/bot/utils/bot_room_extension.dart @@ -1,9 +1,21 @@ import 'package:matrix/matrix.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; extension BotRoomExtension on Room { + bool get isBotDM { + if (isDirectChat && directChatMatrixID == BotName.byEnvironment) { + return true; + } + if (botOptions?.mode == BotMode.directChat) { + return true; + } + return false; + } + BotOptionsModel? get botOptions { if (isSpace) return null; final stateEvent = getState(PangeaEventTypes.botOptions); diff --git a/lib/pangea/bot/widgets/bot_chat_settings_dialog.dart b/lib/pangea/bot/widgets/bot_chat_settings_dialog.dart new file mode 100644 index 000000000..663b1f217 --- /dev/null +++ b/lib/pangea/bot/widgets/bot_chat_settings_dialog.dart @@ -0,0 +1,192 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import 'package:dropdown_button2/dropdown_button2.dart'; +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; +import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart'; +import 'package:fluffychat/pangea/common/widgets/dropdown_text_button.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/p_language_dropdown.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class BotChatSettingsDialog extends StatefulWidget { + final Room room; + + static Future show({ + required BuildContext context, + required Room room, + }) async { + final resp = await showAdaptiveDialog( + context: context, + barrierDismissible: true, + builder: (context) => BotChatSettingsDialog(room: room), + ); + if (resp == null) return; + await showFutureLoadingDialog( + context: context, + future: () => room.setBotOptions(resp), + ); + } + + const BotChatSettingsDialog({ + required this.room, + super.key, + }); + + @override + BotChatSettingsDialogState createState() => BotChatSettingsDialogState(); +} + +class BotChatSettingsDialogState extends State { + LanguageModel? _selectedLang; + LanguageLevelTypeEnum? _selectedLevel; + String? _selectedVoice; + + @override + void initState() { + final botSettings = widget.room.botOptions; + final activityPlan = _isActivity ? widget.room.activityPlan : null; + + _selectedLevel = activityPlan?.req.cefrLevel ?? botSettings?.languageLevel; + _selectedVoice = botSettings?.targetVoice; + final lang = + activityPlan?.req.targetLanguage ?? botSettings?.targetLanguage; + if (lang != null) { + _selectedLang = PLanguageStore.byLangCode(lang); + } + super.initState(); + } + + bool get _isActivity => widget.room.isActivitySession; + + void _setLanguage(LanguageModel? lang) => + setState(() => _selectedLang = lang); + void _setLevel(LanguageLevelTypeEnum? level) => + setState(() => _selectedLevel = level); + void _setVoice(String? voice) => setState(() => _selectedVoice = voice); + + BotOptionsModel get _updatedModel { + final botSettings = widget.room.botOptions ?? BotOptionsModel(); + if (_selectedLang != null) { + botSettings.targetLanguage = _selectedLang!.langCode; + } + if (_selectedLevel != null) { + botSettings.languageLevel = _selectedLevel!; + } + if (_selectedVoice != null) { + botSettings.targetVoice = _selectedVoice; + } + return botSettings; + } + + @override + Widget build(BuildContext context) { + return AlertDialog.adaptive( + title: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Center( + child: Text( + L10n.of(context).botSettings, + textAlign: TextAlign.center, + ), + ), + ), + content: Material( + type: MaterialType.transparency, + child: Container( + padding: const EdgeInsets.only(top: 16.0), + constraints: const BoxConstraints( + maxWidth: 256, + maxHeight: 300, + ), + child: SingleChildScrollView( + child: Column( + spacing: 16.0, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + if (_isActivity) + ListTile( + contentPadding: const EdgeInsets.all(0.0), + minLeadingWidth: 12.0, + leading: Icon( + Icons.info_outline, + size: 12.0, + color: Theme.of(context).disabledColor, + ), + title: Text( + L10n.of(context).activitySettingsOverrideWarning, + style: TextStyle( + color: Theme.of(context).disabledColor, + fontSize: 12.0, + ), + ), + ), + PLanguageDropdown( + onChange: _setLanguage, + initialLanguage: _selectedLang, + languages: + MatrixState.pangeaController.pLanguageStore.targetOptions, + isL2List: true, + decorationText: L10n.of(context).targetLanguage, + enabled: !_isActivity, + ), + LanguageLevelDropdown( + initialLevel: _selectedLevel, + onChanged: _setLevel, + enabled: !_isActivity, + ), + DropdownButtonFormField2( + customButton: _selectedVoice != null + ? CustomDropdownTextButton(text: _selectedVoice!) + : null, + menuItemStyleData: const MenuItemStyleData( + padding: EdgeInsets.symmetric( + vertical: 8.0, + horizontal: 16.0, + ), + ), + decoration: InputDecoration( + labelText: L10n.of(context).voice, + ), + isExpanded: true, + dropdownStyleData: DropdownStyleData( + maxHeight: kIsWeb ? 250 : null, + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.surfaceContainerHigh, + borderRadius: BorderRadius.circular(14.0), + ), + ), + items: (_selectedLang?.voices ?? []).map((voice) { + return DropdownMenuItem( + value: voice, + child: Text(voice), + ); + }).toList(), + onChanged: _setVoice, + value: _selectedVoice, + ), + ], + ), + ), + ), + ), + actions: [ + AdaptiveDialogAction( + bigButtons: true, + onPressed: () => Navigator.of(context).pop(_updatedModel), + child: Text(L10n.of(context).submit), + ), + ], + ); + } +} diff --git a/lib/pangea/bot/widgets/bot_settings_language_icon.dart b/lib/pangea/bot/widgets/bot_settings_language_icon.dart new file mode 100644 index 000000000..7a922454b --- /dev/null +++ b/lib/pangea/bot/widgets/bot_settings_language_icon.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_chat_settings_dialog.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; + +class BotSettingsLanguageIcon extends StatelessWidget { + final Room room; + + const BotSettingsLanguageIcon({ + super.key, + required this.room, + }); + + @override + Widget build(BuildContext context) { + String? langCode = room.botOptions?.targetLanguage; + if (room.isActivitySession && room.activityPlan != null) { + langCode = room.activityPlan!.req.targetLanguage; + } + if (langCode == null) { + return const SizedBox(); + } + + langCode = langCode.split('-').first; + return InkWell( + borderRadius: BorderRadius.circular(32.0), + onTap: room.isRoomAdmin + ? () => BotChatSettingsDialog.show( + context: context, + room: room, + ) + : null, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(16.0), + color: Theme.of(context).colorScheme.primaryContainer, + ), + padding: const EdgeInsets.symmetric(horizontal: 4.0), + child: Text( + langCode, + style: TextStyle( + fontSize: 10.0, + color: Theme.of(context).colorScheme.onPrimaryContainer, + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ), + ); + } +} diff --git a/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart b/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart index 06ad1fdb9..a88c25f34 100644 --- a/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart +++ b/lib/pangea/chat/utils/unlocked_morphs_snackbar.dart @@ -4,18 +4,17 @@ import 'dart:async'; 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'; import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/morphs/morph_icon.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/icon_rain.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ConstructNotificationUtil { @@ -167,8 +166,10 @@ class ConstructNotificationOverlayState } void _showDetails() { - context.go( - "/rooms/analytics/${ConstructTypeEnum.morph.string}/${widget.construct.string}", + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + view: ProgressIndicatorEnum.morphsUsed, + construct: widget.construct, ); } diff --git a/lib/pangea/chat/widgets/chat_floating_action_button.dart b/lib/pangea/chat/widgets/chat_floating_action_button.dart index cec4648f0..b7bf6a8cc 100644 --- a/lib/pangea/chat/widgets/chat_floating_action_button.dart +++ b/lib/pangea/chat/widgets/chat_floating_action_button.dart @@ -1,92 +1,49 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/has_error_button.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/language_permissions_warning_buttons.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_has_error_button.dart'; -class ChatFloatingActionButton extends StatefulWidget { +class ChatFloatingActionButton extends StatelessWidget { final ChatController controller; const ChatFloatingActionButton({ super.key, required this.controller, }); - @override - ChatFloatingActionButtonState createState() => - ChatFloatingActionButtonState(); -} - -class ChatFloatingActionButtonState extends State { - bool showPermissionsError = false; - StreamSubscription? _choreoSub; - - @override - void initState() { - final permissionsController = - widget.controller.pangeaController.permissionsController; - final itEnabled = permissionsController.isToolEnabled( - ToolSetting.interactiveTranslator, - widget.controller.room, - ); - final igcEnabled = permissionsController.isToolEnabled( - ToolSetting.interactiveGrammar, - widget.controller.room, - ); - showPermissionsError = !itEnabled || !igcEnabled; - debugPrint("showPermissionsError: $showPermissionsError"); - - if (showPermissionsError) { - Future.delayed( - const Duration(seconds: 5), - () { - if (mounted) setState(() => showPermissionsError = false); - }, - ); - } - - // Rebuild the widget each time there's an update from choreo (i.e., an error). - _choreoSub = widget.controller.choreographer.stateStream.stream.listen((_) { - setState(() {}); - }); - - super.initState(); - } - - @override - void dispose() { - _choreoSub?.cancel(); - super.dispose(); - } - @override Widget build(BuildContext context) { - if (widget.controller.selectedEvents.isNotEmpty) { + if (controller.selectedEvents.isNotEmpty) { return const SizedBox.shrink(); } - if (widget.controller.showScrollDownButton) { - return FloatingActionButton( - onPressed: widget.controller.scrollDown, - heroTag: null, - mini: true, - child: const Icon(Icons.arrow_downward_outlined), - ); - } - if (widget.controller.choreographer.errorService.error != null && - !widget.controller.choreographer.itController.willOpen) { - return ChoreographerHasErrorButton( - widget.controller.choreographer.errorService.error!, - widget.controller.choreographer, - ); - } - return showPermissionsError - ? LanguagePermissionsButtons( - choreographer: widget.controller.choreographer, - roomID: widget.controller.roomId, - ) - : const SizedBox.shrink(); + return ListenableBuilder( + listenable: Listenable.merge( + [ + controller.choreographer.errorService, + controller.choreographer.itController.open, + controller.scrollController, + ], + ), + builder: (context, _) { + if (controller.scrollController.hasClients && + controller.scrollController.position.pixels > 0) { + return FloatingActionButton( + onPressed: controller.scrollDown, + heroTag: null, + mini: true, + child: const Icon(Icons.arrow_downward_outlined), + ); + } + + if (controller.choreographer.errorService.error != null && + !controller.choreographer.itController.open.value) { + return ChoreographerHasErrorButton( + controller.choreographer.errorService.error!, + controller.choreographer, + ); + } + return const SizedBox.shrink(); + }, + ); } } diff --git a/lib/pangea/chat/widgets/chat_input_bar.dart b/lib/pangea/chat/widgets/chat_input_bar.dart index fbc0b0735..78a0cdf4f 100644 --- a/lib/pangea/chat/widgets/chat_input_bar.dart +++ b/lib/pangea/chat/widgets/chat_input_bar.dart @@ -1,16 +1,17 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/chat_emoji_picker.dart'; import 'package:fluffychat/pages/chat/reply_display.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_role_tooltip.dart'; import 'package:fluffychat/pangea/chat/widgets/pangea_chat_input_row.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/it_bar.dart'; +import 'package:fluffychat/pangea/choreographer/it/it_bar.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -class ChatInputBar extends StatefulWidget { +class ChatInputBar extends StatelessWidget { final ChatController controller; final double padding; @@ -20,94 +21,107 @@ class ChatInputBar extends StatefulWidget { super.key, }); - @override - State createState() => ChatInputBarState(); -} - -class ChatInputBarState extends State { - Timer? _debounceTimer; - - void _updateHeight() { - _debounceTimer = Timer(const Duration(milliseconds: 100), () { - final renderBox = context.findRenderObject() as RenderBox?; - if (renderBox == null || !renderBox.hasSize) return; - widget.controller.updateInputBarHeight(renderBox.size.height); - }); - } - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) => _updateHeight()); - } - - @override - void dispose() { - _debounceTimer?.cancel(); - super.dispose(); - } - @override Widget build(BuildContext context) { - return NotificationListener( - onNotification: (SizeChangedLayoutNotification notification) { - WidgetsBinding.instance.addPostFrameCallback((_) => _updateHeight()); - return true; - }, - child: SizeChangedLayoutNotifier( - child: Column( - children: [ - ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: FluffyThemes.maxTimelineWidth, - ), - child: ActivityRoleTooltip( - choreographer: widget.controller.choreographer, - ), - ), - Container( - padding: EdgeInsets.only( - bottom: widget.padding, - left: widget.padding, - right: widget.padding, - ), - constraints: const BoxConstraints( - maxWidth: FluffyThemes.maxTimelineWidth, - ), - alignment: Alignment.center, - child: Material( - clipBehavior: Clip.hardEdge, - type: MaterialType.transparency, - borderRadius: const BorderRadius.all( - Radius.circular(24), - ), - child: Column( - children: [ - ITBar(choreographer: widget.controller.choreographer), - DecoratedBox( - decoration: BoxDecoration( - color: Theme.of(context) - .colorScheme - .surfaceContainerHighest, - ), - child: Column( - children: [ - if (!widget.controller.obscureText) - ReplyDisplay(widget.controller), - PangeaChatInputRow( - controller: widget.controller, - ), - ChatEmojiPicker(widget.controller), - ], - ), + final theme = Theme.of(context); + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + ValueListenableBuilder( + valueListenable: controller.choreographer.itController.open, + builder: (context, open, __) { + return open + ? InstructionsInlineTooltip( + instructionsEnum: InstructionsEnum.clickBestOption, + animate: false, + padding: EdgeInsets.only( + left: 16.0, + right: 16.0, + top: FluffyThemes.isColumnMode(context) ? 16.0 : 8.0, ), - ], - ), - ), - ), - ], + ) + : ActivityRoleTooltip( + room: controller.room, + hide: controller.choreographer.itController.open, + ); + }, ), - ), + Container( + margin: EdgeInsets.all( + FluffyThemes.isColumnMode(context) ? 16.0 : 8.0, + ), + constraints: const BoxConstraints( + maxWidth: FluffyThemes.maxTimelineWidth, + ), + alignment: Alignment.center, + child: Material( + clipBehavior: Clip.hardEdge, + color: theme.colorScheme.surfaceContainerHigh, + borderRadius: const BorderRadius.all( + Radius.circular(24), + ), + child: controller.room.isAbandonedDMRoom == true + ? _AbandonedDMContent(controller: controller) + : Column( + mainAxisSize: MainAxisSize.min, + children: [ + ITBar(choreographer: controller.choreographer), + ReplyDisplay(controller), + PangeaChatInputRow( + controller: controller, + ), + ChatEmojiPicker(controller), + ], + ), + ), + ), + ], + ); + } +} + +class _AbandonedDMContent extends StatelessWidget { + final ChatController controller; + + const _AbandonedDMContent({ + required this.controller, + }); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + TextButton.icon( + style: TextButton.styleFrom( + padding: const EdgeInsets.all( + 16, + ), + foregroundColor: Theme.of(context).colorScheme.error, + ), + icon: const Icon( + Icons.archive_outlined, + ), + onPressed: controller.leaveChat, + label: Text( + L10n.of(context).leave, + ), + ), + TextButton.icon( + style: TextButton.styleFrom( + padding: const EdgeInsets.all( + 16, + ), + ), + icon: const Icon( + Icons.forum_outlined, + ), + onPressed: controller.recreateChat, + label: Text( + L10n.of(context).reopenChat, + ), + ), + ], ); } } diff --git a/lib/pangea/chat/widgets/chat_view_background.dart b/lib/pangea/chat/widgets/chat_view_background.dart index ad9def96c..f74c79278 100644 --- a/lib/pangea/chat/widgets/chat_view_background.dart +++ b/lib/pangea/chat/widgets/chat_view_background.dart @@ -1,58 +1,38 @@ -import 'dart:async'; import 'dart:ui'; import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; - -class ChatViewBackground extends StatefulWidget { - final Choreographer choreographer; - const ChatViewBackground(this.choreographer, {super.key}); - - @override - ChatViewBackgroundState createState() => ChatViewBackgroundState(); -} - -class ChatViewBackgroundState extends State { - StreamSubscription? _choreoSub; - - @override - void initState() { - // Rebuild the widget each time there's an update from choreo - _choreoSub = widget.choreographer.stateStream.stream.listen((_) { - setState(() {}); - }); - super.initState(); - } - - @override - void dispose() { - _choreoSub?.cancel(); - super.dispose(); - } +class ChatViewBackground extends StatelessWidget { + final ValueNotifier visible; + const ChatViewBackground(this.visible, {super.key}); @override Widget build(BuildContext context) { - return widget.choreographer.itController.willOpen - ? Positioned( - left: 0, - right: 0, - top: 0, - bottom: 0, - child: Material( - borderOnForeground: false, - color: const Color.fromRGBO(0, 0, 0, 1).withAlpha(150), - clipBehavior: Clip.antiAlias, - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), - child: Container( - height: double.infinity, - width: double.infinity, - color: Colors.transparent, + return ValueListenableBuilder( + valueListenable: visible, + builder: (context, value, _) { + return value + ? Positioned( + left: 0, + right: 0, + top: 0, + bottom: 0, + child: Material( + borderOnForeground: false, + color: const Color.fromRGBO(0, 0, 0, 1).withAlpha(150), + clipBehavior: Clip.antiAlias, + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), + child: Container( + height: double.infinity, + width: double.infinity, + color: Colors.transparent, + ), + ), ), - ), - ), - ) - : const SizedBox.shrink(); + ) + : const SizedBox.shrink(); + }, + ); } } diff --git a/lib/pangea/toolbar/widgets/icon_rain.dart b/lib/pangea/chat/widgets/icon_rain.dart similarity index 100% rename from lib/pangea/toolbar/widgets/icon_rain.dart rename to lib/pangea/chat/widgets/icon_rain.dart diff --git a/lib/pangea/chat/widgets/pangea_chat_input_row.dart b/lib/pangea/chat/widgets/pangea_chat_input_row.dart index 2419c466d..fdff8a030 100644 --- a/lib/pangea/chat/widgets/pangea_chat_input_row.dart +++ b/lib/pangea/chat/widgets/pangea_chat_input_row.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; import 'package:animations/animations.dart'; @@ -9,13 +7,16 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/input_bar.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/send_button.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/start_igc_button.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_send_button.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; +import 'package:fluffychat/pangea/choreographer/igc/start_igc_button.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/matrix.dart'; -class PangeaChatInputRow extends StatefulWidget { +class PangeaChatInputRow extends StatelessWidget { final ChatController controller; const PangeaChatInputRow({ @@ -23,63 +24,23 @@ class PangeaChatInputRow extends StatefulWidget { super.key, }); - @override - State createState() => PangeaChatInputRowState(); -} - -class PangeaChatInputRowState extends State { - StreamSubscription? _choreoSub; - - @override - void initState() { - // Rebuild the widget each time there's an update from choreo - _choreoSub = widget.controller.choreographer.stateStream.stream.listen((_) { - setState(() {}); - }); - super.initState(); - } - - @override - void dispose() { - _choreoSub?.cancel(); - super.dispose(); - } - - ChatController get _controller => widget.controller; - LanguageModel? get activel1 => - _controller.pangeaController.languageController.activeL1Model(); + controller.pangeaController.userController.userL1; LanguageModel? get activel2 => - _controller.pangeaController.languageController.activeL2Model(); - - String hintText() { - if (_controller.choreographer.itController.willOpen) { - return L10n.of(context).buildTranslation; - } - return activel1 != null && - activel2 != null && - activel1!.langCode != LanguageKeys.unknownLanguage && - activel2!.langCode != LanguageKeys.unknownLanguage - ? L10n.of(context).writeAMessageLangCodes( - activel1!.displayName, - activel2!.displayName, - ) - : L10n.of(context).writeAMessage; - } + controller.pangeaController.userController.userL2; @override Widget build(BuildContext context) { final theme = Theme.of(context); const height = 48.0; - - if (widget.controller.selectMode) { - return const SizedBox(height: height); - } + final state = controller.choreographer.assistanceState; return Column( children: [ CompositedTransformTarget( - link: _controller.choreographer.inputLayerLinkAndKey.link, + link: MatrixState.pAnyState + .layerLinkAndKey(ChoreoConstants.inputTransformTargetKey) + .link, child: Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all( @@ -87,90 +48,104 @@ class PangeaChatInputRowState extends State { ), ), child: Row( - key: _controller.choreographer.inputLayerLinkAndKey.key, + key: MatrixState.pAnyState + .layerLinkAndKey(ChoreoConstants.inputTransformTargetKey) + .key, crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const SizedBox(width: 4), - AnimatedContainer( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - height: height, - width: _controller.sendController.text.isEmpty ? height : 0, - alignment: Alignment.center, - clipBehavior: Clip.hardEdge, - decoration: const BoxDecoration(), - child: PopupMenuButton( - useRootNavigator: true, - icon: const Icon(Icons.add_outlined), - onSelected: _controller.onAddPopupMenuButtonSelected, - itemBuilder: (BuildContext context) => - >[ - PopupMenuItem( - value: 'file', - child: ListTile( - leading: const CircleAvatar( - backgroundColor: Colors.green, - foregroundColor: Colors.white, - child: Icon(Icons.attachment_outlined), + ValueListenableBuilder( + valueListenable: controller.sendController, + builder: (context, text, __) { + final isBotDM = controller.room.isBotDM; + return AnimatedContainer( + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + height: height, + width: text.text.isEmpty && + !controller.choreographer.itController.open.value + ? height + : 0, + alignment: Alignment.center, + clipBehavior: Clip.hardEdge, + decoration: const BoxDecoration(), + child: PopupMenuButton( + useRootNavigator: true, + icon: const Icon(Icons.add_outlined), + onSelected: controller.onAddPopupMenuButtonSelected, + itemBuilder: (BuildContext context) => + >[ + if (!isBotDM) + PopupMenuItem( + value: 'file', + child: ListTile( + leading: const CircleAvatar( + backgroundColor: Colors.green, + foregroundColor: Colors.white, + child: Icon(Icons.attachment_outlined), + ), + title: Text(L10n.of(context).sendFile), + contentPadding: const EdgeInsets.all(0), + ), + ), + PopupMenuItem( + value: 'image', + child: ListTile( + leading: const CircleAvatar( + backgroundColor: Colors.blue, + foregroundColor: Colors.white, + child: Icon(Icons.image_outlined), + ), + title: Text(L10n.of(context).sendImage), + contentPadding: const EdgeInsets.all(0), + ), ), - title: Text(L10n.of(context).sendFile), - contentPadding: const EdgeInsets.all(0), - ), + if (PlatformInfos.isMobile) + PopupMenuItem( + value: 'camera', + child: ListTile( + leading: const CircleAvatar( + backgroundColor: Colors.purple, + foregroundColor: Colors.white, + child: Icon(Icons.camera_alt_outlined), + ), + title: Text(L10n.of(context).openCamera), + contentPadding: const EdgeInsets.all(0), + ), + ), + if (!isBotDM) + if (PlatformInfos.isMobile) + PopupMenuItem( + value: 'camera-video', + child: ListTile( + leading: const CircleAvatar( + backgroundColor: Colors.red, + foregroundColor: Colors.white, + child: Icon(Icons.videocam_outlined), + ), + title: Text(L10n.of(context).openVideoCamera), + contentPadding: const EdgeInsets.all(0), + ), + ), + if (!isBotDM) + if (PlatformInfos.isMobile) + PopupMenuItem( + value: 'location', + child: ListTile( + leading: const CircleAvatar( + backgroundColor: Colors.brown, + foregroundColor: Colors.white, + child: Icon(Icons.gps_fixed_outlined), + ), + title: Text(L10n.of(context).shareLocation), + contentPadding: const EdgeInsets.all(0), + ), + ), + ], ), - PopupMenuItem( - value: 'image', - child: ListTile( - leading: const CircleAvatar( - backgroundColor: Colors.blue, - foregroundColor: Colors.white, - child: Icon(Icons.image_outlined), - ), - title: Text(L10n.of(context).sendImage), - contentPadding: const EdgeInsets.all(0), - ), - ), - if (PlatformInfos.isMobile) - PopupMenuItem( - value: 'camera', - child: ListTile( - leading: const CircleAvatar( - backgroundColor: Colors.purple, - foregroundColor: Colors.white, - child: Icon(Icons.camera_alt_outlined), - ), - title: Text(L10n.of(context).openCamera), - contentPadding: const EdgeInsets.all(0), - ), - ), - if (PlatformInfos.isMobile) - PopupMenuItem( - value: 'camera-video', - child: ListTile( - leading: const CircleAvatar( - backgroundColor: Colors.red, - foregroundColor: Colors.white, - child: Icon(Icons.videocam_outlined), - ), - title: Text(L10n.of(context).openVideoCamera), - contentPadding: const EdgeInsets.all(0), - ), - ), - if (PlatformInfos.isMobile) - PopupMenuItem( - value: 'location', - child: ListTile( - leading: const CircleAvatar( - backgroundColor: Colors.brown, - foregroundColor: Colors.white, - child: Icon(Icons.gps_fixed_outlined), - ), - title: Text(L10n.of(context).shareLocation), - contentPadding: const EdgeInsets.all(0), - ), - ), - ], - ), + ); + }, ), if (FluffyThemes.isColumnMode(context)) Container( @@ -194,20 +169,20 @@ class PangeaChatInputRowState extends State { ); }, child: Icon( - _controller.showEmojiPicker + controller.showEmojiPicker ? Icons.keyboard : Icons.add_reaction_outlined, - key: ValueKey(_controller.showEmojiPicker), + key: ValueKey(controller.showEmojiPicker), ), ), - onPressed: _controller.emojiPickerAction, + onPressed: controller.emojiPickerAction, ), ), Expanded( child: Padding( padding: const EdgeInsets.symmetric(vertical: 0.0), child: InputBar( - room: _controller.room, + room: controller.room, minLines: 1, maxLines: 8, autofocus: !PlatformInfos.isMobile, @@ -216,11 +191,10 @@ class PangeaChatInputRowState extends State { PlatformInfos.isMobile ? TextInputAction.send : null, - onSubmitted: (String value) => - _controller.onInputBarSubmitted(value, context), - onSubmitImage: _controller.sendImageFromClipBoard, - focusNode: _controller.inputFocus, - controller: _controller.sendController, + onSubmitted: (_) => controller.onInputBarSubmitted(), + onSubmitImage: controller.sendImageFromClipBoard, + focusNode: controller.inputFocus, + controller: controller.sendController, decoration: const InputDecoration( contentPadding: EdgeInsets.only( left: 6.0, @@ -234,34 +208,48 @@ class PangeaChatInputRowState extends State { enabledBorder: InputBorder.none, filled: false, ), - onChanged: _controller.onInputBarChanged, - hintText: hintText(), + onChanged: controller.onInputBarChanged, + choreographer: controller.choreographer, + showNextMatch: controller.showNextMatch, ), ), ), StartIGCButton( - controller: _controller, + key: ValueKey(controller.choreographer), + onPressed: () => + controller.onRequestWritingAssistance(manual: true), + choreographer: controller.choreographer, + initialState: state, + initialForegroundColor: state.stateColor(context), + initialBackgroundColor: state.backgroundColor(context), ), - Container( - height: height, - width: height, - alignment: Alignment.center, - child: PlatformInfos.platformCanRecord && - _controller.sendController.text.isEmpty && - !_controller.choreographer.itController.willOpen - ? FloatingActionButton.small( - tooltip: L10n.of(context).voiceMessage, - onPressed: _controller.voiceMessageAction, - elevation: 0, - heroTag: null, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(height), - ), - backgroundColor: theme.bubbleColor, - foregroundColor: theme.onBubbleColor, - child: const Icon(Icons.mic_none_outlined), - ) - : ChoreographerSendButton(controller: _controller), + ValueListenableBuilder( + valueListenable: controller.sendController, + builder: (context, text, __) { + return Container( + height: height, + width: height, + alignment: Alignment.center, + child: PlatformInfos.platformCanRecord && + text.text.isEmpty && + !controller.choreographer.itController.open.value + ? FloatingActionButton.small( + tooltip: L10n.of(context).voiceMessage, + onPressed: controller.voiceMessageAction, + elevation: 0, + heroTag: null, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(height), + ), + backgroundColor: theme.bubbleColor, + foregroundColor: theme.onBubbleColor, + child: const Icon(Icons.mic_none_outlined), + ) + : ChoreographerSendButton( + controller: controller, + ), + ); + }, ), ], ), diff --git a/lib/pangea/chat/widgets/request_regeneration_button.dart b/lib/pangea/chat/widgets/request_regeneration_button.dart new file mode 100644 index 000000000..eaa4cc56b --- /dev/null +++ b/lib/pangea/chat/widgets/request_regeneration_button.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; + +class RequestRegenerationButton extends StatelessWidget { + final Color textColor; + final VoidCallback onPressed; + + const RequestRegenerationButton({ + super.key, + required this.textColor, + required this.onPressed, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only( + bottom: 8.0, + left: 16.0, + right: 16.0, + ), + child: TextButton( + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: const Size( + 0, + 0, + ), + ), + onPressed: onPressed, + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4.0, + children: [ + Icon( + Icons.refresh, + color: textColor.withAlpha( + 164, + ), + size: 14, + ), + Text( + L10n.of( + context, + ).requestRegeneration, + style: TextStyle( + color: textColor.withAlpha( + 164, + ), + fontSize: 11, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart index 3557806d5..aad62e677 100644 --- a/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart +++ b/lib/pangea/chat_list/utils/chat_list_handle_space_tap.dart @@ -5,43 +5,85 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../common/utils/error_handler.dart'; Future showInviteDialog(Room room, BuildContext context) async { if (room.membership != Membership.invite) return; - final acceptInvite = await showOkCancelAlertDialog( - context: context, - title: L10n.of(context).youreInvited, - message: room.isSpace - ? L10n.of(context).invitedToSpace(room.name, room.creatorId ?? "???") - : L10n.of(context).invitedToChat(room.name, room.creatorId ?? "???"), - okLabel: L10n.of(context).accept, - cancelLabel: L10n.of(context).decline, - ); - final resp = await showFutureLoadingDialog( + final theme = Theme.of(context); + final action = await showAdaptiveDialog( + barrierDismissible: true, + context: context, + builder: (context) => AlertDialog.adaptive( + title: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Center( + child: Text( + L10n.of(context).youreInvited, + textAlign: TextAlign.center, + ), + ), + ), + content: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256, maxHeight: 256), + child: Text( + room.isSpace + ? L10n.of(context) + .invitedToSpace(room.name, room.creatorId ?? "???") + : L10n.of(context) + .invitedToChat(room.name, room.creatorId ?? "???"), + textAlign: TextAlign.center, + ), + ), + actions: [ + AdaptiveDialogAction( + onPressed: () => + Navigator.of(context).pop(CourseInviteAction.decline), + bigButtons: true, + child: Text( + L10n.of(context).decline, + style: TextStyle(color: theme.colorScheme.error), + ), + ), + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(CourseInviteAction.accept), + bigButtons: true, + child: Text(L10n.of(context).accept), + ), + ], + ), + ); + switch (action) { + case null: + return; + case CourseInviteAction.accept: + break; + case CourseInviteAction.decline: + await room.leave(); + return; + } + + final joinResult = await showFutureLoadingDialog( context: context, future: () async { - if (acceptInvite == OkCancelResult.ok) { - await room.join(); - context.go( - room.isSpace - ? "/rooms/spaces/${room.id}/details" - : "/rooms/${room.id}", - ); - return room.id; - } else if (acceptInvite == OkCancelResult.cancel) { - await room.leave(); - } + await room.join(); }, + exceptionContext: ExceptionContext.joinRoom, ); + if (joinResult.error != null) return; - if (!resp.isError && resp.result is String) { - context.go("/rooms/spaces/${resp.result}/details"); + if (room.membership != Membership.join) { + await room.client.waitForRoomInSync(room.id, join: true); } + + context.go( + room.isSpace ? "/rooms/spaces/${room.id}/details" : "/rooms/${room.id}", + ); } // ignore: curly_braces_in_flow_control_structures @@ -50,9 +92,7 @@ void chatListHandleSpaceTap( Room space, ) { void setActiveSpaceAndCloseChat() { - // push to refresh space details - // https://github.com/pangeachat/client/issues/4292#issuecomment-3426794043 - context.push("/rooms/spaces/${space.id}/details"); + context.go("/rooms/spaces/${space.id}/details"); } void autoJoin(Room space) { @@ -77,8 +117,7 @@ void chatListHandleSpaceTap( (element) => element.isSpace && element.membership == Membership.join, ); - final justInputtedCode = - MatrixState.pangeaController.spaceCodeController.justInputtedCode; + final justInputtedCode = SpaceCodeRepo.recentCode; if (rooms.any((s) => s.spaceChildren.any((c) => c.roomId == space.id))) { autoJoin(space); } else if (justInputtedCode != null && @@ -100,3 +139,5 @@ void chatListHandleSpaceTap( break; } } + +enum CourseInviteAction { accept, decline } diff --git a/lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart b/lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart index 0441a3a7c..3b86069b6 100644 --- a/lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart +++ b/lib/pangea/chat_list/utils/get_chat_list_item_subtitle.dart @@ -7,7 +7,6 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/course_chats/open_roles_indicator.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../../utils/matrix_sdk_extensions/matrix_locals.dart'; @@ -22,36 +21,25 @@ class ChatListItemSubtitle extends StatelessWidget { }); bool _showPangeaContent(Event event) { - return MatrixState.pangeaController.languageController.languagesSet && + return MatrixState.pangeaController.userController.languagesSet && !event.redacted && event.type == EventTypes.Message && event.messageType == MessageTypes.Text && !(AppConfig.renderHtml && !event.redacted && event.isRichMessage); } - Future _getPangeaMessageEvent( + Future _getPangeaMessageEvent( final Event event, ) async { final Timeline timeline = event.room.timeline != null ? event.room.timeline! : await event.room.getTimeline(); - final pangeaMessageEvent = PangeaMessageEvent( + return PangeaMessageEvent( event: event, timeline: timeline, ownMessage: event.senderId == event.room.client.userID, ); - - final tokens = - await pangeaMessageEvent.messageDisplayRepresentation?.tokensGlobal( - event.senderId, - event.originServerTs, - ); - - return MessageEventAndTokens( - event: pangeaMessageEvent, - tokens: tokens, - ); } @override @@ -108,12 +96,11 @@ class ChatListItemSubtitle extends StatelessWidget { ); } - return FutureBuilder( + return FutureBuilder( future: _getPangeaMessageEvent(event), builder: (context, snapshot) { if (snapshot.hasData) { - final messageEventAndTokens = snapshot.data as MessageEventAndTokens; - final pangeaMessageEvent = messageEventAndTokens.event; + final pangeaMessageEvent = snapshot.data!; return Text( pangeaMessageEvent.messageDisplayText, style: style, @@ -132,13 +119,3 @@ class ChatListItemSubtitle extends StatelessWidget { ); } } - -class MessageEventAndTokens { - final PangeaMessageEvent event; - final List? tokens; - - MessageEventAndTokens({ - required this.event, - required this.tokens, - }); -} diff --git a/lib/pangea/public_spaces/public_room_bottom_sheet.dart b/lib/pangea/chat_list/widgets/public_room_bottom_sheet.dart similarity index 97% rename from lib/pangea/public_spaces/public_room_bottom_sheet.dart rename to lib/pangea/chat_list/widgets/public_room_bottom_sheet.dart index bbd9b5904..65d8587a8 100644 --- a/lib/pangea/public_spaces/public_room_bottom_sheet.dart +++ b/lib/pangea/chat_list/widgets/public_room_bottom_sheet.dart @@ -7,6 +7,8 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/extensions/pangea_rooms_chunk_extension.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_controller.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -83,8 +85,7 @@ class PublicRoomBottomSheetState extends State { bool get _isKnockRoom => widget.chunk?.joinRule == 'knock'; Future _joinWithCode() async { - final resp = await MatrixState.pangeaController.spaceCodeController - .joinSpaceWithCode( + final resp = await SpaceCodeController.joinSpaceWithCode( context, _codeController.text, notFoundError: L10n.of(context).notTheCodeError, @@ -96,7 +97,11 @@ class PublicRoomBottomSheetState extends State { void _goToRoom(String roomID) { if (chunk?.roomType != 'm.space' && !client.getRoomById(roomID)!.isSpace) { - outerContext.go("/rooms/$roomID"); + NavigationUtil.goToSpaceRoute( + roomID, + [], + context, + ); } else { context.go('/rooms/spaces/$roomID/details'); } diff --git a/lib/pangea/chat_settings/models/bot_options_model.dart b/lib/pangea/chat_settings/models/bot_options_model.dart index 0bc2779f9..4108890d4 100644 --- a/lib/pangea/chat_settings/models/bot_options_model.dart +++ b/lib/pangea/chat_settings/models/bot_options_model.dart @@ -5,7 +5,7 @@ import 'package:flutter/foundation.dart'; import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; class BotOptionsModel { LanguageLevelTypeEnum languageLevel; @@ -63,9 +63,9 @@ class BotOptionsModel { // General Bot Options ////////////////////////////////////////////////////////////////////////// languageLevel: json[ModelKey.languageLevel] is int - ? LanguageLevelTypeEnumExtension.fromInt(json[ModelKey.languageLevel]) + ? LanguageLevelTypeEnum.fromInt(json[ModelKey.languageLevel]) : json[ModelKey.languageLevel] is String - ? LanguageLevelTypeEnumExtension.fromString( + ? LanguageLevelTypeEnum.fromString( json[ModelKey.languageLevel], ) : LanguageLevelTypeEnum.a1, diff --git a/lib/pangea/chat_settings/pages/chat_details_button_row.dart b/lib/pangea/chat_settings/pages/chat_details_button_row.dart index f2d2dd6f5..731032817 100644 --- a/lib/pangea/chat_settings/pages/chat_details_button_row.dart +++ b/lib/pangea/chat_settings/pages/chat_details_button_row.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; @@ -13,6 +12,7 @@ import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart import 'package:fluffychat/pangea/chat_settings/pages/room_details_buttons.dart'; import 'package:fluffychat/pangea/chat_settings/utils/delete_room.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.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'; @@ -70,8 +70,15 @@ class ChatDetailsButtonRowState extends State { ButtonDetails( title: l10n.permissions, icon: const Icon(Icons.edit_attributes_outlined, size: 30.0), - onPressed: () => context.go('/rooms/${room.id}/details/permissions'), - enabled: room.isRoomAdmin && !room.isDirectChat, + onPressed: () { + NavigationUtil.goToSpaceRoute( + room.id, + ['details', 'permissions'], + context, + ); + }, + enabled: room.isRoomAdmin, + visible: !room.isDirectChat, showInMainView: false, ), ButtonDetails( @@ -101,14 +108,22 @@ class ChatDetailsButtonRowState extends State { if (room.getParticipants([Membership.knock]).isEmpty) { filter = room.pangeaSpaceParents.isNotEmpty ? 'space' : 'contacts'; } - context.go('/rooms/${room.id}/details/invite?filter=$filter'); + NavigationUtil.goToSpaceRoute( + room.id, + ['details', 'invite'], + context, + queryParams: { + 'filter': filter, + }, + ); }, - enabled: room.canInvite && !room.isDirectChat, + enabled: room.canInvite, + visible: !room.isDirectChat, ), ButtonDetails( title: l10n.download, icon: const Icon(Icons.download_outlined, size: 30.0), - onPressed: widget.controller.downloadChatAction, + onPressed: () => widget.controller.downloadChatAction(room.id, context), visible: kIsWeb, enabled: room.ownPowerLevel >= 50, showInMainView: false, @@ -117,8 +132,8 @@ class ChatDetailsButtonRowState extends State { title: l10n.chatCapacity, icon: const Icon(Icons.reduce_capacity, size: 30.0), onPressed: widget.controller.setRoomCapacity, - visible: !room.showActivityChatUI, - enabled: !room.isDirectChat && room.canSendDefaultStates, + visible: !room.showActivityChatUI && !room.isDirectChat, + enabled: room.canSendDefaultStates, showInMainView: false, ), ButtonDetails( @@ -126,7 +141,6 @@ class ChatDetailsButtonRowState extends State { icon: const Icon(Icons.logout_outlined, size: 30.0), onPressed: () async { final confirmed = await showOkCancelAlertDialog( - useRootNavigator: false, context: context, title: L10n.of(context).areYouSure, okLabel: L10n.of(context).leave, @@ -140,7 +154,7 @@ class ChatDetailsButtonRowState extends State { future: room.leave, ); if (!resp.isError) { - context.go("/rooms"); + NavigationUtil.goToSpaceRoute(null, [], context); } }, enabled: room.membership == Membership.join, @@ -165,9 +179,10 @@ class ChatDetailsButtonRowState extends State { future: room.delete, ); if (resp.isError) return; - context.go("/rooms"); + NavigationUtil.goToSpaceRoute(null, [], context); }, - enabled: room.isRoomAdmin && !room.isDirectChat, + enabled: room.isRoomAdmin, + visible: !room.isDirectChat, showInMainView: false, ), ]; @@ -204,6 +219,16 @@ class ChatDetailsButtonRowState extends State { return const SizedBox(); } + if (otherButtons.length == 1) { + return Expanded( + child: RoomDetailsButton( + mini: mini, + buttonDetails: otherButtons.first, + height: mini ? _miniButtonWidth : _buttonHeight, + ), + ); + } + return Expanded( child: PopupMenuButton( useRootNavigator: true, diff --git a/lib/pangea/chat_settings/pages/chat_details_content.dart b/lib/pangea/chat_settings/pages/chat_details_content.dart index 736fa6383..b97eb0cfb 100644 --- a/lib/pangea/chat_settings/pages/chat_details_content.dart +++ b/lib/pangea/chat_settings/pages/chat_details_content.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -9,6 +8,9 @@ import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/pangea/chat_settings/pages/chat_details_button_row.dart'; import 'package:fluffychat/pangea/chat_settings/pages/room_participants_widget.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/fluffy_share.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/url_launcher.dart'; @@ -117,8 +119,13 @@ class ChatDetailsContent extends StatelessWidget { TextButton.icon( onPressed: room.isDirectChat || !room.canInvite ? null - : () => context.push( - '/rooms/${controller.roomId}/details/invite?filter=participants', + : () => NavigationUtil.goToSpaceRoute( + controller.roomId, + ['details', 'invite'], + context, + queryParams: { + 'filter': 'participants', + }, ), icon: const Icon( Icons.group_outlined, @@ -199,7 +206,17 @@ class ChatDetailsContent extends StatelessWidget { return Padding( padding: const EdgeInsets.all(16.0), - child: RoomParticipantsSection(room: room), + child: Column( + children: [ + const InstructionsInlineTooltip( + instructionsEnum: InstructionsEnum.chatParticipantTooltip, + padding: EdgeInsets.only( + bottom: 16.0, + ), + ), + RoomParticipantsSection(room: room), + ], + ), ); }, ); diff --git a/lib/pangea/chat_settings/pages/edit_course.dart b/lib/pangea/chat_settings/pages/edit_course.dart index 43ef6c657..fea6057cf 100644 --- a/lib/pangea/chat_settings/pages/edit_course.dart +++ b/lib/pangea/chat_settings/pages/edit_course.dart @@ -10,6 +10,7 @@ import 'package:fluffychat/pangea/course_plans/map_clipper.dart'; import 'package:fluffychat/utils/file_selector.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart'; +import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -102,6 +103,10 @@ class EditCourseController extends State { ), ); } + + if (!resp.isError) { + Navigator.of(context).pop(); + } } Future _setAvatarAction() async { @@ -204,12 +209,13 @@ class EditCourseController extends State { width: 200.0, borderRadius: BorderRadius.circular(0.0), - replacement: Container( - width: 200.0, - height: 200.0, - color: Theme.of(context) - .colorScheme - .surfaceContainerHighest, + replacement: Avatar( + name: _room?.name, + borderRadius: + BorderRadius.circular( + 0.0, + ), + size: 200.0, ), ), ), diff --git a/lib/pangea/chat_settings/pages/pangea_invitation_selection.dart b/lib/pangea/chat_settings/pages/pangea_invitation_selection.dart index e02d2c048..abcbf06c4 100644 --- a/lib/pangea/chat_settings/pages/pangea_invitation_selection.dart +++ b/lib/pangea/chat_settings/pages/pangea_invitation_selection.dart @@ -409,7 +409,11 @@ class PangeaInvitationSelectionController ScaffoldMessenger.of(context).hideCurrentSnackBar(); ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text(L10n.of(context).contactHasBeenInvitedToTheChat), + content: Text( + room.isSpace + ? L10n.of(context).contactHasBeenInvitedToTheCourse + : L10n.of(context).contactHasBeenInvitedToTheChat, + ), ), ); } diff --git a/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart b/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart index d1cdfc95a..d4515a353 100644 --- a/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart +++ b/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart @@ -4,7 +4,6 @@ import 'package:flutter/services.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:collection/collection.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:universal_html/html.dart' as html; @@ -16,7 +15,8 @@ import 'package:fluffychat/pangea/chat_settings/pages/pangea_invitation_selectio import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/course_plans/map_clipper.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -51,12 +51,12 @@ class PangeaInvitationSelectionView extends StatelessWidget { style: ElevatedButton.styleFrom( backgroundColor: theme.colorScheme.primaryContainer, padding: const EdgeInsets.symmetric( - horizontal: 24, + horizontal: 20, vertical: 16, ), ), child: Row( - spacing: 34.0, + spacing: 12.0, mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( @@ -72,9 +72,7 @@ class PangeaInvitationSelectionView extends StatelessWidget { ), ], ), - onPressed: () => context.go( - room.isSpace ? "/rooms/spaces/${room.id}/details" : "/rooms/${room.id}", - ), + onPressed: () => NavigationUtil.goToSpaceRoute(room.id, [], context), ); return Scaffold( @@ -86,9 +84,12 @@ class PangeaInvitationSelectionView extends StatelessWidget { body: MaxWidthBody( maxWidth: 800.0, withScrolling: false, + showBorder: false, + padding: const EdgeInsets.all(0), child: Padding( - padding: const EdgeInsets.all(20.0), + padding: const EdgeInsets.all(16.0), child: Column( + spacing: 12.0, children: [ TextField( controller: controller.controller, @@ -122,7 +123,6 @@ class PangeaInvitationSelectionView extends StatelessWidget { ), onChanged: controller.searchUserWithCoolDown, ), - const SizedBox(height: 12.0), Align( alignment: Alignment.centerLeft, child: SingleChildScrollView( @@ -149,119 +149,114 @@ class PangeaInvitationSelectionView extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 40.0), - child: StreamBuilder( - stream: room.client.onRoomState.stream - .where((update) => update.roomId == room.id) - .rateLimit(const Duration(seconds: 1)), - builder: (context, snapshot) { - final participants = - room.getParticipants().map((user) => user.id).toSet(); - return controller.filter == InvitationFilter.public - ? ListView.builder( - itemCount: controller.foundProfiles.length, - itemBuilder: (BuildContext context, int i) => - _InviteContactListTile( - profile: controller.foundProfiles[i], - isMember: participants.contains( - controller.foundProfiles[i].userId, - ), - onTap: () => controller.inviteAction( - controller.foundProfiles[i].userId, - ), - controller: controller, + child: StreamBuilder( + stream: room.client.onRoomState.stream + .where((update) => update.roomId == room.id) + .rateLimit(const Duration(seconds: 1)), + builder: (context, snapshot) { + final participants = + room.getParticipants().map((user) => user.id).toSet(); + return controller.filter == InvitationFilter.public + ? ListView.builder( + itemCount: controller.foundProfiles.length, + itemBuilder: (BuildContext context, int i) => + _InviteContactListTile( + profile: controller.foundProfiles[i], + isMember: participants.contains( + controller.foundProfiles[i].userId, ), - ) - : ListView.builder( - itemCount: contacts.length + 2, - itemBuilder: (BuildContext context, int i) { - if (i == 0) { - return controller.filter == - InvitationFilter.space && - controller.spaceParent != null - ? ListTile( - leading: ClipPath( - clipper: MapClipper(), - child: Avatar( - mxContent: controller - .spaceParent!.avatar, - name: controller.spaceParent! - .getLocalizedDisplayname(), - borderRadius: - BorderRadius.circular( - AppConfig.borderRadius / 4, - ), - ), - ), - title: Text( - controller.spaceParent! + onTap: () => controller.inviteAction( + controller.foundProfiles[i].userId, + ), + controller: controller, + ), + ) + : ListView.builder( + itemCount: contacts.length + 2, + itemBuilder: (BuildContext context, int i) { + if (i == 0) { + return controller.filter == + InvitationFilter.space && + controller.spaceParent != null + ? ListTile( + leading: ClipPath( + clipper: MapClipper(), + child: Avatar( + mxContent: + controller.spaceParent!.avatar, + name: controller.spaceParent! .getLocalizedDisplayname(), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - subtitle: Text( - L10n.of(context).countParticipants( - controller.spaceParent!.summary - .mJoinedMemberCount ?? - 1, + borderRadius: BorderRadius.circular( + AppConfig.borderRadius / 4, ), - maxLines: 1, - overflow: TextOverflow.ellipsis, ), - trailing: TextButton.icon( - onPressed: - controller.inviteAllInSpace, - label: Text( - L10n.of(context).inviteAllInSpace, - ), - icon: const Icon(Icons.add), - ), - ) - : const SizedBox(); - } - - i--; - - if (i == contacts.length) { - return Padding( - padding: const EdgeInsets.all(16.0), - child: SizedBox( - width: 450, - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${RoomSettingsConstants.referFriendAsset}", - errorWidget: (context, url, error) => - const SizedBox(), - placeholder: (context, url) => - const Center( - child: CircularProgressIndicator - .adaptive(), ), + title: Text( + controller.spaceParent! + .getLocalizedDisplayname(), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + subtitle: Text( + L10n.of(context).countParticipants( + controller.spaceParent!.summary + .mJoinedMemberCount ?? + 1, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + trailing: TextButton.icon( + onPressed: + controller.inviteAllInSpace, + label: Text( + L10n.of(context).inviteAllInSpace, + ), + icon: const Icon(Icons.add), + ), + ) + : const SizedBox(); + } + + i--; + + if (i == contacts.length) { + return Padding( + padding: const EdgeInsets.all(16.0), + child: SizedBox( + width: 450, + child: CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${RoomSettingsConstants.referFriendAsset}", + errorWidget: (context, url, error) => + const SizedBox(), + placeholder: (context, url) => + const Center( + child: CircularProgressIndicator + .adaptive(), ), ), - ); - } - return _InviteContactListTile( - user: contacts[i], - profile: Profile( - avatarUrl: contacts[i].avatarUrl, - displayName: contacts[i].displayName ?? - contacts[i].id.localpart ?? - L10n.of(context).user, - userId: contacts[i].id, ), - isMember: - participants.contains(contacts[i].id), - onTap: () => controller.inviteAction( - contacts[i].id, - ), - controller: controller, ); - }, - ); - }, - ), + } + return _InviteContactListTile( + user: contacts[i], + profile: Profile( + avatarUrl: contacts[i].avatarUrl, + displayName: contacts[i].displayName ?? + contacts[i].id.localpart ?? + L10n.of(context).user, + userId: contacts[i].id, + ), + isMember: participants.contains(contacts[i].id), + onTap: () => controller.inviteAction( + contacts[i].id, + ), + controller: controller, + ); + }, + ); + }, ), ), Row( @@ -277,12 +272,12 @@ class PangeaInvitationSelectionView extends StatelessWidget { backgroundColor: theme.colorScheme.primaryContainer, padding: const EdgeInsets.symmetric( - horizontal: 24, + horizontal: 20, vertical: 16, ), ), child: Row( - spacing: 34.0, + spacing: 12.0, mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( @@ -312,7 +307,9 @@ class PangeaInvitationSelectionView extends StatelessWidget { "$initialUrl/#/join_with_link?${SpaceConstants.classCode}=${room.classCode}"; } - await Clipboard.setData(ClipboardData(text: toCopy)); + await Clipboard.setData( + ClipboardData(text: toCopy), + ); ScaffoldMessenger.of( context, ).showSnackBar( diff --git a/lib/pangea/chat_settings/pages/pangea_room_details.dart b/lib/pangea/chat_settings/pages/pangea_room_details.dart index f6bf5b4a8..c0573ed5c 100644 --- a/lib/pangea/chat_settings/pages/pangea_room_details.dart +++ b/lib/pangea/chat_settings/pages/pangea_room_details.dart @@ -41,7 +41,11 @@ class PangeaRoomDetailsView extends StatelessWidget { const Center(child: BackButton()), ), body: Padding( - padding: const EdgeInsetsGeometry.all(16.0), + padding: const EdgeInsetsGeometry.only( + top: 16.0, + left: 16.0, + right: 16.0, + ), child: MaxWidthBody( maxWidth: 900, showBorder: false, diff --git a/lib/pangea/chat_settings/pages/room_participants_widget.dart b/lib/pangea/chat_settings/pages/room_participants_widget.dart index 94700aed9..ba6484e8b 100644 --- a/lib/pangea/chat_settings/pages/room_participants_widget.dart +++ b/lib/pangea/chat_settings/pages/room_participants_widget.dart @@ -1,14 +1,14 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/level_display_name.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; -import 'package:fluffychat/pangea/spaces/utils/load_participants_util.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; +import 'package:fluffychat/pangea/spaces/load_participants_builder.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart'; @@ -33,41 +33,30 @@ class RoomParticipantsSection extends StatelessWidget { final filteredParticipants = participantsLoader.sortedParticipants; final originalLeaders = filteredParticipants.take(3).toList(); filteredParticipants.sort((a, b) { - // always sort bot to the end + // Always put bot at the very end final aIsBot = a.id == BotName.byEnvironment; final bIsBot = b.id == BotName.byEnvironment; - if (aIsBot && !bIsBot) { - return 1; - } else if (bIsBot && !aIsBot) { - return -1; + if (aIsBot != bIsBot) { + return aIsBot ? 1 : -1; } - // put knocking users at the front - if (a.membership == Membership.knock && - b.membership != Membership.knock) { - return -1; - } else if (b.membership == Membership.knock && - a.membership != Membership.knock) { - return 1; + int rankOf(p) { + // Admins first + if (p.powerLevel == 100) return 0; + + switch (p.membership) { + case Membership.join: + return 1; + case Membership.invite: + return 2; + case Membership.knock: + return 3; + default: + return 4; + } } - // then invited users - if (a.membership == Membership.invite && - b.membership != Membership.invite) { - return -1; - } else if (b.membership == Membership.invite && - a.membership != Membership.invite) { - return 1; - } - - // then admins - if (a.powerLevel == 100 && b.powerLevel != 100) { - return -1; - } else if (b.powerLevel == 100 && a.powerLevel != 100) { - return 1; - } - - return 0; + return rankOf(a).compareTo(rankOf(b)); }); return Wrap( @@ -80,8 +69,10 @@ class RoomParticipantsSection extends StatelessWidget { ? MouseRegion( cursor: SystemMouseCursors.click, child: GestureDetector( - onTap: () => context.go( - "/rooms/${room.id}/details/invite", + onTap: () => NavigationUtil.goToSpaceRoute( + room.id, + ['details', 'invite'], + context, ), child: HoverBuilder( builder: (context, hovered) { @@ -95,8 +86,9 @@ class RoomParticipantsSection extends StatelessWidget { : Colors.transparent, borderRadius: BorderRadius.circular(8), ), - padding: - const EdgeInsets.symmetric(vertical: 12.0), + padding: const EdgeInsets.symmetric( + vertical: 12.0, + ), width: _width, child: Column( spacing: 4.0, @@ -185,6 +177,7 @@ class RoomParticipantsSection extends StatelessWidget { onTap: () => showMemberActionsPopupMenu( context: context, user: user, + room: room, ), child: Center( child: Avatar( diff --git a/lib/pangea/chat_settings/pages/space_details_content.dart b/lib/pangea/chat_settings/pages/space_details_content.dart index 2c3bd150d..6a4db73b4 100644 --- a/lib/pangea/chat_settings/pages/space_details_content.dart +++ b/lib/pangea/chat_settings/pages/space_details_content.dart @@ -21,6 +21,8 @@ import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extensio import 'package:fluffychat/pangea/course_plans/map_clipper.dart'; import 'package:fluffychat/pangea/course_settings/course_settings.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; @@ -120,7 +122,16 @@ class SpaceDetailsContent extends StatelessWidget { title: l10n.editCourse, description: l10n.editCourseDesc, icon: const Icon(Icons.edit_outlined, size: 30.0), - onPressed: () => context.go('/rooms/${room.id}/details/edit'), + onPressed: () => context.go('/rooms/spaces/${room.id}/details/edit'), + enabled: room.isRoomAdmin, + showInMainView: false, + ), + ButtonDetails( + title: L10n.of(context).changeCourse, + description: L10n.of(context).changeCourseDesc, + icon: const Icon(Icons.assignment_outlined, size: 30.0), + onPressed: () => + context.go('/rooms/spaces/${controller.roomId}/addcourse'), enabled: room.isRoomAdmin, showInMainView: false, ), @@ -187,7 +198,8 @@ class SpaceDetailsContent extends StatelessWidget { title: l10n.permissions, description: l10n.permissionsDesc, icon: const Icon(Icons.edit_attributes_outlined, size: 30.0), - onPressed: () => context.go('/rooms/${room.id}/details/permissions'), + onPressed: () => + context.go('/rooms/spaces/${room.id}/details/permissions'), enabled: room.isRoomAdmin, showInMainView: false, ), @@ -195,7 +207,7 @@ class SpaceDetailsContent extends StatelessWidget { title: l10n.access, description: l10n.accessDesc, icon: const Icon(Icons.shield_outlined, size: 30.0), - onPressed: () => context.go('/rooms/${room.id}/details/access'), + onPressed: () => context.go('/rooms/spaces/${room.id}/details/access'), enabled: room.isRoomAdmin && room.spaceParents.isEmpty, showInMainView: false, ), @@ -216,7 +228,6 @@ class SpaceDetailsContent extends StatelessWidget { icon: const Icon(Icons.logout_outlined, size: 30.0), onPressed: () async { final confirmed = await showOkCancelAlertDialog( - useRootNavigator: false, context: context, title: L10n.of(context).areYouSure, okLabel: L10n.of(context).leave, @@ -243,16 +254,7 @@ class SpaceDetailsContent extends StatelessWidget { Icons.delete_outline, size: 30.0, ), - onPressed: () async { - final resp = await showDialog( - context: context, - builder: (_) => DeleteSpaceDialog(space: room), - ); - - if (resp == true) { - context.go("/rooms"); - } - }, + onPressed: () => DeleteSpaceDialog.show(room, context), enabled: room.isRoomAdmin, showInMainView: false, ), @@ -355,7 +357,20 @@ class SpaceDetailsContent extends StatelessWidget { ); case SpaceSettingsTabs.participants: return SingleChildScrollView( - child: RoomParticipantsSection(room: room), + child: Column( + children: [ + const InstructionsInlineTooltip( + instructionsEnum: + InstructionsEnum.courseParticipantTooltip, + padding: EdgeInsets.only( + bottom: 16.0, + left: 16.0, + right: 16.0, + ), + ), + RoomParticipantsSection(room: room), + ], + ), ); case SpaceSettingsTabs.analytics: return SingleChildScrollView( diff --git a/lib/pangea/chat_settings/utils/bot_client_extension.dart b/lib/pangea/chat_settings/utils/bot_client_extension.dart index 23f39b036..6fbb1c636 100644 --- a/lib/pangea/chat_settings/utils/bot_client_extension.dart +++ b/lib/pangea/chat_settings/utils/bot_client_extension.dart @@ -10,16 +10,7 @@ import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/widgets/matrix.dart'; extension BotClientExtension on Client { - bool get hasBotDM => rooms.any((room) { - if (room.isDirectChat && - room.directChatMatrixID == BotName.byEnvironment) { - return true; - } - if (room.botOptions?.mode == BotMode.directChat) { - return true; - } - return false; - }); + bool get hasBotDM => rooms.any((r) => r.isBotDM); Room? get botDM => rooms.firstWhereOrNull( (room) { @@ -41,8 +32,8 @@ extension BotClientExtension on Client { StateEvent( content: BotOptionsModel( mode: BotMode.directChat, - targetLanguage: MatrixState - .pangeaController.languageController.userL2?.langCode, + targetLanguage: + MatrixState.pangeaController.userController.userL2?.langCode, languageLevel: MatrixState.pangeaController.userController.profile .userSettings.cefrLevel, ).toJson(), @@ -53,4 +44,28 @@ extension BotClientExtension on Client { ), ], ); + + Future updateBotOptions() async { + if (!isLogged() || botDM == null) return; + + final targetLanguage = + MatrixState.pangeaController.userController.userL2?.langCode; + final cefrLevel = MatrixState + .pangeaController.userController.profile.userSettings.cefrLevel; + final updateBotOptions = botDM!.botOptions ?? BotOptionsModel(); + + if (updateBotOptions.targetLanguage == targetLanguage && + updateBotOptions.languageLevel == cefrLevel) { + return; + } + + if (targetLanguage != null && + updateBotOptions.targetLanguage != targetLanguage) { + updateBotOptions.targetVoice = null; + } + + updateBotOptions.targetLanguage = targetLanguage; + updateBotOptions.languageLevel = cefrLevel; + await botDM!.setBotOptions(updateBotOptions); + } } diff --git a/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart b/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart index 2af53efcb..f8efca23d 100644 --- a/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart +++ b/lib/pangea/chat_settings/widgets/chat_context_menu_action.dart @@ -9,6 +9,7 @@ import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart import 'package:fluffychat/pangea/chat_settings/utils/delete_room.dart'; import 'package:fluffychat/pangea/chat_settings/widgets/delete_space_dialog.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -161,7 +162,7 @@ void chatContextMenuAction( ], ), ), - if (!room.isActivitySession || room.ownRole == null) + if (!room.isActivitySession || !room.isActivityStarted) PopupMenuItem( value: ChatContextAction.leave, child: Row( @@ -248,9 +249,10 @@ void chatContextMenuAction( ); if (confirmed != OkCancelResult.ok) return; + final isSpace = room.isSpace; final resp = await showFutureLoadingDialog( context: context, - future: room.isSpace ? room.leaveSpace : room.leave, + future: isSpace ? room.leaveSpace : room.leave, ); final r = room.client.getRoomById(room.id); @@ -259,23 +261,15 @@ void chatContextMenuAction( } if (!resp.isError) { - outerContext.go( - room.courseParent != null - ? "/rooms/spaces/${room.courseParent!.id}/details" - : "/rooms", - ); + isSpace + ? context.go('/rooms') + : NavigationUtil.goToSpaceRoute(null, [], context); } return; case ChatContextAction.delete: if (room.isSpace) { - final resp = await showDialog( - context: context, - builder: (_) => DeleteSpaceDialog(space: room), - ); - if (resp == true) { - context.go("/rooms"); - } + await DeleteSpaceDialog.show(room, context); } else { final confirmed = await showOkCancelAlertDialog( context: context, @@ -291,11 +285,7 @@ void chatContextMenuAction( future: room.delete, ); if (!resp.isError) { - outerContext.go( - room.courseParent != null - ? "/rooms/spaces/${room.courseParent!.id}/details" - : "/rooms", - ); + NavigationUtil.goToSpaceRoute(null, [], context); } } return; diff --git a/lib/pangea/chat_settings/widgets/delete_space_dialog.dart b/lib/pangea/chat_settings/widgets/delete_space_dialog.dart index d1e7473a4..2b16d1d17 100644 --- a/lib/pangea/chat_settings/widgets/delete_space_dialog.dart +++ b/lib/pangea/chat_settings/widgets/delete_space_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; @@ -9,6 +10,7 @@ import 'package:fluffychat/pangea/chat_settings/utils/delete_room.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; class DeleteSpaceDialog extends StatefulWidget { final Room space; @@ -17,6 +19,48 @@ class DeleteSpaceDialog extends StatefulWidget { required this.space, }); + static Future show( + Room room, + BuildContext context, + ) async { + final resp = await showDialog?>( + context: context, + builder: (_) => DeleteSpaceDialog(space: room), + ); + if (resp == null) return; + final result = await showFutureLoadingDialog( + context: context, + future: () => _deleteSpace(room, resp), + ); + + if (!result.isError) { + context.go("/rooms"); + } + } + + static Future _deleteSpace( + Room space, + List rooms, + ) async { + final List> futures = []; + for (final room in rooms) { + final roomInstance = space.client.getRoomById(room.roomId); + if (roomInstance != null) { + // Niether delete not leave activities the user has archived, + // since they're hidden in the main chat UI. + if (roomInstance.isActivitySession) { + if (!roomInstance.hasArchivedActivity) { + futures.add(roomInstance.leave()); + } + } else { + futures.add(roomInstance.delete()); + } + } + } + await Future.wait(futures); + await space.delete(); + } + @override State createState() => DeleteSpaceDialogState(); } @@ -28,7 +72,7 @@ class DeleteSpaceDialogState extends State { bool _loadingRooms = true; String? _roomLoadError; - bool _deleting = false; + final bool _deleting = false; String? _deleteError; @override @@ -99,64 +143,21 @@ class DeleteSpaceDialogState extends State { }).toList(); } - Future _deleteSpace() async { - setState(() { - _deleting = true; - _deleteError = null; - }); - - try { - final List> futures = []; - for (final room in _roomsToDelete) { - final roomInstance = widget.space.client.getRoomById(room.roomId); - if (roomInstance != null) { - // Niether delete not leave activities the user has archived, - // since they're hidden in the main chat UI. - if (roomInstance.isActivitySession) { - if (!roomInstance.hasArchivedActivity) { - futures.add(roomInstance.leave()); - } - } else { - futures.add(roomInstance.delete()); - } - } - } - await Future.wait(futures); - await widget.space.delete(); - Navigator.of(context).pop(true); - } catch (e, s) { - _deleteError = L10n.of(context).oopsSomethingWentWrong; - ErrorHandler.logError( - e: e, - s: s, - data: { - "roomID": widget.space.id, - }, - ); - } finally { - if (mounted) { - setState(() { - _deleting = false; - }); - } - } - } - @override Widget build(BuildContext context) { return Dialog( + shape: RoundedRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.error, + ), + borderRadius: BorderRadius.circular(32.0), + ), child: Container( constraints: const BoxConstraints( maxWidth: 400, maxHeight: 600, ), padding: const EdgeInsets.symmetric(vertical: 20), - decoration: BoxDecoration( - border: Border.all( - color: Theme.of(context).colorScheme.error, - ), - borderRadius: BorderRadius.circular(32.0), - ), child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -179,83 +180,85 @@ class DeleteSpaceDialogState extends State { style: TextStyle(color: Theme.of(context).colorScheme.error), ), ), - Builder( - builder: (context) { - if (_loadingRooms) { - return const Center( - child: SizedBox( - height: 20, - width: 20, - child: CircularProgressIndicator.adaptive(), - ), - ); - } + if (widget.space.spaceChildCount != 0) + Builder( + builder: (context) { + if (_loadingRooms) { + return const Center( + child: SizedBox( + height: 20, + width: 20, + child: CircularProgressIndicator.adaptive(), + ), + ); + } - if (_roomLoadError != null) { - return Center( + if (_roomLoadError != null) { + return Center( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 16.0), + child: ErrorIndicator(message: _roomLoadError!), + ), + ); + } + + return Expanded( child: Padding( padding: const EdgeInsets.symmetric(vertical: 16.0), - child: ErrorIndicator(message: _roomLoadError!), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (_selectableRooms.length > 1) + CheckboxListTile( + value: _roomsToDelete.length == + _selectableRooms.length, + onChanged: (_) => _toggleSelectAll(), + title: Text( + _roomsToDelete.length == _selectableRooms.length + ? L10n.of(context).deselectAll + : L10n.of(context).selectAll, + ), + controlAffinity: ListTileControlAffinity.leading, + ), + Expanded( + child: ListView.builder( + itemCount: _rooms.length, + itemBuilder: (context, index) { + final chunk = _rooms[index]; + + final room = widget.space.client + .getRoomById(chunk.roomId); + final isMember = room != null && + room.membership == Membership.join && + room.isRoomAdmin; + + final displayname = chunk.name ?? + chunk.canonicalAlias ?? + L10n.of(context).emptyChat; + + return AnimatedOpacity( + duration: FluffyThemes.animationDuration, + opacity: isMember ? 1 : 0.5, + child: CheckboxListTile( + value: _roomsToDelete.contains(chunk), + onChanged: isMember + ? (value) => + _onRoomSelected(value, chunk) + : null, + title: Text(displayname), + controlAffinity: + ListTileControlAffinity.leading, + ), + ); + }, + ), + ), + ], + ), ), ); - } - - return Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (_selectableRooms.length > 1) - CheckboxListTile( - value: _roomsToDelete.length == - _selectableRooms.length, - onChanged: (_) => _toggleSelectAll(), - title: Text( - _roomsToDelete.length == _selectableRooms.length - ? L10n.of(context).deselectAll - : L10n.of(context).selectAll, - ), - controlAffinity: ListTileControlAffinity.leading, - ), - Expanded( - child: ListView.builder( - itemCount: _rooms.length, - itemBuilder: (context, index) { - final chunk = _rooms[index]; - - final room = - widget.space.client.getRoomById(chunk.roomId); - final isMember = room != null && - room.membership == Membership.join && - room.isRoomAdmin; - - final displayname = chunk.name ?? - chunk.canonicalAlias ?? - L10n.of(context).emptyChat; - - return AnimatedOpacity( - duration: FluffyThemes.animationDuration, - opacity: isMember ? 1 : 0.5, - child: CheckboxListTile( - value: _roomsToDelete.contains(chunk), - onChanged: isMember - ? (value) => _onRoomSelected(value, chunk) - : null, - title: Text(displayname), - controlAffinity: - ListTileControlAffinity.leading, - ), - ); - }, - ), - ), - ], - ), - ), - ); - }, - ), + }, + ), Padding( padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), child: Row( @@ -269,7 +272,8 @@ class DeleteSpaceDialogState extends State { AnimatedSize( duration: FluffyThemes.animationDuration, child: OutlinedButton( - onPressed: _deleting ? null : _deleteSpace, + onPressed: () => + Navigator.of(context).pop(_roomsToDelete), style: OutlinedButton.styleFrom( foregroundColor: Theme.of(context).colorScheme.error, side: BorderSide( diff --git a/lib/pangea/chat_settings/widgets/language_level_dropdown.dart b/lib/pangea/chat_settings/widgets/language_level_dropdown.dart index a7687790c..6dafafaad 100644 --- a/lib/pangea/chat_settings/widgets/language_level_dropdown.dart +++ b/lib/pangea/chat_settings/widgets/language_level_dropdown.dart @@ -6,7 +6,7 @@ import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/widgets/dropdown_text_button.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; class LanguageLevelDropdown extends StatelessWidget { final LanguageLevelTypeEnum? initialLevel; @@ -84,6 +84,7 @@ class LanguageLevelDropdown extends StatelessWidget { : null, value: initialLevel, validator: validator, + enableFeedback: enabled, ); } } diff --git a/lib/pangea/choreographer/assistance_state_enum.dart b/lib/pangea/choreographer/assistance_state_enum.dart new file mode 100644 index 000000000..1680bb972 --- /dev/null +++ b/lib/pangea/choreographer/assistance_state_enum.dart @@ -0,0 +1,62 @@ +// assistance state is, user has not typed a message, user has typed a message and IGC has not run, +// IGC is running, IGC has run and there are remaining steps (either IT or IGC), or all steps are done +// Or user does not have a subscription + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; + +enum AssistanceStateEnum { + noSub, + noMessage, + notFetched, + fetching, + fetched, + complete, + error; + + Color stateColor(context) { + switch (this) { + case AssistanceStateEnum.noSub: + case AssistanceStateEnum.noMessage: + case AssistanceStateEnum.fetched: + case AssistanceStateEnum.error: + return Theme.of(context).disabledColor; + case AssistanceStateEnum.notFetched: + case AssistanceStateEnum.fetching: + return Theme.of(context).colorScheme.primary; + case AssistanceStateEnum.complete: + return AppConfig.success; + } + } + + Color sendButtonColor(context) { + switch (this) { + case AssistanceStateEnum.noMessage: + case AssistanceStateEnum.fetched: + return Theme.of(context).disabledColor; + case AssistanceStateEnum.noSub: + case AssistanceStateEnum.error: + case AssistanceStateEnum.notFetched: + case AssistanceStateEnum.fetching: + return Theme.of(context).colorScheme.primary; + case AssistanceStateEnum.complete: + return AppConfig.success; + } + } + + bool get allowsFeedback => switch (this) { + AssistanceStateEnum.notFetched => true, + _ => false, + }; + + Color backgroundColor(BuildContext context) => switch (this) { + AssistanceStateEnum.noSub || + AssistanceStateEnum.noMessage || + AssistanceStateEnum.fetched || + AssistanceStateEnum.complete || + AssistanceStateEnum.error => + Theme.of(context).colorScheme.surfaceContainerHighest, + _ => Theme.of(context).colorScheme.primaryContainer, + }; +} diff --git a/lib/pangea/choreographer/constants/choreo_constants.dart b/lib/pangea/choreographer/choreo_constants.dart similarity index 70% rename from lib/pangea/choreographer/constants/choreo_constants.dart rename to lib/pangea/choreographer/choreo_constants.dart index cbdfdf7d0..85b9e6186 100644 --- a/lib/pangea/choreographer/constants/choreo_constants.dart +++ b/lib/pangea/choreographer/choreo_constants.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; class ChoreoConstants { static const numberOfITChoices = 4; - // static const millisecondsToDisplayFeedback = 2500; - static const millisecondsToDisplayFeedback = 0; - static const commonalityThreshold = 0.9; static const levelThresholdForGreen = 1; static const levelThresholdForYellow = 2; static const levelThresholdForRed = 3; static const green = Colors.green; static const yellow = Color.fromARGB(255, 206, 152, 2); static const red = Colors.red; + static const int msBeforeIGCStart = 10000; + static const int maxLength = 1000; + static const String inputTransformTargetKey = 'input_text_field'; } diff --git a/lib/pangea/choreographer/models/choreo_edit.dart b/lib/pangea/choreographer/choreo_edit_model.dart similarity index 68% rename from lib/pangea/choreographer/models/choreo_edit.dart rename to lib/pangea/choreographer/choreo_edit_model.dart index 04951e98d..6669dffa9 100644 --- a/lib/pangea/choreographer/models/choreo_edit.dart +++ b/lib/pangea/choreographer/choreo_edit_model.dart @@ -3,36 +3,42 @@ import 'dart:math'; /// Changes made to previous choreo step's text /// Remove substring of length 'length', starting at position 'offset' /// Then add String 'insert' at that position -class ChoreoEdit { - int offset = 0; - int length = 0; - String insert = ""; +class ChoreoEditModel { + final int offset; + final int length; + final String insert; /// Normal constructor created from preexisting ChoreoEdit values - ChoreoEdit({ - required this.offset, - required this.length, - required this.insert, + const ChoreoEditModel({ + this.offset = 0, + this.length = 0, + this.insert = "", }); /// Constructor that determines and saves /// edits differentiating originalText and editedText - ChoreoEdit.fromText({ + factory ChoreoEditModel.fromText({ required String originalText, required String editedText, }) { if (originalText == editedText) { // No changes, return empty edit - return; + return const ChoreoEditModel(); } - offset = _firstDifference(originalText, editedText); - length = _lastDifference(originalText, editedText) + 1 - offset; - insert = _insertion(originalText, editedText); + final offset = _firstDifference(originalText, editedText); + final length = + _lastDifference(originalText, editedText, offset) + 1 - offset; + final insert = _insertion(originalText, editedText, offset, length); + return ChoreoEditModel( + offset: offset, + length: length, + insert: insert, + ); } - factory ChoreoEdit.fromJson(Map json) { - return ChoreoEdit( + factory ChoreoEditModel.fromJson(Map json) { + return ChoreoEditModel( offset: json[_offsetKey], length: json[_lengthKey], insert: json[_insertKey], @@ -52,7 +58,7 @@ class ChoreoEdit { } /// Find index of first character where strings differ - int _firstDifference(String originalText, String editedText) { + static int _firstDifference(String originalText, String editedText) { var i = 0; final minLength = min(originalText.length, editedText.length); while (i < minLength && originalText[i] == editedText[i]) { @@ -63,7 +69,11 @@ class ChoreoEdit { /// Starting at the end of both text versions, /// traverse backward until a non-matching char is found - int _lastDifference(String originalText, String editedText) { + static int _lastDifference( + String originalText, + String editedText, + int offset, + ) { var i = originalText.length - 1; var j = editedText.length - 1; while (min(i, j) >= offset && originalText[i] == editedText[j]) { @@ -77,7 +87,12 @@ class ChoreoEdit { /// plus the difference in string length /// If dif is -x and length of deleted text is x, /// inserted text is empty string - String _insertion(String originalText, String editedText) { + static String _insertion( + String originalText, + String editedText, + int offset, + int length, + ) { final insertLength = length + (editedText.length - originalText.length); return editedText.substring(offset, offset + insertLength); } diff --git a/lib/pangea/choreographer/choreo_mode_enum.dart b/lib/pangea/choreographer/choreo_mode_enum.dart new file mode 100644 index 000000000..5d382dff3 --- /dev/null +++ b/lib/pangea/choreographer/choreo_mode_enum.dart @@ -0,0 +1 @@ +enum ChoreoModeEnum { igc, it } diff --git a/lib/pangea/choreographer/models/choreo_record.dart b/lib/pangea/choreographer/choreo_record_model.dart similarity index 77% rename from lib/pangea/choreographer/models/choreo_record.dart rename to lib/pangea/choreographer/choreo_record_model.dart index 5ba5b0f6d..502977e06 100644 --- a/lib/pangea/choreographer/models/choreo_record.dart +++ b/lib/pangea/choreographer/choreo_record_model.dart @@ -1,9 +1,10 @@ import 'dart:convert'; -import 'package:fluffychat/pangea/choreographer/models/choreo_edit.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; -import 'it_step.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_edit_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; +import 'it/completed_it_step_model.dart'; /// this class lives within a [PangeaIGCEvent] /// it always has a [RepresentationEvent] parent @@ -12,32 +13,30 @@ import 'it_step.dart'; /// It represents the real-time changes to a text /// TODO - start saving senderL2Code in choreoRecord to be able better decide the useType -class ChoreoRecord { +class ChoreoRecordModel { /// ordered versions of the representation, with first being original and last /// being the final sent text /// there is not a 1-to-1 map from steps to matches - List choreoSteps; - - List openMatches; + final List choreoSteps; + final List openMatches; + final String originalText; final Set pastedStrings = {}; - final String originalText; - - ChoreoRecord({ + ChoreoRecordModel({ required this.choreoSteps, required this.openMatches, required this.originalText, }); - factory ChoreoRecord.fromJson( + factory ChoreoRecordModel.fromJson( Map json, [ String? defaultOriginalText, ]) { final stepsRaw = json[_stepsKey]; String? originalText = json[_originalTextKey]; - List steps = []; + List steps = []; final stepContent = (jsonDecode(stepsRaw ?? "[]") as Iterable); if (stepContent.isNotEmpty && @@ -48,9 +47,9 @@ class ChoreoRecord { if (stepContent.every((step) => step["txt"] is! String)) { steps = stepContent - .map((e) => ChoreoRecordStep.fromJson(e)) + .map((e) => ChoreoRecordStepModel.fromJson(e)) .toList() - .cast(); + .cast(); } else { String? currentEdit = originalText; for (final content in stepContent) { @@ -63,12 +62,12 @@ class ChoreoRecord { // will yield a correct result, but it's possible the user manually changed the text // between steps, so we need handle that by adding an extra step if (textBefore != currentEdit) { - final edits = ChoreoEdit.fromText( + final edits = ChoreoEditModel.fromText( originalText: currentEdit, editedText: textBefore, ); - steps.add(ChoreoRecordStep(edits: edits)); + steps.add(ChoreoRecordStepModel(edits: edits)); currentEdit = textBefore; } @@ -76,7 +75,7 @@ class ChoreoRecord { int length = 0; String insert = ""; - final step = ChoreoRecordStep.fromJson(content); + ChoreoRecordStepModel step = ChoreoRecordStepModel.fromJson(content); if (step.acceptedOrIgnoredMatch != null) { final SpanData? match = step.acceptedOrIgnoredMatch?.match; final correction = match?.bestChoice; @@ -103,13 +102,17 @@ class ChoreoRecord { insert, ); - final edits = ChoreoEdit.fromText( + final edits = ChoreoEditModel.fromText( originalText: currentEdit, editedText: textAfter, ); currentEdit = textAfter; - step.edits = edits; + step = ChoreoRecordStepModel( + edits: edits, + acceptedOrIgnoredMatch: step.acceptedOrIgnoredMatch, + itStep: step.itStep, + ); steps.add(step); } } @@ -121,7 +124,7 @@ class ChoreoRecord { ); } - return ChoreoRecord( + return ChoreoRecordModel( choreoSteps: steps, originalText: originalText ?? defaultOriginalText!, openMatches: (jsonDecode(json[_openMatchesKey] ?? "[]") as Iterable) @@ -136,7 +139,6 @@ class ChoreoRecord { static const _stepsKey = "stps"; static const _openMatchesKey = "mtchs"; static const _originalTextKey = "ogtxt_v2"; - // static const _currentKey = "crnt"; Map toJson() { final data = {}; @@ -144,27 +146,23 @@ class ChoreoRecord { data[_openMatchesKey] = jsonEncode(openMatches.map((e) => e.toJson()).toList()); data[_originalTextKey] = originalText; - // data[_currentKey] = current; return data; } - void addRecord(String text, {PangeaMatch? match, ITStep? step}) { - if (match != null && step != null) { - throw Exception("match and step should not both be defined"); - } + bool get includedIT => choreoSteps.any((step) { + return step.acceptedOrIgnoredMatch?.status == + PangeaMatchStatusEnum.accepted && + (step.acceptedOrIgnoredMatch?.isOutOfTargetMatch ?? false); + }); - final edit = ChoreoEdit.fromText( - originalText: stepText(), - editedText: text, - ); + bool get includedIGC => choreoSteps.any((step) { + return step.acceptedOrIgnoredMatch?.status == + PangeaMatchStatusEnum.accepted && + (step.acceptedOrIgnoredMatch?.isGrammarMatch ?? false); + }); - choreoSteps.add( - ChoreoRecordStep( - edits: edit, - acceptedOrIgnoredMatch: match, - itStep: step, - ), - ); + bool endedWithIT(String sent) { + return includedIT && stepText() == sent; } /// Get the text at [stepIndex] @@ -192,40 +190,27 @@ class ChoreoRecord { return text; } - bool get hasAcceptedMatches => choreoSteps.any( - (element) => - element.acceptedOrIgnoredMatch?.status == - PangeaMatchStatus.accepted, - ); + void addRecord( + String text, { + PangeaMatch? match, + CompletedITStepModel? step, + }) { + if (match != null && step != null) { + throw Exception("match and step should not both be defined"); + } - bool get hasIgnoredMatches => choreoSteps.any( - (element) => - element.acceptedOrIgnoredMatch?.status == PangeaMatchStatus.ignored, - ); + final edit = ChoreoEditModel.fromText( + originalText: stepText(), + editedText: text, + ); - // bool get includedIT => choreoSteps.any((step) { - // return step.acceptedOrIgnoredMatch?.status == - // PangeaMatchStatus.accepted && - // (step.acceptedOrIgnoredMatch?.isITStart ?? false); - // }); - - bool get includedIT => choreoSteps.any((step) { - return step.acceptedOrIgnoredMatch?.status == - PangeaMatchStatus.accepted && - (step.acceptedOrIgnoredMatch?.isOutOfTargetMatch ?? false); - }); - - bool get includedIGC => choreoSteps.any((step) { - return step.acceptedOrIgnoredMatch?.status == - PangeaMatchStatus.accepted && - (step.acceptedOrIgnoredMatch?.isGrammarMatch ?? false); - }); - - List get itSteps => - choreoSteps.where((e) => e.itStep != null).map((e) => e.itStep!).toList(); - - bool endedWithIT(String sent) { - return includedIT && stepText() == sent; + choreoSteps.add( + ChoreoRecordStepModel( + edits: edit, + acceptedOrIgnoredMatch: match, + itStep: step, + ), + ); } } @@ -250,21 +235,21 @@ class ChoreoRecord { /// the user selects IT and a step is made /// the user chooses "hola" and a step is saved /// adds "amigo" and a step saved -class ChoreoRecordStep { +class ChoreoRecordStepModel { /// Edits that, when applied to the previous step's text, /// will provide the current step's text /// Should always exist, except when using fromJSON /// on old version of ChoreoRecordStep - ChoreoEdit? edits; + final ChoreoEditModel? edits; /// all matches throughout edit process, /// including those open, accepted and ignored /// last step in list may contain open - PangeaMatch? acceptedOrIgnoredMatch; + final PangeaMatch? acceptedOrIgnoredMatch; - ITStep? itStep; + final CompletedITStepModel? itStep; - ChoreoRecordStep({ + ChoreoRecordStepModel({ this.edits, this.acceptedOrIgnoredMatch, this.itStep, @@ -276,14 +261,17 @@ class ChoreoRecordStep { } } - factory ChoreoRecordStep.fromJson(Map json) { - return ChoreoRecordStep( - edits: - json[_editKey] != null ? ChoreoEdit.fromJson(json[_editKey]) : null, + factory ChoreoRecordStepModel.fromJson(Map json) { + return ChoreoRecordStepModel( + edits: json[_editKey] != null + ? ChoreoEditModel.fromJson(json[_editKey]) + : null, acceptedOrIgnoredMatch: json[_acceptedOrIgnoredMatchKey] != null ? PangeaMatch.fromJson(json[_acceptedOrIgnoredMatchKey]) : null, - itStep: json[_stepKey] != null ? ITStep.fromJson(json[_stepKey]) : null, + itStep: json[_stepKey] != null + ? CompletedITStepModel.fromJson(json[_stepKey]) + : null, ); } @@ -294,8 +282,15 @@ class ChoreoRecordStep { Map toJson() { final data = {}; data[_editKey] = edits?.toJson(); - data[_acceptedOrIgnoredMatchKey] = acceptedOrIgnoredMatch?.toJson(); - data[_stepKey] = itStep?.toJson(); + + if (acceptedOrIgnoredMatch != null) { + data[_acceptedOrIgnoredMatchKey] = acceptedOrIgnoredMatch?.toJson(); + } + + if (itStep != null) { + data[_stepKey] = itStep?.toJson(); + } + return data; } diff --git a/lib/pangea/choreographer/choreographer.dart b/lib/pangea/choreographer/choreographer.dart new file mode 100644 index 000000000..52348dea6 --- /dev/null +++ b/lib/pangea/choreographer/choreographer.dart @@ -0,0 +1,400 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/choreographer/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_mode_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; +import 'package:fluffychat/pangea/choreographer/igc/igc_controller.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_state_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; +import 'package:fluffychat/pangea/choreographer/pangea_message_content_model.dart'; +import 'package:fluffychat/pangea/choreographer/text_editing/edit_type_enum.dart'; +import 'package:fluffychat/pangea/choreographer/text_editing/pangea_text_controller.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; +import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; +import 'package:fluffychat/pangea/events/repo/tokens_repo.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import '../../widgets/matrix.dart'; +import 'choreographer_error_controller.dart'; +import 'it/it_controller.dart'; + +class Choreographer extends ChangeNotifier { + final FocusNode inputFocus; + + late final PangeaTextController textController; + late final ITController itController; + late final IgcController igcController; + late final ChoreographerErrorController errorService; + + ChoreoRecordModel? _choreoRecord; + + final ValueNotifier _isFetching = ValueNotifier(false); + final ValueNotifier _timesDismissedIT = ValueNotifier(0); + + int _timesClicked = 0; + Timer? _debounceTimer; + String? _lastChecked; + ChoreoModeEnum _choreoMode = ChoreoModeEnum.igc; + + StreamSubscription? _languageSub; + StreamSubscription? _settingsUpdateSub; + StreamSubscription? _acceptedContinuanceSub; + StreamSubscription? _updatedMatchSub; + + Choreographer( + this.inputFocus, + ) { + _initialize(); + } + + int get timesClicked => _timesClicked; + ValueNotifier get isFetching => _isFetching; + ValueNotifier get timesDismissedIT => _timesDismissedIT; + ChoreoModeEnum get choreoMode => _choreoMode; + String get currentText => textController.text; + + ChoreoRecordModel get _record => _choreoRecord ??= ChoreoRecordModel( + originalText: textController.text, + choreoSteps: [], + openMatches: [], + ); + + void _initialize() { + textController = PangeaTextController(choreographer: this); + textController.addListener(_onChange); + + errorService = ChoreographerErrorController(); + errorService.addListener(notifyListeners); + + itController = ITController( + (e) => errorService.setErrorAndLock(ChoreoError(raw: e)), + ); + itController.open.addListener(_onUpdateITOpenStatus); + itController.editing.addListener(_onSubmitSourceTextEdits); + + igcController = IgcController( + (e) => errorService.setErrorAndLock(ChoreoError(raw: e)), + ); + + _languageSub ??= MatrixState + .pangeaController.userController.languageStream.stream + .listen((update) { + clear(); + }); + + _settingsUpdateSub ??= MatrixState + .pangeaController.userController.settingsUpdateStream.stream + .listen((_) { + notifyListeners(); + }); + + _acceptedContinuanceSub ??= itController.acceptedContinuanceStream.stream + .listen(_onAcceptContinuance); + + _updatedMatchSub ??= + igcController.matchUpdateStream.stream.listen(_onUpdateMatch); + } + + void clear() { + _lastChecked = null; + _timesClicked = 0; + _isFetching.value = false; + _choreoRecord = null; + itController.closeIT(); + itController.clearSourceText(); + itController.clearDissmissed(); + igcController.clear(); + _resetDebounceTimer(); + _setChoreoMode(ChoreoModeEnum.igc); + } + + @override + void dispose() { + errorService.removeListener(notifyListeners); + itController.open.removeListener(_onCloseIT); + itController.editing.removeListener(_onSubmitSourceTextEdits); + textController.removeListener(_onChange); + + _languageSub?.cancel(); + _settingsUpdateSub?.cancel(); + _acceptedContinuanceSub?.cancel(); + _updatedMatchSub?.cancel(); + _debounceTimer?.cancel(); + + igcController.dispose(); + itController.dispose(); + errorService.dispose(); + textController.dispose(); + _isFetching.dispose(); + _timesDismissedIT.dispose(); + + TtsController.stop(); + super.dispose(); + } + + void onPaste(value) => _record.pastedStrings.add(value); + + void onClickSend() { + if (assistanceState == AssistanceStateEnum.fetched) { + _timesClicked++; + + // if user is doing IT, call closeIT here to + // ensure source text is replaced when needed + if (itController.open.value && _timesClicked > 1) { + itController.closeIT(dismiss: true); + } + } + } + + void _setChoreoMode(ChoreoModeEnum mode) { + _choreoMode = mode; + notifyListeners(); + } + + void _resetDebounceTimer() { + if (_debounceTimer != null) { + _debounceTimer?.cancel(); + _debounceTimer = null; + } + } + + void _startLoading() { + _lastChecked = textController.text; + _isFetching.value = true; + notifyListeners(); + } + + void _stopLoading() { + _isFetching.value = false; + notifyListeners(); + } + + /// Handles any changes to the text input + void _onChange() { + // listener triggers when edit type changes, even if text didn't + // so prevent unnecessary calls + if (_lastChecked != null && _lastChecked == textController.text) { + return; + } + // update assistance state from no message => not fetched and vice versa + if (_lastChecked == null || + _lastChecked!.trim().isEmpty || + textController.text.trim().isEmpty) { + notifyListeners(); + } + + // if the user cleared the text, reset everything + if (textController.editType == EditTypeEnum.keyboard && + _lastChecked != null && + _lastChecked!.isNotEmpty && + textController.text.isEmpty) { + clear(); + } + + _lastChecked = textController.text; + if (errorService.isError) return; + if (textController.editType == EditTypeEnum.keyboard) { + if (igcController.currentText != null || + itController.sourceText.value != null) { + igcController.clear(); + itController.clearSourceText(); + notifyListeners(); + } + + _resetDebounceTimer(); + _debounceTimer ??= Timer( + const Duration(milliseconds: ChoreoConstants.msBeforeIGCStart), + () => requestWritingAssistance(), + ); + } + textController.editType = EditTypeEnum.keyboard; + } + + Future requestWritingAssistance({ + bool manual = false, + }) async { + if (assistanceState != AssistanceStateEnum.notFetched) return; + final SubscriptionStatus canSendStatus = + MatrixState.pangeaController.subscriptionController.subscriptionStatus; + + if (canSendStatus != SubscriptionStatus.subscribed || + MatrixState.pangeaController.userController.userL2 == null || + MatrixState.pangeaController.userController.userL1 == null || + (!ToolSetting.interactiveGrammar.enabled && + !ToolSetting.interactiveTranslator.enabled) || + (!ToolSetting.autoIGC.enabled && + !manual && + _choreoMode != ChoreoModeEnum.it)) { + return; + } + + _resetDebounceTimer(); + _startLoading(); + + await igcController.getIGCTextData( + textController.text, + [], + ); + + // init choreo record to record the original text before any matches are applied + _choreoRecord ??= ChoreoRecordModel( + originalText: textController.text, + choreoSteps: [], + openMatches: [], + ); + + if (igcController.openAutomaticMatches.isNotEmpty) { + await igcController.acceptNormalizationMatches(); + } else { + // trigger a re-render of the text field to show IGC matches + textController.setSystemText( + textController.text, + EditTypeEnum.igc, + ); + } + + _stopLoading(); + if (!igcController.openMatches + .any((match) => match.updatedMatch.isITStart)) { + igcController.fetchAllSpanDetails().catchError((e) => clearMatches(e)); + } + } + + Future getMessageContent(String message) async { + TokensResponseModel? tokensResp; + final l2LangCode = + MatrixState.pangeaController.userController.userL2?.langCode; + final l1LangCode = + MatrixState.pangeaController.userController.userL1?.langCode; + if (l1LangCode != null && l2LangCode != null) { + final res = await TokensRepo.get( + MatrixState.pangeaController.userController.accessToken, + TokensRequestModel( + fullText: message, + senderL1: l1LangCode, + senderL2: l2LangCode, + ), + ); + tokensResp = res.isValue ? res.result : null; + } + + final hasOriginalWritten = + _record.includedIT && itController.sourceText.value != null; + + return PangeaMessageContentModel( + message: message, + choreo: _record, + originalWritten: hasOriginalWritten + ? PangeaRepresentation( + langCode: l1LangCode ?? LanguageKeys.unknownLanguage, + text: itController.sourceText.value!, + originalWritten: true, + originalSent: false, + ) + : null, + tokensSent: tokensResp != null + ? PangeaMessageTokens( + tokens: tokensResp.tokens, + detections: tokensResp.detections, + ) + : null, + ); + } + + void _onUpdateITOpenStatus() { + itController.open.value ? _onOpenIT() : _onCloseIT(); + notifyListeners(); + } + + void _onOpenIT() { + final itMatch = igcController.openMatches.firstWhere( + (match) => match.updatedMatch.isITStart, + orElse: () => + throw Exception("Attempted to open IT without an ITStart match"), + ); + + igcController.clear(); + itMatch.setStatus(PangeaMatchStatusEnum.accepted); + _record.addRecord( + "", + match: itMatch.updatedMatch, + ); + + _setChoreoMode(ChoreoModeEnum.it); + textController.setSystemText("", EditTypeEnum.it); + } + + void _onCloseIT() { + if (currentText.isEmpty && itController.sourceText.value != null) { + textController.setSystemText( + itController.sourceText.value!, + EditTypeEnum.itDismissed, + ); + } + + debugPrint("DISMISSED: ${itController.dismissed}"); + if (itController.dismissed) { + _timesDismissedIT.value = _timesDismissedIT.value + 1; + } + _setChoreoMode(ChoreoModeEnum.igc); + errorService.resetError(); + } + + void _onSubmitSourceTextEdits() { + if (itController.editing.value) return; + textController.setSystemText("", EditTypeEnum.it); + } + + void _onAcceptContinuance(CompletedITStepModel step) { + textController.setSystemText( + textController.text + step.continuances[step.chosen].text, + EditTypeEnum.it, + ); + + _record.addRecord(textController.text, step: step); + inputFocus.requestFocus(); + notifyListeners(); + } + + void clearMatches(Object error) { + MatrixState.pAnyState.closeAllOverlays(); + igcController.clearMatches(); + errorService.setError(ChoreoError(raw: error)); + } + + void _onUpdateMatch(PangeaMatchState match) { + textController.setSystemText( + igcController.currentText!, + EditTypeEnum.igc, + ); + + switch (match.updatedMatch.status) { + case PangeaMatchStatusEnum.accepted: + case PangeaMatchStatusEnum.automatic: + case PangeaMatchStatusEnum.ignored: + _record.addRecord( + textController.text, + match: match.updatedMatch, + ); + case PangeaMatchStatusEnum.undo: + _record.choreoSteps.removeWhere( + (step) => + step.acceptedOrIgnoredMatch?.match == match.updatedMatch.match, + ); + default: + throw Exception("Unhandled match status: ${match.updatedMatch.status}"); + } + + inputFocus.requestFocus(); + notifyListeners(); + } +} diff --git a/lib/pangea/choreographer/controllers/error_service.dart b/lib/pangea/choreographer/choreographer_error_controller.dart similarity index 60% rename from lib/pangea/choreographer/controllers/error_service.dart rename to lib/pangea/choreographer/choreographer_error_controller.dart index 542cade9f..876fd54d1 100644 --- a/lib/pangea/choreographer/controllers/error_service.dart +++ b/lib/pangea/choreographer/choreographer_error_controller.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import '../../common/utils/error_handler.dart'; +import '../common/utils/error_handler.dart'; class ChoreoError { final Object? raw; @@ -16,17 +15,14 @@ class ChoreoError { IconData get icon => Icons.error_outline; } -class ErrorService { +class ChoreographerErrorController extends ChangeNotifier { ChoreoError? _error; int coolDownSeconds = 0; - final Choreographer controller; - ErrorService(this.controller); + ChoreographerErrorController(); bool get isError => _error != null; - ChoreoError? get error => _error; - Duration get defaultCooldown { coolDownSeconds += 3; return Duration(seconds: coolDownSeconds); @@ -34,7 +30,7 @@ class ErrorService { final List _errorCache = []; - setError(ChoreoError? error, {Duration? duration}) { + void setError(ChoreoError? error) { if (_errorCache.contains(error?.raw.toString())) { return; } @@ -44,28 +40,20 @@ class ErrorService { } _error = error; - Future.delayed(duration ?? defaultCooldown, () { - clear(); - _setState(); + Future.delayed(defaultCooldown, () { + _error = null; + notifyListeners(); }); - _setState(); + notifyListeners(); } - setErrorAndLock(ChoreoError? error) { + void setErrorAndLock(ChoreoError? error) { _error = error; - _setState(); + notifyListeners(); } - resetError() { - clear(); - _setState(); - } - - void _setState() { - controller.setState(); - } - - void clear() { + void resetError() { _error = null; + notifyListeners(); } } diff --git a/lib/pangea/choreographer/widgets/has_error_button.dart b/lib/pangea/choreographer/choreographer_has_error_button.dart similarity index 85% rename from lib/pangea/choreographer/widgets/has_error_button.dart rename to lib/pangea/choreographer/choreographer_has_error_button.dart index cb2ee7ea2..b90a52fed 100644 --- a/lib/pangea/choreographer/widgets/has_error_button.dart +++ b/lib/pangea/choreographer/choreographer_has_error_button.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import '../controllers/error_service.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'choreographer_error_controller.dart'; class ChoreographerHasErrorButton extends StatelessWidget { final ChoreoError error; diff --git a/lib/pangea/choreographer/choreographer_send_button.dart b/lib/pangea/choreographer/choreographer_send_button.dart new file mode 100644 index 000000000..b367ee482 --- /dev/null +++ b/lib/pangea/choreographer/choreographer_send_button.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; + +class ChoreographerSendButton extends StatelessWidget { + final ChatController controller; + const ChoreographerSendButton({ + super.key, + required this.controller, + }); + + Future _onPressed(BuildContext context) async { + controller.choreographer.onClickSend(); + controller.onInputBarSubmitted(); + } + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: controller.choreographer.isFetching, + builder: (context, fetching, __) { + return Container( + height: 56, + alignment: Alignment.center, + child: IconButton( + icon: const Icon(Icons.send_outlined), + color: controller.choreographer.assistanceState + .sendButtonColor(context), + onPressed: fetching ? null : () => _onPressed(context), + tooltip: L10n.of(context).send, + ), + ); + }, + ); + } +} diff --git a/lib/pangea/choreographer/choreographer_state_extension.dart b/lib/pangea/choreographer/choreographer_state_extension.dart new file mode 100644 index 000000000..e02801089 --- /dev/null +++ b/lib/pangea/choreographer/choreographer_state_extension.dart @@ -0,0 +1,32 @@ +import 'package:fluffychat/pangea/choreographer/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_mode_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +extension ChoregrapherStateExtension on Choreographer { + AssistanceStateEnum get assistanceState { + final isSubscribed = + MatrixState.pangeaController.subscriptionController.isSubscribed; + if (isSubscribed == false) return AssistanceStateEnum.noSub; + if (currentText.trim().isEmpty && itController.sourceText.value == null) { + return AssistanceStateEnum.noMessage; + } + + if (errorService.isError) { + return AssistanceStateEnum.error; + } + + if (igcController.openMatches.isNotEmpty || + (choreoMode == ChoreoModeEnum.it && + itController.currentITStep.value?.isFinal != true)) { + return AssistanceStateEnum.fetched; + } + + if (isFetching.value) return AssistanceStateEnum.fetching; + if (igcController.currentText == null && + itController.sourceText.value == null) { + return AssistanceStateEnum.notFetched; + } + return AssistanceStateEnum.complete; + } +} diff --git a/lib/pangea/choreographer/controllers/choreographer.dart b/lib/pangea/choreographer/controllers/choreographer.dart deleted file mode 100644 index b6ae1c447..000000000 --- a/lib/pangea/choreographer/controllers/choreographer.dart +++ /dev/null @@ -1,779 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:sentry_flutter/sentry_flutter.dart'; - -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/igc_controller.dart'; -import 'package:fluffychat/pangea/choreographer/enums/assistance_state_enum.dart'; -import 'package:fluffychat/pangea/choreographer/enums/edit_type.dart'; -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; -import 'package:fluffychat/pangea/choreographer/models/it_step.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/utils/input_paste_listener.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/paywall_card.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; -import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import '../../../widgets/matrix.dart'; -import 'error_service.dart'; -import 'it_controller.dart'; - -enum ChoreoMode { igc, it } - -class Choreographer { - PangeaController pangeaController; - ChatController chatController; - late PangeaTextController _textController; - late ITController itController; - late IgcController igc; - late ErrorService errorService; - - bool isFetching = false; - int _timesClicked = 0; - - final int msBeforeIGCStart = 10000; - - Timer? debounceTimer; - ChoreoRecord? choreoRecord; - // last checked by IGC or translation - String? _lastChecked; - ChoreoMode choreoMode = ChoreoMode.igc; - - final StreamController stateStream = StreamController.broadcast(); - StreamSubscription? _languageStream; - StreamSubscription? _settingsUpdateStream; - late AssistanceState _currentAssistanceState; - - String? translatedText; - - Choreographer(this.pangeaController, this.chatController) { - _initialize(); - } - _initialize() { - _textController = PangeaTextController(choreographer: this); - InputPasteListener(_textController, onPaste); - itController = ITController(this); - igc = IgcController(this); - errorService = ErrorService(this); - _textController.addListener(_onChangeListener); - _languageStream = - pangeaController.userController.languageStream.stream.listen((update) { - clear(); - setState(); - }); - - _settingsUpdateStream = - pangeaController.userController.settingsUpdateStream.stream.listen((_) { - setState(); - }); - _currentAssistanceState = assistanceState; - clear(); - } - - void send(BuildContext context) { - debugPrint("can send message: $canSendMessage"); - - // if isFetching, already called to getLanguageHelp and hasn't completed yet - // could happen if user clicked send button multiple times in a row - if (isFetching) return; - - if (igc.igcTextData != null && igc.igcTextData!.matches.isNotEmpty) { - igc.showFirstMatch(context); - return; - } else if (isRunningIT) { - // If the user is in the middle of IT, don't send the message. - // If they've already clicked the send button once, this will - // not be true, so they can still send it if they want. - return; - } - - final isSubscribed = pangeaController.subscriptionController.isSubscribed; - if (isSubscribed != null && !isSubscribed) { - // don't want to run IGC if user isn't subscribed, so either - // show the paywall if applicable or just send the message - final status = pangeaController.subscriptionController.subscriptionStatus; - status == SubscriptionStatus.shouldShowPaywall - ? OverlayUtil.showPositionedCard( - context: context, - cardToShow: PaywallCard( - chatController: chatController, - ), - maxHeight: 325, - maxWidth: 325, - transformTargetId: inputTransformTargetKey, - ) - : chatController.send( - message: chatController.sendController.text, - ); - return; - } - - if (chatController.shouldShowLanguageMismatchPopup) { - chatController.showLanguageMismatchPopup(); - return; - } - - if (!igc.hasRelevantIGCTextData && !itController.dismissed) { - getLanguageHelp().then((value) => _sendWithIGC(context)); - } else { - _sendWithIGC(context); - } - } - - Future _sendWithIGC(BuildContext context) async { - if (!canSendMessage) { - // It's possible that the reason user can't send message is because they're in the middle of IT. If this is the case, - // do nothing (there's no matches to show). The user can click the send button again to override this. - if (!isRunningIT) { - igc.showFirstMatch(context); - } - return; - } - - if (chatController.sendController.text.trim().isEmpty) { - return; - } - - final message = chatController.sendController.text; - final fakeEventId = chatController.sendFakeMessage(); - final PangeaRepresentation? originalWritten = - choreoRecord?.includedIT == true && translatedText != null - ? PangeaRepresentation( - langCode: l1LangCode ?? LanguageKeys.unknownLanguage, - text: translatedText!, - originalWritten: true, - originalSent: false, - ) - : null; - - PangeaMessageTokens? tokensSent; - PangeaRepresentation? originalSent; - try { - TokensResponseModel? res; - if (l1LangCode != null && l2LangCode != null) { - res = await pangeaController.messageData - .getTokens( - repEventId: null, - room: chatController.room, - req: TokensRequestModel( - fullText: message, - senderL1: l1LangCode!, - senderL2: l2LangCode!, - ), - ) - .timeout(const Duration(seconds: 10)); - } - - originalSent = PangeaRepresentation( - langCode: res?.detections.firstOrNull?.langCode ?? - LanguageKeys.unknownLanguage, - text: message, - originalSent: true, - originalWritten: originalWritten == null, - ); - - tokensSent = res != null - ? PangeaMessageTokens( - tokens: res.tokens, - detections: res.detections, - ) - : null; - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "currentText": message, - "l1LangCode": l1LangCode, - "l2LangCode": l2LangCode, - "choreoRecord": choreoRecord?.toJson(), - }, - level: e is TimeoutException ? SentryLevel.warning : SentryLevel.error, - ); - } finally { - chatController.send( - message: message, - originalSent: originalSent, - originalWritten: originalWritten, - tokensSent: tokensSent, - choreo: choreoRecord, - tempEventId: fakeEventId, - ); - clear(); - } - } - - _resetDebounceTimer() { - if (debounceTimer != null) { - debounceTimer?.cancel(); - debounceTimer = null; - } - } - - void _initChoreoRecord() { - choreoRecord ??= ChoreoRecord( - originalText: textController.text, - choreoSteps: [], - openMatches: [], - ); - } - - void onITStart(PangeaMatch itMatch) { - if (!itMatch.isITStart) { - throw Exception("this isn't an itStart match!"); - } - choreoMode = ChoreoMode.it; - itController.initializeIT( - ITStartData(_textController.text, null), - ); - itMatch.status = PangeaMatchStatus.accepted; - translatedText = _textController.text; - - //PTODO - if totally in L1, save tokens, that's good stuff - - igc.clear(); - - _textController.setSystemText("", EditType.itStart); - - _initChoreoRecord(); - choreoRecord!.addRecord(_textController.text, match: itMatch); - } - - /// Handles any changes to the text input - _onChangeListener() { - // Rebuild the IGC button if the state has changed. - // This accounts for user typing after initial IGC has completed - if (_currentAssistanceState != assistanceState) { - setState(); - } - - if (_noChange) { - return; - } - - _lastChecked = _textController.text; - - if (_textController.editType == EditType.igc || - _textController.editType == EditType.itDismissed) { - _textController.editType = EditType.keyboard; - return; - } - - // not sure if this is necessary now - MatrixState.pAnyState.closeOverlay(); - - if (errorService.isError) { - return; - } - - igc.clear(); - - _resetDebounceTimer(); - - // we store translated text in the choreographer to save at the original written - // text, but if the user edits the text after the translation, reset it, since the - // sent text may not be an exact translation of the original text - if (_textController.editType == EditType.keyboard) { - translatedText = null; - } - - if (editTypeIsKeyboard) { - debounceTimer ??= Timer( - Duration(milliseconds: msBeforeIGCStart), - () => getLanguageHelp(), - ); - } else { - getLanguageHelp(); - } - - //Note: we don't set the keyboard type on each keyboard stroke so this is how we default to - //a change being from the keyboard unless explicitly set to one of the other - //types when that action happens (e.g. an it/igc choice is selected) - textController.editType = EditType.keyboard; - } - - /// Fetches the language help for the current text, including grammar correction, language detection, - /// tokens, and translations. Includes logic to exit the flow if the user is not subscribed, if the tools are not enabled, or - /// or if autoIGC is not enabled and the user has not manually requested it. - /// [onlyTokensAndLanguageDetection] will - Future getLanguageHelp({ - bool manual = false, - }) async { - try { - if (errorService.isError) return; - final SubscriptionStatus canSendStatus = - pangeaController.subscriptionController.subscriptionStatus; - - if (canSendStatus != SubscriptionStatus.subscribed || - l2Lang == null || - l1Lang == null || - (!igcEnabled && !itEnabled) || - (!isAutoIGCEnabled && !manual && choreoMode != ChoreoMode.it)) { - return; - } - - startLoading(); - _initChoreoRecord(); - - // if getting language assistance after finishing IT, - // reset the itController - if (choreoMode == ChoreoMode.it && itController.isTranslationDone) { - itController.clear(); - } - - await (isRunningIT - ? itController.getTranslationData(_useCustomInput) - : igc.getIGCTextData()); - } catch (err, stack) { - ErrorHandler.logError( - e: err, - s: stack, - data: { - "l2Lang": l2Lang?.toJson(), - "l1Lang": l1Lang?.toJson(), - "choreoMode": choreoMode, - "igcEnabled": igcEnabled, - "itEnabled": itEnabled, - "isAutoIGCEnabled": isAutoIGCEnabled, - "isTranslationDone": itController.isTranslationDone, - "useCustomInput": _useCustomInput, - }, - ); - } finally { - stopLoading(); - } - } - - void onITChoiceSelect(ITStep step) { - _textController.setSystemText( - _textController.text + step.continuances[step.chosen!].text, - step.continuances[step.chosen!].gold - ? EditType.itGold - : EditType.itStandard, - ); - _textController.selection = - TextSelection.collapsed(offset: _textController.text.length); - - _initChoreoRecord(); - choreoRecord!.addRecord(_textController.text, step: step); - - giveInputFocus(); - } - - Future onReplacementSelect({ - required int matchIndex, - required int choiceIndex, - }) async { - try { - if (igc.igcTextData == null) { - ErrorHandler.logError( - e: "onReplacementSelect with null igcTextData", - s: StackTrace.current, - data: { - "matchIndex": matchIndex, - "choiceIndex": choiceIndex, - }, - ); - MatrixState.pAnyState.closeOverlay(); - return; - } - if (igc.igcTextData!.matches[matchIndex].match.choices == null) { - ErrorHandler.logError( - e: "onReplacementSelect with null choices", - s: StackTrace.current, - data: { - "igctextData": igc.igcTextData?.toJson(), - "matchIndex": matchIndex, - "choiceIndex": choiceIndex, - }, - ); - MatrixState.pAnyState.closeOverlay(); - return; - } - - //if it's the wrong choice, return - // if (!igc.igcTextData!.matches[matchIndex].match.choices![choiceIndex] - // .selected) { - // igc.igcTextData!.matches[matchIndex].match.choices![choiceIndex] - // .selected = true; - // setState(); - // return; - // } - - igc.igcTextData!.matches[matchIndex].match.choices![choiceIndex] - .selected = true; - - final isNormalizationError = - igc.spanDataController.isNormalizationError(matchIndex); - - final match = igc.igcTextData!.matches[matchIndex].copyWith - ..status = PangeaMatchStatus.accepted; - - igc.igcTextData!.acceptReplacement( - matchIndex, - choiceIndex, - ); - - _textController.setSystemText( - igc.igcTextData!.originalInput, - EditType.igc, - ); - - //if it's the right choice, replace in text - if (!isNormalizationError) { - _initChoreoRecord(); - choreoRecord!.addRecord( - _textController.text, - match: match, - ); - } - - MatrixState.pAnyState.closeOverlay(); - setState(); - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "igctextData": igc.igcTextData?.toJson(), - "matchIndex": matchIndex, - "choiceIndex": choiceIndex, - }, - ); - igc.igcTextData?.matches.clear(); - } finally { - setState(); - } - } - - void onUndoReplacement(PangeaMatch match) { - try { - igc.igcTextData?.undoReplacement(match); - - choreoRecord?.choreoSteps.removeWhere( - (step) => step.acceptedOrIgnoredMatch == match, - ); - - _textController.setSystemText( - igc.igcTextData!.originalInput, - EditType.igc, - ); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "igctextData": igc.igcTextData?.toJson(), - "match": match.toJson(), - }, - ); - } finally { - MatrixState.pAnyState.closeOverlay(); - setState(); - } - } - - void acceptNormalizationMatches() { - final List indices = []; - for (int i = 0; i < igc.igcTextData!.matches.length; i++) { - final isNormalizationError = - igc.spanDataController.isNormalizationError(i); - if (isNormalizationError) indices.add(i); - } - - if (indices.isEmpty) return; - - _initChoreoRecord(); - final matches = igc.igcTextData!.matches - .where( - (match) => indices.contains(igc.igcTextData!.matches.indexOf(match)), - ) - .toList(); - - for (final match in matches) { - final index = igc.igcTextData!.matches.indexOf(match); - igc.igcTextData!.acceptReplacement( - index, - match.match.choices!.indexWhere( - (c) => c.isBestCorrection, - ), - ); - - final newMatch = match.copyWith; - newMatch.status = PangeaMatchStatus.automatic; - newMatch.match.length = match.match.choices! - .firstWhere((c) => c.isBestCorrection) - .value - .characters - .length; - - _textController.setSystemText( - igc.igcTextData!.originalInput, - EditType.igc, - ); - - choreoRecord!.addRecord( - currentText, - match: newMatch, - ); - } - } - - void onIgnoreMatch({required int matchIndex}) { - try { - if (igc.igcTextData == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "should not be in onIgnoreMatch with null igcTextData", - s: StackTrace.current, - data: {}, - ); - return; - } - - if (matchIndex == -1) { - debugger(when: kDebugMode); - throw Exception("Cannot find the ignored match in igcTextData"); - } - - igc.onIgnoreMatch(igc.igcTextData!.matches[matchIndex]); - igc.igcTextData!.matches[matchIndex].status = PangeaMatchStatus.ignored; - - final isNormalizationError = - igc.spanDataController.isNormalizationError(matchIndex); - - if (!isNormalizationError) { - _initChoreoRecord(); - choreoRecord!.addRecord( - _textController.text, - match: igc.igcTextData!.matches[matchIndex], - ); - } - - igc.igcTextData!.matches.removeAt(matchIndex); - } catch (err, stack) { - debugger(when: kDebugMode); - Sentry.addBreadcrumb( - Breadcrumb( - data: { - "igcTextData": igc.igcTextData?.toJson(), - "matchIndex": matchIndex, - }, - ), - ); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "igctextData": igc.igcTextData?.toJson(), - }, - ); - igc.igcTextData?.matches.clear(); - } finally { - setState(); - } - } - - void giveInputFocus() { - Future.delayed(Duration.zero, () { - chatController.inputFocus.requestFocus(); - }); - } - - String get currentText => _textController.text; - - PangeaTextController get textController => _textController; - - String get accessToken => pangeaController.userController.accessToken; - - clear() { - choreoMode = ChoreoMode.igc; - _lastChecked = null; - _timesClicked = 0; - isFetching = false; - choreoRecord = null; - translatedText = null; - itController.clear(); - igc.dispose(); - _resetDebounceTimer(); - } - - Future onPaste(value) async { - _initChoreoRecord(); - choreoRecord!.pastedStrings.add(value); - } - - dispose() { - _textController.dispose(); - _languageStream?.cancel(); - _settingsUpdateStream?.cancel(); - stateStream.close(); - TtsController.stop(); - } - - LanguageModel? get l2Lang { - return pangeaController.languageController.activeL2Model(); - } - - String? get l2LangCode => l2Lang?.langCode; - - LanguageModel? get l1Lang => - pangeaController.languageController.activeL1Model(); - - String? get l1LangCode => l1Lang?.langCode; - - String? get userId => pangeaController.userController.userId; - - bool get _noChange => - _lastChecked != null && _lastChecked == _textController.text; - - bool get isRunningIT => - choreoMode == ChoreoMode.it && !itController.isTranslationDone; - - void startLoading() { - _lastChecked = _textController.text; - isFetching = true; - setState(); - } - - void stopLoading() { - isFetching = false; - setState(); - } - - void incrementTimesClicked() { - if (assistanceState == AssistanceState.fetched) { - _timesClicked++; - - // if user is doing IT, call closeIT here to - // ensure source text is replaced when needed - if (itController.isOpen && _timesClicked > 1) { - itController.closeIT(); - } - } - } - - get roomId => chatController.roomId; - - bool get _useCustomInput => [ - EditType.keyboard, - EditType.igc, - EditType.alternativeTranslation, - ].contains(_textController.editType); - - bool get editTypeIsKeyboard => EditType.keyboard == _textController.editType; - - setState() { - if (!stateStream.isClosed) { - stateStream.add(0); - } - _currentAssistanceState = assistanceState; - } - - LayerLinkAndKey get itBarLinkAndKey => - MatrixState.pAnyState.layerLinkAndKey(itBarTransformTargetKey); - - String get itBarTransformTargetKey => 'it_bar$roomId'; - - LayerLinkAndKey get inputLayerLinkAndKey => - MatrixState.pAnyState.layerLinkAndKey(inputTransformTargetKey); - - String get inputTransformTargetKey => 'input$roomId'; - - LayerLinkAndKey get itBotLayerLinkAndKey => - MatrixState.pAnyState.layerLinkAndKey(itBotTransformTargetKey); - - String get itBotTransformTargetKey => 'itBot$roomId'; - - bool get igcEnabled => pangeaController.permissionsController.isToolEnabled( - ToolSetting.interactiveGrammar, - chatController.room, - ); - - bool get itEnabled => pangeaController.permissionsController.isToolEnabled( - ToolSetting.interactiveTranslator, - chatController.room, - ); - - bool get isAutoIGCEnabled => - pangeaController.permissionsController.isToolEnabled( - ToolSetting.autoIGC, - chatController.room, - ); - - AssistanceState get assistanceState { - final isSubscribed = pangeaController.subscriptionController.isSubscribed; - if (isSubscribed != null && !isSubscribed) { - return AssistanceState.noSub; - } - - if (currentText.isEmpty && itController.sourceText == null) { - return AssistanceState.noMessage; - } - - if ((igc.igcTextData?.matches.isNotEmpty ?? false) || isRunningIT) { - return AssistanceState.fetched; - } - - if (isFetching) { - return AssistanceState.fetching; - } - - if (igc.igcTextData == null) { - return AssistanceState.notFetched; - } - - return AssistanceState.complete; - } - - bool get canSendMessage { - // if there's an error, let them send. we don't want to block them from sending in this case - if (errorService.isError || - l2Lang == null || - l1Lang == null || - _timesClicked > 1) { - return true; - } - - // if they're in IT mode, don't let them send - if (itEnabled && isRunningIT) return false; - - // if they've turned off IGC then let them send the message when they want - if (!isAutoIGCEnabled) return true; - - // if we're in the middle of fetching results, don't let them send - if (isFetching) return false; - - // they're supposed to run IGC but haven't yet, don't let them send - if (igc.igcTextData == null) { - return itController.dismissed; - } - - // if they have relevant matches, don't let them send - final hasITMatches = - igc.igcTextData!.matches.any((match) => match.isITStart); - final hasIGCMatches = - igc.igcTextData!.matches.any((match) => !match.isITStart); - if ((itEnabled && hasITMatches) || (igcEnabled && hasIGCMatches)) { - return false; - } - - // otherwise, let them send - return true; - } -} diff --git a/lib/pangea/choreographer/controllers/contextual_definition_controller.dart b/lib/pangea/choreographer/controllers/contextual_definition_controller.dart deleted file mode 100644 index a0622e957..000000000 --- a/lib/pangea/choreographer/controllers/contextual_definition_controller.dart +++ /dev/null @@ -1,152 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/foundation.dart'; - -import 'package:collection/collection.dart'; -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import '../../common/constants/model_keys.dart'; -import '../../common/controllers/pangea_controller.dart'; -import '../../common/network/requests.dart'; -import '../../common/network/urls.dart'; - -class ContextualDefinitionController { - late PangeaController _pangeaController; - - final List<_ContextualDefinitionCacheItem> _definitions = []; - - ContextualDefinitionController(PangeaController pangeaController) { - _pangeaController = pangeaController; - } - - _ContextualDefinitionCacheItem? _getLocal( - ContextualDefinitionRequestModel req, - ) => - _definitions.firstWhereOrNull( - (e) => e.word == req.word && e.fullText == req.fullText, - ); - - Future get( - ContextualDefinitionRequestModel req, - ) { - final _ContextualDefinitionCacheItem? localItem = _getLocal(req); - - if (localItem != null) return localItem.data; - - _definitions.add( - _ContextualDefinitionCacheItem( - word: req.word, - fullText: req.fullText, - data: _define(req), - ), - ); - - return _definitions.last.data; - } - - Future _define( - ContextualDefinitionRequestModel request, - ) async { - try { - final ContextualDefinitionResponseModel res = - await _ContextualDefinitionRepo.define( - _pangeaController.userController.accessToken, - request, - ); - return res; - } catch (err, stack) { - debugPrint( - "error getting contextual definition for ${request.word} in '${request.fullText}'", - ); - ErrorHandler.logError(e: err, s: stack, data: request.toJson()); - return null; - } - } -} - -class _ContextualDefinitionCacheItem { - String word; - String fullText; - Future data; - - _ContextualDefinitionCacheItem({ - required this.word, - required this.fullText, - required this.data, - }); -} - -class _ContextualDefinitionRepo { - static Future define( - String accessToken, - ContextualDefinitionRequestModel request, - ) async { - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final Response res = await req.post( - url: PApiUrls.contextualDefinition, - body: request.toJson(), - ); - - final ContextualDefinitionResponseModel response = - ContextualDefinitionResponseModel.fromJson( - jsonDecode( - utf8.decode(res.bodyBytes).toString(), - ), - ); - - if (response.text.isEmpty) { - ErrorHandler.logError( - e: Exception( - "empty text in contextual definition response", - ), - data: { - "request": request.toJson(), - "accessToken": accessToken, - }, - ); - } - - return response; - } -} - -class ContextualDefinitionRequestModel { - final String fullText; - final String word; - final String feedbackLang; - final String fullTextLang; - final String wordLang; - - ContextualDefinitionRequestModel({ - required this.fullText, - required this.word, - required this.feedbackLang, - required this.fullTextLang, - required this.wordLang, - }); - - Map toJson() => { - ModelKey.fullText: fullText, - ModelKey.word: word, - ModelKey.lang: feedbackLang, - ModelKey.fullTextLang: fullTextLang, - ModelKey.wordLang: wordLang, - }; -} - -class ContextualDefinitionResponseModel { - String text; - - ContextualDefinitionResponseModel({required this.text}); - - factory ContextualDefinitionResponseModel.fromJson( - Map json, - ) => - ContextualDefinitionResponseModel(text: json["response"]); -} diff --git a/lib/pangea/choreographer/controllers/igc_controller.dart b/lib/pangea/choreographer/controllers/igc_controller.dart deleted file mode 100644 index abefff19b..000000000 --- a/lib/pangea/choreographer/controllers/igc_controller.dart +++ /dev/null @@ -1,293 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; - -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/span_data_controller.dart'; -import 'package:fluffychat/pangea/choreographer/models/igc_text_data_model.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/repo/igc_repo.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/span_card.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../common/utils/error_handler.dart'; -import '../../common/utils/overlay.dart'; - -class _IGCTextDataCacheItem { - Future data; - - _IGCTextDataCacheItem({required this.data}); -} - -class _IgnoredMatchCacheItem { - PangeaMatch match; - - String get spanText => match.match.fullText.substring( - match.match.offset, - match.match.offset + match.match.length, - ); - - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - return other is _IgnoredMatchCacheItem && other.spanText == spanText; - } - - @override - int get hashCode => spanText.hashCode; - - _IgnoredMatchCacheItem({required this.match}); -} - -class IgcController { - Choreographer choreographer; - IGCTextData? igcTextData; - Object? igcError; - Completer igcCompleter = Completer(); - late SpanDataController spanDataController; - - // cache for IGC data and prev message - final Map _igcTextDataCache = {}; - - final Map _ignoredMatchCache = {}; - - Timer? _cacheClearTimer; - - IgcController(this.choreographer) { - spanDataController = SpanDataController(choreographer); - _initializeCacheClearing(); - } - - void _initializeCacheClearing() { - const duration = Duration(minutes: 2); - _cacheClearTimer = Timer.periodic(duration, (Timer t) { - _igcTextDataCache.clear(); - _ignoredMatchCache.clear(); - }); - } - - Future getIGCTextData() async { - try { - if (choreographer.currentText.isEmpty) return clear(); - debugPrint('getIGCTextData called with ${choreographer.currentText}'); - - final IGCRequestBody reqBody = IGCRequestBody( - fullText: choreographer.currentText, - userId: choreographer.pangeaController.userController.userId!, - userL1: choreographer.l1LangCode!, - userL2: choreographer.l2LangCode!, - enableIGC: choreographer.igcEnabled && - choreographer.choreoMode != ChoreoMode.it, - enableIT: choreographer.itEnabled && - choreographer.choreoMode != ChoreoMode.it, - prevMessages: _prevMessages(), - ); - - if (_cacheClearTimer == null || !_cacheClearTimer!.isActive) { - _initializeCacheClearing(); - } - - // if the request is not in the cache, add it - if (!_igcTextDataCache.containsKey(reqBody.hashCode)) { - _igcTextDataCache[reqBody.hashCode] = _IGCTextDataCacheItem( - data: IgcRepo.getIGC( - choreographer.accessToken, - igcRequest: reqBody, - ), - ); - } - - final IGCTextData igcTextDataResponse = - await _igcTextDataCache[reqBody.hashCode]! - .data - .timeout((const Duration(seconds: 10))); - - // this will happen when the user changes the input while igc is fetching results - if (igcTextDataResponse.originalInput.trim() != - choreographer.currentText.trim()) { - return; - } - // get ignored matches from the original igcTextData - // if the new matches are the same as the original match - // could possibly change the status of the new match - // thing is the same if the text we are trying to change is the smae - // as the new text we are trying to change (suggestion is the same) - - // Check for duplicate or minor text changes that shouldn't trigger suggestions - // checks for duplicate input - - igcTextData = igcTextDataResponse; - - final List filteredMatches = List.from(igcTextData!.matches); - for (final PangeaMatch match in igcTextData!.matches) { - final _IgnoredMatchCacheItem cacheEntry = - _IgnoredMatchCacheItem(match: match); - - if (_ignoredMatchCache.containsKey(cacheEntry.hashCode)) { - filteredMatches.remove(match); - } - } - - igcTextData!.matches = filteredMatches; - choreographer.acceptNormalizationMatches(); - - // TODO - for each new match, - // check if existing igcTextData has one and only one match with the same error text and correction - // if so, keep the original match and discard the new one - // if not, add the new match to the existing igcTextData - - // After fetching igc data, pre-call span details for each match optimistically. - // This will make the loading of span details faster for the user - if (igcTextData?.matches.isNotEmpty ?? false) { - for (int i = 0; i < igcTextData!.matches.length; i++) { - if (!igcTextData!.matches[i].isITStart) { - spanDataController.getSpanDetails(i); - } - } - } - - debugPrint("igc text ${igcTextData.toString()}"); - } catch (err, stack) { - debugger(when: kDebugMode); - choreographer.errorService.setError( - ChoreoError(raw: err), - ); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "currentText": choreographer.currentText, - "userL1": choreographer.l1LangCode, - "userL2": choreographer.l2LangCode, - "igcEnabled": choreographer.igcEnabled, - "itEnabled": choreographer.itEnabled, - "matches": igcTextData?.matches.map((e) => e.toJson()), - }, - level: - err is TimeoutException ? SentryLevel.warning : SentryLevel.error, - ); - clear(); - } - } - - void onIgnoreMatch(PangeaMatch match) { - final cacheEntry = _IgnoredMatchCacheItem(match: match); - if (!_ignoredMatchCache.containsKey(cacheEntry.hashCode)) { - _ignoredMatchCache[cacheEntry.hashCode] = cacheEntry; - } - } - - void showFirstMatch(BuildContext context) { - if (igcTextData == null || igcTextData!.matches.isEmpty) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "should not be calling showFirstMatch with this igcTextData.", - s: StackTrace.current, - data: { - "igcTextData": igcTextData?.toJson(), - }, - ); - return; - } - - const int firstMatchIndex = 0; - final PangeaMatch match = igcTextData!.matches[firstMatchIndex]; - - if (match.isITStart && - // choreographer.itAutoPlayEnabled && - igcTextData != null) { - choreographer.onITStart(igcTextData!.matches[firstMatchIndex]); - return; - } - - choreographer.chatController.inputFocus.unfocus(); - MatrixState.pAnyState.closeAllOverlays( - filter: RegExp(r'span_card_overlay_\d+'), - ); - OverlayUtil.showPositionedCard( - overlayKey: "span_card_overlay_$firstMatchIndex", - context: context, - cardToShow: SpanCard( - matchIndex: firstMatchIndex, - choreographer: choreographer, - ), - maxHeight: 325, - maxWidth: 325, - transformTargetId: choreographer.inputTransformTargetKey, - onDismiss: () => choreographer.setState(), - ignorePointer: true, - isScrollable: false, - ); - } - - /// Get the content of previous text and audio messages in chat. - /// Passed to IGC request to add context. - List _prevMessages({int numMessages = 5}) { - final List events = choreographer.chatController.visibleEvents - .where( - (e) => - e.type == EventTypes.Message && - (e.messageType == MessageTypes.Text || - e.messageType == MessageTypes.Audio), - ) - .toList(); - - final List messages = []; - for (final Event event in events) { - final String? content = event.messageType == MessageTypes.Text - ? event.content.toString() - : PangeaMessageEvent( - event: event, - timeline: choreographer.chatController.timeline!, - ownMessage: event.senderId == - choreographer.pangeaController.matrixState.client.userID, - ).getSpeechToTextLocal()?.transcript.text.trim(); // trim whitespace - if (content == null) continue; - messages.add( - PreviousMessage( - content: content, - sender: event.senderId, - timestamp: event.originServerTs, - ), - ); - if (messages.length >= numMessages) { - return messages; - } - } - return messages; - } - - bool get hasRelevantIGCTextData { - if (igcTextData == null) return false; - - if (igcTextData!.originalInput != choreographer.currentText) { - debugPrint( - "returning isIGCTextDataRelevant false because text has changed", - ); - return false; - } - return true; - } - - clear() { - igcTextData = null; - spanDataController.clearCache(); - spanDataController.dispose(); - MatrixState.pAnyState.closeAllOverlays( - filter: RegExp(r'span_card_overlay_\d+'), - ); - } - - dispose() { - clear(); - _igcTextDataCache.clear(); - _ignoredMatchCache.clear(); - _cacheClearTimer?.cancel(); - } -} diff --git a/lib/pangea/choreographer/controllers/it_controller.dart b/lib/pangea/choreographer/controllers/it_controller.dart deleted file mode 100644 index eb4a56c69..000000000 --- a/lib/pangea/choreographer/controllers/it_controller.dart +++ /dev/null @@ -1,452 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:http/http.dart' as http; -import 'package:sentry_flutter/sentry_flutter.dart'; - -import 'package:fluffychat/pangea/choreographer/constants/choreo_constants.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; -import 'package:fluffychat/pangea/choreographer/enums/edit_type.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../models/custom_input_translation_model.dart'; -import '../models/it_response_model.dart'; -import '../models/it_step.dart'; -import '../repo/interactive_translation_repo.dart'; -import 'choreographer.dart'; - -class ITController { - Choreographer choreographer; - - bool _isOpen = false; - bool _willOpen = false; - bool _isEditingSourceText = false; - bool showChoiceFeedback = false; - bool dismissed = false; - - ITStartData? _itStartData; - String? sourceText; - List completedITSteps = []; - CurrentITStep? currentITStep; - Completer? nextITStep; - GoldRouteTracker goldRouteTracker = GoldRouteTracker.defaultTracker; - List payLoadIds = []; - - ITController(this.choreographer); - - void clear() { - _isOpen = false; - _willOpen = false; - MatrixState.pAnyState.closeOverlay("it_feedback_card"); - - showChoiceFeedback = false; - _isEditingSourceText = false; - dismissed = false; - - _itStartData = null; - sourceText = null; - completedITSteps = []; - currentITStep = null; - nextITStep = null; - goldRouteTracker = GoldRouteTracker.defaultTracker; - payLoadIds = []; - - choreographer.choreoMode = ChoreoMode.igc; - choreographer.setState(); - } - - Duration get animationSpeed => const Duration(milliseconds: 300); - - Future initializeIT(ITStartData itStartData) async { - _willOpen = true; - Future.delayed(const Duration(microseconds: 100), () { - _isOpen = true; - }); - _itStartData = itStartData; - } - - void closeIT() { - // if the user hasn't gone through any IT steps, reset the text - if (completedITSteps.isEmpty && sourceText != null) { - choreographer.textController.setSystemText( - sourceText!, - EditType.itDismissed, - ); - } - clear(); - choreographer.errorService.resetError(); - dismissed = true; - } - - /// if IGC isn't positive that text is full L1 then translate to L1 - Future _setSourceText() async { - if (_itStartData == null || _itStartData!.text.isEmpty) { - Sentry.addBreadcrumb( - Breadcrumb( - message: "choreo context", - data: { - "igcTextData": choreographer.igc.igcTextData?.toJson(), - "currentText": choreographer.currentText, - }, - ), - ); - throw Exception("null _itStartData or empty text in _setSourceText"); - } - debugPrint("_setSourceText with detectedLang ${_itStartData!.langCode}"); - // if (_itStartData!.langCode == choreographer.l1LangCode) { - sourceText = _itStartData!.text; - choreographer.translatedText = sourceText; - return; - // } - - // final FullTextTranslationResponseModel res = - // await FullTextTranslationRepo.translate( - // accessToken: await choreographer.accessToken, - // request: FullTextTranslationRequestModel( - // text: _itStartData!.text, - // tgtLang: choreographer.l1LangCode!, - // srcLang: _itStartData!.langCode, - // userL1: choreographer.l1LangCode!, - // userL2: choreographer.l2LangCode!, - // ), - // ); - // sourceText = res.bestTranslation; - } - - // used 1) at very beginning (with custom input = null) - // and 2) if they make direct edits to the text field - Future getTranslationData(bool useCustomInput) async { - try { - choreographer.startLoading(); - - final String currentText = choreographer.currentText; - - if (sourceText == null) await _setSourceText(); - - if (useCustomInput && currentITStep != null) { - completedITSteps.add( - ITStep( - currentITStep!.continuances, - customInput: currentText, - ), - ); - } - - currentITStep = null; - - // During first IT step, next step will not be set - if (nextITStep == null) { - final ITResponseModel res = await _customInputTranslation(currentText) - .timeout(const Duration(seconds: 10)); - if (sourceText == null) return; - - if (res.goldContinuances != null && res.goldContinuances!.isNotEmpty) { - goldRouteTracker = GoldRouteTracker( - res.goldContinuances!, - sourceText!, - ); - } - - currentITStep = CurrentITStep( - sourceText: sourceText!, - currentText: currentText, - responseModel: res, - storedGoldContinuances: goldRouteTracker.continuances, - ); - - _addPayloadId(res); - } else { - currentITStep = await nextITStep!.future; - } - - if (isTranslationDone) { - nextITStep = null; - closeIT(); - } else { - nextITStep = Completer(); - final nextStep = await _getNextTranslationData(); - nextITStep?.complete(nextStep); - } - } catch (e, s) { - debugger(when: kDebugMode); - if (e is! http.Response) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "currentText": choreographer.currentText, - "sourceText": sourceText, - "currentITStepPayloadID": currentITStep?.payloadId, - }, - level: - e is TimeoutException ? SentryLevel.warning : SentryLevel.error, - ); - } - - if (_willOpen) { - choreographer.errorService.setErrorAndLock( - ChoreoError(raw: e), - ); - } - } finally { - choreographer.stopLoading(); - } - } - - Future _getNextTranslationData() async { - if (sourceText == null) { - ErrorHandler.logError( - e: Exception("sourceText is null in getNextTranslationData"), - data: { - "sourceText": sourceText, - "currentITStepPayloadID": currentITStep?.payloadId, - "continuances": goldRouteTracker.continuances.map((e) => e.toJson()), - }, - ); - return null; - } - - if (completedITSteps.length >= goldRouteTracker.continuances.length) { - return null; - } - - try { - final String currentText = choreographer.currentText; - final String nextText = - goldRouteTracker.continuances[completedITSteps.length].text; - - final ITResponseModel res = - await _customInputTranslation(currentText + nextText); - if (sourceText == null) return null; - - return CurrentITStep( - sourceText: sourceText!, - currentText: nextText, - responseModel: res, - storedGoldContinuances: goldRouteTracker.continuances, - ); - } catch (e, s) { - debugger(when: kDebugMode); - if (e is! http.Response) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "sourceText": sourceText, - "currentITStepPayloadID": currentITStep?.payloadId, - "continuances": - goldRouteTracker.continuances.map((e) => e.toJson()), - }, - ); - } - choreographer.errorService.setErrorAndLock( - ChoreoError(raw: e), - ); - } finally { - choreographer.stopLoading(); - } - return null; - } - - Future onEditSourceTextSubmit(String newSourceText) async { - try { - _isOpen = true; - _isEditingSourceText = false; - _itStartData = ITStartData(newSourceText, choreographer.l1LangCode); - completedITSteps = []; - currentITStep = null; - nextITStep = null; - goldRouteTracker = GoldRouteTracker.defaultTracker; - payLoadIds = []; - - _setSourceText(); - getTranslationData(false); - } catch (err, stack) { - debugger(when: kDebugMode); - if (err is! http.Response) { - ErrorHandler.logError( - e: err, - s: stack, - data: { - "newSourceText": newSourceText, - "l1Lang": choreographer.l1LangCode, - }, - ); - } - choreographer.errorService.setErrorAndLock( - ChoreoError(raw: err), - ); - } finally { - choreographer.stopLoading(); - choreographer.textController.setSystemText( - "", - EditType.other, - ); - } - } - - Future _customInputTranslation(String textInput) async { - return ITRepo.customInputTranslate( - CustomInputRequestModel( - //this should be set by this time - text: sourceText!, - customInput: textInput, - sourceLangCode: sourceLangCode, - targetLangCode: targetLangCode, - userId: choreographer.userId!, - roomId: choreographer.roomId!, - goldTranslation: goldRouteTracker.fullTranslation, - goldContinuances: goldRouteTracker.continuances, - ), - ); - } - - //maybe we store IT data in the same format? make a specific kind of match? - void selectTranslation(int chosenIndex) { - if (currentITStep == null) return; - final itStep = ITStep(currentITStep!.continuances, chosen: chosenIndex); - - completedITSteps.add(itStep); - - showChoiceFeedback = true; - - Future.delayed( - const Duration( - milliseconds: ChoreoConstants.millisecondsToDisplayFeedback, - ), - () { - showChoiceFeedback = false; - choreographer.setState(); - }, - ); - - choreographer.onITChoiceSelect(itStep); - choreographer.setState(); - } - - String get uniqueKeyForLayerLink => "itChoices${choreographer.roomId}"; - - void _addPayloadId(ITResponseModel res) { - payLoadIds.add(res.payloadId); - } - - bool get isTranslationDone => currentITStep != null && currentITStep!.isFinal; - - bool get isOpen => _isOpen; - - bool get willOpen => _willOpen; - - String get targetLangCode => choreographer.l2LangCode!; - - String get sourceLangCode => choreographer.l1LangCode!; - - bool get isLoading => choreographer.isFetching; - - void setIsEditingSourceText(bool value) { - _isEditingSourceText = value; - choreographer.setState(); - } - - bool get isEditingSourceText => _isEditingSourceText; -} - -class ITStartData { - String text; - String? langCode; - - ITStartData(this.text, this.langCode); -} - -class GoldRouteTracker { - late String _originalText; - List continuances; - - GoldRouteTracker(this.continuances, String originalText) { - _originalText = originalText; - } - - static get defaultTracker => GoldRouteTracker([], ""); - - Continuance? currentContinuance({ - required String currentText, - required String sourceText, - }) { - if (_originalText != sourceText) { - debugPrint("$_originalText != $_originalText"); - return null; - } - - String stack = ""; - for (final cont in continuances) { - if (stack == currentText) { - return cont; - } - stack += cont.text; - } - - return null; - } - - String? get fullTranslation { - if (continuances.isEmpty) return null; - String full = ""; - for (final cont in continuances) { - full += cont.text; - } - return full; - } -} - -class CurrentITStep { - late List continuances; - late bool isFinal; - late String? translationId; - late int payloadId; - - CurrentITStep({ - required String sourceText, - required String currentText, - required ITResponseModel responseModel, - required List? storedGoldContinuances, - }) { - final List gold = - storedGoldContinuances ?? responseModel.goldContinuances ?? []; - final goldTracker = GoldRouteTracker(gold, sourceText); - - isFinal = responseModel.isFinal; - translationId = responseModel.translationId; - payloadId = responseModel.payloadId; - - if (responseModel.continuances.isEmpty) { - continuances = []; - } else { - final Continuance? goldCont = goldTracker.currentContinuance( - currentText: currentText, - sourceText: sourceText, - ); - if (goldCont != null) { - continuances = [ - ...responseModel.continuances - .where((c) => c.text.toLowerCase() != goldCont.text.toLowerCase()) - .map((e) { - //we only want one green choice and for that to be our gold - if (e.level == ChoreoConstants.levelThresholdForGreen) { - e.level = ChoreoConstants.levelThresholdForYellow; - } - return e; - }), - goldCont, - ]; - continuances.shuffle(); - } else { - continuances = responseModel.continuances; - } - } - } - - // get continuance with highest level - Continuance get best => - continuances.reduce((a, b) => a.level < b.level ? a : b); -} diff --git a/lib/pangea/choreographer/controllers/it_feedback_controller.dart b/lib/pangea/choreographer/controllers/it_feedback_controller.dart deleted file mode 100644 index 68ad1b9c5..000000000 --- a/lib/pangea/choreographer/controllers/it_feedback_controller.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; - -class ITFeedbackRequestModel { - final String sourceText; - final String currentText; - final String bestContinuance; - final String chosenContinuance; - final String feedbackLang; - final String sourceTextLang; - final String targetLang; - - ITFeedbackRequestModel({ - required this.sourceText, - required this.currentText, - required this.bestContinuance, - required this.chosenContinuance, - required this.feedbackLang, - required this.sourceTextLang, - required this.targetLang, - }); - - Map toJson() => { - ModelKey.sourceText: sourceText, - ModelKey.currentText: currentText, - ModelKey.bestContinuance: bestContinuance, - ModelKey.chosenContinuance: chosenContinuance, - ModelKey.feedbackLang: feedbackLang, - ModelKey.srcLang: sourceTextLang, - ModelKey.tgtLang: targetLang, - }; -} - -class ITFeedbackResponseModel { - String text; - - ITFeedbackResponseModel({required this.text}); - - factory ITFeedbackResponseModel.fromJson( - Map json, - ) => - ITFeedbackResponseModel(text: json[ModelKey.text]); -} diff --git a/lib/pangea/choreographer/controllers/span_data_controller.dart b/lib/pangea/choreographer/controllers/span_data_controller.dart deleted file mode 100644 index f93296dc5..000000000 --- a/lib/pangea/choreographer/controllers/span_data_controller.dart +++ /dev/null @@ -1,121 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:collection/collection.dart'; - -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; -import 'package:fluffychat/pangea/choreographer/repo/span_data_repo.dart'; -import 'package:fluffychat/pangea/choreographer/utils/normalize_text.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; - -class _SpanDetailsCacheItem { - Future data; - - _SpanDetailsCacheItem({required this.data}); -} - -class SpanDataController { - late Choreographer choreographer; - final Map _cache = {}; - Timer? _cacheClearTimer; - - SpanDataController(this.choreographer) { - _initializeCacheClearing(); - } - - void _initializeCacheClearing() { - const duration = Duration(minutes: 2); - _cacheClearTimer = Timer.periodic(duration, (Timer t) => clearCache()); - } - - void clearCache() { - _cache.clear(); - } - - void dispose() { - _cacheClearTimer?.cancel(); - } - - SpanData? _getSpan(int matchIndex) { - if (choreographer.igc.igcTextData == null || - choreographer.igc.igcTextData!.matches.isEmpty || - matchIndex < 0 || - matchIndex >= choreographer.igc.igcTextData!.matches.length) { - debugger(when: kDebugMode); - return null; - } - - /// Retrieves the span data from the `igcTextData` matches at the specified `matchIndex`. - /// Creates a `SpanDetailsRepoReqAndRes` object with the retrieved span data and other parameters. - /// Generates a cache key based on the created `SpanDetailsRepoReqAndRes` object. - return choreographer.igc.igcTextData!.matches[matchIndex].match; - } - - bool isNormalizationError(int matchIndex) { - final span = _getSpan(matchIndex); - if (span == null) return false; - - final correctChoice = span.choices - ?.firstWhereOrNull( - (c) => c.isBestCorrection, - ) - ?.value; - - final errorSpan = span.fullText.substring( - span.offset, - span.offset + span.length, - ); - - return correctChoice != null && - normalizeString(correctChoice) == normalizeString(errorSpan); - } - - Future getSpanDetails( - int matchIndex, { - bool force = false, - }) async { - final SpanData? span = _getSpan(matchIndex); - if (span == null || (isNormalizationError(matchIndex) && !force)) return; - - final req = SpanDetailsRepoReqAndRes( - userL1: choreographer.l1LangCode!, - userL2: choreographer.l2LangCode!, - enableIGC: choreographer.igcEnabled, - enableIT: choreographer.itEnabled, - span: span, - ); - final int cacheKey = req.hashCode; - - /// Retrieves the [SpanDetailsRepoReqAndRes] response from the cache if it exists, - /// otherwise makes an API call to get the response and stores it in the cache. - Future response; - if (_cache.containsKey(cacheKey)) { - response = _cache[cacheKey]!.data; - } else { - response = SpanDataRepo.getSpanDetails( - choreographer.accessToken, - request: SpanDetailsRepoReqAndRes( - userL1: choreographer.l1LangCode!, - userL2: choreographer.l2LangCode!, - enableIGC: choreographer.igcEnabled, - enableIT: choreographer.itEnabled, - span: span, - ), - ); - _cache[cacheKey] = _SpanDetailsCacheItem(data: response); - } - - try { - choreographer.igc.igcTextData!.matches[matchIndex].match = - (await response).span; - } catch (err, s) { - ErrorHandler.logError(e: err, s: s, data: req.toJson()); - _cache.remove(cacheKey); - } - - choreographer.setState(); - } -} diff --git a/lib/pangea/choreographer/enums/assistance_state_enum.dart b/lib/pangea/choreographer/enums/assistance_state_enum.dart deleted file mode 100644 index 2dda0c897..000000000 --- a/lib/pangea/choreographer/enums/assistance_state_enum.dart +++ /dev/null @@ -1,32 +0,0 @@ -// assistance state is, user has not typed a message, user has typed a message and IGC has not run, -// IGC is running, IGC has run and there are remaining steps (either IT or IGC), or all steps are done -// Or user does not have a subscription - -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; - -enum AssistanceState { - noSub, - noMessage, - notFetched, - fetching, - fetched, - complete, -} - -extension AssistanceStateExtension on AssistanceState { - Color stateColor(context) { - switch (this) { - case AssistanceState.noSub: - case AssistanceState.noMessage: - case AssistanceState.fetched: - return Theme.of(context).disabledColor; - case AssistanceState.notFetched: - case AssistanceState.fetching: - return Theme.of(context).colorScheme.primary; - case AssistanceState.complete: - return AppConfig.success; - } - } -} diff --git a/lib/pangea/choreographer/enums/edit_type.dart b/lib/pangea/choreographer/enums/edit_type.dart deleted file mode 100644 index cf6621a53..000000000 --- a/lib/pangea/choreographer/enums/edit_type.dart +++ /dev/null @@ -1,10 +0,0 @@ -enum EditType { - itStandard, - igc, - keyboard, - alternativeTranslation, - itGold, - itStart, - itDismissed, - other, -} diff --git a/lib/pangea/choreographer/enums/use_type.dart b/lib/pangea/choreographer/enums/use_type.dart deleted file mode 100644 index 069b3a8a5..000000000 --- a/lib/pangea/choreographer/enums/use_type.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import '../../bot/utils/bot_style.dart'; - -enum UseType { wa, ta, ga, un } - -extension UseTypeMethods on UseType { - String get string => toString().split(".").last; - - String tooltipString(BuildContext context) { - final l10n = L10n.of(context); - switch (this) { - case UseType.ga: - return l10n.gaTooltip; - case UseType.ta: - return l10n.taTooltip; - case UseType.wa: - return l10n.waTooltip; - default: - return l10n.unTooltip; - } - } - - IconData get iconData { - switch (this) { - case UseType.ga: - return Icons.spellcheck_outlined; - case UseType.ta: - return Icons.translate; - case UseType.wa: - return Icons.thumb_up; - default: - return Icons.question_mark_outlined; - } - } - - Widget iconView(BuildContext context, Color color, [int size = 14]) => - Tooltip( - message: tooltipString(context), - child: Icon( - iconData, - color: color, - size: size.toDouble(), - ), - ); - - Widget iconButtonView(BuildContext context, Color color, [int size = 14]) => - Tooltip( - message: tooltipString(context), - child: Icon( - iconData, - color: color, - size: size.toDouble(), - ), - ); - - Widget textView(BuildContext context, [TextStyle? existingStyle]) => Tooltip( - message: tooltipString(context), - child: Text( - string, - style: BotStyle.text( - context, - existingStyle: existingStyle, - italics: true, - ), - textAlign: TextAlign.end, - ), - ); - - static bool isDarkMode(BuildContext context) => - Theme.of(context).brightness == Brightness.dark; - - Color color(BuildContext context) { - switch (this) { - case UseType.ga: - return isDarkMode(context) - ? const Color.fromARGB(255, 157, 234, 172) - : const Color.fromARGB(255, 31, 146, 54); - case UseType.ta: - return isDarkMode(context) - ? const Color.fromARGB(255, 169, 183, 237) - : const Color.fromARGB(255, 38, 59, 141); - case UseType.wa: - return isDarkMode(context) - ? const Color.fromARGB(255, 212, 144, 216) - : const Color.fromARGB(255, 163, 39, 169); - default: - return Theme.of(context).textTheme.bodyLarge!.color ?? Colors.blueGrey; - } - } -} diff --git a/lib/pangea/choreographer/event_wrappers/pangea_choreo_event.dart b/lib/pangea/choreographer/event_wrappers/pangea_choreo_event.dart deleted file mode 100644 index 49b80e8b4..000000000 --- a/lib/pangea/choreographer/event_wrappers/pangea_choreo_event.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; -import '../../events/constants/pangea_event_types.dart'; -import '../models/choreo_record.dart'; - -class ChoreoEvent { - Event event; - ChoreoRecord? _content; - - ChoreoEvent({required this.event}) { - if (event.type != PangeaEventTypes.choreoRecord) { - throw Exception( - "${event.type} should not be used to make a ChoreoEvent", - ); - } - } - - ChoreoRecord? get content { - try { - _content ??= event.getPangeaContent(); - return _content; - } catch (err, s) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: s, - data: { - "event": event.toJson(), - }, - ); - return null; - } - } - - // bool get hasAcceptedMatches => - // content?.steps.any( - // (element) => - // element.acceptedOrIgnoredMatch?.status == - // PangeaMatchStatus.accepted, - // ) ?? - // false; - - // bool get hasIgnoredMatches => - // content?.steps.any( - // (element) => - // element.acceptedOrIgnoredMatch?.status == PangeaMatchStatus.ignored, - // ) ?? - // false; - - // bool get includedIT => - // content?.steps.any((step) { - // return step.acceptedOrIgnoredMatch?.status == - // PangeaMatchStatus.accepted && - // (step.acceptedOrIgnoredMatch?.isITStart ?? false); - // }) ?? - // false; -} diff --git a/lib/pangea/choreographer/widgets/igc/autocorrect_popup.dart b/lib/pangea/choreographer/igc/autocorrect_popup.dart similarity index 89% rename from lib/pangea/choreographer/widgets/igc/autocorrect_popup.dart rename to lib/pangea/choreographer/igc/autocorrect_popup.dart index bc9fef219..dc49d053a 100644 --- a/lib/pangea/choreographer/widgets/igc/autocorrect_popup.dart +++ b/lib/pangea/choreographer/igc/autocorrect_popup.dart @@ -12,13 +12,12 @@ class AutocorrectPopup extends StatelessWidget { @override Widget build(BuildContext context) { - final theme = Theme.of(context); return Material( type: MaterialType.transparency, child: Container( padding: const EdgeInsets.all(8.0), decoration: BoxDecoration( - color: theme.colorScheme.surface.withAlpha(200), + color: Theme.of(context).colorScheme.surface.withAlpha(200), borderRadius: BorderRadius.circular(8.0), ), child: Row( diff --git a/lib/pangea/choreographer/igc/autocorrect_span.dart b/lib/pangea/choreographer/igc/autocorrect_span.dart new file mode 100644 index 000000000..5517172d1 --- /dev/null +++ b/lib/pangea/choreographer/igc/autocorrect_span.dart @@ -0,0 +1,45 @@ +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/choreographer/igc/autocorrect_popup.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class AutocorrectSpan extends WidgetSpan { + AutocorrectSpan({ + required String transformTargetId, + required String currentText, + required String originalText, + required VoidCallback onUndo, + required TextStyle style, + }) : super( + alignment: PlaceholderAlignment.middle, + child: CompositedTransformTarget( + link: MatrixState.pAnyState.layerLinkAndKey(transformTargetId).link, + child: Builder( + builder: (context) { + return RichText( + key: MatrixState.pAnyState + .layerLinkAndKey(transformTargetId) + .key, + text: TextSpan( + text: currentText, + style: style, + recognizer: TapGestureRecognizer() + ..onTap = () { + OverlayUtil.showOverlay( + context: context, + child: AutocorrectPopup( + originalText: originalText, + onUndo: onUndo, + ), + transformTargetId: transformTargetId, + ); + }, + ), + ); + }, + ), + ), + ); +} diff --git a/lib/pangea/choreographer/igc/igc_controller.dart b/lib/pangea/choreographer/igc/igc_controller.dart new file mode 100644 index 000000000..afe661ff9 --- /dev/null +++ b/lib/pangea/choreographer/igc/igc_controller.dart @@ -0,0 +1,376 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:async/async.dart'; +import 'package:collection/collection.dart'; + +import 'package:fluffychat/pangea/choreographer/igc/igc_repo.dart'; +import 'package:fluffychat/pangea/choreographer/igc/igc_request_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_state_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_repo.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_request.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class IgcController { + final Function(Object) onError; + IgcController(this.onError); + + bool _isFetching = false; + String? _currentText; + + final List _openMatches = []; + final List _closedMatches = []; + + StreamController matchUpdateStream = + StreamController.broadcast(); + + String? get currentText => _currentText; + List get openMatches => _openMatches; + + List get recentAutomaticCorrections => + _closedMatches.reversed + .takeWhile( + (m) => m.updatedMatch.status == PangeaMatchStatusEnum.automatic, + ) + .toList(); + + List get openAutomaticMatches => _openMatches + .where((match) => match.updatedMatch.match.isNormalizationError()) + .toList(); + + PangeaMatchState? get currentlyOpenMatch { + final RegExp pattern = RegExp(r'span_card_overlay_.+'); + final String? matchingKey = + MatrixState.pAnyState.getMatchingOverlayKeys(pattern).firstOrNull; + if (matchingKey == null) return null; + + final parts = matchingKey.split('_'); + if (parts.length != 5) return null; + final offset = int.tryParse(parts[3]); + final length = int.tryParse(parts[4]); + if (offset == null || length == null) return null; + + return _openMatches.firstWhereOrNull( + (match) => + match.updatedMatch.match.offset == offset && + match.updatedMatch.match.length == length, + ); + } + + IGCRequestModel _igcRequest( + String text, + List prevMessages, + ) => + IGCRequestModel( + fullText: text, + userId: MatrixState.pangeaController.userController.client.userID!, + userL1: MatrixState.pangeaController.userController.userL1Code!, + userL2: MatrixState.pangeaController.userController.userL2Code!, + enableIGC: true, + enableIT: true, + prevMessages: prevMessages, + ); + + SpanDetailsRequest _spanDetailsRequest(SpanData span) => SpanDetailsRequest( + userL1: MatrixState.pangeaController.userController.userL1Code!, + userL2: MatrixState.pangeaController.userController.userL2Code!, + enableIGC: true, + enableIT: true, + span: span, + ); + + void dispose() { + matchUpdateStream.close(); + } + + void clear() { + _isFetching = false; + _currentText = null; + _openMatches.clear(); + _closedMatches.clear(); + MatrixState.pAnyState.closeAllOverlays(); + } + + void clearMatches() { + _openMatches.clear(); + _closedMatches.clear(); + } + + void _filterPreviouslyIgnoredMatches() { + for (final match in _openMatches) { + if (IgcRepo.isIgnored(match.updatedMatch)) { + updateOpenMatch(match, PangeaMatchStatusEnum.ignored); + } + } + } + + PangeaMatchState? getMatchByOffset(int offset) => + _openMatches.firstWhereOrNull( + (match) => match.updatedMatch.match.isOffsetInMatchSpan(offset), + ); + + void setSpanData(PangeaMatchState matchState, SpanData spanData) { + final openMatch = _openMatches.firstWhereOrNull( + (m) => m.originalMatch == matchState.originalMatch, + ); + + matchState.setMatch(spanData); + _openMatches.remove(openMatch); + _openMatches.add(matchState); + } + + void updateMatch( + PangeaMatchState match, + PangeaMatchStatusEnum status, + ) { + PangeaMatchState updated; + switch (status) { + case PangeaMatchStatusEnum.accepted: + case PangeaMatchStatusEnum.automatic: + updated = updateOpenMatch(match, status); + case PangeaMatchStatusEnum.ignored: + IgcRepo.ignore(match.updatedMatch); + updated = updateOpenMatch(match, status); + case PangeaMatchStatusEnum.undo: + updated = updateClosedMatch(match, status); + default: + throw "updateMatch called with unsupported status: $status"; + } + matchUpdateStream.add(updated); + } + + PangeaMatchState updateOpenMatch( + PangeaMatchState matchState, + PangeaMatchStatusEnum status, + ) { + final PangeaMatchState openMatch = _openMatches.firstWhere( + (m) => m.originalMatch == matchState.originalMatch, + orElse: () => throw StateError( + 'No open match found while updating match.', + ), + ); + + matchState.setStatus(status); + _openMatches.remove(openMatch); + _closedMatches.add(matchState); + + switch (status) { + case PangeaMatchStatusEnum.accepted: + case PangeaMatchStatusEnum.automatic: + final choice = matchState.updatedMatch.match.selectedChoice; + if (choice == null) { + throw ArgumentError( + 'acceptMatch called with a null selectedChoice.', + ); + } + _applyReplacement( + matchState.updatedMatch.match.offset, + matchState.updatedMatch.match.length, + choice.value, + ); + case PangeaMatchStatusEnum.ignored: + break; + default: + throw ArgumentError( + 'updateOpenMatch called with unsupported status: $status', + ); + } + + return matchState; + } + + PangeaMatchState updateClosedMatch( + PangeaMatchState matchState, + PangeaMatchStatusEnum status, + ) { + final closedMatch = _closedMatches.firstWhere( + (m) => m.originalMatch == matchState.originalMatch, + orElse: () => throw StateError( + 'No closed match found while updating match.', + ), + ); + + matchState.setStatus(status); + _closedMatches.remove(closedMatch); + + final selectedValue = matchState.updatedMatch.match.selectedChoice?.value; + if (selectedValue == null) { + throw StateError( + 'Cannot update match without a selectedChoice value.', + ); + } + + final replacement = matchState.originalMatch.match.fullText.characters + .getRange( + matchState.originalMatch.match.offset, + matchState.originalMatch.match.offset + + matchState.originalMatch.match.length, + ) + .toString(); + + _applyReplacement( + matchState.originalMatch.match.offset, + selectedValue.characters.length, + replacement, + ); + + return matchState; + } + + Future acceptNormalizationMatches() async { + final matches = openAutomaticMatches; + if (matches.isEmpty) return; + + final expectedSpans = matches.map((m) => m.originalMatch).toSet(); + final completer = Completer(); + + int completedCount = 0; + + late final StreamSubscription sub; + sub = matchUpdateStream.stream.listen((match) { + if (expectedSpans.remove(match.originalMatch)) { + completedCount++; + if (completedCount >= matches.length) { + completer.complete(); + sub.cancel(); + } + } + }); + + try { + for (final match in matches) { + match.selectBestChoice(); + updateMatch(match, PangeaMatchStatusEnum.automatic); + } + + // If no updates arrive (edge case), auto-timeout after a short delay + Future.delayed(const Duration(seconds: 1), () { + if (!completer.isCompleted) { + completer.complete(); + sub.cancel(); + } + }); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {"currentText": currentText}, + ); + if (!completer.isCompleted) completer.complete(); + } + + return completer.future; + } + + /// Applies a text replacement to [_currentText] and adjusts match offsets. + /// + /// Called internally when a correction is accepted or undone. + void _applyReplacement( + int offset, + int length, + String replacement, + ) { + if (_currentText == null) { + throw StateError('_applyReplacement called with null _currentText'); + } + final start = _currentText!.characters.take(offset); + final end = _currentText!.characters.skip(offset + length); + final updatedText = start + replacement.characters + end; + _currentText = updatedText.toString(); + + for (final list in [_openMatches, _closedMatches]) { + for (final matchState in list) { + final match = matchState.updatedMatch.match; + final updatedMatch = match.copyWith( + fullText: _currentText, + offset: match.offset > offset + ? match.offset + replacement.characters.length - length + : match.offset, + ); + matchState.setMatch(updatedMatch); + } + } + } + + Future getIGCTextData( + String text, + List prevMessages, + ) async { + if (text.isEmpty) return clear(); + if (_isFetching) return; + _isFetching = true; + + final res = await IgcRepo.get( + MatrixState.pangeaController.userController.accessToken, + _igcRequest(text, prevMessages), + ).timeout( + (const Duration(seconds: 10)), + onTimeout: () { + return Result.error( + TimeoutException('IGC request timed out'), + ); + }, + ); + + if (res.isError) { + onError(res.asError!); + clear(); + return; + } + + if (!_isFetching) return; + _currentText = res.result!.originalInput; + for (final match in res.result!.matches) { + final matchState = PangeaMatchState( + match: match.match, + status: PangeaMatchStatusEnum.open, + original: match, + ); + if (match.status == PangeaMatchStatusEnum.open) { + _openMatches.add(matchState); + } else { + _closedMatches.add(matchState); + } + } + _filterPreviouslyIgnoredMatches(); + _isFetching = false; + } + + Future fetchSpanDetails({ + required PangeaMatchState match, + bool force = false, + }) async { + final span = match.updatedMatch.match; + if (span.isNormalizationError() && !force) { + return; + } + + final response = await SpanDataRepo.get( + MatrixState.pangeaController.userController.accessToken, + request: _spanDetailsRequest(span), + ).timeout( + (const Duration(seconds: 10)), + onTimeout: () { + return Result.error( + TimeoutException('Span details request timed out'), + ); + }, + ); + + if (response.isError) throw response.error!; + setSpanData(match, response.result!); + } + + Future fetchAllSpanDetails() async { + final fetches = []; + for (final match in _openMatches) { + fetches.add(fetchSpanDetails(match: match)); + } + await Future.wait(fetches); + } +} diff --git a/lib/pangea/choreographer/igc/igc_repo.dart b/lib/pangea/choreographer/igc/igc_repo.dart new file mode 100644 index 000000000..3ffbc5d07 --- /dev/null +++ b/lib/pangea/choreographer/igc/igc_repo.dart @@ -0,0 +1,175 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/choreographer/igc/igc_request_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/igc_response_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_model.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; + +class _IgcCacheItem { + final Future data; + final DateTime timestamp; + + const _IgcCacheItem({ + required this.data, + required this.timestamp, + }); +} + +class _IgnoredMatchCacheItem { + final PangeaMatch match; + final DateTime timestamp; + + String get spanText => match.match.fullText.characters + .skip(match.match.offset) + .take(match.match.length) + .toString(); + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + return other is _IgnoredMatchCacheItem && other.spanText == spanText; + } + + @override + int get hashCode => spanText.hashCode; + + _IgnoredMatchCacheItem({ + required this.match, + required this.timestamp, + }); +} + +class IgcRepo { + static final Map _igcCache = {}; + static final Map _ignoredMatchCache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String? accessToken, + IGCRequestModel igcRequest, + ) { + final cached = _getCached(igcRequest); + if (cached != null) { + return _getResult(igcRequest, cached); + } + + final future = _fetch( + accessToken, + igcRequest: igcRequest, + ); + _setCached(igcRequest, future); + return _getResult(igcRequest, future); + } + + static Future _fetch( + String? accessToken, { + required IGCRequestModel igcRequest, + }) async { + final Requests req = Requests( + accessToken: accessToken, + choreoApiKey: Environment.choreoApiKey, + ); + final Response res = await req.post( + url: PApiUrls.igcLite, + body: igcRequest.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to fetch IGC data: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + final Map json = + jsonDecode(utf8.decode(res.bodyBytes).toString()); + + return IGCResponseModel.fromJson(json); + } + + static Future> _getResult( + IGCRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _igcCache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + IGCRequestModel request, + ) { + final cacheKeys = [..._igcCache.keys]; + for (final key in cacheKeys) { + if (_igcCache[key]! + .timestamp + .isBefore(DateTime.now().subtract(_cacheDuration))) { + _igcCache.remove(key); + } + } + + return _igcCache[request.hashCode.toString()]?.data; + } + + static void _setCached( + IGCRequestModel request, + Future response, + ) => + _igcCache[request.hashCode.toString()] = _IgcCacheItem( + data: response, + timestamp: DateTime.now(), + ); + + static void ignore(PangeaMatch match) { + _setCachedIgnoredSpan(match); + } + + static bool isIgnored(PangeaMatch match) { + final cached = _getCachedIgnoredSpan(match); + return cached != null; + } + + static PangeaMatch? _getCachedIgnoredSpan( + PangeaMatch match, + ) { + final cacheKeys = [..._ignoredMatchCache.keys]; + for (final key in cacheKeys) { + final entry = _ignoredMatchCache[key]!; + if (DateTime.now().difference(entry.timestamp) >= _cacheDuration) { + _ignoredMatchCache.remove(key); + } + } + + final cacheEntry = _IgnoredMatchCacheItem( + match: match, + timestamp: DateTime.now(), + ); + return _ignoredMatchCache[cacheEntry.hashCode.toString()]?.match; + } + + static void _setCachedIgnoredSpan( + PangeaMatch match, + ) { + final cacheEntry = _IgnoredMatchCacheItem( + match: match, + timestamp: DateTime.now(), + ); + _ignoredMatchCache[cacheEntry.hashCode.toString()] = cacheEntry; + } +} diff --git a/lib/pangea/choreographer/repo/igc_repo.dart b/lib/pangea/choreographer/igc/igc_request_model.dart similarity index 52% rename from lib/pangea/choreographer/repo/igc_repo.dart rename to lib/pangea/choreographer/igc/igc_request_model.dart index 72d82e87d..cbe6a41eb 100644 --- a/lib/pangea/choreographer/repo/igc_repo.dart +++ b/lib/pangea/choreographer/igc/igc_request_model.dart @@ -1,67 +1,70 @@ import 'dart:convert'; -import 'package:http/http.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/repo/span_data_repo.dart'; -import 'package:fluffychat/pangea/common/config/environment.dart'; -import '../../common/constants/model_keys.dart'; -import '../../common/network/requests.dart'; -import '../../common/network/urls.dart'; -import '../models/igc_text_data_model.dart'; +class IGCRequestModel { + final String fullText; + final String userL1; + final String userL2; + final bool enableIT; + final bool enableIGC; + final String userId; + final List prevMessages; -class IgcRepo { - static Future getIGC( - String? accessToken, { - required IGCRequestBody igcRequest, - }) async { - final Requests req = Requests( - accessToken: accessToken, - choreoApiKey: Environment.choreoApiKey, - ); - final Response res = await req.post( - url: PApiUrls.igcLite, - body: igcRequest.toJson(), - ); + const IGCRequestModel({ + required this.fullText, + required this.userL1, + required this.userL2, + required this.enableIGC, + required this.enableIT, + required this.userId, + required this.prevMessages, + }); - final Map json = - jsonDecode(utf8.decode(res.bodyBytes).toString()); + Map toJson() => { + ModelKey.fullText: fullText, + ModelKey.userL1: userL1, + ModelKey.userL2: userL2, + ModelKey.enableIT: enableIT, + ModelKey.enableIGC: enableIGC, + ModelKey.userId: userId, + ModelKey.prevMessages: + jsonEncode(prevMessages.map((x) => x.toJson()).toList()), + }; - final IGCTextData response = IGCTextData.fromJson(json); + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; - return response; + if (other is! IGCRequestModel) return false; + + return fullText.trim() == other.fullText.trim() && + fullText == other.fullText && + userL1 == other.userL1 && + userL2 == other.userL2 && + enableIT == other.enableIT && + userId == other.userId; } - static Future getMockData() async { - await Future.delayed(const Duration(seconds: 2)); - - final IGCTextData igcTextData = IGCTextData( - matches: [ - PangeaMatch( - match: spanDataRepomockSpan, - status: PangeaMatchStatus.open, - ), - ], - originalInput: "This be a sample text", - fullTextCorrection: "This is a sample text", - userL1: "es", - userL2: "en", - enableIT: true, - enableIGC: true, - ); - - return igcTextData; - } + @override + int get hashCode => Object.hash( + fullText.trim(), + userL1, + userL2, + enableIT, + enableIGC, + userId, + ); } /// Previous text/audio message sent in chat /// Contain message content, sender, and timestamp class PreviousMessage { - String content; - String sender; - DateTime timestamp; + final String content; + final String sender; + final DateTime timestamp; - PreviousMessage({ + const PreviousMessage({ required this.content, required this.sender, required this.timestamp, @@ -102,59 +105,3 @@ class PreviousMessage { ); } } - -class IGCRequestBody { - String fullText; - String userL1; - String userL2; - bool enableIT; - bool enableIGC; - String userId; - List prevMessages; - - IGCRequestBody({ - required this.fullText, - required this.userL1, - required this.userL2, - required this.enableIGC, - required this.enableIT, - required this.userId, - required this.prevMessages, - }); - - Map toJson() => { - ModelKey.fullText: fullText, - ModelKey.userL1: userL1, - ModelKey.userL2: userL2, - "enable_it": enableIT, - "enable_igc": enableIGC, - ModelKey.userId: userId, - ModelKey.prevMessages: - jsonEncode(prevMessages.map((x) => x.toJson()).toList()), - }; - - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - - if (other is! IGCRequestBody) return false; - - return fullText.trim() == other.fullText.trim() && - fullText == other.fullText && - userL1 == other.userL1 && - userL2 == other.userL2 && - enableIT == other.enableIT && - userId == other.userId; - } - - @override - int get hashCode => Object.hash( - fullText.trim(), - userL1, - userL2, - enableIT, - enableIGC, - userId, - Object.hashAll(prevMessages), - ); -} diff --git a/lib/pangea/choreographer/igc/igc_response_model.dart b/lib/pangea/choreographer/igc/igc_response_model.dart new file mode 100644 index 000000000..aed6b4bcd --- /dev/null +++ b/lib/pangea/choreographer/igc/igc_response_model.dart @@ -0,0 +1,53 @@ +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_model.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; + +class IGCResponseModel { + final String originalInput; + final String? fullTextCorrection; + final List matches; + final String userL1; + final String userL2; + final bool enableIT; + final bool enableIGC; + + IGCResponseModel({ + required this.originalInput, + required this.fullTextCorrection, + required this.matches, + required this.userL1, + required this.userL2, + required this.enableIT, + required this.enableIGC, + }); + + factory IGCResponseModel.fromJson(Map json) { + return IGCResponseModel( + matches: json["matches"] != null + ? (json["matches"] as Iterable) + .map( + (e) { + return PangeaMatch.fromJson(e as Map); + }, + ) + .toList() + .cast() + : [], + originalInput: json["original_input"], + fullTextCorrection: json["full_text_correction"], + userL1: json[ModelKey.userL1], + userL2: json[ModelKey.userL2], + enableIT: json[ModelKey.enableIT], + enableIGC: json[ModelKey.enableIGC], + ); + } + + Map toJson() => { + "original_input": originalInput, + "full_text_correction": fullTextCorrection, + "matches": matches.map((e) => e.toJson()).toList(), + ModelKey.userL1: userL1, + ModelKey.userL2: userL2, + ModelKey.enableIT: enableIT, + ModelKey.enableIGC: enableIGC, + }; +} diff --git a/lib/pangea/choreographer/constants/match_rule_ids.dart b/lib/pangea/choreographer/igc/match_rule_id_model.dart similarity index 93% rename from lib/pangea/choreographer/constants/match_rule_ids.dart rename to lib/pangea/choreographer/igc/match_rule_id_model.dart index 72fa8c6cc..b3fb914a1 100644 --- a/lib/pangea/choreographer/constants/match_rule_ids.dart +++ b/lib/pangea/choreographer/igc/match_rule_id_model.dart @@ -1,4 +1,4 @@ -class MatchRuleIds { +class MatchRuleIdModel { static const interactiveTranslation = "interactive_translation"; /// note these are not currently being passed by the server diff --git a/lib/pangea/choreographer/igc/pangea_match_model.dart b/lib/pangea/choreographer/igc/pangea_match_model.dart new file mode 100644 index 000000000..a2db081f8 --- /dev/null +++ b/lib/pangea/choreographer/igc/pangea_match_model.dart @@ -0,0 +1,59 @@ +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_type_enum.dart'; +import 'match_rule_id_model.dart'; +import 'span_data_model.dart'; + +class PangeaMatch { + final SpanData match; + final PangeaMatchStatusEnum status; + + const PangeaMatch({ + required this.match, + required this.status, + }); + + factory PangeaMatch.fromJson(Map json) { + return PangeaMatch( + match: SpanData.fromJson(json[_matchKey] as Map), + status: json[_statusKey] != null + ? PangeaMatchStatusEnum.fromString(json[_statusKey] as String) + : PangeaMatchStatusEnum.open, + ); + } + + Map toJson() => { + _matchKey: match.toJson(), + _statusKey: status.name, + }; + + static const _matchKey = "match"; + static const _statusKey = "status"; + + bool get isITStart => + match.rule?.id == MatchRuleIdModel.interactiveTranslation || + [SpanDataTypeEnum.itStart, SpanDataTypeEnum.itStart.name] + .contains(match.type.typeName); + + bool get _needsTranslation => match.rule?.id != null + ? [ + MatchRuleIdModel.tokenNeedsTranslation, + MatchRuleIdModel.tokenSpanNeedsTranslation, + ].contains(match.rule!.id) + : false; + + bool get isOutOfTargetMatch => isITStart || _needsTranslation; + + bool get isGrammarMatch => !isOutOfTargetMatch; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! PangeaMatch) return false; + return other.match == match && other.status == status; + } + + @override + int get hashCode { + return match.hashCode ^ status.hashCode; + } +} diff --git a/lib/pangea/choreographer/igc/pangea_match_state_model.dart b/lib/pangea/choreographer/igc/pangea_match_state_model.dart new file mode 100644 index 000000000..7fb0fcc7d --- /dev/null +++ b/lib/pangea/choreographer/igc/pangea_match_state_model.dart @@ -0,0 +1,60 @@ +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; + +class PangeaMatchState { + final PangeaMatch _original; + SpanData _match; + PangeaMatchStatusEnum _status; + + PangeaMatchState({ + required PangeaMatch original, + required SpanData match, + required PangeaMatchStatusEnum status, + }) : _original = original, + _match = match, + _status = status; + + PangeaMatch get originalMatch => _original; + + PangeaMatch get updatedMatch => PangeaMatch( + match: _match, + status: _status, + ); + + void setStatus(PangeaMatchStatusEnum status) { + _status = status; + } + + void setMatch(SpanData match) { + _match = match; + } + + void selectChoice(int index) { + final choices = List.from(_match.choices ?? []); + choices[index] = choices[index].copyWith( + selected: true, + timestamp: DateTime.now(), + ); + setMatch(_match.copyWith(choices: choices)); + } + + void selectBestChoice() { + if (_match.choices == null) { + throw Exception('No choices available to select best choice from.'); + } + selectChoice( + updatedMatch.match.choices!.indexWhere( + (c) => c.isBestCorrection, + ), + ); + } + + Map toJson() { + return { + 'originalMatch': _original.toJson(), + 'match': _match.toJson(), + 'status': _status.toString(), + }; + } +} diff --git a/lib/pangea/choreographer/igc/pangea_match_status_enum.dart b/lib/pangea/choreographer/igc/pangea_match_status_enum.dart new file mode 100644 index 000000000..967ab81e9 --- /dev/null +++ b/lib/pangea/choreographer/igc/pangea_match_status_enum.dart @@ -0,0 +1,26 @@ +enum PangeaMatchStatusEnum { + open, + ignored, + accepted, + automatic, + undo, + unknown; + + static PangeaMatchStatusEnum fromString(String status) { + final String lastPart = status.toString().split('.').last; + switch (lastPart) { + case 'open': + return PangeaMatchStatusEnum.open; + case 'ignored': + return PangeaMatchStatusEnum.ignored; + case 'accepted': + return PangeaMatchStatusEnum.accepted; + case 'automatic': + return PangeaMatchStatusEnum.automatic; + case 'undo': + return PangeaMatchStatusEnum.undo; + default: + return PangeaMatchStatusEnum.unknown; + } + } +} diff --git a/lib/pangea/choreographer/igc/span_card.dart b/lib/pangea/choreographer/igc/span_card.dart new file mode 100644 index 000000000..a69225650 --- /dev/null +++ b/lib/pangea/choreographer/igc/span_card.dart @@ -0,0 +1,317 @@ +import 'package:flutter/material.dart'; + +import 'package:sentry_flutter/sentry_flutter.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_state_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_choice_type_enum.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import '../../../widgets/matrix.dart'; +import '../../common/widgets/choice_array.dart'; + +class SpanCard extends StatefulWidget { + final PangeaMatchState match; + final Choreographer choreographer; + final VoidCallback showNextMatch; + + const SpanCard({ + super.key, + required this.match, + required this.choreographer, + required this.showNextMatch, + }); + + @override + State createState() => SpanCardState(); +} + +class SpanCardState extends State { + bool _loadingChoices = true; + final ValueNotifier> _feedbackState = + ValueNotifier>(const AsyncIdle()); + + final ScrollController scrollController = ScrollController(); + + @override + void initState() { + super.initState(); + _fetchChoices(); + } + + @override + void dispose() { + _feedbackState.dispose(); + scrollController.dispose(); + super.dispose(); + } + + List? get _choices => widget.match.updatedMatch.match.choices; + + SpanChoice? get _selectedChoice => + widget.match.updatedMatch.match.selectedChoice; + + String? get _selectedFeedback => _selectedChoice?.feedback; + + Future _fetchChoices() async { + if (_choices != null && _choices!.length > 1) { + setState(() => _loadingChoices = false); + return; + } + + setState(() => _loadingChoices = true); + + try { + await widget.choreographer.igcController.fetchSpanDetails( + match: widget.match, + ); + + if (_choices == null || _choices!.isEmpty) { + widget.choreographer.clearMatches( + 'No choices available for span ${widget.match.updatedMatch.match.message}', + ); + } + } catch (e) { + widget.choreographer.clearMatches(e); + } finally { + if (mounted) { + setState(() => _loadingChoices = false); + } + } + } + + Future _fetchFeedback() async { + if (_selectedFeedback != null) { + _feedbackState.value = AsyncLoaded(_selectedFeedback!); + return; + } + + try { + _feedbackState.value = const AsyncLoading(); + await widget.choreographer.igcController.fetchSpanDetails( + match: widget.match, + force: true, + ); + + if (!mounted) return; + if (_selectedFeedback != null) { + _feedbackState.value = AsyncLoaded(_selectedFeedback!); + } else { + _feedbackState.value = AsyncError( + L10n.of(context).failedToLoadFeedback, + ); + } + } catch (e) { + if (mounted) { + _feedbackState.value = AsyncError(e); + } + } + } + + void _onChoiceSelect(int index) { + final selected = _choices![index]; + widget.match.selectChoice(index); + + _feedbackState.value = selected.feedback != null + ? AsyncLoaded(selected.feedback!) + : const AsyncIdle(); + + setState(() {}); + } + + void _updateMatch(PangeaMatchStatusEnum status) { + try { + widget.choreographer.igcController.updateMatch( + widget.match, + status, + ); + widget.showNextMatch(); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + level: SentryLevel.warning, + data: { + "match": widget.match.toJson(), + }, + ); + widget.choreographer.clearMatches(e); + return; + } + } + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 300.0, + child: Column( + children: [ + Expanded( + child: Scrollbar( + controller: scrollController, + child: SingleChildScrollView( + controller: scrollController, + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 12.0, + horizontal: 24.0, + ), + child: Column( + spacing: 12.0, + children: [ + ChoicesArray( + isLoading: _loadingChoices, + choices: widget.match.updatedMatch.match.choices + ?.map( + (e) => Choice( + text: e.value, + color: e.selected ? e.type.color : null, + isGold: e.type.name == 'bestCorrection', + ), + ) + .toList(), + onPressed: (value, index) => _onChoiceSelect(index), + selectedChoiceIndex: + widget.match.updatedMatch.match.selectedChoiceIndex, + id: widget.match.hashCode.toString(), + langCode: MatrixState + .pangeaController.userController.userL2Code!, + ), + const SizedBox(), + _SpanCardFeedback( + _selectedChoice != null, + _fetchFeedback, + _feedbackState, + ), + ], + ), + ), + ), + ), + ), + _SpanCardButtons( + onAccept: () => _updateMatch(PangeaMatchStatusEnum.accepted), + onIgnore: () => _updateMatch(PangeaMatchStatusEnum.ignored), + selectedChoice: _selectedChoice, + ), + ], + ), + ); + } +} + +class _SpanCardFeedback extends StatelessWidget { + final bool hasSelectedChoice; + final VoidCallback fetchFeedback; + final ValueNotifier> feedbackState; + + const _SpanCardFeedback( + this.hasSelectedChoice, + this.fetchFeedback, + this.feedbackState, + ); + + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ValueListenableBuilder( + valueListenable: feedbackState, + builder: (context, state, __) { + return switch (state) { + AsyncIdle() => hasSelectedChoice + ? IconButton( + onPressed: fetchFeedback, + icon: const Icon(Icons.lightbulb_outline, size: 24), + ) + : Text( + L10n.of(context).correctionDefaultPrompt, + style: BotStyle.text(context).copyWith( + fontStyle: FontStyle.italic, + ), + ), + AsyncLoading() => const SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator(), + ), + AsyncError(:final error) => + ErrorIndicator(message: error.toString()), + AsyncLoaded(:final value) => + Text(value, style: BotStyle.text(context)), + }; + }, + ), + ], + ); + } +} + +class _SpanCardButtons extends StatelessWidget { + final VoidCallback onAccept; + final VoidCallback onIgnore; + final SpanChoice? selectedChoice; + + const _SpanCardButtons({ + required this.onAccept, + required this.onIgnore, + required this.selectedChoice, + }); + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + ), + padding: const EdgeInsets.only(top: 12.0), + child: Row( + spacing: 10.0, + children: [ + Expanded( + child: Opacity( + opacity: 0.8, + child: TextButton( + style: TextButton.styleFrom( + backgroundColor: + Theme.of(context).colorScheme.primary.withAlpha(25), + ), + onPressed: onIgnore, + child: Center( + child: Text(L10n.of(context).ignoreInThisText), + ), + ), + ), + ), + Expanded( + child: Opacity( + opacity: selectedChoice != null ? 1.0 : 0.5, + child: TextButton( + onPressed: selectedChoice != null ? onAccept : null, + style: TextButton.styleFrom( + backgroundColor: (selectedChoice?.color ?? + Theme.of(context).colorScheme.primary) + .withAlpha(50), + side: selectedChoice != null + ? BorderSide( + color: selectedChoice!.color, + style: BorderStyle.solid, + width: 2.0, + ) + : null, + ), + child: Text(L10n.of(context).replace), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/pangea/choreographer/enums/span_choice_type.dart b/lib/pangea/choreographer/igc/span_choice_type_enum.dart similarity index 57% rename from lib/pangea/choreographer/enums/span_choice_type.dart rename to lib/pangea/choreographer/igc/span_choice_type_enum.dart index 2f99b07f7..af8dccb32 100644 --- a/lib/pangea/choreographer/enums/span_choice_type.dart +++ b/lib/pangea/choreographer/igc/span_choice_type_enum.dart @@ -2,53 +2,53 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; -enum SpanChoiceType { +enum SpanChoiceTypeEnum { bestCorrection, distractor, bestAnswer, } -extension SpanChoiceExt on SpanChoiceType { +extension SpanChoiceExt on SpanChoiceTypeEnum { String get name { switch (this) { - case SpanChoiceType.bestCorrection: + case SpanChoiceTypeEnum.bestCorrection: return "bestCorrection"; - case SpanChoiceType.distractor: + case SpanChoiceTypeEnum.distractor: return "distractor"; - case SpanChoiceType.bestAnswer: + case SpanChoiceTypeEnum.bestAnswer: return "bestAnswer"; } } String defaultFeedback(BuildContext context) { switch (this) { - case SpanChoiceType.bestCorrection: + case SpanChoiceTypeEnum.bestCorrection: return L10n.of(context).bestCorrectionFeedback; - case SpanChoiceType.distractor: + case SpanChoiceTypeEnum.distractor: return L10n.of(context).distractorFeedback; - case SpanChoiceType.bestAnswer: + case SpanChoiceTypeEnum.bestAnswer: return L10n.of(context).bestAnswerFeedback; } } IconData get icon { switch (this) { - case SpanChoiceType.bestCorrection: + case SpanChoiceTypeEnum.bestCorrection: return Icons.check_circle; - case SpanChoiceType.distractor: + case SpanChoiceTypeEnum.distractor: return Icons.cancel; - case SpanChoiceType.bestAnswer: + case SpanChoiceTypeEnum.bestAnswer: return Icons.check_circle; } } Color get color { switch (this) { - case SpanChoiceType.bestCorrection: + case SpanChoiceTypeEnum.bestCorrection: return Colors.green; - case SpanChoiceType.distractor: + case SpanChoiceTypeEnum.distractor: return Colors.red; - case SpanChoiceType.bestAnswer: + case SpanChoiceTypeEnum.bestAnswer: return Colors.green; } } diff --git a/lib/pangea/choreographer/igc/span_data_model.dart b/lib/pangea/choreographer/igc/span_data_model.dart new file mode 100644 index 000000000..220e245f2 --- /dev/null +++ b/lib/pangea/choreographer/igc/span_data_model.dart @@ -0,0 +1,355 @@ +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; + +import 'package:fluffychat/pangea/choreographer/igc/text_normalization_util.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'span_choice_type_enum.dart'; +import 'span_data_type_enum.dart'; + +class SpanData { + final String? message; + final String? shortMessage; + final List? choices; + final int offset; + final int length; + final String fullText; + final SpanDataType type; + final Rule? rule; + + SpanData({ + required this.message, + required this.shortMessage, + required this.choices, + required this.offset, + required this.length, + required this.fullText, + required this.type, + required this.rule, + }); + + SpanData copyWith({ + String? message, + String? shortMessage, + List? choices, + int? offset, + int? length, + String? fullText, + SpanDataType? type, + Rule? rule, + }) { + return SpanData( + message: message ?? this.message, + shortMessage: shortMessage ?? this.shortMessage, + choices: choices ?? this.choices, + offset: offset ?? this.offset, + length: length ?? this.length, + fullText: fullText ?? this.fullText, + type: type ?? this.type, + rule: rule ?? this.rule, + ); + } + + factory SpanData.fromJson(Map json) { + final Iterable? choices = json['choices'] ?? json['replacements']; + return SpanData( + message: json['message'], + shortMessage: json['shortMessage'] ?? json['short_message'], + choices: choices + ?.map( + (e) => SpanChoice.fromJson(e as Map), + ) + .toList(), + offset: json['offset'] as int, + length: json['length'] as int, + fullText: + json['sentence'] ?? json['full_text'] ?? json['fullText'] as String, + type: SpanDataType.fromJson(json['type'] as Map), + rule: json['rule'] != null + ? Rule.fromJson(json['rule'] as Map) + : null, + ); + } + + Map toJson() { + final Map data = { + 'offset': offset, + 'length': length, + 'full_text': fullText, + 'type': type.toJson(), + }; + + if (message != null) { + data['message'] = message; + } + + if (shortMessage != null) { + data['short_message'] = shortMessage; + } + + if (choices != null) { + data['choices'] = List.from(choices!.map((x) => x.toJson())); + } + + if (rule != null) { + data['rule'] = rule!.toJson(); + } + + return data; + } + + bool isOffsetInMatchSpan(int offset) => + offset >= this.offset && offset <= this.offset + length; + + SpanChoice? get bestChoice { + return choices?.firstWhereOrNull( + (choice) => choice.isBestCorrection, + ); + } + + int get selectedChoiceIndex { + if (choices == null) { + return -1; + } + + SpanChoice? mostRecent; + for (int i = 0; i < choices!.length; i++) { + final choice = choices![i]; + if (choice.timestamp != null && + (mostRecent == null || + choice.timestamp!.isAfter(mostRecent.timestamp!))) { + mostRecent = choice; + } + } + return mostRecent != null ? choices!.indexOf(mostRecent) : -1; + } + + SpanChoice? get selectedChoice { + final index = selectedChoiceIndex; + if (index == -1) { + return null; + } + return choices![index]; + } + + bool isNormalizationError() { + final correctChoice = choices + ?.firstWhereOrNull( + (c) => c.isBestCorrection, + ) + ?.value; + + final errorSpan = fullText.characters.skip(offset).take(length).toString(); + + final l2Code = + MatrixState.pangeaController.userController.userL2?.langCodeShort; + + return correctChoice != null && + l2Code != null && + normalizeString(correctChoice, l2Code) == + normalizeString(errorSpan, l2Code); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! SpanData) return false; + if (other.message != message) return false; + if (other.shortMessage != shortMessage) return false; + if (other.offset != offset) return false; + if (other.length != length) return false; + if (other.fullText != fullText) return false; + if (other.type != type) return false; + if (other.rule != rule) return false; + if (const ListEquality().equals( + other.choices?.sorted((a, b) => b.value.compareTo(a.value)), + choices?.sorted((a, b) => b.value.compareTo(a.value)), + ) == + false) { + return false; + } + return true; + } + + @override + int get hashCode { + return message.hashCode ^ + shortMessage.hashCode ^ + Object.hashAll( + (choices ?? []) + .sorted((a, b) => b.value.compareTo(a.value)) + .map((choice) => choice.hashCode), + ) ^ + offset.hashCode ^ + length.hashCode ^ + fullText.hashCode ^ + type.hashCode ^ + rule.hashCode; + } +} + +class SpanChoice { + final String value; + final SpanChoiceTypeEnum type; + final bool selected; + final String? feedback; + final DateTime? timestamp; + + SpanChoice({ + required this.value, + required this.type, + this.feedback, + this.selected = false, + this.timestamp, + }); + + SpanChoice copyWith({ + String? value, + SpanChoiceTypeEnum? type, + String? feedback, + bool? selected, + DateTime? timestamp, + }) { + return SpanChoice( + value: value ?? this.value, + type: type ?? this.type, + feedback: feedback ?? this.feedback, + selected: selected ?? this.selected, + timestamp: timestamp ?? this.timestamp, + ); + } + + factory SpanChoice.fromJson(Map json) { + return SpanChoice( + value: json['value'] as String, + type: json['type'] != null + ? SpanChoiceTypeEnum.values.firstWhereOrNull( + (element) => element.name == json['type'], + ) ?? + SpanChoiceTypeEnum.bestCorrection + : SpanChoiceTypeEnum.bestCorrection, + feedback: json['feedback'], + selected: json['selected'] ?? false, + timestamp: + json['timestamp'] != null ? DateTime.parse(json['timestamp']) : null, + ); + } + + Map toJson() { + final Map data = { + 'value': value, + 'type': type.name, + }; + + if (selected) { + data['selected'] = selected; + } + + if (feedback != null) { + data['feedback'] = feedback; + } + + if (timestamp != null) { + data['timestamp'] = timestamp!.toIso8601String(); + } + + return data; + } + + String feedbackToDisplay(BuildContext context) { + if (feedback == null) { + return type.defaultFeedback(context); + } + return feedback!; + } + + bool get isBestCorrection => type == SpanChoiceTypeEnum.bestCorrection; + + Color get color => type.color; + + // override == operator and hashcode + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is SpanChoice && + other.value == value && + other.type.toString() == type.toString() && + other.selected == selected && + other.feedback == feedback && + other.timestamp == timestamp; + } + + @override + int get hashCode { + return value.hashCode ^ + type.hashCode ^ + selected.hashCode ^ + feedback.hashCode ^ + timestamp.hashCode; + } +} + +class Rule { + final String id; + + const Rule({ + required this.id, + }); + + factory Rule.fromJson(Map json) => Rule( + id: json['id'] as String, + ); + + Map toJson() => { + 'id': id, + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! Rule) return false; + return other.id == id; + } + + @override + int get hashCode { + return id.hashCode; + } +} + +class SpanDataType { + final SpanDataTypeEnum typeName; + + const SpanDataType({ + required this.typeName, + }); + + factory SpanDataType.fromJson(Map json) { + final String? type = + json['typeName'] ?? json['type'] ?? json['type_name'] as String?; + return SpanDataType( + typeName: type != null + ? SpanDataTypeEnum.values + .firstWhereOrNull((element) => element.name == type) ?? + SpanDataTypeEnum.correction + : SpanDataTypeEnum.correction, + ); + } + + Map toJson() => { + 'type_name': typeName.name, + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! SpanDataType) return false; + return other.typeName == typeName; + } + + @override + int get hashCode { + return typeName.hashCode; + } +} diff --git a/lib/pangea/choreographer/igc/span_data_repo.dart b/lib/pangea/choreographer/igc/span_data_repo.dart new file mode 100644 index 000000000..7c07825bc --- /dev/null +++ b/lib/pangea/choreographer/igc/span_data_repo.dart @@ -0,0 +1,108 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_request.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_data_response.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; + +class _SpanDetailsCacheItem { + final Future data; + final DateTime timestamp; + + const _SpanDetailsCacheItem({ + required this.data, + required this.timestamp, + }); +} + +class SpanDataRepo { + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String? accessToken, { + required SpanDetailsRequest request, + }) async { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch( + accessToken, + request: request, + ); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String? accessToken, { + required SpanDetailsRequest request, + }) async { + final Requests req = Requests( + accessToken: accessToken, + choreoApiKey: Environment.choreoApiKey, + ); + + final Response res = await req.post( + url: PApiUrls.spanDetails, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception('Failed to load span details'); + } + + final respModel = SpanDetailsResponse.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); + return respModel.span; + } + + static Future> _getResult( + SpanDetailsRequest request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + SpanDetailsRequest request, + ) { + final cacheKeys = [..._cache.keys]; + for (final key in cacheKeys) { + if (DateTime.now().difference(_cache[key]!.timestamp) >= _cacheDuration) { + _cache.remove(key); + } + } + return _cache[request.hashCode.toString()]?.data; + } + + static void _setCached( + SpanDetailsRequest request, + Future response, + ) { + _cache[request.hashCode.toString()] = _SpanDetailsCacheItem( + data: response, + timestamp: DateTime.now(), + ); + } +} diff --git a/lib/pangea/choreographer/igc/span_data_request.dart b/lib/pangea/choreographer/igc/span_data_request.dart new file mode 100644 index 000000000..50fd6441b --- /dev/null +++ b/lib/pangea/choreographer/igc/span_data_request.dart @@ -0,0 +1,47 @@ +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; + +class SpanDetailsRequest { + final String userL1; + final String userL2; + final bool enableIT; + final bool enableIGC; + final SpanData span; + + const SpanDetailsRequest({ + required this.userL1, + required this.userL2, + required this.enableIGC, + required this.enableIT, + required this.span, + }); + + Map toJson() => { + ModelKey.userL1: userL1, + ModelKey.userL2: userL2, + ModelKey.enableIT: enableIT, + ModelKey.enableIGC: enableIGC, + 'span': span.toJson(), + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! SpanDetailsRequest) return false; + if (other.userL1 != userL1) return false; + if (other.userL2 != userL2) return false; + if (other.enableIT != enableIT) return false; + if (other.enableIGC != enableIGC) return false; + if (other.span != span) return false; + return true; + } + + @override + int get hashCode { + return userL1.hashCode ^ + userL2.hashCode ^ + enableIT.hashCode ^ + enableIGC.hashCode ^ + span.hashCode; + } +} diff --git a/lib/pangea/choreographer/igc/span_data_response.dart b/lib/pangea/choreographer/igc/span_data_response.dart new file mode 100644 index 000000000..331a673ce --- /dev/null +++ b/lib/pangea/choreographer/igc/span_data_response.dart @@ -0,0 +1,26 @@ +import 'package:fluffychat/pangea/choreographer/igc/span_data_model.dart'; + +class SpanDetailsResponse { + final String userL1; + final String userL2; + final bool enableIT; + final bool enableIGC; + final SpanData span; + + const SpanDetailsResponse({ + required this.userL1, + required this.userL2, + required this.enableIGC, + required this.enableIT, + required this.span, + }); + + factory SpanDetailsResponse.fromJson(Map json) => + SpanDetailsResponse( + userL1: json['user_l1'] as String, + userL2: json['user_l2'] as String, + enableIT: json['enable_it'] as bool, + enableIGC: json['enable_igc'] as bool, + span: SpanData.fromJson(json['span']), + ); +} diff --git a/lib/pangea/choreographer/enums/span_data_type.dart b/lib/pangea/choreographer/igc/span_data_type_enum.dart similarity index 90% rename from lib/pangea/choreographer/enums/span_data_type.dart rename to lib/pangea/choreographer/igc/span_data_type_enum.dart index 8cd58c0e2..d3cfa4b87 100644 --- a/lib/pangea/choreographer/enums/span_data_type.dart +++ b/lib/pangea/choreographer/igc/span_data_type_enum.dart @@ -34,7 +34,8 @@ extension SpanDataTypeEnumExt on SpanDataTypeEnum { return L10n.of(context).correctionDefaultPrompt; case SpanDataTypeEnum.itStart: return L10n.of(context).needsItMessage( - MatrixState.pangeaController.languageController.userL2?.displayName ?? + MatrixState.pangeaController.userController.userL2 + ?.getDisplayName(context) ?? L10n.of(context).targetLanguage, ); } diff --git a/lib/pangea/choreographer/igc/start_igc_button.dart b/lib/pangea/choreographer/igc/start_igc_button.dart new file mode 100644 index 000000000..34db5f2d3 --- /dev/null +++ b/lib/pangea/choreographer/igc/start_igc_button.dart @@ -0,0 +1,191 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/choreographer/assistance_state_enum.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; + +class StartIGCButton extends StatefulWidget { + final VoidCallback onPressed; + final Choreographer choreographer; + final AssistanceStateEnum initialState; + final Color initialForegroundColor; + final Color initialBackgroundColor; + + const StartIGCButton({ + super.key, + required this.onPressed, + required this.choreographer, + required this.initialState, + required this.initialForegroundColor, + required this.initialBackgroundColor, + }); + + @override + State createState() => _StartIGCButtonState(); +} + +class _StartIGCButtonState extends State + with TickerProviderStateMixin { + AnimationController? _spinController; + late Animation _rotation; + + AnimationController? _colorController; + late Animation _iconColor; + late Animation _backgroundColor; + AssistanceStateEnum? _prevState; + + bool _shouldStop = false; + + @override + void initState() { + super.initState(); + _spinController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 300), + )..addStatusListener((status) { + if (status == AnimationStatus.completed) { + if (_shouldStop) { + _spinController?.stop(); + _spinController?.value = 0; + } else { + _spinController?.forward(from: 0); + } + } + }); + + _rotation = Tween(begin: 0.0, end: 1.0).animate( + CurvedAnimation( + parent: _spinController!, + curve: Curves.linear, + ), + ); + + _colorController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 300), + ); + + _prevState = widget.initialState; + _iconColor = AlwaysStoppedAnimation(widget.initialForegroundColor); + _backgroundColor = AlwaysStoppedAnimation(widget.initialBackgroundColor); + _colorController!.forward(from: 0.0); + + widget.choreographer.addListener(_handleStateChange); + } + + @override + void dispose() { + widget.choreographer.removeListener(_handleStateChange); + _spinController?.dispose(); + _colorController?.dispose(); + super.dispose(); + } + + void _handleStateChange() { + final prev = _prevState; + final current = widget.choreographer.assistanceState; + _prevState = current; + + if (!mounted || prev == current) return; + final newIconColor = current.stateColor(context); + final newBgColor = current.backgroundColor(context); + final oldIconColor = _iconColor.value; + final oldBgColor = _backgroundColor.value; + + // Create tweens from current → new colors + _iconColor = ColorTween( + begin: oldIconColor, + end: newIconColor, + ).animate(_colorController!); + _backgroundColor = ColorTween( + begin: oldBgColor, + end: newBgColor, + ).animate(_colorController!); + _colorController!.forward(from: 0.0); + + if (current == AssistanceStateEnum.fetching) { + _shouldStop = false; + _spinController!.forward(from: 0.0); + } else if (prev == AssistanceStateEnum.fetching) { + _shouldStop = true; + } + } + + @override + Widget build(BuildContext context) { + if (_colorController == null || _spinController == null) { + return const SizedBox.shrink(); + } + + return AnimatedBuilder( + animation: Listenable.merge([_colorController!, _spinController!]), + builder: (context, child) { + final enableFeedback = + widget.choreographer.assistanceState.allowsFeedback; + return Tooltip( + message: enableFeedback ? L10n.of(context).check : "", + child: Material( + elevation: enableFeedback ? 4.0 : 0.0, + shape: const CircleBorder(), + clipBehavior: Clip.antiAlias, + shadowColor: Theme.of(context).colorScheme.surface.withAlpha(128), + child: InkWell( + enableFeedback: enableFeedback, + customBorder: const CircleBorder(), + onTap: enableFeedback ? widget.onPressed : null, + onLongPress: enableFeedback + ? () => showDialog( + context: context, + builder: (c) => const SettingsLearning(), + barrierDismissible: false, + ) + : null, + child: Stack( + alignment: Alignment.center, + children: [ + Container( + height: 40.0, + width: 40.0, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: _backgroundColor.value, + ), + ), + AnimatedBuilder( + animation: _rotation, + builder: (context, child) { + return Transform.rotate( + angle: _rotation.value * 2 * 3.14159, + child: child, + ); + }, + child: Icon( + Icons.autorenew_rounded, + size: 36, + color: _iconColor.value, + ), + ), + Container( + width: 20, + height: 20, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: _backgroundColor.value, + ), + ), + Icon( + size: 16, + Icons.check, + color: _iconColor.value, + ), + ], + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/pangea/choreographer/igc/text_normalization_util.dart b/lib/pangea/choreographer/igc/text_normalization_util.dart new file mode 100644 index 000000000..d510a71ca --- /dev/null +++ b/lib/pangea/choreographer/igc/text_normalization_util.dart @@ -0,0 +1,112 @@ +import 'package:diacritic/diacritic.dart'; + +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; + +// The intention of this function is to normalize text for comparison purposes. +// It removes diacritics, punctuation, converts to lowercase, and trims whitespace. +// We would like esta = está, hello! = Hello, etc. +String normalizeString(String input, String languageCode) { + try { + // Step 1: Convert to lowercase (works for all Unicode scripts) + String normalized = input.toLowerCase(); + + // Step 2: Apply language-specific normalization rules + normalized = _applyLanguageSpecificNormalization(normalized, languageCode); + + // Step 3: Replace hyphens and other dash-like characters with spaces + normalized = normalized.replaceAll( + RegExp(r'[-\u2010-\u2015\u2212\uFE58\uFE63\uFF0D]'), + ' ', + ); + + // Step 4: Remove punctuation (including Unicode punctuation) + // This removes ASCII and Unicode punctuation while preserving letters, numbers, and spaces + normalized = normalized.replaceAll( + RegExp(r'[\p{P}\p{S}]', unicode: true), + '', + ); + + // Step 5: Normalize whitespace (collapse multiple spaces, trim) + return normalized.replaceAll(RegExp(r'\s+'), ' ').trim(); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'input': input}, + ); + return input; + } +} + +// Apply language-specific normalization rules +String _applyLanguageSpecificNormalization(String text, String languageCode) { + // Apply normalization based on provided language code + switch (languageCode) { + case 'de': // German + String normalized = removeDiacritics(text); + // Handle German ß -> ss conversion + normalized = normalized.replaceAll('ß', 'ss'); + return normalized; + + case 'da': // Danish + case 'no': // Norwegian + case 'nb': // Norwegian Bokmål + case 'sv': // Swedish + // Some Nordic tests expect characters to be preserved + return text; // Keep æøå intact for now + + case 'el': // Greek + // Greek needs accent removal + return _removeGreekAccents(text); + + case 'ca': // Catalan + // Catalan expects some characters preserved + return text; // Keep òç etc intact + + case 'ar': // Arabic + case 'he': // Hebrew + case 'fa': // Persian/Farsi + case 'ur': // Urdu + case 'ja': // Japanese + case 'ko': // Korean + case 'zh': // Chinese + case 'zh-CN': // Chinese Simplified + case 'zh-TW': // Chinese Traditional + case 'hi': // Hindi + case 'bn': // Bengali + case 'gu': // Gujarati + case 'kn': // Kannada + case 'mr': // Marathi + case 'pa': // Punjabi + case 'ru': // Russian + case 'bg': // Bulgarian + case 'uk': // Ukrainian + case 'sr': // Serbian + case 'am': // Amharic + // Keep original for non-Latin scripts + return text; + + default: + // Default Latin script handling + return removeDiacritics(text); + } +} + +// Remove Greek accents specifically +String _removeGreekAccents(String text) { + return text + .replaceAll('ά', 'α') + .replaceAll('έ', 'ε') + .replaceAll('ή', 'η') + .replaceAll('ί', 'ι') + .replaceAll('ό', 'ο') + .replaceAll('ύ', 'υ') + .replaceAll('ώ', 'ω') + .replaceAll('Ά', 'Α') + .replaceAll('Έ', 'Ε') + .replaceAll('Ή', 'Η') + .replaceAll('Ί', 'Ι') + .replaceAll('Ό', 'Ο') + .replaceAll('Ύ', 'Υ') + .replaceAll('Ώ', 'Ω'); +} diff --git a/lib/pangea/choreographer/it/completed_it_step_model.dart b/lib/pangea/choreographer/it/completed_it_step_model.dart new file mode 100644 index 000000000..e1af2afff --- /dev/null +++ b/lib/pangea/choreographer/it/completed_it_step_model.dart @@ -0,0 +1,171 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import '../choreo_constants.dart'; + +class CompletedITStepModel { + final List continuances; + final int chosen; + + const CompletedITStepModel( + this.continuances, { + required this.chosen, + }); + + Map toJson() { + final Map data = {}; + data['continuances'] = continuances.map((e) => e.toJson(true)).toList(); + data['chosen'] = chosen; + return data; + } + + factory CompletedITStepModel.fromJson(Map json) { + final List continuances = []; + for (final Map continuance in json['continuances']) { + continuances.add(ContinuanceModel.fromJson(continuance)); + } + return CompletedITStepModel( + continuances, + chosen: json['chosen'], + ); + } + + ContinuanceModel? get chosenContinuance { + return continuances[chosen]; + } +} + +class ContinuanceModel { + final double probability; + final int level; + final String text; + + final String description; + final int? indexSavedByServer; + final bool wasClicked; + final bool inDictionary; + final bool hasInfo; + final bool gold; + + const ContinuanceModel({ + required this.probability, + required this.level, + required this.text, + required this.description, + required this.indexSavedByServer, + required this.wasClicked, + required this.inDictionary, + required this.hasInfo, + required this.gold, + }); + + factory ContinuanceModel.fromJson(Map json) { + return ContinuanceModel( + probability: json['probability'].toDouble(), + level: json['level'], + text: json['text'], + description: json['description'] ?? "", + indexSavedByServer: json["index"], + inDictionary: json['in_dictionary'] ?? true, + wasClicked: json['clkd'] ?? false, + hasInfo: json['has_info'] ?? false, + gold: json['gold'] ?? false, + ); + } + + Map toJson([bool condensed = false]) { + final Map data = {}; + data['probability'] = probability; + data['level'] = level; + data['text'] = text; + data['clkd'] = wasClicked; + + if (!condensed) { + data['description'] = description; + data['in_dictionary'] = inDictionary; + data['has_info'] = hasInfo; + data["index"] = indexSavedByServer; + data['gold'] = gold; + } + return data; + } + + ContinuanceModel copyWith({ + double? probability, + int? level, + String? text, + String? description, + int? indexSavedByServer, + bool? wasClicked, + bool? inDictionary, + bool? hasInfo, + bool? gold, + }) { + return ContinuanceModel( + probability: probability ?? this.probability, + level: level ?? this.level, + text: text ?? this.text, + description: description ?? this.description, + indexSavedByServer: indexSavedByServer ?? this.indexSavedByServer, + wasClicked: wasClicked ?? this.wasClicked, + inDictionary: inDictionary ?? this.inDictionary, + hasInfo: hasInfo ?? this.hasInfo, + gold: gold ?? this.gold, + ); + } + + Color? get color { + if (!wasClicked) return null; + switch (level) { + case ChoreoConstants.levelThresholdForGreen: + return ChoreoConstants.green; + case ChoreoConstants.levelThresholdForYellow: + return ChoreoConstants.yellow; + case ChoreoConstants.levelThresholdForRed: + return ChoreoConstants.red; + default: + return null; + } + } + + String? feedbackText(BuildContext context) { + final L10n l10n = L10n.of(context); + switch (level) { + case ChoreoConstants.levelThresholdForGreen: + return l10n.greenFeedback; + case ChoreoConstants.levelThresholdForYellow: + return l10n.yellowFeedback; + case ChoreoConstants.levelThresholdForRed: + return l10n.redFeedback; + default: + return null; + } + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is ContinuanceModel && + runtimeType == other.runtimeType && + probability == other.probability && + level == other.level && + text == other.text && + description == other.description && + indexSavedByServer == other.indexSavedByServer && + wasClicked == other.wasClicked && + inDictionary == other.inDictionary && + hasInfo == other.hasInfo && + gold == other.gold; + + @override + int get hashCode => + probability.hashCode ^ + level.hashCode ^ + text.hashCode ^ + description.hashCode ^ + indexSavedByServer.hashCode ^ + wasClicked.hashCode ^ + inDictionary.hashCode ^ + hasInfo.hashCode ^ + gold.hashCode; +} diff --git a/lib/pangea/choreographer/it/contextual_definition_repo.dart b/lib/pangea/choreographer/it/contextual_definition_repo.dart new file mode 100644 index 000000000..8d6a5a616 --- /dev/null +++ b/lib/pangea/choreographer/it/contextual_definition_repo.dart @@ -0,0 +1,110 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/choreographer/it/contextual_definition_request_model.dart'; +import 'package:fluffychat/pangea/choreographer/it/contextual_definition_response_model.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; + +class ContextualDefinitionRepo { + static final Map> _cache = {}; + + static Future> get( + String accessToken, + ContextualDefinitionRequestModel request, + ) async { + final cached = _getCached(request); + if (cached != null) { + try { + return Result.value(await cached); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + final future = _fetch(accessToken, request); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String accessToken, + ContextualDefinitionRequestModel request, + ) async { + final Requests req = Requests( + choreoApiKey: Environment.choreoApiKey, + accessToken: accessToken, + ); + + final Response res = await req.post( + url: PApiUrls.contextualDefinition, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + "Contextual definition request failed with status code ${res.statusCode}", + ); + } + + final ContextualDefinitionResponseModel response = + ContextualDefinitionResponseModel.fromJson( + jsonDecode( + utf8.decode(res.bodyBytes).toString(), + ), + ); + + if (response.text.isEmpty) { + ErrorHandler.logError( + e: Exception( + "empty text in contextual definition response", + ), + data: { + "request": request.toJson(), + "accessToken": accessToken, + }, + ); + } + + return response.text; + } + + static Future> _getResult( + ContextualDefinitionRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + ContextualDefinitionRequestModel request, + ) => + _cache[request.hashCode.toString()]; + + static void _setCached( + ContextualDefinitionRequestModel request, + Future response, + ) => + _cache[request.hashCode.toString()] = response; +} diff --git a/lib/pangea/choreographer/it/contextual_definition_request_model.dart b/lib/pangea/choreographer/it/contextual_definition_request_model.dart new file mode 100644 index 000000000..71376d9e7 --- /dev/null +++ b/lib/pangea/choreographer/it/contextual_definition_request_model.dart @@ -0,0 +1,44 @@ +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; + +class ContextualDefinitionRequestModel { + final String fullText; + final String word; + final String feedbackLang; + final String fullTextLang; + final String wordLang; + + const ContextualDefinitionRequestModel({ + required this.fullText, + required this.word, + required this.feedbackLang, + required this.fullTextLang, + required this.wordLang, + }); + + Map toJson() => { + ModelKey.fullText: fullText, + ModelKey.word: word, + ModelKey.lang: feedbackLang, + ModelKey.fullTextLang: fullTextLang, + ModelKey.wordLang: wordLang, + }; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is ContextualDefinitionRequestModel && + runtimeType == other.runtimeType && + fullText == other.fullText && + word == other.word && + feedbackLang == other.feedbackLang && + fullTextLang == other.fullTextLang && + wordLang == other.wordLang; + + @override + int get hashCode => + fullText.hashCode ^ + word.hashCode ^ + feedbackLang.hashCode ^ + fullTextLang.hashCode ^ + wordLang.hashCode; +} diff --git a/lib/pangea/choreographer/it/contextual_definition_response_model.dart b/lib/pangea/choreographer/it/contextual_definition_response_model.dart new file mode 100644 index 000000000..7b3cd613a --- /dev/null +++ b/lib/pangea/choreographer/it/contextual_definition_response_model.dart @@ -0,0 +1,10 @@ +class ContextualDefinitionResponseModel { + final String text; + + const ContextualDefinitionResponseModel({required this.text}); + + factory ContextualDefinitionResponseModel.fromJson( + Map json, + ) => + ContextualDefinitionResponseModel(text: json["response"]); +} diff --git a/lib/pangea/choreographer/it/gold_route_tracker_model.dart b/lib/pangea/choreographer/it/gold_route_tracker_model.dart new file mode 100644 index 000000000..dfb2d61c3 --- /dev/null +++ b/lib/pangea/choreographer/it/gold_route_tracker_model.dart @@ -0,0 +1,37 @@ +import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; + +class GoldRouteTrackerModel { + final String _originalText; + final List continuances; + + const GoldRouteTrackerModel(this.continuances, String originalText) + : _originalText = originalText; + + ContinuanceModel? currentContinuance({ + required String currentText, + required String sourceText, + }) { + if (_originalText != sourceText) { + return null; + } + + String stack = ""; + for (final cont in continuances) { + if (stack == currentText) { + return cont; + } + stack += cont.text; + } + + return null; + } + + String? get fullTranslation { + if (continuances.isEmpty) return null; + String full = ""; + for (final cont in continuances) { + full += cont.text; + } + return full; + } +} diff --git a/lib/pangea/choreographer/it/it_bar.dart b/lib/pangea/choreographer/it/it_bar.dart new file mode 100644 index 000000000..db088a019 --- /dev/null +++ b/lib/pangea/choreographer/it/it_bar.dart @@ -0,0 +1,398 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:sentry_flutter/sentry_flutter.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; +import 'package:fluffychat/pangea/choreographer/it/it_feedback_card.dart'; +import 'package:fluffychat/pangea/choreographer/it/word_data_card.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_request_model.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../../common/utils/overlay.dart'; +import '../../common/widgets/choice_array.dart'; + +class ITBar extends StatefulWidget { + final Choreographer choreographer; + const ITBar({ + super.key, + required this.choreographer, + }); + + @override + ITBarState createState() => ITBarState(); +} + +class ITBarState extends State with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + final TextEditingController _sourceTextController = TextEditingController(); + + Timer? _successTimer; + bool _visible = false; + + @override + void initState() { + super.initState(); + + _controller = AnimationController( + duration: const Duration(milliseconds: 300), + vsync: this, + ); + _animation = CurvedAnimation(parent: _controller, curve: Curves.easeInOut); + _openListener(); + _open.addListener(_openListener); + } + + @override + void dispose() { + _controller.dispose(); + _sourceTextController.dispose(); + _successTimer?.cancel(); + _open.removeListener(_openListener); + super.dispose(); + } + + FullTextTranslationRequestModel _translationRequest(String text) => + FullTextTranslationRequestModel( + text: text, + tgtLang: MatrixState.pangeaController.userController.userL1!.langCode, + userL1: MatrixState.pangeaController.userController.userL1!.langCode, + userL2: MatrixState.pangeaController.userController.userL2!.langCode, + ); + + void _openListener() { + if (!mounted) return; + + final nextText = _sourceText.value ?? widget.choreographer.currentText; + if (_sourceTextController.text != nextText) { + _sourceTextController.text = nextText; + } + + if (_open.value) { + setState(() => _visible = true); + _controller.forward(); + } else { + _controller.reverse().then((value) { + if (!mounted) return; + setState(() => _visible = false); + }); + } + } + + ValueNotifier get _sourceText => + widget.choreographer.itController.sourceText; + ValueNotifier get _open => widget.choreographer.itController.open; + + void _showFeedbackCard( + ContinuanceModel continuance, [ + Color? borderColor, + bool selected = false, + ]) { + final text = continuance.text; + MatrixState.pAnyState.closeOverlay("it_feedback_card"); + OverlayUtil.showPositionedCard( + context: context, + cardToShow: selected + ? WordDataCard( + word: text, + langCode: + MatrixState.pangeaController.userController.userL2!.langCode, + fullText: _sourceText.value ?? widget.choreographer.currentText, + ) + : ITFeedbackCard(_translationRequest(text)), + maxHeight: 300, + maxWidth: 300, + borderColor: borderColor, + transformTargetId: 'it_bar', + isScrollable: false, + overlayKey: "it_feedback_card", + ignorePointer: true, + ); + } + + void _selectContinuance(int index) { + MatrixState.pAnyState.closeOverlay("it_feedback_card"); + ContinuanceModel continuance; + try { + continuance = widget.choreographer.itController.selectContinuance(index); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + level: SentryLevel.warning, + data: { + "index": index, + }, + ); + widget.choreographer.itController.closeIT(); + return; + } + + if (continuance.level == 1) { + _onCorrectSelection(index); + } else { + _showFeedbackCard( + continuance, + continuance.level == 2 ? ChoreoConstants.yellow : ChoreoConstants.red, + true, + ); + } + } + + void _onCorrectSelection(int index) { + _successTimer?.cancel(); + _successTimer = Timer(const Duration(milliseconds: 500), () { + if (!mounted) return; + try { + widget.choreographer.itController.acceptContinuance(index); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + level: SentryLevel.warning, + data: { + "index": index, + }, + ); + widget.choreographer.itController.closeIT(); + } + }); + } + + @override + Widget build(BuildContext context) { + if (!_visible) { + return const SizedBox.shrink(); + } + + return AnimatedBuilder( + animation: _animation, + builder: (context, child) => SizeTransition( + sizeFactor: _animation, + axisAlignment: -1.0, + child: child, + ), + child: CompositedTransformTarget( + link: MatrixState.pAnyState.layerLinkAndKey('it_bar').link, + child: Container( + key: MatrixState.pAnyState.layerLinkAndKey('it_bar').key, + decoration: BoxDecoration( + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(24), + topRight: Radius.circular(24), + ), + color: Theme.of(context).colorScheme.surfaceContainer, + ), + padding: const EdgeInsets.all(12.0), + child: Column( + spacing: 12.0, + children: [ + _ITBarHeader( + onClose: () => + widget.choreographer.itController.closeIT(dismiss: true), + setEditing: + widget.choreographer.itController.setEditingSourceText, + editing: widget.choreographer.itController.editing, + sourceTextController: _sourceTextController, + sourceText: _sourceText, + onSubmitEdits: (_) { + widget.choreographer.itController.submitSourceTextEdits( + _sourceTextController.text, + ); + }, + ), + Container( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + constraints: const BoxConstraints(minHeight: 80), + child: Center( + child: widget.choreographer.errorService.isError + ? Row( + spacing: 8.0, + mainAxisSize: MainAxisSize.min, + children: [ + ErrorIndicator( + message: L10n.of(context).translationError, + style: TextStyle( + fontStyle: FontStyle.italic, + color: Theme.of(context).colorScheme.error, + ), + ), + IconButton( + onPressed: + widget.choreographer.itController.closeIT, + icon: const Icon( + Icons.close, + size: 20, + ), + ), + ], + ) + : ValueListenableBuilder( + valueListenable: + widget.choreographer.itController.currentITStep, + builder: (context, step, __) { + return step == null + ? CircularProgressIndicator( + strokeWidth: 2.0, + color: + Theme.of(context).colorScheme.primary, + ) + : _ITChoices( + continuances: step.continuances, + onPressed: _selectContinuance, + onLongPressed: _showFeedbackCard, + ); + }, + ), + ), + ), + ], + ), + ), + ), + ); + } +} + +class _ITBarHeader extends StatelessWidget { + final VoidCallback onClose; + final Function(String) onSubmitEdits; + final Function(bool) setEditing; + + final ValueNotifier editing; + final TextEditingController sourceTextController; + final ValueNotifier sourceText; + + const _ITBarHeader({ + required this.onClose, + required this.setEditing, + required this.editing, + required this.onSubmitEdits, + required this.sourceTextController, + required this.sourceText, + }); + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: editing, + builder: (context, isEditing, __) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + AnimatedCrossFade( + duration: const Duration(milliseconds: 200), + crossFadeState: isEditing + ? CrossFadeState.showFirst + : CrossFadeState.showSecond, + firstChild: Row( + spacing: 12.0, + children: [ + Expanded( + child: TextField( + controller: sourceTextController, + autofocus: true, + enableSuggestions: false, + maxLines: null, + textInputAction: TextInputAction.send, + onSubmitted: onSubmitEdits, + decoration: const InputDecoration( + border: OutlineInputBorder(), + ), + ), + ), + IconButton( + color: Theme.of(context).colorScheme.primary, + icon: const Icon(Icons.close_outlined), + onPressed: () => setEditing(false), + ), + ], + ), + secondChild: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + IconButton( + color: Theme.of(context).colorScheme.primary, + onPressed: () => setEditing(true), + icon: const Icon(Icons.edit_outlined), + ), + IconButton( + color: Theme.of(context).colorScheme.primary, + icon: const Icon(Icons.settings_outlined), + onPressed: () => showDialog( + context: context, + builder: (c) => const SettingsLearning(), + barrierDismissible: false, + ), + ), + IconButton( + color: Theme.of(context).colorScheme.primary, + icon: const Icon(Icons.close_outlined), + onPressed: onClose, + ), + ], + ), + ), + isEditing + ? const SizedBox(height: 24.0) + : ValueListenableBuilder( + valueListenable: sourceText, + builder: (context, text, __) { + return Container( + padding: const EdgeInsets.only(top: 8.0), + constraints: const BoxConstraints(minHeight: 24.0), + child: sourceText.value != null + ? Text( + sourceText.value!, + textAlign: TextAlign.center, + ) + : const SizedBox(), + ); + }, + ), + ], + ); + }, + ); + } +} + +class _ITChoices extends StatelessWidget { + final List continuances; + final Function(int) onPressed; + final Function(ContinuanceModel) onLongPressed; + + const _ITChoices({ + required this.continuances, + required this.onPressed, + required this.onLongPressed, + }); + + @override + Widget build(BuildContext context) { + return ChoicesArray( + id: Object.hashAll(continuances).toString(), + isLoading: false, + choices: [ + ...continuances.map( + (e) => Choice( + text: e.text.trim(), + color: e.color, + isGold: e.description == "best", + ), + ), + ], + onPressed: (value, index) => onPressed(index), + onLongPress: (value, index) => onLongPressed(continuances[index]), + selectedChoiceIndex: null, + langCode: MatrixState.pangeaController.userController.userL2Code!, + ); + } +} diff --git a/lib/pangea/choreographer/it/it_controller.dart b/lib/pangea/choreographer/it/it_controller.dart new file mode 100644 index 000000000..a90c20c00 --- /dev/null +++ b/lib/pangea/choreographer/it/it_controller.dart @@ -0,0 +1,225 @@ +import 'dart:async'; +import 'dart:collection'; + +import 'package:flutter/foundation.dart'; + +import 'package:async/async.dart'; + +import 'package:fluffychat/pangea/choreographer/it/gold_route_tracker_model.dart'; +import 'package:fluffychat/pangea/choreographer/it/it_repo.dart'; +import 'package:fluffychat/pangea/choreographer/it/it_response_model.dart'; +import 'package:fluffychat/pangea/choreographer/it/it_step_model.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'completed_it_step_model.dart'; +import 'it_request_model.dart'; + +class ITController { + final Function(Object) onError; + + final Queue> _queue = Queue(); + GoldRouteTrackerModel? _goldRouteTracker; + + final ValueNotifier _sourceText = ValueNotifier(null); + final ValueNotifier _currentITStep = ValueNotifier(null); + final ValueNotifier _open = ValueNotifier(false); + final ValueNotifier _editing = ValueNotifier(false); + + ITController(this.onError); + + ValueNotifier get open => _open; + ValueNotifier get editing => _editing; + ValueNotifier get currentITStep => _currentITStep; + ValueNotifier get sourceText => _sourceText; + StreamController acceptedContinuanceStream = + StreamController.broadcast(); + + bool _continuing = false; + bool dismissed = false; + + ITRequestModel _request(String textInput) { + assert(_sourceText.value != null); + return ITRequestModel( + text: _sourceText.value!, + customInput: textInput, + sourceLangCode: MatrixState.pangeaController.userController.userL1Code!, + targetLangCode: MatrixState.pangeaController.userController.userL2Code!, + goldTranslation: _goldRouteTracker?.fullTranslation, + goldContinuances: _goldRouteTracker?.continuances, + ); + } + + Future> _safeRequest(String text) { + return ITRepo.get(_request(text)).timeout( + const Duration(seconds: 10), + onTimeout: () => Result.error( + TimeoutException("ITRepo.get timed out after 10 seconds"), + ), + ); + } + + void clearSourceText() { + _sourceText.value = null; + } + + void clearDissmissed() { + dismissed = false; + } + + void dispose() { + acceptedContinuanceStream.close(); + _open.dispose(); + _editing.dispose(); + _currentITStep.dispose(); + _sourceText.dispose(); + } + + void openIT(String text) { + _sourceText.value = text; + _open.value = true; + _continueIT(); + } + + void closeIT({bool dismiss = false}) { + MatrixState.pAnyState.closeOverlay("it_feedback_card"); + + setEditingSourceText(false); + if (dismiss) { + dismissed = true; + } + + _open.value = false; + _queue.clear(); + _currentITStep.value = null; + _goldRouteTracker = null; + } + + void setEditingSourceText(bool value) { + _editing.value = value; + } + + void submitSourceTextEdits(String text) { + _queue.clear(); + _currentITStep.value = null; + _goldRouteTracker = null; + _sourceText.value = text; + setEditingSourceText(false); + _continueIT(); + } + + ContinuanceModel selectContinuance(int index) { + if (_currentITStep.value == null) { + throw "onSelectContinuance called when _currentITStep is null"; + } + + if (index < 0 || index >= _currentITStep.value!.continuances.length) { + throw "onSelectContinuance called with invalid index $index"; + } + + final currentStep = _currentITStep.value!; + currentStep.continuances[index] = currentStep.continuances[index].copyWith( + wasClicked: true, + ); + _currentITStep.value = _currentITStep.value!.copyWith( + continuances: currentStep.continuances, + ); + return _currentITStep.value!.continuances[index]; + } + + void acceptContinuance(int chosenIndex) { + if (_currentITStep.value == null) { + throw "onAcceptContinuance called when _currentITStep is null"; + } + + if (chosenIndex < 0 || + chosenIndex >= _currentITStep.value!.continuances.length) { + throw "onAcceptContinuance called with invalid index $chosenIndex"; + } + + acceptedContinuanceStream.add( + CompletedITStepModel( + _currentITStep.value!.continuances, + chosen: chosenIndex, + ), + ); + _continueIT(); + } + + Future _continueIT() async { + if (_continuing) return; + _continuing = true; + + try { + if (_currentITStep.value == null) { + await _initTranslationData(); + } else if (_queue.isEmpty) { + closeIT(); + } else { + final nextStepCompleter = _queue.removeFirst(); + _currentITStep.value = await nextStepCompleter.future; + } + } catch (e) { + onError(e); + } finally { + _continuing = false; + } + } + + Future _initTranslationData() async { + final res = await _safeRequest(""); + if (_sourceText.value == null || !_open.value) return; + if (res.isError || res.result?.goldContinuances == null) { + onError(res.asError!); + return; + } + + final result = res.result!; + _goldRouteTracker = GoldRouteTrackerModel( + result.goldContinuances!, + _sourceText.value!, + ); + + _currentITStep.value = ITStepModel.fromResponse( + sourceText: _sourceText.value!, + currentText: "", + responseModel: res.result!, + storedGoldContinuances: _goldRouteTracker!.continuances, + ); + + _fillITStepQueue(); + } + + Future _fillITStepQueue() async { + if (_sourceText.value == null || + _goldRouteTracker!.continuances.length < 2) { + return; + } + + final sourceText = _sourceText.value!; + final goldContinuances = _goldRouteTracker!.continuances; + String currentText = goldContinuances[0].text; + for (int i = 1; i < goldContinuances.length; i++) { + if (_sourceText.value == null || !_open.value) { + return; + } + + final completer = Completer(); + _queue.add(completer); + final resp = await _safeRequest(currentText); + if (resp.isError) { + completer.completeError(resp.asError!); + break; + } else { + final step = ITStepModel.fromResponse( + sourceText: sourceText, + currentText: currentText, + responseModel: resp.result!, + storedGoldContinuances: goldContinuances, + ); + completer.complete(step); + } + + currentText += goldContinuances[i].text; + } + } +} diff --git a/lib/pangea/choreographer/it/it_feedback_card.dart b/lib/pangea/choreographer/it/it_feedback_card.dart new file mode 100644 index 000000000..39ffbba8d --- /dev/null +++ b/lib/pangea/choreographer/it/it_feedback_card.dart @@ -0,0 +1,75 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import 'package:async/async.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_request_model.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import '../../../widgets/matrix.dart'; +import '../../bot/utils/bot_style.dart'; +import '../../common/widgets/card_error_widget.dart'; + +class ITFeedbackCard extends StatelessWidget { + final FullTextTranslationRequestModel req; + + const ITFeedbackCard( + this.req, { + super.key, + }); + + Future> _getFeedback() { + return FullTextTranslationRepo.get( + MatrixState.pangeaController.userController.accessToken, + req, + ).timeout( + const Duration(seconds: 10), + onTimeout: () => Result.error("Timeout getting translation"), + ); + } + + @override + Widget build(BuildContext context) { + return FutureBuilder>( + future: _getFeedback(), + builder: (context, snapshot) { + if (snapshot.hasError) { + return CardErrorWidget(L10n.of(context).errorFetchingDefinition); + } + + return Container( + constraints: const BoxConstraints(maxWidth: 300), + alignment: Alignment.center, + child: Wrap( + spacing: 10, + alignment: WrapAlignment.center, + children: [ + Text( + req.text, + style: BotStyle.text(context), + ), + Text( + "≈", + style: BotStyle.text(context), + ), + snapshot.hasData + ? Text( + snapshot.data!.result!, + style: BotStyle.text(context), + ) + : TextLoadingShimmer( + width: min( + 140, + 10.0 * req.text.length, + ), + ), + ], + ), + ); + }, + ); + } +} diff --git a/lib/pangea/choreographer/it/it_repo.dart b/lib/pangea/choreographer/it/it_repo.dart new file mode 100644 index 000000000..7c36b33dc --- /dev/null +++ b/lib/pangea/choreographer/it/it_repo.dart @@ -0,0 +1,98 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../../common/network/requests.dart'; +import '../../common/network/urls.dart'; +import 'it_request_model.dart'; +import 'it_response_model.dart'; + +class _ITCacheItem { + final Future response; + final DateTime timestamp; + + const _ITCacheItem({ + required this.response, + required this.timestamp, + }); +} + +class ITRepo { + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + ITRequestModel request, + ) { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch(request); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + ITRequestModel request, + ) async { + final Requests req = Requests( + choreoApiKey: Environment.choreoApiKey, + accessToken: MatrixState.pangeaController.userController.accessToken, + ); + final Response res = + await req.post(url: PApiUrls.firstStep, body: request.toJson()); + + if (res.statusCode != 200) { + throw Exception('Failed to load interactive translation'); + } + + final json = jsonDecode(utf8.decode(res.bodyBytes).toString()); + return ITResponseModel.fromJson(json); + } + + static Future> _getResult( + ITRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + ITRequestModel request, + ) { + final cacheKeys = [..._cache.keys]; + for (final key in cacheKeys) { + if (DateTime.now().difference(_cache[key]!.timestamp) >= _cacheDuration) { + _cache.remove(key); + } + } + return _cache[request.hashCode.toString()]?.response; + } + + static void _setCached( + ITRequestModel request, + Future response, + ) { + _cache[request.hashCode.toString()] = _ITCacheItem( + response: response, + timestamp: DateTime.now(), + ); + } +} diff --git a/lib/pangea/choreographer/it/it_request_model.dart b/lib/pangea/choreographer/it/it_request_model.dart new file mode 100644 index 000000000..b5baf2604 --- /dev/null +++ b/lib/pangea/choreographer/it/it_request_model.dart @@ -0,0 +1,69 @@ +import 'package:flutter/foundation.dart'; + +import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; + +class ITRequestModel { + final String text; + final String customInput; + final String sourceLangCode; + final String targetLangCode; + + final String? goldTranslation; + final List? goldContinuances; + + const ITRequestModel({ + required this.text, + required this.customInput, + required this.sourceLangCode, + required this.targetLangCode, + required this.goldTranslation, + required this.goldContinuances, + }); + + factory ITRequestModel.fromJson(json) => ITRequestModel( + text: json[ModelKey.text], + customInput: json['custom_input'], + sourceLangCode: json[ModelKey.srcLang], + targetLangCode: json[ModelKey.tgtLang], + goldTranslation: json[ModelKey.goldTranslation], + goldContinuances: json['gold_continuances'] != null + ? (json['gold_continuances']) + .map((e) => ContinuanceModel.fromJson(e)) + .toList() + : null, + ); + + Map toJson() => { + ModelKey.text: text, + 'custom_input': customInput, + ModelKey.srcLang: sourceLangCode, + ModelKey.tgtLang: targetLangCode, + ModelKey.goldTranslation: goldTranslation, + 'gold_continuances': goldContinuances != null + ? List.from(goldContinuances!.map((e) => e.toJson())) + : null, + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is ITRequestModel && + other.text == text && + other.customInput == customInput && + other.sourceLangCode == sourceLangCode && + other.targetLangCode == targetLangCode && + other.goldTranslation == goldTranslation && + listEquals(other.goldContinuances, goldContinuances); + } + + @override + int get hashCode => + text.hashCode ^ + customInput.hashCode ^ + sourceLangCode.hashCode ^ + targetLangCode.hashCode ^ + goldTranslation.hashCode ^ + Object.hashAll(goldContinuances ?? []); +} diff --git a/lib/pangea/choreographer/it/it_response_model.dart b/lib/pangea/choreographer/it/it_response_model.dart new file mode 100644 index 000000000..3c68802a8 --- /dev/null +++ b/lib/pangea/choreographer/it/it_response_model.dart @@ -0,0 +1,74 @@ +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; + +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; + +class ITResponseModel { + final String fullTextTranslation; + final List continuances; + final List? goldContinuances; + final bool isFinal; + final String? translationId; + final int payloadId; + + const ITResponseModel({ + required this.fullTextTranslation, + required this.continuances, + required this.translationId, + required this.goldContinuances, + required this.isFinal, + required this.payloadId, + }); + + factory ITResponseModel.fromJson(Map json) { + //PTODO - is continuances a variable type? can we change that? + if (json['continuances'].runtimeType == String) { + debugPrint("continuances was string - ${json['continuances']}"); + json['continuances'] = []; + json['finished'] = true; + } + + final List interimCont = (json['continuances'] as List) + .mapIndexed((index, e) { + e["index"] = index; + return ContinuanceModel.fromJson(e); + }) + .toList() + .take(ChoreoConstants.numberOfITChoices) + .toList() + .cast() + //can't do this on the backend because step translation can't filter them out + .where((element) => element.inDictionary) + .toList(); + + interimCont.shuffle(); + + return ITResponseModel( + fullTextTranslation: json["full_text_translation"] ?? json["translation"], + continuances: interimCont, + translationId: json['translation_id'], + payloadId: json['payload_id'] ?? 0, + isFinal: json['finished'] ?? false, + goldContinuances: json['gold_continuances'] != null + ? (json['gold_continuances'] as Iterable).map((e) { + e["gold"] = true; + return ContinuanceModel.fromJson(e); + }).toList() + : null, + ); + } + + Map toJson() { + final Map data = {}; + data['full_text_translation'] = fullTextTranslation; + data['continuances'] = continuances.map((v) => v.toJson()).toList(); + if (translationId != null) { + data['translation_id'] = translationId; + } + data['payload_id'] = payloadId; + data["finished"] = isFinal; + return data; + } +} diff --git a/lib/pangea/choreographer/it/it_shimmer.dart b/lib/pangea/choreographer/it/it_shimmer.dart new file mode 100644 index 000000000..33ab1ba28 --- /dev/null +++ b/lib/pangea/choreographer/it/it_shimmer.dart @@ -0,0 +1,41 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +class ItShimmer extends StatelessWidget { + const ItShimmer({super.key}); + + @override + Widget build(BuildContext context) { + final color = Theme.of(context).colorScheme.primary.withAlpha(50); + + return Wrap( + alignment: WrapAlignment.center, + spacing: 4, + runSpacing: 4, + children: List.generate(3, (_) { + return ImageFiltered( + imageFilter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), + child: TextButton( + style: TextButton.styleFrom( + minimumSize: const Size(50, 36), + backgroundColor: color, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.symmetric(horizontal: 7), + ), + onPressed: null, + child: const Text( + " ", // 10 spaces + style: TextStyle( + color: Colors.transparent, + fontSize: 16, + ), + ), + ), + ); + }), + ); + } +} diff --git a/lib/pangea/choreographer/it/it_step_model.dart b/lib/pangea/choreographer/it/it_step_model.dart new file mode 100644 index 000000000..e3e72200a --- /dev/null +++ b/lib/pangea/choreographer/it/it_step_model.dart @@ -0,0 +1,67 @@ +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; +import 'package:fluffychat/pangea/choreographer/it/gold_route_tracker_model.dart'; +import 'package:fluffychat/pangea/choreographer/it/it_response_model.dart'; + +class ITStepModel { + late List continuances; + late bool isFinal; + + ITStepModel({this.continuances = const [], this.isFinal = false}); + + factory ITStepModel.fromResponse({ + required String sourceText, + required String currentText, + required ITResponseModel responseModel, + required List? storedGoldContinuances, + }) { + final List gold = + storedGoldContinuances ?? responseModel.goldContinuances ?? []; + final goldTracker = GoldRouteTrackerModel(gold, sourceText); + + final isFinal = responseModel.isFinal; + List continuances; + if (responseModel.continuances.isEmpty) { + continuances = []; + } else { + final ContinuanceModel? goldCont = goldTracker.currentContinuance( + currentText: currentText, + sourceText: sourceText, + ); + if (goldCont != null) { + continuances = [ + ...responseModel.continuances + .where((c) => c.text.toLowerCase() != goldCont.text.toLowerCase()) + .map((e) { + //we only want one green choice and for that to be our gold + if (e.level == ChoreoConstants.levelThresholdForGreen) { + return e.copyWith( + level: ChoreoConstants.levelThresholdForYellow, + ); + } + return e; + }), + goldCont, + ]; + continuances.shuffle(); + } else { + continuances = List.from(responseModel.continuances); + } + } + + return ITStepModel( + continuances: continuances, + isFinal: isFinal, + ); + } + + ITStepModel copyWith({ + List? continuances, + bool? isFinal, + }) { + return ITStepModel( + continuances: continuances ?? this.continuances, + isFinal: isFinal ?? this.isFinal, + ); + } +} diff --git a/lib/pangea/choreographer/it/word_data_card.dart b/lib/pangea/choreographer/it/word_data_card.dart new file mode 100644 index 000000000..ae8c1ab57 --- /dev/null +++ b/lib/pangea/choreographer/it/word_data_card.dart @@ -0,0 +1,68 @@ +import 'package:flutter/material.dart'; + +import 'package:async/async.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/choreographer/it/contextual_definition_repo.dart'; +import 'package:fluffychat/pangea/choreographer/it/contextual_definition_request_model.dart'; +import 'package:fluffychat/pangea/common/widgets/content_loading_indicator.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class WordDataCard extends StatelessWidget { + final String word; + final String fullText; + final String langCode; + + const WordDataCard({ + super.key, + required this.word, + required this.fullText, + required this.langCode, + }); + + ContextualDefinitionRequestModel get _request => + ContextualDefinitionRequestModel( + fullText: fullText, + word: word, + fullTextLang: langCode, + wordLang: langCode, + feedbackLang: MatrixState.pangeaController.userController.userL1Code ?? + LanguageKeys.defaultLanguage, + ); + + Future> _fetchDefinition() { + return ContextualDefinitionRepo.get( + MatrixState.pangeaController.userController.accessToken, + _request, + ).timeout( + const Duration(seconds: 10), + onTimeout: () => Result.error("Timeout getting definition"), + ); + } + + @override + Widget build(BuildContext context) { + return Center( + child: FutureBuilder>( + future: _fetchDefinition(), + builder: (context, snapshot) { + if (!snapshot.hasData) { + return const ContentLoadingIndicator(); + } + final result = snapshot.data!; + if (result.isError) { + return Text( + L10n.of(context).sorryNoResults, + style: BotStyle.text(context), + textAlign: TextAlign.center, + ); + } + return Text(result.result!, style: BotStyle.text(context)); + }, + ), + ); + } +} diff --git a/lib/pangea/choreographer/models/custom_input_translation_model.dart b/lib/pangea/choreographer/models/custom_input_translation_model.dart deleted file mode 100644 index c74eb53b4..000000000 --- a/lib/pangea/choreographer/models/custom_input_translation_model.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:fluffychat/pangea/choreographer/models/it_response_model.dart'; -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; - -class CustomInputRequestModel { - String text; - String customInput; - String sourceLangCode; - String targetLangCode; - String userId; - String roomId; - - String? goldTranslation; - List? goldContinuances; - - CustomInputRequestModel({ - required this.text, - required this.customInput, - required this.sourceLangCode, - required this.targetLangCode, - required this.userId, - required this.roomId, - required this.goldTranslation, - required this.goldContinuances, - }); - - factory CustomInputRequestModel.fromJson(json) => CustomInputRequestModel( - text: json['text'], - customInput: json['custom_input'], - sourceLangCode: json[ModelKey.srcLang], - targetLangCode: json[ModelKey.tgtLang], - userId: json['user_id'], - roomId: json['room_id'], - goldTranslation: json['gold_translation'], - goldContinuances: json['gold_continuances'] != null - ? List.from(json['gold_continuances']) - .map((e) => Continuance.fromJson(e)) - .toList() - : null, - ); - - toJson() => { - 'text': text, - 'custom_input': customInput, - ModelKey.srcLang: sourceLangCode, - ModelKey.tgtLang: targetLangCode, - 'user_id': userId, - 'room_id': roomId, - 'gold_translation': goldTranslation, - 'gold_continuances': goldContinuances != null - ? List.from(goldContinuances!.map((e) => e.toJson())) - : null, - }; -} diff --git a/lib/pangea/choreographer/models/igc_text_data_model.dart b/lib/pangea/choreographer/models/igc_text_data_model.dart deleted file mode 100644 index 3991aa4f7..000000000 --- a/lib/pangea/choreographer/models/igc_text_data_model.dart +++ /dev/null @@ -1,444 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; - -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/autocorrect_popup.dart'; -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_event.dart'; -import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -// import 'package:language_tool/language_tool.dart'; - -class IGCTextData { - String originalInput; - String? fullTextCorrection; - List matches; - String userL1; - String userL2; - bool enableIT; - bool enableIGC; - bool loading = false; - - IGCTextData({ - required this.originalInput, - required this.fullTextCorrection, - required this.matches, - required this.userL1, - required this.userL2, - required this.enableIT, - required this.enableIGC, - }); - - factory IGCTextData.fromJson(Map json) { - return IGCTextData( - matches: json[_matchesKey] != null - ? (json[_matchesKey] as Iterable) - .map( - (e) { - return PangeaMatch.fromJson(e as Map); - }, - ) - .toList() - .cast() - : [], - originalInput: json["original_input"], - fullTextCorrection: json["full_text_correction"], - userL1: json[ModelKey.userL1], - userL2: json[ModelKey.userL2], - enableIT: json["enable_it"], - enableIGC: json["enable_igc"], - ); - } - - factory IGCTextData.fromRepresentationEvent( - RepresentationEvent event, - String userL1, - String userL2, - ) { - final PangeaRepresentation content = event.content; - final List matches = event.choreo?.choreoSteps - .map((step) => step.acceptedOrIgnoredMatch) - .whereType() - .toList() ?? - []; - - String originalInput = content.text; - if (matches.isNotEmpty) { - originalInput = matches.first.match.fullText; - } - - return IGCTextData( - originalInput: originalInput, - fullTextCorrection: content.text, - matches: matches, - userL1: userL1, - userL2: userL2, - enableIT: true, - enableIGC: true, - ); - } - - static const String _matchesKey = "matches"; - - Map toJson() => { - "original_input": originalInput, - "full_text_correction": fullTextCorrection, - _matchesKey: matches.map((e) => e.toJson()).toList(), - ModelKey.userL1: userL1, - ModelKey.userL2: userL2, - "enable_it": enableIT, - "enable_igc": enableIGC, - }; - - // reconstruct fullText based on accepted match - //update offsets in existing matches to reflect the change - //if existing matches overlap with the accepted one, remove them?? - void acceptReplacement( - int matchIndex, - int choiceIndex, - ) async { - //should be already added to choreoRecord - //TODO - that should be done in the same function to avoid error potential - - final PangeaMatch pangeaMatch = matches[matchIndex]; - - if (pangeaMatch.match.choices == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "pangeaMatch.match.choices is null in acceptReplacement", - data: { - "match": pangeaMatch.match.toJson(), - }, - ); - return; - } - - final SpanChoice replacement = pangeaMatch.match.choices![choiceIndex]; - - final newStart = originalInput.characters.take(pangeaMatch.match.offset); - final newEnd = originalInput.characters - .skip(pangeaMatch.match.offset + pangeaMatch.match.length); - final fullText = newStart + replacement.value.characters + newEnd; - originalInput = fullText.toString(); - - // update offsets in existing matches to reflect the change - // Question - remove matches that overlap with the accepted one? - // see case of "quiero ver un fix" - matches.removeAt(matchIndex); - - for (final match in matches) { - match.match.fullText = originalInput; - if (match.match.offset > pangeaMatch.match.offset) { - match.match.offset += - replacement.value.length - pangeaMatch.match.length; - } - } - } - - void undoReplacement(PangeaMatch match) async { - if (match.match.choices == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "pangeaMatch.match.choices is null in undoReplacement", - data: { - "match": match.match.toJson(), - }, - ); - return; - } - - if (!match.match.choices!.any((c) => c.isBestCorrection)) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "pangeaMatch.match.choices has no best correction in undoReplacement", - data: { - "match": match.match.toJson(), - }, - ); - return; - } - - final bestCorrection = - match.match.choices!.firstWhere((c) => c.isBestCorrection).value; - - final String replacement = match.match.fullText.characters - .getRange( - match.match.offset, - match.match.offset + match.match.length, - ) - .toString(); - - final newStart = originalInput.characters.take(match.match.offset); - final newEnd = originalInput.characters.skip( - match.match.offset + bestCorrection.characters.length, - ); - final fullText = newStart + replacement.characters + newEnd; - originalInput = fullText.toString(); - - for (final remainingMatch in matches) { - remainingMatch.match.fullText = originalInput; - if (remainingMatch.match.offset > match.match.offset) { - remainingMatch.match.offset += - match.match.length - bestCorrection.characters.length; - } - } - } - - List matchIndicesByOffset(int offset) { - final List matchesForOffset = []; - for (final (index, match) in matches.indexed) { - if (match.isOffsetInMatchSpan(offset)) { - matchesForOffset.add(index); - } - } - return matchesForOffset; - } - - int getTopMatchIndexForOffset(int offset) { - final List matchesForToken = matchIndicesByOffset(offset); - final int matchIndex = matchesForToken.indexWhere((matchIndex) { - final match = matches[matchIndex]; - return (enableIT && (match.isITStart || match.isl1SpanMatch)) || - (enableIGC && match.isGrammarMatch); - }); - if (matchIndex == -1) return -1; - return matchesForToken[matchIndex]; - } - - static TextStyle underlineStyle(Color color) => TextStyle( - decoration: TextDecoration.underline, - decorationColor: color, - decorationThickness: 5, - ); - - TextSpan getSpanItem({ - required int start, - required int end, - TextStyle? style, - }) { - return TextSpan( - text: originalInput.characters.getRange(start, end).toString(), - style: style, - ); - } - - int? get _openMatchIndex { - final RegExp pattern = RegExp(r'span_card_overlay_\d+'); - final String? matchingKeys = - MatrixState.pAnyState.getMatchingOverlayKeys(pattern).firstOrNull; - if (matchingKeys == null) return null; - final int? index = int.tryParse(matchingKeys.split("_").last); - if (index == null || - matches.length <= index || - matches[index].status != PangeaMatchStatus.open) { - return null; - } - - return index; - } - - //PTODO - handle multitoken spans - /// Returns a list of [TextSpan]s used to display the text in the input field - /// with the appropriate styling for each error match. - List constructTokenSpan({ - required List choreoSteps, - void Function(PangeaMatch)? onUndo, - TextStyle? defaultStyle, - }) { - final automaticMatches = choreoSteps - .where( - (step) => - step.acceptedOrIgnoredMatch?.status == - PangeaMatchStatus.automatic, - ) - .map((step) => step.acceptedOrIgnoredMatch) - .whereType() - .toList(); - - final List textSpanMatches = List.from(matches); - textSpanMatches.addAll(automaticMatches); - - final List items = []; - - if (loading) { - return [ - TextSpan( - text: originalInput, - style: defaultStyle, - ), - ]; - } - - textSpanMatches.sort((a, b) => a.match.offset.compareTo(b.match.offset)); - final List> matchRanges = textSpanMatches - .map( - (match) => [ - match.match.offset, - match.match.length + match.match.offset, - ], - ) - .toList(); - - // create a pointer to the current index in the original input - // and iterate until the pointer has reached the end of the input - int currentIndex = 0; - int loops = 0; - final List addedMatches = []; - while (currentIndex < originalInput.characters.length) { - if (loops > 100) { - ErrorHandler.logError( - e: "In constructTokenSpan, infinite loop detected", - data: { - "currentIndex": currentIndex, - "matches": textSpanMatches.map((m) => m.toJson()).toList(), - }, - ); - throw "In constructTokenSpan, infinite loop detected"; - } - - // check if the pointer is at a match, and if so, get the index of the match - final int matchIndex = matchRanges.indexWhere( - (range) => currentIndex >= range[0] && currentIndex < range[1], - ); - final bool inMatch = matchIndex != -1 && - !addedMatches.contains( - textSpanMatches[matchIndex], - ); - - if (matchIndex != -1 && - addedMatches.contains( - textSpanMatches[matchIndex], - )) { - ErrorHandler.logError( - e: "In constructTokenSpan, currentIndex is in match that has already been added", - data: { - "currentIndex": currentIndex, - "matchIndex": matchIndex, - "matches": textSpanMatches.map((m) => m.toJson()).toList(), - }, - ); - throw "In constructTokenSpan, currentIndex is in match that has already been added"; - } - - final prevIndex = currentIndex; - - if (inMatch) { - // if the pointer is in a match, then add that match to items - // and then move the pointer to the end of the match range - final PangeaMatch match = textSpanMatches[matchIndex]; - final style = match.textStyle( - matchIndex, - _openMatchIndex, - defaultStyle, - ); - if (match.status == PangeaMatchStatus.automatic) { - final span = originalInput.characters - .getRange( - match.match.offset, - match.match.offset + match.match.length, - ) - .toString(); - - final originalText = match.match.fullText.characters - .getRange( - match.match.offset, - match.match.offset + match.match.length, - ) - .toString(); - - items.add( - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: CompositedTransformTarget( - link: MatrixState.pAnyState - .layerLinkAndKey("autocorrection_$matchIndex") - .link, - child: Builder( - builder: (context) { - return RichText( - key: MatrixState.pAnyState - .layerLinkAndKey("autocorrection_$matchIndex") - .key, - text: TextSpan( - text: span, - style: style, - recognizer: TapGestureRecognizer() - ..onTap = () { - OverlayUtil.showOverlay( - context: context, - child: AutocorrectPopup( - originalText: originalText, - onUndo: () => onUndo?.call(match), - ), - transformTargetId: "autocorrection_$matchIndex", - ); - }, - ), - ); - }, - ), - ), - ), - ); - - addedMatches.add(match); - currentIndex = match.match.offset + match.match.length; - } else { - items.add( - getSpanItem( - start: match.match.offset, - end: match.match.offset + match.match.length, - style: style, - ), - ); - currentIndex = match.match.offset + match.match.length; - } - } else { - // otherwise, if the pointer is not at a match, then add all the text - // until the next match (or, if there is not next match, the end of the - // text) to items and move the pointer to the start of the next match - final int nextIndex = matchRanges - .firstWhereOrNull( - (range) => range[0] > currentIndex, - ) - ?.first ?? - originalInput.characters.length; - - items.add( - getSpanItem( - start: currentIndex, - end: nextIndex, - style: defaultStyle, - ), - ); - currentIndex = nextIndex; - } - - if (prevIndex >= currentIndex) { - ErrorHandler.logError( - e: "In constructTokenSpan, currentIndex is less than prevIndex", - data: { - "currentIndex": currentIndex, - "prevIndex": prevIndex, - "matches": textSpanMatches.map((m) => m.toJson()).toList(), - }, - ); - throw "In constructTokenSpan, currentIndex is less than prevIndex"; - } - - loops++; - } - - return items; - } -} diff --git a/lib/pangea/choreographer/models/it_response_model.dart b/lib/pangea/choreographer/models/it_response_model.dart deleted file mode 100644 index 2bd26c7f5..000000000 --- a/lib/pangea/choreographer/models/it_response_model.dart +++ /dev/null @@ -1,172 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/constants/choreo_constants.dart'; - -class ITResponseModel { - String fullTextTranslation; - List continuances; - List? goldContinuances; - bool isFinal; - String? translationId; - int payloadId; - - ITResponseModel({ - required this.fullTextTranslation, - required this.continuances, - required this.translationId, - required this.goldContinuances, - required this.isFinal, - required this.payloadId, - }); - - factory ITResponseModel.fromJson(Map json) { - //PTODO - is continuances a variable type? can we change that? - if (json['continuances'].runtimeType == String) { - debugPrint("continuances was string - ${json['continuances']}"); - json['continuances'] = []; - json['finished'] = true; - } - - final List interimCont = (json['continuances'] as List) - .mapIndexed((index, e) { - e["index"] = index; - return Continuance.fromJson(e); - }) - .toList() - .take(ChoreoConstants.numberOfITChoices) - .toList() - .cast() - //can't do this on the backend because step translation can't filter them out - .where((element) => element.inDictionary) - .toList(); - - interimCont.shuffle(); - - return ITResponseModel( - fullTextTranslation: json["full_text_translation"] ?? json["translation"], - continuances: interimCont, - translationId: json['translation_id'], - payloadId: json['payload_id'] ?? 0, - isFinal: json['finished'] ?? false, - goldContinuances: json['gold_continuances'] != null - ? (json['gold_continuances'] as Iterable).map((e) { - e["gold"] = true; - return Continuance.fromJson(e); - }).toList() - : null, - ); - } - - Map toJson() { - final Map data = {}; - data['full_text_translation'] = fullTextTranslation; - data['continuances'] = continuances.map((v) => v.toJson()).toList(); - if (translationId != null) { - data['translation_id'] = translationId; - } - data['payload_id'] = payloadId; - data["finished"] = isFinal; - return data; - } -} - -class Continuance { - /// only saving this top set in a condensed json form - double probability; - int level; - String text; - // List tokens; - - /// saving this in a full json form - String description; - int? indexSavedByServer; - bool wasClicked; - bool inDictionary; - bool hasInfo; - bool gold; - - Continuance({ - required this.probability, - required this.level, - required this.text, - required this.description, - required this.indexSavedByServer, - required this.wasClicked, - required this.inDictionary, - required this.hasInfo, - required this.gold, - // required this.tokens, - }); - - factory Continuance.fromJson(Map json) { - // final List tokensInternal = (json[ModelKey.tokens] != null) - // ? (json[ModelKey.tokens] as Iterable) - // .map( - // (e) => PangeaToken.fromJson(e as Map), - // ) - // .toList() - // .cast() - // : []; - return Continuance( - probability: json['probability'].toDouble(), - level: json['level'], - text: json['text'], - description: json['description'] ?? "", - indexSavedByServer: json["index"], - inDictionary: json['in_dictionary'] ?? true, - wasClicked: json['clkd'] ?? false, - hasInfo: json['has_info'] ?? false, - gold: json['gold'] ?? false, - // tokens: tokensInternal, - ); - } - - Map toJson([bool condensed = false]) { - final Map data = {}; - data['probability'] = probability; - data['level'] = level; - data['text'] = text; - data['clkd'] = wasClicked; - // data[ModelKey.tokens] = tokens.map((e) => e.toJson()).toList(); - - if (!condensed) { - data['description'] = description; - data['in_dictionary'] = inDictionary; - data['has_info'] = hasInfo; - data["index"] = indexSavedByServer; - data['gold'] = gold; - } - return data; - } - - Color? get color { - if (!wasClicked) return null; - switch (level) { - case ChoreoConstants.levelThresholdForGreen: - return ChoreoConstants.green; - case ChoreoConstants.levelThresholdForYellow: - return ChoreoConstants.yellow; - case ChoreoConstants.levelThresholdForRed: - return ChoreoConstants.red; - default: - return null; - } - } - - String? feedbackText(BuildContext context) { - final L10n l10n = L10n.of(context); - switch (level) { - case ChoreoConstants.levelThresholdForGreen: - return l10n.greenFeedback; - case ChoreoConstants.levelThresholdForYellow: - return l10n.yellowFeedback; - case ChoreoConstants.levelThresholdForRed: - return l10n.redFeedback; - default: - return null; - } - } -} diff --git a/lib/pangea/choreographer/models/it_step.dart b/lib/pangea/choreographer/models/it_step.dart deleted file mode 100644 index f06bd7401..000000000 --- a/lib/pangea/choreographer/models/it_step.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../constants/choreo_constants.dart'; -import 'it_response_model.dart'; - -class ITStep { - List continuances; - int? chosen; - String? customInput; - bool showAlternativeTranslationOption = false; - - ITStep( - this.continuances, { - this.chosen, - this.customInput, - }) { - if (chosen == null && customInput == null) { - throw Exception("ITStep must have either chosen or customInput"); - } - if (chosen != null && customInput != null) { - throw Exception("ITStep must have only chosen or customInput"); - } - } - - Continuance? get chosenContinuance { - if (chosen == null) return null; - return continuances[chosen!]; - } - - String choiceFeedback(BuildContext context) { - if (continuances.length == 1) return ''; - return chosenContinuance?.feedbackText(context) ?? ""; - } - - bool get isCorrect => - chosenContinuance != null && - (chosenContinuance!.level == ChoreoConstants.levelThresholdForGreen || - chosenContinuance!.gold); - - bool get isYellow => - chosenContinuance != null && - chosenContinuance!.level == ChoreoConstants.levelThresholdForYellow; - - bool get isWrong { - return chosenContinuance != null && - chosenContinuance!.level == ChoreoConstants.levelThresholdForRed; - } - - bool get isCustom => chosenContinuance == null; - - Map toJson() { - final Map data = {}; - data['continuances'] = continuances.map((e) => e.toJson(true)).toList(); - data['chosen'] = chosen; - data['custom_input'] = customInput; - return data; - } - - factory ITStep.fromJson(Map json) { - final List continuances = []; - for (final Map continuance in json['continuances']) { - continuances.add(Continuance.fromJson(continuance)); - } - return ITStep( - continuances, - chosen: json['chosen'], - customInput: json['custom_input'], - ); - } -} diff --git a/lib/pangea/choreographer/models/pangea_match_model.dart b/lib/pangea/choreographer/models/pangea_match_model.dart deleted file mode 100644 index 749a9b7f5..000000000 --- a/lib/pangea/choreographer/models/pangea_match_model.dart +++ /dev/null @@ -1,157 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import '../constants/match_rule_ids.dart'; -import 'igc_text_data_model.dart'; -import 'span_data.dart'; - -enum PangeaMatchStatus { open, ignored, accepted, automatic, unknown } - -class PangeaMatch { - SpanData match; - - PangeaMatchStatus status; - - // String source; - - PangeaMatch({ - required this.match, - required this.status, - // required this.source, - }); - - factory PangeaMatch.fromJson(Map json) { - // try { - return PangeaMatch( - match: SpanData.fromJson(json[_matchKey] as Map), - status: json[_statusKey] != null - ? _statusStringToEnum(json[_statusKey]) - : PangeaMatchStatus.open, - // source: json[_matchKey]["source"] ?? "unk", - ); - // } catch (err) { - // debugger(when: kDebugMode); - // ErrorHandler.logError( - // m: "unknown error in PangeaMatch.fromJson", data: json); - // rethrow; - // } - } - - String _statusEnumToString(dynamic status) => - status.toString().split('.').last; - - static PangeaMatchStatus _statusStringToEnum(String status) { - final String lastPart = status.toString().split('.').last; - switch (lastPart) { - case 'open': - return PangeaMatchStatus.open; - case 'ignored': - return PangeaMatchStatus.ignored; - case 'accepted': - return PangeaMatchStatus.accepted; - default: - return PangeaMatchStatus.unknown; - } - } - - static const _matchKey = "match"; - static const _statusKey = "status"; - - bool get isl1SpanMatch => needsTranslation; - - bool get isITStart => - match.rule?.id == MatchRuleIds.interactiveTranslation || - [SpanDataTypeEnum.itStart, SpanDataTypeEnum.itStart.name] - .contains(match.type.typeName); - - bool get needsTranslation => match.rule?.id != null - ? [ - MatchRuleIds.tokenNeedsTranslation, - MatchRuleIds.tokenSpanNeedsTranslation, - ].contains(match.rule!.id) - : false; - - bool get isOutOfTargetMatch => isITStart || needsTranslation; - - bool get isGrammarMatch => !isOutOfTargetMatch; - - Map toJson() => { - _matchKey: match.toJson(), - // _detectionsKey: detections.map((e) => e.toJson()).toList(), - _statusKey: _statusEnumToString(status), - }; - - String get matchContent { - late int beginning; - late int end; - if (match.offset < 0) { - beginning = 0; - debugger(when: kDebugMode); - ErrorHandler.logError(m: "match.offset < 0", data: match.toJson()); - } else { - beginning = match.offset; - } - if (match.offset + match.length > match.fullText.length) { - end = match.fullText.length; - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "match.offset + match.length > match.fullText.length", - data: match.toJson(), - ); - } else { - end = match.offset + match.length; - } - return match.fullText.substring(beginning, end); - } - - bool isOffsetInMatchSpan(int offset) => - offset >= match.offset && offset < match.offset + match.length; - - Color get underlineColor { - if (status == PangeaMatchStatus.automatic) { - return const Color.fromARGB(187, 132, 96, 224); - } - - switch (match.rule?.id ?? "unknown") { - case MatchRuleIds.interactiveTranslation: - return const Color.fromARGB(187, 132, 96, 224); - case MatchRuleIds.tokenNeedsTranslation: - case MatchRuleIds.tokenSpanNeedsTranslation: - return const Color.fromARGB(186, 255, 132, 0); - default: - return const Color.fromARGB(149, 255, 17, 0); - } - } - - TextStyle textStyle( - int matchIndex, - int? openMatchIndex, - TextStyle? existingStyle, - ) { - double opacityFactor = 1.0; - if (openMatchIndex != null && openMatchIndex != matchIndex) { - opacityFactor = 0.2; - } - - final int alpha = (255 * opacityFactor).round(); - return existingStyle?.merge( - IGCTextData.underlineStyle( - underlineColor.withAlpha(alpha), - ), - ) ?? - IGCTextData.underlineStyle( - underlineColor.withAlpha(alpha), - ); - } - - PangeaMatch get copyWith => PangeaMatch.fromJson(toJson()); - - int get beginning => match.offset < 0 ? 0 : match.offset; - int get end => match.offset + match.length > match.fullText.length - ? match.fullText.length - : match.offset + match.length; -} diff --git a/lib/pangea/choreographer/models/span_data.dart b/lib/pangea/choreographer/models/span_data.dart deleted file mode 100644 index fb26ff28d..000000000 --- a/lib/pangea/choreographer/models/span_data.dart +++ /dev/null @@ -1,201 +0,0 @@ -//Possible actions/effects from cards -// Nothing -// useType of viewed definitions -// SpanChoice of text in message from options -// Call to server for additional/followup info - -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; - -import '../enums/span_choice_type.dart'; -import '../enums/span_data_type.dart'; - -class SpanData { - SpanData({ - required this.message, - required this.shortMessage, - required this.choices, - required this.offset, - required this.length, - required this.fullText, - required this.type, - required this.rule, - }); - - factory SpanData.fromJson(Map json) { - final Iterable? choices = json['choices'] ?? json['replacements']; - return SpanData( - message: json['message'], - shortMessage: json['shortMessage'] ?? json['short_message'], - choices: choices - ?.map( - (e) => SpanChoice.fromJson(e as Map), - ) - .toList(), - offset: json['offset'] as int, - length: json['length'] as int, - fullText: - json['sentence'] ?? json['full_text'] ?? json['fullText'] as String, - type: SpanDataType.fromJson(json['type'] as Map), - rule: json['rule'] != null - ? Rule.fromJson(json['rule'] as Map) - : null, - ); - } - - String? message; - String? shortMessage; - List? choices; - int offset; - int length; - String fullText; - SpanDataType type; - Rule? rule; - - Map toJson() => { - 'message': message, - 'short_message': shortMessage, - 'choices': choices != null - ? List.from(choices!.map((x) => x.toJson())) - : null, - 'offset': offset, - 'length': length, - 'full_text': fullText, - 'type': type.toJson(), - 'rule': rule?.toJson(), - }; - - SpanChoice? get bestChoice { - return choices?.firstWhereOrNull( - (choice) => choice.isBestCorrection, - ); - } -} - -class SpanChoice { - String value; - SpanChoiceType type; - bool selected; - String? feedback; - DateTime? timestamp; - // List tokens; - - SpanChoice({ - required this.value, - required this.type, - this.feedback, - this.selected = false, - this.timestamp, - // this.tokens = const [], - }); - - factory SpanChoice.fromJson(Map json) { - // final List tokensInternal = (json[ModelKey.tokens] != null) - // ? (json[ModelKey.tokens] as Iterable) - // .map( - // (e) => PangeaToken.fromJson(e as Map), - // ) - // .toList() - // .cast() - // : []; - return SpanChoice( - value: json['value'] as String, - type: json['type'] != null - ? SpanChoiceType.values.firstWhereOrNull( - (element) => element.name == json['type'], - ) ?? - SpanChoiceType.bestCorrection - : SpanChoiceType.bestCorrection, - feedback: json['feedback'], - selected: json['selected'] ?? false, - timestamp: - json['timestamp'] != null ? DateTime.parse(json['timestamp']) : null, - // tokens: tokensInternal, - ); - } - - Map toJson() => { - 'value': value, - 'type': type.name, - 'selected': selected, - 'feedback': feedback, - 'timestamp': timestamp?.toIso8601String(), - // 'tokens': tokens.map((e) => e.toJson()).toList(), - }; - - String feedbackToDisplay(BuildContext context) { - if (feedback == null) { - return type.defaultFeedback(context); - } - return feedback!; - } - - bool get isDistractor => type == SpanChoiceType.distractor; - - bool get isBestCorrection => type == SpanChoiceType.bestCorrection; - - Color get color => type.color; - - // override == operator and hashcode - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - - return other is SpanChoice && - other.value == value && - other.type.toString() == type.toString() && - other.selected == selected && - other.feedback == feedback && - other.timestamp?.toIso8601String() == timestamp?.toIso8601String(); - } - - @override - int get hashCode { - return Object.hashAll([ - value.hashCode, - type.toString().hashCode, - selected.hashCode, - feedback.hashCode, - timestamp?.toIso8601String().hashCode, - ]); - } -} - -class Rule { - Rule({ - required this.id, - }); - factory Rule.fromJson(Map json) => Rule( - id: json['id'] as String, - ); - - String id; - - Map toJson() => { - 'id': id, - }; -} - -class SpanDataType { - SpanDataType({ - required this.typeName, - }); - - factory SpanDataType.fromJson(Map json) { - final String? type = - json['typeName'] ?? json['type'] ?? json['type_name'] as String?; - return SpanDataType( - typeName: type != null - ? SpanDataTypeEnum.values - .firstWhereOrNull((element) => element.name == type) ?? - SpanDataTypeEnum.correction - : SpanDataTypeEnum.correction, - ); - } - SpanDataTypeEnum typeName; - - Map toJson() => { - 'type_name': typeName.name, - }; -} diff --git a/lib/pangea/choreographer/models/word_data_model.dart b/lib/pangea/choreographer/models/word_data_model.dart deleted file mode 100644 index add2f23cc..000000000 --- a/lib/pangea/choreographer/models/word_data_model.dart +++ /dev/null @@ -1,202 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:fluffychat/pangea/choreographer/widgets/igc/word_data_card.dart'; -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; - -class WordData { - final String word; - final String fullText; - final String? userL1; - final String? userL2; - // final List languageSenses; - - final String targetPartOfSpeech; - final String basePartOfSpeech; - final String partOfSpeech; - final String targetDefinition; - final String baseDefinition; - final String targetWord; - final String baseWord; - final String baseExampleSentence; - final String targetExampleSentence; - - WordData({ - // required this.languageSenses, - required this.fullText, - required this.word, - required this.userL1, - required this.userL2, - required this.baseDefinition, - required this.targetDefinition, - required this.basePartOfSpeech, - required this.targetPartOfSpeech, - required this.partOfSpeech, - required this.baseWord, - required this.targetWord, - required this.baseExampleSentence, - required this.targetExampleSentence, - }); - - // static const String _languageSensesKey = 'sense_responses'; - static const String _dataFullKey = 'data_full'; - - Map toJson() => { - // _languageSensesKey: languageSenses.map((e) => e.toJson()).toList(), - ModelKey.word: word, - ModelKey.userL1: userL1, - ModelKey.userL2: userL2, - ModelKey.baseDefinition: baseDefinition, - ModelKey.targetDefinition: targetDefinition, - ModelKey.basePartOfSpeech: basePartOfSpeech, - ModelKey.targetPartOfSpeech: targetPartOfSpeech, - ModelKey.partOfSpeech: partOfSpeech, - ModelKey.baseWord: baseWord, - ModelKey.targetWord: targetWord, - ModelKey.baseExampleSentence: baseExampleSentence, - ModelKey.targetExampleSentence: targetExampleSentence, - }; - - factory WordData.fromJson( - Map json, { - required String word, - required String fullText, - required String userL1, - required String userL2, - }) { - try { - return WordData( - // languageSenses: (json[_languageSensesKey] as List) - // .map( - // (e) => LanguageSense.fromJson(e as Map), - // ) - // .toList() - // .cast(), - baseDefinition: json[_dataFullKey][ModelKey.baseDefinition], - targetDefinition: json[_dataFullKey][ModelKey.targetDefinition], - basePartOfSpeech: json[_dataFullKey][ModelKey.basePartOfSpeech], - targetPartOfSpeech: json[_dataFullKey][ModelKey.targetPartOfSpeech], - partOfSpeech: json[_dataFullKey][ModelKey.partOfSpeech], - baseWord: json[_dataFullKey][ModelKey.baseWord], - targetWord: json[_dataFullKey][ModelKey.targetWord], - baseExampleSentence: json[_dataFullKey][ModelKey.baseExampleSentence], - targetExampleSentence: json[_dataFullKey] - [ModelKey.targetExampleSentence], - word: word, - userL1: userL1, - userL2: userL2, - fullText: fullText, - ); - } catch (err) { - debugger(when: kDebugMode); - return [] as WordData; - } - } - - bool isMatch({ - required String w, - required String f, - required String? l1, - required String? l2, - }) => - word == w && userL1 == l1 && userL2 == l2 && fullText == f; - - String? formattedPartOfSpeech(LanguageType languageType) { - final String pos = languageType == LanguageType.base - ? basePartOfSpeech - : targetPartOfSpeech; - if (pos.isEmpty) return null; - return pos[0].toUpperCase() + pos.substring(1); - } - - // List sensesForLanguage(String code) => - // languageSenses.where((langSense) => langSense.langCode == code).toList(); -} - -// class LanguageSense { -// List senses; -// String langCode; - -// LanguageSense({ -// required this.senses, -// required this.langCode, -// }); - -// static const String _sensesKey = "senses"; -// static const String _langCodeKey = "lang_code"; - -// Map toJson() => { -// _sensesKey: senses.map((e) => e.toJson()).toList(), -// _langCodeKey: langCode, -// }; - -// factory LanguageSense.fromJson(Map json) => LanguageSense( -// senses: (json[_sensesKey] as List) -// .map( -// (e) => Sense.fromJson(e as Map), -// ) -// .toList() -// .cast(), -// langCode: json[_langCodeKey], -// ); - -// List get partsOfSpeech => -// senses.map((sense) => sense.partOfSpeech).toSet().toList(); - -// List definitionsForPartOfSpeech(String partOfSpeech) { -// final List definitions = []; -// for (final Sense sense in senses) { -// if (sense.partOfSpeech == partOfSpeech && -// sense.definition != null && -// sense.definition!.isNotEmpty) { -// definitions.add(sense.definition!); -// } -// } -// return definitions; -// } - -// // List partOfSpeechSense(partOfSpeech) { -// // return senses -// // .where((sense) => sense.partOfSpeech == partOfSpeech) -// // .map((sense) => sense.lemmas.join(', ')) -// // .toSet() -// // .toList(); -// // } - -// // Map> get partOfSpeechSenses { -// // final Map> senses = {}; -// // for (final partOfSpeech in partsOfSpeech) { -// // senses[partOfSpeech] = partOfSpeechSense(partOfSpeech); -// // } -// // return senses; -// // } -// } - -// class Sense { -// String partOfSpeech; -// List lemmas; -// String? definition; - -// Sense({ -// required this.partOfSpeech, -// required this.lemmas, -// required this.definition, -// }); - -// static const String _posKey = "pos"; -// static const String _lemmasKey = "lemmas"; -// static const String _definitionKey = "definition"; - -// Map toJson() => { -// _posKey: partOfSpeech, -// _lemmasKey: lemmas.toString(), -// _definitionKey: definition -// }; - -// factory Sense.fromJson(Map json) => Sense( -// partOfSpeech: json[_posKey], -// lemmas: (json[_lemmasKey] as List).cast(), -// definition: json[_definitionKey], -// ); -// } diff --git a/lib/pangea/choreographer/pangea_message_content_model.dart b/lib/pangea/choreographer/pangea_message_content_model.dart new file mode 100644 index 000000000..44244b377 --- /dev/null +++ b/lib/pangea/choreographer/pangea_message_content_model.dart @@ -0,0 +1,19 @@ +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; +import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; +import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; + +class PangeaMessageContentModel { + final String message; + final PangeaRepresentation? originalWritten; + final PangeaMessageTokens? tokensSent; + final PangeaMessageTokens? tokensWritten; + final ChoreoRecordModel? choreo; + + const PangeaMessageContentModel({ + required this.message, + this.originalWritten, + this.tokensSent, + this.tokensWritten, + this.choreo, + }); +} diff --git a/lib/pangea/choreographer/repo/full_text_translation_repo.dart b/lib/pangea/choreographer/repo/full_text_translation_repo.dart deleted file mode 100644 index a3763951d..000000000 --- a/lib/pangea/choreographer/repo/full_text_translation_repo.dart +++ /dev/null @@ -1,181 +0,0 @@ -//Question for Jordan - is this for an individual token or could it be a span? - -import 'dart:async'; -import 'dart:convert'; - -import 'package:http/http.dart'; - -import '../../common/config/environment.dart'; -import '../../common/constants/model_keys.dart'; -import '../../common/network/requests.dart'; -import '../../common/network/urls.dart'; - -class FullTextTranslationRepo { - static final Map _cache = {}; - static Timer? _cacheTimer; - - // start a timer to clear the cache - static void startCacheTimer() { - _cacheTimer = Timer.periodic(const Duration(minutes: 10), (timer) { - clearCache(); - }); - } - - // stop the cache time (optional) - static void stopCacheTimer() { - _cacheTimer?.cancel(); - } - - // method to clear the cache - static void clearCache() { - _cache.clear(); - } - - static String _generateCacheKey({ - required String text, - required String srcLang, - required String tgtLang, - required int offset, - required int length, - bool? deepL, - }) { - return '${text.hashCode}-$srcLang-$tgtLang-$deepL-$offset-$length'; - } - - static Future translate({ - required String accessToken, - required FullTextTranslationRequestModel request, - }) async { - // start cache timer when the first API call is made - startCacheTimer(); - - final cacheKey = _generateCacheKey( - text: request.text, - srcLang: request.srcLang ?? '', - tgtLang: request.tgtLang, - offset: request.offset ?? 0, - length: request.length ?? 0, - deepL: request.deepL, - ); - - // check cache first - if (_cache.containsKey(cacheKey)) { - if (_cache[cacheKey] == null) { - _cache.remove(cacheKey); - } else { - return _cache[cacheKey]!; - } - } - - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final Response res = await req.post( - url: PApiUrls.simpleTranslation, - body: request.toJson(), - ); - - final responseModel = FullTextTranslationResponseModel.fromJson( - jsonDecode(utf8.decode(res.bodyBytes)), - ); - - // store response in cache - _cache[cacheKey] = responseModel; - - return responseModel; - } -} - -class FullTextTranslationRequestModel { - String text; - String? srcLang; - String tgtLang; - String userL1; - String userL2; - bool? deepL; - int? offset; - int? length; - - FullTextTranslationRequestModel({ - required this.text, - this.srcLang, - required this.tgtLang, - required this.userL2, - required this.userL1, - this.deepL = false, - this.offset, - this.length, - }); - - //PTODO throw error for null - - Map toJson() => { - "text": text, - ModelKey.srcLang: srcLang, - ModelKey.tgtLang: tgtLang, - ModelKey.userL2: userL2, - ModelKey.userL1: userL1, - ModelKey.deepL: deepL, - ModelKey.offset: offset, - ModelKey.length: length, - }; - - // override equals and hashcode - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - - return other is FullTextTranslationRequestModel && - other.text == text && - other.srcLang == srcLang && - other.tgtLang == tgtLang && - other.userL2 == userL2 && - other.userL1 == userL1 && - other.deepL == deepL && - other.offset == offset && - other.length == length; - } - - @override - int get hashCode => - text.hashCode ^ - srcLang.hashCode ^ - tgtLang.hashCode ^ - userL2.hashCode ^ - userL1.hashCode ^ - deepL.hashCode ^ - offset.hashCode ^ - length.hashCode; -} - -class FullTextTranslationResponseModel { - List translations; - - /// detected source - /// PTODO - - String source; - String? deepL; - - FullTextTranslationResponseModel({ - required this.translations, - required this.source, - required this.deepL, - }); - - factory FullTextTranslationResponseModel.fromJson(Map json) { - return FullTextTranslationResponseModel( - translations: (json["translations"] as Iterable) - .map( - (e) => e, - ) - .toList() - .cast(), - source: json[ModelKey.srcLang], - deepL: json['deepl_res'], - ); - } - - String get bestTranslation => deepL ?? translations.first; -} diff --git a/lib/pangea/choreographer/repo/interactive_translation_repo.dart b/lib/pangea/choreographer/repo/interactive_translation_repo.dart deleted file mode 100644 index 645616085..000000000 --- a/lib/pangea/choreographer/repo/interactive_translation_repo.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'dart:convert'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../common/network/requests.dart'; -import '../../common/network/urls.dart'; -import '../models/custom_input_translation_model.dart'; -import '../models/it_response_model.dart'; - -class ITRepo { - static Future customInputTranslate( - CustomInputRequestModel initalText, - ) async { - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: MatrixState.pangeaController.userController.accessToken, - ); - final Response res = - await req.post(url: PApiUrls.firstStep, body: initalText.toJson()); - - final json = jsonDecode(utf8.decode(res.bodyBytes).toString()); - - return ITResponseModel.fromJson(json); - } - - // static Future systemChoiceTranslate( - // SystemChoiceRequestModel subseqText, - // ) async { - // final Requests req = Requests( - // choreoApiKey: Environment.choreoApiKey, - // accessToken: MatrixState.pangeaController.userController.accessToken, - // ); - - // final Response res = - // await req.post(url: PApiUrls.subseqStep, body: subseqText.toJson()); - - // final decodedBody = jsonDecode(utf8.decode(res.bodyBytes).toString()); - - // return ITResponseModel.fromJson(decodedBody); - // } -} diff --git a/lib/pangea/choreographer/repo/language_detection_repo.dart b/lib/pangea/choreographer/repo/language_detection_repo.dart deleted file mode 100644 index 8deb39802..000000000 --- a/lib/pangea/choreographer/repo/language_detection_repo.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'dart:convert'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/network/urls.dart'; - -class LanguageDetectionRepo { - static Future get( - String? accessToken, { - required LanguageDetectionRequest request, - }) async { - final Requests req = Requests( - accessToken: accessToken, - choreoApiKey: Environment.choreoApiKey, - ); - final Response res = await req.post( - url: PApiUrls.languageDetection, - body: request.toJson(), - ); - - final Map json = - jsonDecode(utf8.decode(res.bodyBytes).toString()); - - final LanguageDetectionResponse response = - LanguageDetectionResponse.fromJson(json); - - return response; - } -} - -class LanguageDetectionRequest { - final String text; - final String? senderl1; - final String? senderl2; - - LanguageDetectionRequest({ - required this.text, - this.senderl1, - this.senderl2, - }); - - Map toJson() { - return { - 'full_text': text, - 'sender_l1': senderl1, - 'sender_l2': senderl2, - }; - } -} - -class LanguageDetectionResponse { - List detections; - String fullText; - - LanguageDetectionResponse({ - required this.detections, - required this.fullText, - }); - - factory LanguageDetectionResponse.fromJson(Map json) { - return LanguageDetectionResponse( - detections: List.from( - (json['detections'] as Iterable).map( - (e) => LanguageDetection.fromJson(e), - ), - ), - fullText: json['full_text'], - ); - } - - Map toJson() { - return { - 'detections': detections.map((e) => e.toJson()).toList(), - 'full_text': fullText, - }; - } -} diff --git a/lib/pangea/choreographer/repo/span_data_repo.dart b/lib/pangea/choreographer/repo/span_data_repo.dart deleted file mode 100644 index 954a04e29..000000000 --- a/lib/pangea/choreographer/repo/span_data_repo.dart +++ /dev/null @@ -1,152 +0,0 @@ -import 'dart:convert'; - -import 'package:collection/collection.dart'; -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/choreographer/enums/span_choice_type.dart'; -import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; -import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; -import 'package:fluffychat/pangea/common/config/environment.dart'; -import '../../common/constants/model_keys.dart'; -import '../../common/network/requests.dart'; -import '../../common/network/urls.dart'; - -class SpanDataRepo { - static Future getSpanDetails( - String? accessToken, { - required SpanDetailsRepoReqAndRes request, - }) async { - final Requests req = Requests( - accessToken: accessToken, - choreoApiKey: Environment.choreoApiKey, - ); - final Response res = await req.post( - url: PApiUrls.spanDetails, - body: request.toJson(), - ); - - final Map json = - jsonDecode(utf8.decode(res.bodyBytes).toString()); - - return SpanDetailsRepoReqAndRes.fromJson(json); - } -} - -// Future getMock(SpanDetailsRepoReqAndRes req) async { -// await Future.delayed(const Duration(seconds: 2)); -// if (req.span.choices != null && -// req.span.choices!.any((element) => element.selected)) { -// return req..span = mockReponseWithHintOne.span; -// } else { -// return req..span = mockReponseWithChoices.span; -// } -// } - -class SpanDetailsRepoReqAndRes { - String userL1; - String userL2; - bool enableIT; - bool enableIGC; - SpanData span; - - SpanDetailsRepoReqAndRes({ - required this.userL1, - required this.userL2, - required this.enableIGC, - required this.enableIT, - required this.span, - }); - - Map toJson() => { - ModelKey.userL1: userL1, - ModelKey.userL2: userL2, - "enable_it": enableIT, - "enable_igc": enableIGC, - 'span': span.toJson(), - }; - - factory SpanDetailsRepoReqAndRes.fromJson(Map json) => - SpanDetailsRepoReqAndRes( - userL1: json['user_l1'] as String, - userL2: json['user_l2'] as String, - enableIT: json['enable_it'] as bool, - enableIGC: json['enable_igc'] as bool, - span: SpanData.fromJson(json['span']), - ); - - /// Overrides the equality operator to compare two [SpanDetailsRepoReqAndRes] objects. - /// Returns true if the objects are identical or have the same property - /// values (based on the results of the toJson function), false otherwise. - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - if (other is! SpanDetailsRepoReqAndRes) return false; - if (other.userL1 != userL1) return false; - if (other.userL2 != userL2) return false; - if (other.enableIT != enableIT) return false; - if (other.enableIGC != enableIGC) return false; - if (const ListEquality().equals( - other.span.choices?.sorted((a, b) => b.value.compareTo(a.value)), - span.choices?.sorted((a, b) => b.value.compareTo(a.value)), - ) == - false) { - return false; - } - return true; - } - - /// Overrides the hashCode getter to generate a hash code for the [SpanDetailsRepoReqAndRes] object. - /// Used as keys in response cache in igc_controller. - @override - int get hashCode { - return Object.hashAll([ - userL1.hashCode, - userL2.hashCode, - enableIT.hashCode, - enableIGC.hashCode, - if (span.choices != null) - Object.hashAll( - span.choices! - .sorted((a, b) => b.value.compareTo(a.value)) - .map((choice) => choice.hashCode), - ), - ]); - } -} - -final spanDataRepomockSpan = SpanData( - offset: 5, - length: 2, - fullText: "This be a sample text", - type: SpanDataType(typeName: SpanDataTypeEnum.correction), - choices: [SpanChoice(value: "is", type: SpanChoiceType.bestCorrection)], - message: null, - rule: null, - shortMessage: null, -); - -//json mock request -final mockRequest = SpanDetailsRepoReqAndRes( - userL1: "es", - userL2: "en", - enableIGC: true, - enableIT: true, - span: spanDataRepomockSpan, -); - -SpanDetailsRepoReqAndRes get mockReponseWithChoices { - final SpanDetailsRepoReqAndRes res = mockRequest; - res.span.choices = [ - SpanChoice(value: "is", type: SpanChoiceType.bestCorrection), - SpanChoice(value: "are", type: SpanChoiceType.distractor), - SpanChoice(value: "was", type: SpanChoiceType.distractor), - ]; - return res; -} - -// SpanDetailsRepoReqAndRes get mockReponseWithHintOne { -// final SpanDetailsRepoReqAndRes res = mockReponseWithChoices; -// res.span.choices![1].selected = true; -// res.span.message = "Conjugation error"; -// return res; -// } diff --git a/lib/pangea/choreographer/repo/system_choice_translation_model.dart b/lib/pangea/choreographer/repo/system_choice_translation_model.dart deleted file mode 100644 index fffffd42f..000000000 --- a/lib/pangea/choreographer/repo/system_choice_translation_model.dart +++ /dev/null @@ -1,45 +0,0 @@ -import '../../common/constants/model_keys.dart'; - -class SystemChoiceRequestModel { - String translationId; - int? nextWordIndex; - String? customInput; - String userId; - String roomId; - String targetLangCode; - String sourceLangCode; - String? classId; - - SystemChoiceRequestModel({ - required this.translationId, - this.nextWordIndex, - this.customInput, - required this.userId, - required this.roomId, - required this.targetLangCode, - required this.sourceLangCode, - this.classId, - }); - - toJson() => { - 'translation_id': translationId, - 'next_word_index': nextWordIndex, - 'custom_input': customInput, - 'user_id': userId, - 'room_id': roomId, - ModelKey.tgtLang: targetLangCode, - ModelKey.srcLang: sourceLangCode, - 'class_id': classId, - }; - - factory SystemChoiceRequestModel.fromJson(json) => SystemChoiceRequestModel( - translationId: json['translation_id'], - nextWordIndex: json['next_word_index'], - customInput: json['custom_input'], - userId: json['user_id'], - roomId: json['room_id'], - targetLangCode: json[ModelKey.tgtLang], - sourceLangCode: json[ModelKey.srcLang], - classId: json['class_id'], - ); -} diff --git a/lib/pangea/choreographer/repo/tokens_repo.dart b/lib/pangea/choreographer/repo/tokens_repo.dart deleted file mode 100644 index 9563bc04a..000000000 --- a/lib/pangea/choreographer/repo/tokens_repo.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'dart:convert'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/network/urls.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; - -class TokensRepo { - static Future get( - String? accessToken, { - required TokensRequestModel request, - }) async { - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final Response res = await req.post( - url: PApiUrls.tokenize, - body: request.toJson(), - ); - - final TokensResponseModel response = TokensResponseModel.fromJson( - jsonDecode( - utf8.decode(res.bodyBytes).toString(), - ), - ); - - if (response.tokens.isEmpty) { - ErrorHandler.logError( - e: Exception( - "empty tokens in tokenize response return", - ), - data: { - "accessToken": accessToken, - "request": request.toJson(), - }, - ); - } - - return response; - } -} diff --git a/lib/pangea/choreographer/text_editing/edit_type_enum.dart b/lib/pangea/choreographer/text_editing/edit_type_enum.dart new file mode 100644 index 000000000..8ef9eaedc --- /dev/null +++ b/lib/pangea/choreographer/text_editing/edit_type_enum.dart @@ -0,0 +1,7 @@ +enum EditTypeEnum { + igc, + it, + itDismissed, + keyboard, + other, +} diff --git a/lib/pangea/choreographer/text_editing/pangea_text_controller.dart b/lib/pangea/choreographer/text_editing/pangea_text_controller.dart new file mode 100644 index 000000000..26691b94c --- /dev/null +++ b/lib/pangea/choreographer/text_editing/pangea_text_controller.dart @@ -0,0 +1,230 @@ +import 'package:flutter/material.dart'; + +import 'package:sentry_flutter/sentry_flutter.dart'; + +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/igc/autocorrect_span.dart'; +import 'package:fluffychat/pangea/choreographer/igc/match_rule_id_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_state_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../choreographer.dart'; +import 'edit_type_enum.dart'; + +class PangeaTextController extends TextEditingController { + final Choreographer choreographer; + EditTypeEnum editType = EditTypeEnum.keyboard; + String _currentText = ''; + + PangeaTextController({ + required this.choreographer, + }) { + addListener(_onTextChanged); + } + + bool get exceededMaxLength => text.length >= ChoreoConstants.maxLength; + + TextStyle _underlineStyle(Color color) => TextStyle( + decoration: TextDecoration.underline, + decorationColor: color, + decorationThickness: 5, + ); + + Color _underlineColor(PangeaMatch match) { + if (match.status == PangeaMatchStatusEnum.automatic) { + return const Color.fromARGB(187, 132, 96, 224); + } + + switch (match.match.rule?.id ?? "unknown") { + case MatchRuleIdModel.interactiveTranslation: + return const Color.fromARGB(187, 132, 96, 224); + case MatchRuleIdModel.tokenNeedsTranslation: + case MatchRuleIdModel.tokenSpanNeedsTranslation: + return const Color.fromARGB(186, 255, 132, 0); + default: + return const Color.fromARGB(149, 255, 17, 0); + } + } + + TextStyle _textStyle( + PangeaMatch match, + TextStyle? existingStyle, + bool isOpenMatch, + ) { + double opacityFactor = 1.0; + if (!isOpenMatch) { + opacityFactor = 0.2; + } + + final alpha = (255 * opacityFactor).round(); + final style = _underlineStyle(_underlineColor(match).withAlpha(alpha)); + return existingStyle?.merge(style) ?? style; + } + + void setSystemText(String newText, EditTypeEnum type) { + editType = type; + text = newText; + } + + void _onTextChanged() { + final diff = text.characters.length - _currentText.characters.length; + if (diff > 1 && editType == EditTypeEnum.keyboard) { + final pastedText = text.characters + .skip(_currentText.characters.length) + .take(diff) + .join(); + choreographer.onPaste(pastedText); + } + _currentText = text; + } + + void _onUndo(PangeaMatchState match) { + try { + choreographer.igcController.updateMatch( + match, + PangeaMatchStatusEnum.undo, + ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + level: SentryLevel.warning, + data: { + "match": match.toJson(), + }, + ); + MatrixState.pAnyState.closeOverlay(); + choreographer.clearMatches(e); + } + } + + @override + TextSpan buildTextSpan({ + required BuildContext context, + TextStyle? style, + required bool withComposing, + }) { + final subscription = + MatrixState.pangeaController.subscriptionController.subscriptionStatus; + + if (subscription == SubscriptionStatus.shouldShowPaywall) { + return _buildPaywallSpan(style); + } + + if (choreographer.igcController.currentText == null) { + return TextSpan(text: text, style: style); + } + + final parts = text.split(choreographer.igcController.currentText!); + if (parts.length != 2) { + return TextSpan(text: text, style: style); + } + + return TextSpan( + style: style, + children: [ + ..._buildTokenSpan(defaultStyle: style), + TextSpan(text: parts[1], style: style), + ], + ); + } + + TextSpan _buildPaywallSpan(TextStyle? style) => TextSpan( + text: text, + style: style?.merge( + _underlineStyle(const Color.fromARGB(187, 132, 96, 224)), + ), + ); + + InlineSpan _buildMatchSpan( + PangeaMatchState match, + TextStyle style, + ) { + final span = choreographer.igcController.currentText!.characters + .getRange( + match.updatedMatch.match.offset, + match.updatedMatch.match.offset + match.updatedMatch.match.length, + ) + .toString(); + + if (match.updatedMatch.status == PangeaMatchStatusEnum.automatic) { + final originalText = match.originalMatch.match.fullText.characters + .getRange( + match.originalMatch.match.offset, + match.originalMatch.match.offset + match.originalMatch.match.length, + ) + .toString(); + + return AutocorrectSpan( + transformTargetId: + "autocorrection_${match.updatedMatch.match.offset}_${match.updatedMatch.match.length}", + currentText: span, + originalText: originalText, + onUndo: () => _onUndo(match), + style: style, + ); + } else { + return TextSpan( + text: span, + style: style, + ); + } + } + + /// Returns a list of [TextSpan]s used to display the text in the input field + /// with the appropriate styling for each error match. + List _buildTokenSpan({ + TextStyle? defaultStyle, + }) { + final textSpanMatches = [ + ...choreographer.igcController.openMatches, + ...choreographer.igcController.recentAutomaticCorrections, + ]..sort( + (a, b) => + a.updatedMatch.match.offset.compareTo(b.updatedMatch.match.offset), + ); + + final currentText = choreographer.igcController.currentText!; + final spans = []; + int cursor = 0; + + for (final match in textSpanMatches) { + if (cursor < match.updatedMatch.match.offset) { + final text = currentText.characters + .getRange(cursor, match.updatedMatch.match.offset) + .toString(); + spans.add(TextSpan(text: text, style: defaultStyle)); + } + + final openMatch = + choreographer.igcController.currentlyOpenMatch?.updatedMatch.match; + final style = _textStyle( + match.updatedMatch, + defaultStyle, + openMatch != null && + openMatch.offset == match.updatedMatch.match.offset && + openMatch.length == match.updatedMatch.match.length, + ); + + spans.add(_buildMatchSpan(match, style)); + cursor = + match.updatedMatch.match.offset + match.updatedMatch.match.length; + } + + if (cursor < currentText.characters.length) { + spans.add( + TextSpan( + text: currentText.characters + .getRange(cursor, currentText.characters.length) + .toString(), + style: defaultStyle, + ), + ); + } + + return spans; + } +} diff --git a/lib/pangea/choreographer/utils/input_paste_listener.dart b/lib/pangea/choreographer/utils/input_paste_listener.dart deleted file mode 100644 index b50bf20e6..000000000 --- a/lib/pangea/choreographer/utils/input_paste_listener.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/choreographer/enums/edit_type.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/pangea_text_controller.dart'; - -class InputPasteListener { - final PangeaTextController controller; - final Function(String) onPaste; - - String _currentText = ''; - - InputPasteListener( - this.controller, - this.onPaste, - ) { - controller.addListener(() { - final difference = - controller.text.characters.length - _currentText.characters.length; - if (difference > 1 && controller.editType == EditType.keyboard) { - onPaste( - controller.text.characters - .getRange( - _currentText.characters.length, - controller.text.characters.length, - ) - .join(), - ); - } - _currentText = controller.text; - }); - } -} diff --git a/lib/pangea/choreographer/utils/language_mismatch_repo.dart b/lib/pangea/choreographer/utils/language_mismatch_repo.dart deleted file mode 100644 index 6863164a7..000000000 --- a/lib/pangea/choreographer/utils/language_mismatch_repo.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:get_storage/get_storage.dart'; - -class LanguageMismatchRepo { - static final GetStorage _storage = GetStorage('language_mismatch'); - static const String key = 'shown_timestamp'; - static const Duration displayInterval = Duration(minutes: 30); - - static Future set() async { - await _storage.write(key, DateTime.now().toIso8601String()); - } - - static DateTime? _get() { - final entry = _storage.read(key); - if (entry == null) return null; - - try { - final value = DateTime.tryParse(entry); - if (value != null) { - final timeSince = DateTime.now().difference(value); - if (timeSince > displayInterval) { - _delete(); - return null; - } - return value; - } - } catch (_) { - _delete(); - } - - return null; - } - - static Future _delete() async { - await _storage.remove(key); - } - - static bool get shouldShow { - final lastShown = _get(); - if (lastShown == null) return true; - return DateTime.now().difference(lastShown) >= displayInterval; - } -} diff --git a/lib/pangea/choreographer/utils/match_copy.dart b/lib/pangea/choreographer/utils/match_copy.dart deleted file mode 100644 index 8f0e3a834..000000000 --- a/lib/pangea/choreographer/utils/match_copy.dart +++ /dev/null @@ -1,227 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../constants/match_rule_ids.dart'; -import '../models/pangea_match_model.dart'; - -class MatchCopy { - PangeaMatch match; - late String title; - String? description; - - MatchCopy(BuildContext context, this.match) { - if (match.match.rule?.id != null) { - _byMatchRuleId(context); - return; - } - if (match.match.shortMessage != null) { - title = match.match.shortMessage!; - } - if (match.match.message != null) { - description = match.match.message!; - } - if (match.match.shortMessage == null) { - _bySpanDataType(context); - } - } - - _setDefaults() { - try { - title = match.match.shortMessage ?? "unknown"; - description = match.match.message ?? "unknown"; - } catch (err) { - title = "Error"; - description = "Could not find the check info"; - } - } - - void _bySpanDataType(BuildContext context) { - try { - final L10n l10n = L10n.of(context); - switch (match.match.type.typeName) { - case SpanDataTypeEnum.correction: - title = l10n.someErrorTitle; - description = l10n.someErrorBody; - break; - case SpanDataTypeEnum.definition: - title = match.matchContent; - description = null; - break; - case SpanDataTypeEnum.itStart: - title = l10n.needsItShortMessage; - // description = l10n.needsItMessage; - break; - case SpanDataTypeEnum.practice: - title = match.match.shortMessage ?? "Activity"; - description = match.match.message; - break; - } - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "match": match.toJson(), - }, - ); - _setDefaults(); - } - } - - void _byMatchRuleId(BuildContext context) { - try { - if (match.match.rule?.id == null) { - throw Exception("match.match.rule.id is null"); - } - final L10n l10n = L10n.of(context); - - final List splits = match.match.rule!.id.split(":"); - if (splits.length >= 2) { - splits.removeAt(0); - } - final String afterColon = splits.join(); - - debugPrint("grammar rule ${match.match.rule!.id}"); - - switch (afterColon) { - case MatchRuleIds.interactiveTranslation: - title = l10n.needsItShortMessage; - description = l10n.needsItMessage( - MatrixState - .pangeaController.languageController.userL2?.displayName ?? - "target language", - ); - break; - case MatchRuleIds.tokenNeedsTranslation: - title = l10n.tokenTranslationTitle; - description = l10n.spanTranslationDesc; - break; - case MatchRuleIds.tokenSpanNeedsTranslation: - title = l10n.spanTranslationTitle; - description = l10n.spanTranslationDesc; - break; - case MatchRuleIds.l1SpanAndGrammar: - title = l10n.l1SpanAndGrammarTitle; - description = l10n.l1SpanAndGrammarDesc; - break; - // case "PART": - // title = l10n.partTitle; - // description = l10n.partDesc; - // break; - // case "PUNCT": - // title = l10n.punctTitle; - // description = l10n.punctDesc; - // break; - // case "ORTH": - // title = l10n.orthTitle; - // description = l10n.orthDesc; - // break; - // case "SPELL": - // title = l10n.spellTitle; - // description = l10n.spellDesc; - // break; - // case "WO": - // title = l10n.woTitle; - // description = l10n.woDesc; - // break; - // case "MORPH": - // title = l10n.morphTitle; - // description = l10n.morphDesc; - // break; - // case "ADV": - // title = l10n.advTitle; - // description = l10n.advDesc; - // break; - // case "CONTR": - // title = l10n.contrTitle; - // description = l10n.contrDesc; - // break; - // case "CONJ": - // title = l10n.conjTitle; - // description = l10n.conjDesc; - // break; - // case "DET": - // title = l10n.detTitle; - // description = l10n.detDesc; - // break; - // case "DETART": - // title = l10n.detArtTitle; - // description = l10n.detArtDesc; - // break; - // case "PREP": - // title = l10n.prepTitle; - // description = l10n.prepDesc; - // break; - // case "PRON": - // title = l10n.pronTitle; - // description = l10n.pronDesc; - // break; - // case "VERB": - // title = l10n.verbTitle; - // description = l10n.verbDesc; - // break; - // case "VERBFORM": - // title = l10n.verbFormTitle; - // description = l10n.verbFormDesc; - // break; - // case "VERBTENSE": - // title = l10n.verbTenseTitle; - // description = l10n.verbTenseDesc; - // break; - // case "VERBSVA": - // title = l10n.verbSvaTitle; - // description = l10n.verbSvaDesc; - // break; - // case "VERBINFL": - // title = l10n.verbInflTitle; - // description = l10n.verbInflDesc; - // break; - // case "ADJ": - // title = l10n.adjTitle; - // description = l10n.adjDesc; - // break; - // case "ADJFORM": - // title = l10n.adjFormTitle; - // description = l10n.adjFormDesc; - // break; - // case "NOUN": - // title = l10n.nounTitle; - // description = l10n.nounDesc; - // break; - // case "NOUNPOSS": - // title = l10n.nounPossTitle; - // description = l10n.nounPossDesc; - // break; - // case "NOUNINFL": - // title = l10n.nounInflTitle; - // description = l10n.nounInflDesc; - // break; - // case "NOUNNUM": - // title = l10n.nounNumTitle; - // description = l10n.nounNumDesc; - // break; - case "OTHER": - default: - _setDefaults(); - break; - } - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "match": match.toJson(), - }, - ); - _setDefaults(); - } - } -} diff --git a/lib/pangea/choreographer/utils/normalize_text.dart b/lib/pangea/choreographer/utils/normalize_text.dart deleted file mode 100644 index 114a23193..000000000 --- a/lib/pangea/choreographer/utils/normalize_text.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:diacritic/diacritic.dart'; - -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; - -String normalizeString(String input) { - try { - // Step 1: Remove diacritics (accents) - String normalized = removeDiacritics(input); - normalized = normalized.replaceAll(RegExp(r'[^\x00-\x7F]'), ''); - - // Step 2: Remove punctuation - normalized = normalized.replaceAll(RegExp(r'[^\w\s]'), ''); - - // Step 3: Convert to lowercase - normalized = normalized.toLowerCase(); - - // Step 4: Trim and normalize whitespace - normalized = normalized.replaceAll(RegExp(r'\s+'), ' ').trim(); - - return normalized.isEmpty ? input : normalized; - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: {'input': input}, - ); - return input; - } -} diff --git a/lib/pangea/choreographer/widgets/choice_array.dart b/lib/pangea/choreographer/widgets/choice_array.dart deleted file mode 100644 index 3c5e87c9a..000000000 --- a/lib/pangea/choreographer/widgets/choice_array.dart +++ /dev/null @@ -1,283 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/choice_animation.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../bot/utils/bot_style.dart'; -import 'it_shimmer.dart'; - -typedef ChoiceCallback = void Function(String value, int index); - -enum OverflowMode { - wrap, - horizontalScroll, - verticalScroll, -} - -class ChoicesArray extends StatefulWidget { - final bool isLoading; - final List? choices; - final ChoiceCallback onPressed; - final ChoiceCallback? onLongPress; - final int? selectedChoiceIndex; - final String originalSpan; - - final bool enableAudio; - - /// language code for the TTS - final String? langCode; - - /// Used to unqiuely identify the keys for choices, in cases where multiple - /// choices could have identical text, like in back-to-back practice activities - final String? id; - - /// some uses of this widget want to disable clicking of the choices - final bool isActive; - - final String Function(String)? getDisplayCopy; - - /// activity has multiple correct answers, so user can still - /// select choices once the correct choice has been selected - final bool enableMultiSelect; - - final double? fontSize; - - final OverflowMode overflowMode; - - const ChoicesArray({ - super.key, - required this.isLoading, - required this.choices, - required this.onPressed, - required this.originalSpan, - required this.selectedChoiceIndex, - this.enableAudio = true, - this.langCode, - this.isActive = true, - this.onLongPress, - this.getDisplayCopy, - this.id, - this.enableMultiSelect = false, - this.fontSize, - this.overflowMode = OverflowMode.wrap, - }); - - @override - ChoicesArrayState createState() => ChoicesArrayState(); -} - -class ChoicesArrayState extends State { - bool interactionDisabled = false; - - void disableInteraction() { - WidgetsBinding.instance.addPostFrameCallback((_) { - if (mounted) setState(() => interactionDisabled = true); - }); - } - - void enableInteractions() { - if (_hasSelectedCorrectChoice && !widget.enableMultiSelect) return; - WidgetsBinding.instance.addPostFrameCallback((_) { - if (mounted) setState(() => interactionDisabled = false); - }); - } - - bool get _hasSelectedCorrectChoice => - widget.choices?.any((choice) => choice.isGold && choice.color != null) ?? - false; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - - final choices = widget.choices! - .mapIndexed( - (index, entry) => ChoiceItem( - theme: theme, - onLongPress: widget.isActive ? widget.onLongPress : null, - onPressed: widget.isActive - ? (String value, int index) { - widget.onPressed(value, index); - // TODO - what to pass here as eventID? - if (widget.enableAudio && widget.langCode != null) { - TtsController.tryToSpeak( - value, - targetID: null, - langCode: widget.langCode!, - ); - } - } - : (String value, int index) { - debugger(when: kDebugMode); - }, - entry: MapEntry(index, entry), - interactionDisabled: interactionDisabled, - enableInteraction: enableInteractions, - disableInteraction: disableInteraction, - isSelected: widget.selectedChoiceIndex == index, - id: widget.id, - getDisplayCopy: widget.getDisplayCopy, - fontSize: widget.fontSize, - ), - ) - .toList(); - - return widget.isLoading && - (widget.choices == null || widget.choices!.length <= 1) - ? ItShimmer( - originalSpan: widget.originalSpan, - fontSize: widget.fontSize ?? - Theme.of(context).textTheme.bodyMedium?.fontSize ?? - 16, - ) - : widget.overflowMode == OverflowMode.wrap - ? Wrap( - alignment: WrapAlignment.center, - spacing: 4.0, - children: choices, - ) - : widget.overflowMode == OverflowMode.horizontalScroll - ? SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: choices, - ), - ) - : SingleChildScrollView( - scrollDirection: Axis.vertical, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: choices, - ), - ); - } -} - -class Choice { - Choice({ - this.color, - required this.text, - this.isGold = false, - }); - - final Color? color; - final String text; - final bool isGold; -} - -class ChoiceItem extends StatelessWidget { - const ChoiceItem({ - super.key, - required this.theme, - required this.onLongPress, - required this.onPressed, - required this.entry, - required this.isSelected, - required this.interactionDisabled, - required this.enableInteraction, - required this.disableInteraction, - required this.id, - this.getDisplayCopy, - this.fontSize, - }); - - final MapEntry entry; - final ThemeData theme; - final ChoiceCallback? onLongPress; - final ChoiceCallback onPressed; - final bool isSelected; - final bool interactionDisabled; - final VoidCallback enableInteraction; - final VoidCallback disableInteraction; - final String? id; - final String Function(String)? getDisplayCopy; - - final double? fontSize; - - @override - Widget build(BuildContext context) { - try { - return Tooltip( - message: onLongPress != null ? L10n.of(context).holdForInfo : "", - waitDuration: onLongPress != null - ? const Duration(milliseconds: 500) - : const Duration(days: 1), - child: CompositedTransformTarget( - link: MatrixState.pAnyState - .layerLinkAndKey("${entry.value.text}$id") - .link, - child: ChoiceAnimationWidget( - isSelected: isSelected, - isCorrect: entry.value.isGold, - key: MatrixState.pAnyState - .layerLinkAndKey("${entry.value.text}$id") - .key, - child: Container( - margin: const EdgeInsets.all(2), - padding: EdgeInsets.zero, - decoration: BoxDecoration( - borderRadius: const BorderRadius.all( - Radius.circular(AppConfig.borderRadius), - ), - border: Border.all( - color: isSelected - ? entry.value.color ?? theme.colorScheme.primary - : Colors.transparent, - style: BorderStyle.solid, - width: 2.0, - ), - ), - child: TextButton( - style: ButtonStyle( - padding: WidgetStateProperty.all( - const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - ), - //if index is selected, then give the background a slight primary color - backgroundColor: WidgetStateProperty.all( - entry.value.color?.withAlpha(50) ?? - theme.colorScheme.primary.withAlpha(10), - ), - textStyle: WidgetStateProperty.all( - BotStyle.text(context), - ), - shape: WidgetStateProperty.all( - RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(AppConfig.borderRadius), - ), - ), - ), - onLongPress: onLongPress != null && !interactionDisabled - ? () => onLongPress!(entry.value.text, entry.key) - : null, - onPressed: interactionDisabled - ? null - : () => onPressed(entry.value.text, entry.key), - child: Text( - getDisplayCopy != null - ? getDisplayCopy!(entry.value.text) - : entry.value.text, - style: BotStyle.text(context).copyWith( - fontSize: fontSize, - ), - textAlign: TextAlign.center, - ), - ), - ), - ), - ), - ); - } catch (e) { - debugger(when: kDebugMode); - return Container(); - } - } -} diff --git a/lib/pangea/choreographer/widgets/igc/card_header.dart b/lib/pangea/choreographer/widgets/igc/card_header.dart deleted file mode 100644 index f70a971a5..000000000 --- a/lib/pangea/choreographer/widgets/igc/card_header.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../../bot/widgets/bot_face_svg.dart'; - -class CardHeader extends StatelessWidget { - const CardHeader({ - super.key, - required this.text, - required this.botExpression, - this.onClose, - }); - - final BotExpression botExpression; - final String text; - final void Function()? onClose; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(bottom: 5.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Flexible( - child: Row( - children: [ - BotFace( - width: 50.0, - expression: botExpression, - ), - const SizedBox(width: 12.0), - Flexible( - child: Text( - text, - style: BotStyle.text(context), - softWrap: true, - ), - ), - ], - ), - ), - const SizedBox(width: 5.0), - IconButton( - icon: const Icon(Icons.close_outlined), - onPressed: () { - if (onClose != null) onClose!(); - MatrixState.pAnyState.closeOverlay(); - }, - ), - ], - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart b/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart deleted file mode 100644 index da458b4c9..000000000 --- a/lib/pangea/choreographer/widgets/igc/message_analytics_feedback.dart +++ /dev/null @@ -1,317 +0,0 @@ -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/construct_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_summary/progress_indicators_enum.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class MessageAnalyticsFeedback extends StatefulWidget { - final String overlayId; - final int newGrammarConstructs; - final int newVocabConstructs; - - const MessageAnalyticsFeedback({ - required this.overlayId, - required this.newGrammarConstructs, - required this.newVocabConstructs, - super.key, - }); - - @override - State createState() => - MessageAnalyticsFeedbackState(); -} - -class MessageAnalyticsFeedbackState extends State - with TickerProviderStateMixin { - late AnimationController _vocabController; - late AnimationController _grammarController; - late AnimationController _bubbleController; - - late Animation _vocabOpacity; - late Animation _grammarOpacity; - late Animation _scaleAnimation; - late Animation _opacityAnimation; - - static const counterDelay = Duration(milliseconds: 400); - - @override - void initState() { - super.initState(); - _grammarController = AnimationController( - vsync: this, - duration: FluffyThemes.animationDuration, - ); - - _grammarOpacity = Tween(begin: 0.0, end: 1.0).animate( - CurvedAnimation(parent: _grammarController, curve: Curves.easeInOut), - ); - - _vocabController = AnimationController( - vsync: this, - duration: FluffyThemes.animationDuration, - ); - - _vocabOpacity = Tween(begin: 0.0, end: 1.0).animate( - CurvedAnimation(parent: _vocabController, curve: Curves.easeInOut), - ); - - _bubbleController = AnimationController( - vsync: this, - duration: FluffyThemes.animationDuration, - ); - - _scaleAnimation = Tween(begin: 0.0, end: 1.0).animate( - CurvedAnimation(parent: _bubbleController, curve: Curves.easeInOut), - ); - - _opacityAnimation = Tween(begin: 0.0, end: 0.9).animate( - CurvedAnimation(parent: _bubbleController, curve: Curves.easeInOut), - ); - - WidgetsBinding.instance.addPostFrameCallback((_) { - if (mounted) _bubbleController.forward(); - - Future.delayed(counterDelay, () { - if (mounted) { - _vocabController.forward(); - _grammarController.forward(); - } - }); - - Future.delayed(const Duration(milliseconds: 4000), () { - if (!mounted) return; - _bubbleController.reverse().then((_) { - MatrixState.pAnyState.closeOverlay(widget.overlayId); - }); - }); - }); - } - - @override - void dispose() { - _vocabController.dispose(); - _grammarController.dispose(); - _bubbleController.dispose(); - super.dispose(); - } - - void _showAnalyticsDialog(ConstructTypeEnum? type) { - switch (type) { - case ConstructTypeEnum.morph: - context.go("/rooms/analytics/${ConstructTypeEnum.morph.string}"); - break; - case ConstructTypeEnum.vocab: - default: - context.go("/rooms/analytics/${ConstructTypeEnum.vocab.string}"); - break; - } - } - - @override - Widget build(BuildContext context) { - if (widget.newVocabConstructs <= 0 && widget.newGrammarConstructs <= 0) { - return const SizedBox.shrink(); - } - - final theme = Theme.of(context); - return Material( - type: MaterialType.transparency, - child: InkWell( - onTap: () => _showAnalyticsDialog(null), - child: ScaleTransition( - scale: _scaleAnimation, - alignment: Alignment.bottomRight, - child: AnimatedBuilder( - animation: _bubbleController, - builder: (context, child) { - return Container( - decoration: BoxDecoration( - color: theme.colorScheme.surfaceContainerHighest - .withAlpha((_opacityAnimation.value * 255).round()), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(16.0), - topRight: Radius.circular(16.0), - bottomLeft: Radius.circular(16.0), - bottomRight: Radius.circular(4.0), - ), - ), - padding: const EdgeInsets.symmetric( - vertical: 8.0, - horizontal: 16.0, - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (widget.newVocabConstructs > 0) - NewConstructsBadge( - controller: _vocabController, - opacityAnimation: _vocabOpacity, - newConstructs: widget.newVocabConstructs, - type: ConstructTypeEnum.vocab, - tooltip: L10n.of(context).newVocab, - onTap: () => _showAnalyticsDialog( - ConstructTypeEnum.vocab, - ), - ), - if (widget.newGrammarConstructs > 0) - NewConstructsBadge( - controller: _grammarController, - opacityAnimation: _grammarOpacity, - newConstructs: widget.newGrammarConstructs, - type: ConstructTypeEnum.morph, - tooltip: L10n.of(context).newGrammar, - onTap: () => _showAnalyticsDialog( - ConstructTypeEnum.morph, - ), - ), - ], - ), - ); - }, - ), - ), - ), - ); - } -} - -class NewConstructsBadge extends StatelessWidget { - final AnimationController controller; - final Animation opacityAnimation; - - final int newConstructs; - final ConstructTypeEnum type; - final String tooltip; - final VoidCallback onTap; - - const NewConstructsBadge({ - required this.controller, - required this.opacityAnimation, - required this.newConstructs, - required this.type, - required this.tooltip, - required this.onTap, - super.key, - }); - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: onTap, - child: Tooltip( - message: tooltip, - child: AnimatedBuilder( - animation: controller, - builder: (context, child) { - return Opacity( - opacity: opacityAnimation.value, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - type.indicator.icon, - color: type.indicator.color(context), - size: 24, - ), - const SizedBox(width: 4.0), - AnimatedCounter( - key: ValueKey("$type-counter"), - endValue: newConstructs, - startAnimation: opacityAnimation.value > 0.9, - style: TextStyle( - color: type.indicator.color(context), - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ); - }, - ), - ), - ); - } -} - -class AnimatedCounter extends StatefulWidget { - final int endValue; - final TextStyle? style; - final bool startAnimation; - - const AnimatedCounter({ - super.key, - required this.endValue, - this.style, - this.startAnimation = true, - }); - - @override - State createState() => _AnimatedCounterState(); -} - -class _AnimatedCounterState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _animation; - - @override - void initState() { - super.initState(); - _controller = AnimationController( - vsync: this, - duration: FluffyThemes.animationDuration, - ); - - _animation = IntTween( - begin: 0, - end: widget.endValue, - ).animate( - CurvedAnimation( - parent: _controller, - curve: Curves.easeOutCubic, - ), - ); - - if (widget.startAnimation) { - WidgetsBinding.instance.addPostFrameCallback((_) { - if (mounted) _controller.forward(); - }); - } - } - - @override - void didUpdateWidget(AnimatedCounter oldWidget) { - super.didUpdateWidget(oldWidget); - if (!oldWidget.startAnimation && widget.startAnimation && !_hasAnimated) { - _controller.forward(); - } - } - - bool get _hasAnimated => _controller.isCompleted || _controller.isAnimating; - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return AnimatedBuilder( - animation: _animation, - builder: (context, child) { - return Text( - "+ ${_animation.value}", - style: widget.style, - ); - }, - ); - } -} diff --git a/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart b/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart deleted file mode 100644 index 11b397ddf..000000000 --- a/lib/pangea/choreographer/widgets/igc/pangea_text_controller.dart +++ /dev/null @@ -1,191 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; -import 'package:fluffychat/pangea/choreographer/models/igc_text_data_model.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/paywall_card.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/span_card.dart'; -import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../../common/utils/overlay.dart'; -import '../../controllers/choreographer.dart'; -import '../../enums/edit_type.dart'; - -class PangeaTextController extends TextEditingController { - Choreographer choreographer; - - EditType editType = EditType.keyboard; - PangeaTextController({ - String? text, - required this.choreographer, - }) { - text ??= ''; - this.text = text; - } - - static const int maxLength = 1000; - bool get exceededMaxLength => text.length >= maxLength; - - bool forceKeepOpen = false; - - setSystemText(String text, EditType type) { - editType = type; - this.text = text; - } - - void onInputTap(BuildContext context, {required FocusNode fNode}) { - fNode.requestFocus(); - forceKeepOpen = true; - if (!context.mounted) { - debugger(when: kDebugMode); - return; - } - - // show the paywall if appropriate - if (choreographer - .pangeaController.subscriptionController.subscriptionStatus == - SubscriptionStatus.shouldShowPaywall && - !choreographer.isFetching && - text.isNotEmpty) { - OverlayUtil.showPositionedCard( - context: context, - cardToShow: PaywallCard( - chatController: choreographer.chatController, - ), - maxHeight: 325, - maxWidth: 325, - transformTargetId: choreographer.inputTransformTargetKey, - ); - } - - // if there is no igc text data, then don't do anything - if (choreographer.igc.igcTextData == null) return; - - // debugPrint( - // "onInputTap matches are ${choreographer.igc.igcTextData?.matches.map((e) => e.match.rule.id).toList().toString()}"); - - // if user is just trying to get their cursor into the text input field to add soemthing, - // then don't interrupt them - if (selection.baseOffset >= text.length) { - return; - } - - final int matchIndex = - choreographer.igc.igcTextData!.getTopMatchIndexForOffset( - selection.baseOffset, - ); - - // if autoplay on and it start then just start it - if (matchIndex != -1 && - // choreographer.itAutoPlayEnabled && - choreographer.igc.igcTextData!.matches[matchIndex].isITStart) { - return choreographer.onITStart( - choreographer.igc.igcTextData!.matches[matchIndex], - ); - } - - final Widget? cardToShow = matchIndex != -1 - ? SpanCard( - matchIndex: matchIndex, - choreographer: choreographer, - ) - : null; - - if (cardToShow != null) { - MatrixState.pAnyState.closeAllOverlays( - filter: RegExp(r'span_card_overlay_\d+'), - ); - OverlayUtil.showPositionedCard( - overlayKey: matchIndex != -1 ? "span_card_overlay_$matchIndex" : null, - context: context, - maxHeight: matchIndex != -1 && - choreographer.igc.igcTextData!.matches[matchIndex].isITStart - ? 260 - : 400, - maxWidth: 350, - cardToShow: cardToShow, - transformTargetId: choreographer.inputTransformTargetKey, - onDismiss: () => choreographer.setState(), - ignorePointer: true, - isScrollable: false, - ); - } - } - - @override - TextSpan buildTextSpan({ - required BuildContext context, - TextStyle? style, - required bool withComposing, - }) { - // If the composing range is out of range for the current text, ignore it to - // preserve the tree integrity, otherwise in release mode a RangeError will - // be thrown and this EditableText will be built with a broken subtree. - // debugPrint("composing? $withComposing"); - // if (!value.isComposingRangeValid || !withComposing) { - // debugPrint("just returning straight text"); - // // debugger(when: kDebugMode); - // return TextSpan(style: style, text: text); - // } - // if (value.isComposingRangeValid) { - // debugPrint("composing before ${value.composing.textBefore(value.text)}"); - // debugPrint("composing inside ${value.composing.textInside(value.text)}"); - // debugPrint("composing after ${value.composing.textAfter(value.text)}"); - // } - - final SubscriptionStatus canSendStatus = choreographer - .pangeaController.subscriptionController.subscriptionStatus; - if (canSendStatus == SubscriptionStatus.shouldShowPaywall && - !choreographer.isFetching && - text.isNotEmpty) { - return TextSpan( - text: text, - style: style?.merge( - IGCTextData.underlineStyle( - const Color.fromARGB(187, 132, 96, 224), - ), - ), - ); - } else if (choreographer.igc.igcTextData == null || text.isEmpty) { - return TextSpan(text: text, style: style); - } else { - final parts = text.split(choreographer.igc.igcTextData!.originalInput); - - if (parts.length == 1 || parts.length > 2) { - return TextSpan(text: text, style: style); - } - - final choreoSteps = choreographer.choreoRecord?.choreoSteps; - - List inlineSpans = []; - try { - inlineSpans = choreographer.igc.igcTextData!.constructTokenSpan( - choreoSteps: (choreoSteps?.isNotEmpty ?? false) && - choreoSteps!.last.acceptedOrIgnoredMatch?.status == - PangeaMatchStatus.automatic - ? choreoSteps - : [], - defaultStyle: style, - onUndo: choreographer.onUndoReplacement, - ); - } catch (e) { - choreographer.errorService.setError( - ChoreoError(raw: e), - ); - inlineSpans = [TextSpan(text: text, style: style)]; - choreographer.igc.clear(); - } - - return TextSpan( - style: style, - children: [ - ...inlineSpans, - TextSpan(text: parts[1], style: style), - ], - ); - } - } -} diff --git a/lib/pangea/choreographer/widgets/igc/paywall_card.dart b/lib/pangea/choreographer/widgets/igc/paywall_card.dart deleted file mode 100644 index 86328f224..000000000 --- a/lib/pangea/choreographer/widgets/igc/paywall_card.dart +++ /dev/null @@ -1,93 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; -import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/card_header.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class PaywallCard extends StatelessWidget { - final ChatController chatController; - const PaywallCard({ - super.key, - required this.chatController, - }); - - @override - Widget build(BuildContext context) { - final bool inTrialWindow = - MatrixState.pangeaController.userController.inTrialWindow(); - - return Column( - mainAxisSize: MainAxisSize.max, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CardHeader( - text: L10n.of(context).clickMessageTitle, - botExpression: BotExpression.addled, - onClose: () { - MatrixState.pangeaController.subscriptionController - .dismissPaywall(); - }, - ), - Padding( - padding: const EdgeInsets.all(8), - child: Column( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text( - L10n.of(context).subscribedToUnlockTools, - style: BotStyle.text(context), - textAlign: TextAlign.center, - ), - // if (inTrialWindow) - // Text( - // L10n.of(context).noPaymentInfo, - // style: BotStyle.text(context), - // textAlign: TextAlign.center, - // ), - if (inTrialWindow) ...[ - const SizedBox(height: 10), - SizedBox( - width: double.infinity, - child: TextButton( - onPressed: () { - MatrixState.pangeaController.subscriptionController - .activateNewUserTrial(); - MatrixState.pAnyState.closeOverlay(); - }, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - (Theme.of(context).colorScheme.primary).withAlpha(25), - ), - ), - child: Text(L10n.of(context).activateTrial), - ), - ), - ], - const SizedBox(height: 10), - SizedBox( - width: double.infinity, - child: TextButton( - onPressed: () { - chatController.clearSelectedEvents(); - MatrixState.pangeaController.subscriptionController - .showPaywall(context); - }, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - (Theme.of(context).colorScheme.primary).withAlpha(25), - ), - ), - child: Text(L10n.of(context).getAccess), - ), - ), - ], - ), - ), - ], - ); - } -} diff --git a/lib/pangea/choreographer/widgets/igc/span_card.dart b/lib/pangea/choreographer/widgets/igc/span_card.dart deleted file mode 100644 index fb3a75fa6..000000000 --- a/lib/pangea/choreographer/widgets/igc/span_card.dart +++ /dev/null @@ -1,368 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/enums/span_choice_type.dart'; -import 'package:fluffychat/pangea/choreographer/enums/span_data_type.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; -import 'package:fluffychat/pangea/choreographer/models/span_data.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import '../../../../widgets/matrix.dart'; -import '../../../bot/widgets/bot_face_svg.dart'; -import '../choice_array.dart'; -import 'why_button.dart'; - -class SpanCard extends StatefulWidget { - final int matchIndex; - final Choreographer choreographer; - - const SpanCard({ - super.key, - required this.matchIndex, - required this.choreographer, - }); - - @override - State createState() => SpanCardState(); -} - -class SpanCardState extends State { - bool fetchingData = false; - int? selectedChoiceIndex; - final ScrollController scrollController = ScrollController(); - - @override - void initState() { - super.initState(); - if (pangeaMatch?.isITStart == true) { - _onITStart(); - return; - } - - getSpanDetails(); - _fetchSelected(); - } - - @override - void dispose() { - TtsController.stop(); - scrollController.dispose(); - super.dispose(); - } - - PangeaMatch? get pangeaMatch { - if (widget.choreographer.igc.igcTextData == null) return null; - if (widget.matchIndex >= - widget.choreographer.igc.igcTextData!.matches.length) { - ErrorHandler.logError( - m: "matchIndex out of bounds in span card", - data: { - "matchIndex": widget.matchIndex, - "matchesLength": widget.choreographer.igc.igcTextData?.matches.length, - }, - ); - return null; - } - return widget.choreographer.igc.igcTextData?.matches[widget.matchIndex]; - } - - //get selected choice - SpanChoice? get selectedChoice { - if (selectedChoiceIndex == null) return null; - return _choiceByIndex(selectedChoiceIndex!); - } - - SpanChoice? _choiceByIndex(int index) { - if (pangeaMatch?.match.choices == null || - pangeaMatch!.match.choices!.length <= index) { - return null; - } - return pangeaMatch?.match.choices?[index]; - } - - void _fetchSelected() { - if (pangeaMatch?.match.choices == null) { - return; - } - - // if user ever selected the correct choice, automatically select it - final selectedCorrectIndex = - pangeaMatch!.match.choices!.indexWhere((choice) { - return choice.selected && choice.isBestCorrection; - }); - - if (selectedCorrectIndex != -1) { - selectedChoiceIndex = selectedCorrectIndex; - return; - } - - if (selectedChoiceIndex == null) { - DateTime? mostRecent; - final numChoices = pangeaMatch!.match.choices!.length; - for (int i = 0; i < numChoices; i++) { - final choice = _choiceByIndex(i); - if (choice!.timestamp != null && - (mostRecent == null || choice.timestamp!.isAfter(mostRecent))) { - mostRecent = choice.timestamp; - selectedChoiceIndex = i; - } - } - } - } - - Future getSpanDetails({bool force = false}) async { - if (pangeaMatch?.isITStart ?? false) return; - - if (!mounted) return; - setState(() { - fetchingData = true; - }); - - await widget.choreographer.igc.spanDataController.getSpanDetails( - widget.matchIndex, - force: force, - ); - - if (mounted) { - setState(() => fetchingData = false); - } - } - - void _onITStart() { - if (widget.choreographer.itEnabled && pangeaMatch != null) { - widget.choreographer.onITStart(pangeaMatch!); - } - } - - Future _onChoiceSelect(int index) async { - selectedChoiceIndex = index; - if (selectedChoice != null) { - selectedChoice!.timestamp = DateTime.now(); - selectedChoice!.selected = true; - setState( - () => (selectedChoice!.isBestCorrection - ? BotExpression.gold - : BotExpression.surprised), - ); - } - } - - Future _onReplaceSelected() async { - await widget.choreographer.onReplacementSelect( - matchIndex: widget.matchIndex, - choiceIndex: selectedChoiceIndex!, - ); - _showFirstMatch(); - } - - void _onIgnoreMatch() { - Future.delayed( - Duration.zero, - () { - widget.choreographer.onIgnoreMatch( - matchIndex: widget.matchIndex, - ); - _showFirstMatch(); - }, - ); - } - - void _showFirstMatch() { - if (widget.choreographer.igc.igcTextData != null && - widget.choreographer.igc.igcTextData!.matches.isNotEmpty) { - widget.choreographer.igc.showFirstMatch(context); - } else { - MatrixState.pAnyState.closeOverlay(); - } - } - - @override - Widget build(BuildContext context) { - return WordMatchContent( - controller: this, - scrollController: scrollController, - ); - } -} - -class WordMatchContent extends StatelessWidget { - final SpanCardState controller; - final ScrollController scrollController; - - const WordMatchContent({ - required this.controller, - required this.scrollController, - super.key, - }); - - @override - Widget build(BuildContext context) { - if (controller.pangeaMatch == null || controller.pangeaMatch!.isITStart) { - return const SizedBox(); - } - - return SizedBox( - height: 300.0, - child: Column( - children: [ - Expanded( - child: Scrollbar( - controller: scrollController, - child: SingleChildScrollView( - controller: scrollController, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - const SizedBox(height: 8), - ChoicesArray( - originalSpan: controller.pangeaMatch!.matchContent, - isLoading: controller.fetchingData, - choices: controller.pangeaMatch!.match.choices - ?.map( - (e) => Choice( - text: e.value, - color: e.selected ? e.type.color : null, - isGold: e.type.name == 'bestCorrection', - ), - ) - .toList(), - onPressed: (value, index) => - controller._onChoiceSelect(index), - selectedChoiceIndex: controller.selectedChoiceIndex, - id: controller.pangeaMatch!.hashCode.toString(), - langCode: MatrixState.pangeaController.languageController - .activeL2Code(), - ), - const SizedBox(height: 12), - PromptAndFeedback(controller: controller), - ], - ), - ), - ), - ), - Container( - decoration: BoxDecoration( - color: Theme.of(context).cardColor, - ), - padding: const EdgeInsets.only(top: 8.0), - child: Row( - spacing: 10.0, - children: [ - Expanded( - child: Opacity( - opacity: 0.8, - child: TextButton( - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - Theme.of(context).colorScheme.primary.withAlpha(25), - ), - ), - onPressed: controller._onIgnoreMatch, - child: Center( - child: Text(L10n.of(context).ignoreInThisText), - ), - ), - ), - ), - Expanded( - child: Opacity( - opacity: controller.selectedChoiceIndex != null ? 1.0 : 0.5, - child: TextButton( - onPressed: controller.selectedChoiceIndex != null - ? controller._onReplaceSelected - : null, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - (controller.selectedChoice != null - ? controller.selectedChoice!.color - : Theme.of(context).colorScheme.primary) - .withAlpha(50), - ), - // Outline if Replace button enabled - side: controller.selectedChoice != null - ? WidgetStateProperty.all( - BorderSide( - color: controller.selectedChoice!.color, - style: BorderStyle.solid, - width: 2.0, - ), - ) - : null, - ), - child: Text(L10n.of(context).replace), - ), - ), - ), - ], - ), - ), - ], - ), - ); - } -} - -class PromptAndFeedback extends StatelessWidget { - const PromptAndFeedback({ - super.key, - required this.controller, - }); - - final SpanCardState controller; - - @override - Widget build(BuildContext context) { - if (controller.pangeaMatch == null) { - return const SizedBox(); - } - - return Container( - constraints: controller.pangeaMatch!.isITStart - ? null - : const BoxConstraints(minHeight: 75.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (controller.selectedChoice == null && controller.fetchingData) - const Center( - child: SizedBox( - width: 24.0, - height: 24.0, - child: CircularProgressIndicator(), - ), - ), - if (controller.selectedChoice != null) ...[ - if (controller.selectedChoice?.feedback != null) - Text( - controller.selectedChoice!.feedbackToDisplay(context), - style: BotStyle.text(context), - ), - const SizedBox(height: 8), - if (controller.selectedChoice?.feedback == null) - WhyButton( - onPress: () { - if (!controller.fetchingData) { - controller.getSpanDetails(force: true); - } - }, - loading: controller.fetchingData, - ), - ], - if (!controller.fetchingData && - controller.selectedChoiceIndex == null) - Text( - controller.pangeaMatch!.match.type.typeName - .defaultPrompt(context), - style: BotStyle.text(context).copyWith( - fontStyle: FontStyle.italic, - ), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/igc/why_button.dart b/lib/pangea/choreographer/widgets/igc/why_button.dart deleted file mode 100644 index a45946ecf..000000000 --- a/lib/pangea/choreographer/widgets/igc/why_button.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -class WhyButton extends StatelessWidget { - const WhyButton({ - super.key, - required this.onPress, - required this.loading, - }); - - final VoidCallback onPress; - final bool loading; - - @override - Widget build(BuildContext context) { - return IconButton( - onPressed: loading ? null : onPress, - icon: loading - ? const SizedBox( - width: 24, - height: 24, - child: CircularProgressIndicator(), - ) - : const Icon(Icons.lightbulb_outline, size: 24), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/igc/word_data_card.dart b/lib/pangea/choreographer/widgets/igc/word_data_card.dart deleted file mode 100644 index d4228270f..000000000 --- a/lib/pangea/choreographer/widgets/igc/word_data_card.dart +++ /dev/null @@ -1,322 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:http/http.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/contextual_definition_controller.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../../learning_settings/widgets/flag.dart'; -import '../../models/word_data_model.dart'; -import 'card_error_widget.dart'; - -class WordDataCard extends StatefulWidget { - final bool hasInfo; - final String word; - final String fullText; - final String? choiceFeedback; - final String wordLang; - final String fullTextLang; - final Room room; - - const WordDataCard({ - super.key, - required this.word, - required this.wordLang, - required this.hasInfo, - required this.fullText, - required this.fullTextLang, - required this.room, - this.choiceFeedback, - }); - - @override - State createState() => WordDataCardController(); -} - -class WordDataCardController extends State { - final PangeaController controller = MatrixState.pangeaController; - - bool isLoadingContextualDefinition = false; - ContextualDefinitionResponseModel? contextualDefinitionRes; - - Object? definitionError; - LanguageModel? activeL1; - LanguageModel? activeL2; - - Response get noLanguages => Response("", 405); - - @override - void initState() { - if (!mounted) return; - activeL1 = controller.languageController.activeL1Model()!; - activeL2 = controller.languageController.activeL2Model()!; - if (activeL1 == null || activeL2 == null) { - definitionError = noLanguages; - } else { - getContextualDefinition(); - } - super.initState(); - } - - @override - void didUpdateWidget(covariant WordDataCard oldWidget) { - // debugger(when: kDebugMode); - if (oldWidget.word != widget.word) { - getContextualDefinition(); - } - super.didUpdateWidget(oldWidget); - } - - Future getContextualDefinition() async { - ContextualDefinitionRequestModel? req; - try { - req = ContextualDefinitionRequestModel( - fullText: widget.fullText, - word: widget.word, - feedbackLang: activeL1?.langCode ?? LanguageKeys.defaultLanguage, - fullTextLang: widget.fullTextLang, - wordLang: widget.wordLang, - ); - if (!mounted) return; - - setState(() { - contextualDefinitionRes = null; - definitionError = null; - isLoadingContextualDefinition = true; - }); - - contextualDefinitionRes = await controller.definitions.get(req); - if (contextualDefinitionRes == null) { - definitionError = Exception("Error getting definition"); - } - GoogleAnalytics.contextualRequest(); - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "request": req?.toJson(), - }, - ); - definitionError = Exception("Error getting definition"); - } finally { - if (mounted) setState(() => isLoadingContextualDefinition = false); - } - } - - void handleGetDefinitionButtonPress() { - if (isLoadingContextualDefinition) return; - getContextualDefinition(); - } - - @override - Widget build(BuildContext context) => WordDataCardView(controller: this); -} - -class WordDataCardView extends StatelessWidget { - const WordDataCardView({ - super.key, - required this.controller, - }); - - final WordDataCardController controller; - - @override - Widget build(BuildContext context) { - if (controller.activeL1 == null || controller.activeL2 == null) { - ErrorHandler.logError( - m: "should not be here", - data: { - "activeL1": controller.activeL1?.toJson(), - "activeL2": controller.activeL2?.toJson(), - }, - ); - return CardErrorWidget( - error: L10n.of(context).noLanguagesSet, - maxWidth: AppConfig.toolbarMinWidth, - ); - } - - return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: AppConfig.toolbarMinWidth, - maxHeight: AppConfig.toolbarMaxHeight, - ), - child: ScrollConfiguration( - behavior: ScrollConfiguration.of(context).copyWith(scrollbars: false), - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.all(20.0), - child: Column( - children: [ - if (controller.widget.choiceFeedback != null) - Text( - controller.widget.choiceFeedback!, - style: BotStyle.text(context), - ), - const SizedBox(height: 5.0), - if (controller.isLoadingContextualDefinition) - const ToolbarContentLoadingIndicator(), - if (controller.contextualDefinitionRes != null) - Text( - controller.contextualDefinitionRes!.text, - style: BotStyle.text(context), - textAlign: TextAlign.center, - ), - if (controller.definitionError != null) - Text( - L10n.of(context).sorryNoResults, - style: BotStyle.text(context), - textAlign: TextAlign.center, - ), - ], - ), - ), - ), - ), - ); - } -} - -class WordNetInfo extends StatelessWidget { - final WordData wordData; - final LanguageModel activeL1; - final LanguageModel activeL2; - - const WordNetInfo({ - super.key, - required this.wordData, - required this.activeL1, - required this.activeL2, - }); - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SensesForLanguage( - wordData: wordData, - languageType: LanguageType.target, - language: activeL2, - ), - const SizedBox(height: 10), - SensesForLanguage( - wordData: wordData, - languageType: LanguageType.base, - language: activeL1, - ), - ], - ); - } -} - -enum LanguageType { - target, - base, -} - -class SensesForLanguage extends StatelessWidget { - String get exampleSentence => languageType == LanguageType.target - ? wordData.targetExampleSentence - : wordData.baseExampleSentence; - - String get definition => languageType == LanguageType.target - ? wordData.targetDefinition - : wordData.baseDefinition; - - String formattedTitle(BuildContext context) { - final String word = languageType == LanguageType.target - ? wordData.targetWord - : wordData.baseWord; - String? pos = wordData.formattedPartOfSpeech(languageType); - if (pos == null || pos.isEmpty) pos = L10n.of(context).unkDisplayName; - return "$word (${wordData.formattedPartOfSpeech(languageType)})"; - } - - const SensesForLanguage({ - super.key, - required this.wordData, - required this.languageType, - required this.language, - }); - - final LanguageModel language; - final LanguageType languageType; - final WordData wordData; - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LanguageFlag(language: language), - const SizedBox(width: 10), - Flexible( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - formattedTitle(context), - style: BotStyle.text(context, italics: true, bold: false), - ), - const SizedBox(height: 4), - if (definition.isNotEmpty) - RichText( - text: TextSpan( - style: BotStyle.text( - context, - italics: false, - bold: false, - ), - children: [ - TextSpan( - text: "${L10n.of(context).definition}: ", - style: const TextStyle(fontWeight: FontWeight.bold), - ), - TextSpan(text: definition), - ], - ), - ), - const SizedBox(height: 4), - if (exampleSentence.isNotEmpty) - RichText( - text: TextSpan( - style: BotStyle.text( - context, - italics: false, - bold: false, - ), - children: [ - TextSpan( - text: "${L10n.of(context).exampleSentence}: ", - style: const TextStyle( - fontWeight: FontWeight.bold, - ), - ), - TextSpan(text: exampleSentence), - ], - ), - ), - ], - ), - ), - ], - ); - } -} diff --git a/lib/pangea/choreographer/widgets/it_bar.dart b/lib/pangea/choreographer/widgets/it_bar.dart deleted file mode 100644 index b9954e630..000000000 --- a/lib/pangea/choreographer/widgets/it_bar.dart +++ /dev/null @@ -1,471 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/constants/choreo_constants.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/it_controller.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/it_feedback_controller.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/word_data_card.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/it_feedback_card.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import '../../common/utils/overlay.dart'; -import '../models/it_response_model.dart'; -import 'choice_array.dart'; - -class ITBar extends StatefulWidget { - final Choreographer choreographer; - const ITBar({super.key, required this.choreographer}); - - @override - ITBarState createState() => ITBarState(); -} - -class ITBarState extends State with SingleTickerProviderStateMixin { - ITController get itController => widget.choreographer.itController; - StreamSubscription? _choreoSub; - - bool showedClickInstruction = false; - - late AnimationController _controller; - late Animation _animation; - bool wasOpen = false; - - @override - void initState() { - super.initState(); - - // Rebuild the widget each time there's an update from choreo. - _choreoSub = widget.choreographer.stateStream.stream.listen((_) { - if (itController.willOpen != wasOpen) { - itController.willOpen ? _controller.forward() : _controller.reverse(); - } - wasOpen = itController.willOpen; - setState(() {}); - }); - - wasOpen = itController.willOpen; - - _controller = AnimationController( - duration: itController.animationSpeed, - vsync: this, - ); - _animation = CurvedAnimation(parent: _controller, curve: Curves.easeInOut); - - // Start in the correct state - itController.willOpen ? _controller.forward() : _controller.reverse(); - } - - bool get showITInstructionsTooltip { - final toggledOff = InstructionsEnum.clickBestOption.isToggledOff; - if (!toggledOff) { - setState(() => showedClickInstruction = true); - } - return !toggledOff; - } - - bool get showTranslationsChoicesTooltip { - return !showedClickInstruction && - !showITInstructionsTooltip && - !itController.choreographer.isFetching && - !itController.isLoading && - !itController.isEditingSourceText && - !itController.isTranslationDone && - itController.currentITStep != null && - itController.currentITStep!.continuances.isNotEmpty && - !itController.showChoiceFeedback; - } - - @override - void dispose() { - _choreoSub?.cancel(); - super.dispose(); - } - - final double iconDimension = 36; - final double iconSize = 20; - - @override - Widget build(BuildContext context) { - return SizeTransition( - sizeFactor: _animation, - axis: Axis.vertical, - axisAlignment: -1.0, - child: CompositedTransformTarget( - link: widget.choreographer.itBarLinkAndKey.link, - child: Column( - spacing: 8.0, - children: [ - if (showITInstructionsTooltip) - const InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.clickBestOption, - animate: false, - ), - if (showTranslationsChoicesTooltip) - const InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.translationChoices, - animate: false, - ), - Container( - key: widget.choreographer.itBarLinkAndKey.key, - decoration: BoxDecoration( - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(24), - topRight: Radius.circular(24), - ), - color: Theme.of(context).colorScheme.surfaceContainer, - ), - padding: const EdgeInsets.all(3), - child: SingleChildScrollView( - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - if (itController.isEditingSourceText) - Expanded( - child: Padding( - padding: const EdgeInsets.only( - left: 20, - right: 10, - top: 10, - ), - child: TextField( - controller: TextEditingController( - text: itController.sourceText, - ), - autofocus: true, - enableSuggestions: false, - maxLines: null, - textInputAction: TextInputAction.send, - onSubmitted: - itController.onEditSourceTextSubmit, - obscureText: false, - decoration: const InputDecoration( - border: OutlineInputBorder(), - ), - ), - ), - ), - if (!itController.isEditingSourceText && - itController.sourceText != null) - SizedBox( - width: iconDimension, - height: iconDimension, - child: IconButton( - iconSize: iconSize, - color: Theme.of(context).colorScheme.primary, - onPressed: () { - if (itController.nextITStep != null) { - itController.setIsEditingSourceText(true); - } - }, - icon: const Icon(Icons.edit_outlined), - // iconSize: 20, - ), - ), - if (!itController.isEditingSourceText) - SizedBox( - width: iconDimension, - height: iconDimension, - child: IconButton( - iconSize: iconSize, - color: Theme.of(context).colorScheme.primary, - icon: const Icon(Icons.settings_outlined), - onPressed: () => showDialog( - context: context, - builder: (c) => const SettingsLearning(), - barrierDismissible: false, - ), - ), - ), - SizedBox( - width: iconDimension, - height: iconDimension, - child: IconButton( - iconSize: iconSize, - color: Theme.of(context).colorScheme.primary, - icon: const Icon(Icons.close_outlined), - onPressed: () { - itController.isEditingSourceText - ? itController.setIsEditingSourceText(false) - : itController.closeIT(); - }, - ), - ), - ], - ), - if (!itController.isEditingSourceText) - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: !itController.willOpen - ? const SizedBox() - : itController.sourceText != null - ? Text( - itController.sourceText!, - textAlign: TextAlign.center, - ) - : const LinearProgressIndicator(), - ), - const SizedBox(height: 8.0), - Container( - padding: const EdgeInsets.symmetric(horizontal: 4.0), - constraints: const BoxConstraints(minHeight: 80), - child: AnimatedSize( - duration: itController.animationSpeed, - child: Center( - child: itController.choreographer.errorService.isError - ? ITError(controller: itController) - : itController.showChoiceFeedback - ? ChoiceFeedbackText( - controller: itController, - ) - : itController.isTranslationDone - ? const SizedBox() - : ITChoices(controller: itController), - ), - ), - ), - ], - ), - ), - ), - ], - ), - ), - ); - } -} - -class ChoiceFeedbackText extends StatelessWidget { - const ChoiceFeedbackText({ - super.key, - required this.controller, - }); - - final ITController controller; - - @override - Widget build(BuildContext context) { - //reimplement if we decide we want it - return const SizedBox(); - // return AnimatedTextKit( - // isRepeatingAnimation: false, - // animatedTexts: [ - // ScaleAnimatedText( - // controller.latestChoiceFeedback(context), - // duration: Duration( - // milliseconds: - // (ChoreoConstants.millisecondsToDisplayFeedback / 2).round(), - // ), - // scalingFactor: 1.4, - // textStyle: BotStyle.text(context), - // ), - // ], - // ); - } -} - -class ITChoices extends StatelessWidget { - const ITChoices({ - super.key, - required this.controller, - }); - - // final choices = [ - // "we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.", - // "we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.", - // "we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.", - // "we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.", - // "we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.", - // "we need a really long translation to see what's going to happen with that. it should probably have multiple sentences so that we can see what happens there.", - // ]; - - final ITController controller; - - String? get sourceText { - if ((controller.sourceText == null || controller.sourceText!.isEmpty)) { - ErrorHandler.logError( - m: "null source text in ItChoices", - data: {}, - ); - } - return controller.sourceText; - } - - void showCard( - BuildContext context, - int index, [ - Color? borderColor, - String? choiceFeedback, - ]) { - if (controller.currentITStep == null) { - ErrorHandler.logError( - m: "currentITStep is null in showCard", - s: StackTrace.current, - data: { - "index": index, - }, - ); - return; - } - - controller.choreographer.chatController.inputFocus.unfocus(); - MatrixState.pAnyState.closeOverlay("it_feedback_card"); - OverlayUtil.showPositionedCard( - context: context, - cardToShow: choiceFeedback == null - ? WordDataCard( - word: controller.currentITStep!.continuances[index].text, - wordLang: controller.targetLangCode, - fullText: sourceText ?? controller.choreographer.currentText, - fullTextLang: sourceText != null - ? controller.sourceLangCode - : controller.targetLangCode, - // IMPORTANT COMMENT TO KEEP: We're going to forace hasInfo to false for now - // because we don't want to show the word data card for correct choices and the contextual definition - // for incorrect choices. This gives away the answer (if you're Kel at least). - // The reason hasInfo is false for incorrect choices is that we're not includng the tokens for distractors. - // Correct choices will have the tokens, but we don't want to show something different for them. - // hasInfo: controller.currentITStep!.continuances[index].hasInfo, - hasInfo: false, - choiceFeedback: choiceFeedback, - room: controller.choreographer.chatController.room, - ) - : ITFeedbackCard( - req: ITFeedbackRequestModel( - sourceText: sourceText!, - currentText: controller.choreographer.currentText, - chosenContinuance: - controller.currentITStep!.continuances[index].text, - bestContinuance: controller.currentITStep!.best.text, - // TODO: we want this to eventually switch between target and source lang, - // based on the learner's proficiency - maybe with the words involved in the translation - // maybe overall. For now, we'll just use the source lang. - feedbackLang: controller.choreographer.l1Lang?.langCode ?? - controller.sourceLangCode, - sourceTextLang: controller.sourceLangCode, - targetLang: controller.targetLangCode, - ), - choiceFeedback: choiceFeedback, - ), - maxHeight: 300, - maxWidth: 300, - borderColor: borderColor, - transformTargetId: controller.choreographer.itBarTransformTargetKey, - isScrollable: choiceFeedback == null, - overlayKey: "it_feedback_card", - ignorePointer: true, - ); - } - - void selectContinuance(int index, BuildContext context) { - MatrixState.pAnyState.closeOverlay("it_feedback_card"); - final Continuance continuance = - controller.currentITStep!.continuances[index]; - if (continuance.level == 1) { - Future.delayed( - const Duration(milliseconds: 500), - () => controller.selectTranslation(index), - ); - } else { - showCard( - context, - index, - continuance.level == 2 ? ChoreoConstants.yellow : ChoreoConstants.red, - continuance.feedbackText(context), - ); - } - controller.currentITStep!.continuances[index].wasClicked = true; - controller.choreographer.setState(); - } - - @override - Widget build(BuildContext context) { - try { - if (controller.isEditingSourceText) { - return const SizedBox(); - } - if (controller.currentITStep == null) { - return controller.willOpen - ? CircularProgressIndicator( - strokeWidth: 2.0, - color: Theme.of(context).colorScheme.primary, - ) - : const SizedBox(); - } - return ChoicesArray( - id: controller.currentITStep.hashCode.toString(), - isLoading: controller.isLoading || - controller.choreographer.isFetching || - controller.currentITStep == null, - //TODO - pass current span being translated - originalSpan: "dummy", - choices: controller.currentITStep!.continuances.map((e) { - try { - return Choice( - text: e.text.trim(), - color: e.color, - isGold: e.description == "best", - ); - } catch (e) { - debugger(when: kDebugMode); - return Choice(text: "error", color: Colors.red); - } - }).toList(), - onPressed: (value, index) => selectContinuance(index, context), - onLongPress: (value, index) => showCard(context, index), - selectedChoiceIndex: null, - langCode: controller.choreographer.pangeaController.languageController - .activeL2Code(), - ); - } catch (e) { - debugger(when: kDebugMode); - return const SizedBox(); - } - } -} - -class ITError extends StatelessWidget { - final ITController controller; - const ITError({super.key, required this.controller}); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Row( - spacing: 8.0, - mainAxisSize: MainAxisSize.min, - children: [ - ErrorIndicator( - message: L10n.of(context).translationError, - style: TextStyle( - fontStyle: FontStyle.italic, - color: Theme.of(context).colorScheme.error, - ), - ), - IconButton( - onPressed: () { - controller.closeIT(); - controller.choreographer.errorService.resetError(); - }, - icon: const Icon( - Icons.close, - size: 20, - ), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/it_feedback_card.dart b/lib/pangea/choreographer/widgets/it_feedback_card.dart deleted file mode 100644 index 4e572b5ce..000000000 --- a/lib/pangea/choreographer/widgets/it_feedback_card.dart +++ /dev/null @@ -1,140 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; -import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import '../../../widgets/matrix.dart'; -import '../../bot/utils/bot_style.dart'; -import '../../common/controllers/pangea_controller.dart'; -import '../controllers/it_feedback_controller.dart'; -import 'igc/card_error_widget.dart'; - -class ITFeedbackCard extends StatefulWidget { - final ITFeedbackRequestModel req; - final String choiceFeedback; - - const ITFeedbackCard({ - super.key, - required this.req, - required this.choiceFeedback, - }); - - @override - State createState() => ITFeedbackCardController(); -} - -class ITFeedbackCardController extends State { - final PangeaController controller = MatrixState.pangeaController; - - Object? error; - bool isLoadingFeedback = false; - bool isTranslating = false; - ITFeedbackResponseModel? res; - String? translatedFeedback; - - Response get noLanguages => Response("", 405); - - @override - void initState() { - if (!mounted) return; - //any setup? - super.initState(); - getFeedback(); - } - - Future getFeedback() async { - setState(() { - isLoadingFeedback = true; - }); - - try { - final resp = await FullTextTranslationRepo.translate( - accessToken: controller.userController.accessToken, - request: FullTextTranslationRequestModel( - text: widget.req.chosenContinuance, - tgtLang: controller.languageController.userL1?.langCode ?? - widget.req.sourceTextLang, - userL1: controller.languageController.userL1?.langCode ?? - widget.req.sourceTextLang, - userL2: controller.languageController.userL2?.langCode ?? - widget.req.targetLang, - ), - ); - res = ITFeedbackResponseModel(text: resp.bestTranslation); - } catch (e, s) { - error = e; - ErrorHandler.logError( - e: e, - s: s, - data: { - "req": widget.req.toJson(), - "choiceFeedback": widget.choiceFeedback, - }, - ); - } finally { - if (mounted) { - setState(() { - isLoadingFeedback = false; - }); - } - } - } - - @override - Widget build(BuildContext context) => error == null - ? ITFeedbackCardView(controller: this) - : CardErrorWidget( - error: L10n.of(context).errorFetchingDefinition, - ); -} - -class ITFeedbackCardView extends StatelessWidget { - const ITFeedbackCardView({ - super.key, - required this.controller, - }); - - final ITFeedbackCardController controller; - - @override - Widget build(BuildContext context) { - const characterWidth = 10.0; - - return Container( - constraints: const BoxConstraints(maxWidth: 300), - alignment: Alignment.center, - child: Wrap( - alignment: WrapAlignment.center, - children: [ - Text( - controller.widget.req.chosenContinuance, - style: BotStyle.text(context), - ), - const SizedBox(width: 10), - Text( - "≈", - style: BotStyle.text(context), - ), - const SizedBox(width: 10), - controller.res?.text != null - ? Text( - controller.res!.text, - style: BotStyle.text(context), - ) - : TextLoadingShimmer( - width: min( - 140, - characterWidth * - controller.widget.req.chosenContinuance.length, - ), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/it_feedback_stars.dart b/lib/pangea/choreographer/widgets/it_feedback_stars.dart deleted file mode 100644 index c9f5a1b21..000000000 --- a/lib/pangea/choreographer/widgets/it_feedback_stars.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/choice_animation.dart'; - -class FillingStars extends StatefulWidget { - final int rating; - - const FillingStars({ - super.key, - required this.rating, - }); - - @override - State createState() => _FillingStarsState(); -} - -class _FillingStarsState extends State { - final List _isFilledList = List.filled(5, false); - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) => _animate()); - } - - Future _animate() async { - for (int i = 0; i < widget.rating; i++) { - await Future.delayed( - const Duration(milliseconds: choiceArrayAnimationDuration), () { - if (mounted) { - setState(() => _isFilledList[i] = true); - } - }); - } - } - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: List.generate(5, (index) { - return AnimatedSwitcher( - duration: const Duration(milliseconds: choiceArrayAnimationDuration), - transitionBuilder: (Widget child, Animation animation) { - return ScaleTransition( - scale: animation, - child: child, - ); - }, - child: Icon( - _isFilledList[index] ? Icons.star_rounded : Icons.star_rounded, - key: ValueKey(_isFilledList[index]), - color: _isFilledList[index] - ? AppConfig.gold - : Theme.of(context).cardColor.withAlpha(180), - size: 32.0, - ), - ); - }), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/it_shimmer.dart b/lib/pangea/choreographer/widgets/it_shimmer.dart deleted file mode 100644 index 37d0d6df6..000000000 --- a/lib/pangea/choreographer/widgets/it_shimmer.dart +++ /dev/null @@ -1,93 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -class ItShimmer extends StatelessWidget { - const ItShimmer({ - super.key, - required this.originalSpan, - required this.fontSize, - }); - - final String originalSpan; - final double fontSize; - - Iterable renderShimmerIfListEmpty( - BuildContext context, { - int noOfBars = 3, - }) { - final List dummyStrings = []; - for (int i = 0; i < noOfBars; i++) { - dummyStrings.add(originalSpan); - } - return dummyStrings.map( - (e) => ITShimmerElement( - text: e, - fontSize: fontSize, - ), - ); - } - - // PTODO - bring this back, make it shimmer - @override - Widget build(BuildContext context) { - return Wrap( - alignment: WrapAlignment.center, - children: [...renderShimmerIfListEmpty(context, noOfBars: 3)], - ); - } -} - -class ITShimmerElement extends StatelessWidget { - const ITShimmerElement({ - super.key, - required this.text, - required this.fontSize, - }); - - final String text; - final double fontSize; - - @override - Widget build(BuildContext context) { - return Container( - constraints: const BoxConstraints(minWidth: 50), - margin: const EdgeInsets.all(2), - padding: EdgeInsets.zero, - // decoration: BoxDecoration( - // borderRadius: const BorderRadius.all(Radius.circular(10)), - // border: Border.all( - // color: Theme.of(context).colorScheme.primary, - // style: BorderStyle.solid, - // width: 2.0, - // ), - // ), - child: ImageFiltered( - imageFilter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), - child: TextButton( - style: ButtonStyle( - padding: WidgetStateProperty.all( - const EdgeInsets.symmetric(horizontal: 7), - ), - shape: WidgetStateProperty.all( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), - ), - ), - backgroundColor: WidgetStateProperty.all( - Theme.of(context).colorScheme.primary.withAlpha(50), - ), - ), - onPressed: null, - child: Text( - text, - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith(color: Colors.transparent, fontSize: fontSize), - ), - ), - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart b/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart deleted file mode 100644 index 94d01c82a..000000000 --- a/lib/pangea/choreographer/widgets/language_permissions_warning_buttons.dart +++ /dev/null @@ -1,121 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; - -class ErrorCopy { - final String title; - final String? description; - - ErrorCopy(this.title, [this.description]); -} - -class LanguagePermissionsButtons extends StatelessWidget { - final String? roomID; - final Choreographer choreographer; - - const LanguagePermissionsButtons({ - super.key, - required this.roomID, - required this.choreographer, - }); - - @override - Widget build(BuildContext context) { - if (roomID == null) return const SizedBox.shrink(); - final ErrorCopy? copy = getCopy(context); - if (copy == null) return const SizedBox.shrink(); - - final Widget text = RichText( - text: TextSpan( - children: [ - TextSpan( - text: copy.title, - style: TextStyle( - color: Theme.of(context).brightness == Brightness.light - ? Colors.white - : Colors.black, - ), - ), - if (copy.description != null) - TextSpan( - text: copy.description, - style: TextStyle(color: Theme.of(context).colorScheme.primary), - recognizer: TapGestureRecognizer() - ..onTap = () { - showDialog( - context: context, - builder: (c) => const SettingsLearning(), - barrierDismissible: false, - ); - }, - ), - ], - ), - ); - - return FloatingActionButton( - mini: true, - child: const Icon(Icons.history_edu_outlined), - onPressed: () => showMessage(context, text), - ); - } - - ErrorCopy? getCopy(BuildContext context) { - final bool itDisabled = !choreographer.itEnabled; - final bool igcDisabled = !choreographer.igcEnabled; - if (roomID == null) { - ErrorHandler.logError( - e: Exception("Room ID is null in language permissions"), - data: {}, - ); - return null; - } - - if (igcDisabled && itDisabled) { - return ErrorCopy( - L10n.of(context).errorDisableLanguageAssistance, - " ${L10n.of(context).errorDisableLanguageAssistanceUserDesc}", - ); - } - - if (itDisabled) { - return ErrorCopy( - L10n.of(context).errorDisableIT, - " ${L10n.of(context).errorDisableITUserDesc}", - ); - } - - if (igcDisabled) { - return ErrorCopy( - L10n.of(context).errorDisableIGC, - " ${L10n.of(context).errorDisableIGCUserDesc}", - ); - } - - debugger(when: kDebugMode); - ErrorHandler.logError( - e: Exception("Unhandled case in language permissions"), - data: { - "roomID": roomID, - }, - ); - return null; - } - - void showMessage(BuildContext context, Widget text) { - ScaffoldMessenger.of(context).hideCurrentSnackBar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - duration: const Duration(seconds: 10), - content: text, - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/send_button.dart b/lib/pangea/choreographer/widgets/send_button.dart deleted file mode 100644 index 6f8b15e5b..000000000 --- a/lib/pangea/choreographer/widgets/send_button.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/enums/assistance_state_enum.dart'; -import '../../../pages/chat/chat.dart'; - -class ChoreographerSendButton extends StatefulWidget { - const ChoreographerSendButton({ - super.key, - required this.controller, - }); - final ChatController controller; - - @override - State createState() => - ChoreographerSendButtonState(); -} - -class ChoreographerSendButtonState extends State { - StreamSubscription? _choreoSub; - - @override - void initState() { - // Rebuild the widget each time there's an update from - // choreo. This keeps the spin up-to-date. - _choreoSub = widget.controller.choreographer.stateStream.stream.listen((_) { - setState(() {}); - }); - super.initState(); - } - - @override - void dispose() { - _choreoSub?.cancel(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Container( - height: 56, - alignment: Alignment.center, - child: IconButton( - icon: const Icon(Icons.send_outlined), - color: - widget.controller.choreographer.assistanceState.stateColor(context), - onPressed: widget.controller.choreographer.isFetching - ? null - : () { - widget.controller.choreographer.incrementTimesClicked(); - widget.controller.choreographer.send(context); - }, - tooltip: L10n.of(context).send, - ), - ); - } -} diff --git a/lib/pangea/choreographer/widgets/start_igc_button.dart b/lib/pangea/choreographer/widgets/start_igc_button.dart deleted file mode 100644 index ceef200c5..000000000 --- a/lib/pangea/choreographer/widgets/start_igc_button.dart +++ /dev/null @@ -1,196 +0,0 @@ -import 'dart:async'; -import 'dart:math' as math; - -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/enums/assistance_state_enum.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/paywall_card.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; -import '../../../pages/chat/chat.dart'; - -class StartIGCButton extends StatefulWidget { - const StartIGCButton({ - super.key, - required this.controller, - }); - - final ChatController controller; - - @override - State createState() => StartIGCButtonState(); -} - -class StartIGCButtonState extends State - with SingleTickerProviderStateMixin { - AssistanceState get assistanceState => - widget.controller.choreographer.assistanceState; - AnimationController? _controller; - StreamSubscription? _choreoListener; - AssistanceState? _prevState; - - @override - void initState() { - _controller = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _choreoListener = widget.controller.choreographer.stateStream.stream - .listen(_updateSpinnerState); - super.initState(); - } - - @override - void dispose() { - _controller?.dispose(); - _choreoListener?.cancel(); - super.dispose(); - } - - void _updateSpinnerState(_) { - if (_prevState != AssistanceState.fetching && - assistanceState == AssistanceState.fetching) { - _controller?.repeat(); - } else if (_prevState == AssistanceState.fetching && - assistanceState != AssistanceState.fetching) { - _controller?.reset(); - } - if (mounted) { - setState(() => _prevState = assistanceState); - } - } - - void _showFirstMatch() { - final igcData = widget.controller.choreographer.igc.igcTextData; - if (igcData != null && igcData.matches.isNotEmpty) { - widget.controller.choreographer.igc.showFirstMatch(context); - } - } - - bool get _enableFeedback { - return ![ - AssistanceState.fetching, - AssistanceState.fetched, - AssistanceState.complete, - AssistanceState.noMessage, - ].contains(assistanceState); - } - - Future _onTap() async { - switch (assistanceState) { - case AssistanceState.noSub: - OverlayUtil.showPositionedCard( - context: context, - cardToShow: PaywallCard( - chatController: widget.controller, - ), - maxHeight: 325, - maxWidth: 325, - transformTargetId: - widget.controller.choreographer.inputTransformTargetKey, - ); - return; - case AssistanceState.noMessage: - showDialog( - context: context, - builder: (c) => const SettingsLearning(), - barrierDismissible: false, - ); - return; - case AssistanceState.notFetched: - if (widget.controller.shouldShowLanguageMismatchPopup) { - widget.controller.showLanguageMismatchPopup(); - } else { - await widget.controller.choreographer.getLanguageHelp(manual: true); - _showFirstMatch(); - } - return; - case AssistanceState.fetched: - _showFirstMatch(); - return; - case AssistanceState.complete: - case AssistanceState.fetching: - return; - } - } - - Color get _backgroundColor { - switch (assistanceState) { - case AssistanceState.noSub: - case AssistanceState.noMessage: - case AssistanceState.fetched: - case AssistanceState.complete: - return Theme.of(context).colorScheme.surfaceContainerHighest; - case AssistanceState.notFetched: - case AssistanceState.fetching: - return Theme.of(context).colorScheme.primaryContainer; - } - } - - @override - Widget build(BuildContext context) { - final icon = Icon( - size: 36, - Icons.autorenew_rounded, - color: assistanceState.stateColor(context), - ); - - return Tooltip( - message: _enableFeedback ? L10n.of(context).check : "", - child: Material( - elevation: _enableFeedback ? 4.0 : 0.0, - borderRadius: BorderRadius.circular(99.0), - shadowColor: Theme.of(context).colorScheme.surface.withAlpha(128), - child: InkWell( - enableFeedback: _enableFeedback, - onTap: _enableFeedback ? _onTap : null, - customBorder: const CircleBorder(), - onLongPress: _enableFeedback - ? () => showDialog( - context: context, - builder: (c) => const SettingsLearning(), - barrierDismissible: false, - ) - : null, - child: Stack( - alignment: Alignment.center, - children: [ - AnimatedContainer( - height: 40.0, - width: 40.0, - duration: FluffyThemes.animationDuration, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: _backgroundColor, - ), - ), - _controller != null - ? RotationTransition( - turns: Tween(begin: 0.0, end: math.pi * 2) - .animate(_controller!), - child: icon, - ) - : icon, - AnimatedContainer( - width: 20, - height: 20, - duration: FluffyThemes.animationDuration, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: _backgroundColor, - ), - ), - Icon( - size: 16, - Icons.check, - color: assistanceState.stateColor(context), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/common/config/environment.dart b/lib/pangea/common/config/environment.dart index 30318bcbf..970017bd6 100644 --- a/lib/pangea/common/config/environment.dart +++ b/lib/pangea/common/config/environment.dart @@ -65,7 +65,9 @@ class Environment { } static String get cmsApi { - final envEntry = appConfigOverride?.choreoApi ?? dotenv.env['CHOREO_API']; + final envEntry = dotenv.env['CMS_API'] ?? + appConfigOverride?.choreoApi ?? + dotenv.env['CHOREO_API']; if (envEntry == null) { return "Not found"; } diff --git a/lib/pangea/common/constants/local.key.dart b/lib/pangea/common/constants/local.key.dart index 8c5d84061..9d722ca6c 100644 --- a/lib/pangea/common/constants/local.key.dart +++ b/lib/pangea/common/constants/local.key.dart @@ -4,6 +4,7 @@ class PLocalKey { static const String beganWebPayment = "beganWebPayment"; static const String dismissedPaywall = 'dismissedPaywall'; static const String paywallBackoff = 'paywallBackoff'; + static const String clickedCancelSubscription = 'clickedCancelSubscription'; static const String messagesSinceUpdate = 'messagesSinceLastUpdate'; static const String completedActivities = 'completedActivities'; static const String justInputtedCode = 'justInputtedCode'; diff --git a/lib/pangea/common/constants/model_keys.dart b/lib/pangea/common/constants/model_keys.dart index ddebf808d..9296826b9 100644 --- a/lib/pangea/common/constants/model_keys.dart +++ b/lib/pangea/common/constants/model_keys.dart @@ -7,14 +7,10 @@ class ModelKey { static const String userCreatedAt = 'created_at'; static const String userPangeaUserId = 'pangea_user_id'; static const String userDateOfBirth = 'date_of_birth'; - static const String userTargetLanguage = 'target_language'; - static const String userSourceLanguage = 'source_language'; static const String userSpeaks = 'speaks'; static const String userCountry = 'country'; static const String hasJoinedHelpSpace = 'has_joined_help_space'; static const String userInterests = 'interests'; - static const String l2LanguageKey = 'target_language'; - static const String l1LanguageKey = 'source_language'; static const String publicProfile = 'public_profile'; static const String userId = 'user_id'; static const String toolSettings = 'tool_settings'; @@ -26,10 +22,8 @@ class ModelKey { static const String itAutoPlay = 'autoPlayIT'; static const String clientClassCity = "city"; - static const String clientClassCountry = "country"; static const String clientClassDominantLanguage = "dominantLanguage"; static const String clientClassTargetLanguage = "targetLanguage"; - static const String clientClassDescription = "description"; static const String clientLanguageLevel = "languageLevel"; static const String clientSchool = "schoolName"; @@ -47,6 +41,7 @@ class ModelKey { static const String userL1 = "user_l1"; static const String userL2 = "user_l2"; + static const String userGender = "user_gender"; static const String fullText = "full_text"; static const String fullTextLang = "full_text_lang"; static const String tokens = "tokens"; @@ -74,7 +69,6 @@ class ModelKey { static const String prevSender = "prev_sender"; static const String prevTimestamp = "prev_timestamp"; - static const String originalSent = "original_sent"; static const String originalWritten = "original_written"; static const String tokensSent = "tokens_sent"; static const String tokensWritten = "tokens_written"; @@ -89,8 +83,8 @@ class ModelKey { static const String messageTags = "p.tag"; static const String messageTagMorphEdit = "morph_edit"; static const String messageTagLemmaEdit = "lemma_edit"; + static const String tokenFeedbackEdit = "edit_word_info"; static const String messageTagActivityPlan = "activity_plan"; - static const String tempEventId = "temporary_event_id"; static const String baseDefinition = "base_definition"; static const String targetDefinition = "target_definition"; @@ -135,6 +129,7 @@ class ModelKey { "text_adventure_game_master_instructions"; static const String targetLanguage = "target_language"; + static const String sourceLanguage = "source_language"; static const String targetVoice = "target_voice"; static const String prevEventId = "prev_event_id"; @@ -159,7 +154,8 @@ class ModelKey { // activity plan static const String activityPlanRequest = "req"; static const String activityPlanTitle = "title"; - static const String activityPlanDescription = "description"; + static const String description = "description"; + static const String duration = "duration"; static const String activityPlanLocation = "location"; static const String activityPlanLearningObjective = "learning_objective"; static const String activityPlanInstructions = "instructions"; @@ -167,17 +163,14 @@ class ModelKey { static const String activityPlanImageURL = "image_url"; static const String activityId = "activity_id"; static const String activityPlanEndAt = "end_at"; - static const String activityPlanDuration = "duration"; static const String activityPlanTopicId = "topic_id"; static const String activityRequestTopic = "topic"; - static const String activityRequestMode = "mode"; static const String activityRequestObjective = "objective"; static const String activityRequestMedia = "media"; static const String activityRequestCefrLevel = "activity_cefr_level"; static const String activityRequestLanguageOfInstructions = "language_of_instructions"; - static const String activityRequestTargetLanguage = "target_language"; static const String activityRequestCount = "count"; static const String activityRequestNumberOfParticipants = "number_of_participants"; diff --git a/lib/pangea/common/controllers/pangea_controller.dart b/lib/pangea/common/controllers/pangea_controller.dart index fd01ea217..3d80b2204 100644 --- a/lib/pangea/common/controllers/pangea_controller.dart +++ b/lib/pangea/common/controllers/pangea_controller.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'dart:math'; import 'package:flutter/material.dart'; @@ -7,67 +6,42 @@ import 'package:get_storage/get_storage.dart'; import 'package:matrix/matrix.dart'; import 'package:provider/provider.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; -import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; +import 'package:fluffychat/config/setting_keys.dart'; +import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; import 'package:fluffychat/pangea/chat_settings/utils/bot_client_extension.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/contextual_definition_controller.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/events/controllers/message_data_controller.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/guard/p_vguard.dart'; -import 'package:fluffychat/pangea/learning_settings/controllers/language_controller.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/locale_provider.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/spaces/controllers/space_code_controller.dart'; +import 'package:fluffychat/pangea/common/utils/p_vguard.dart'; +import 'package:fluffychat/pangea/languages/locale_provider.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/speech_to_text_controller.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/user/controllers/permissions_controller.dart'; -import 'package:fluffychat/pangea/user/controllers/user_controller.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/pangea/user/pangea_push_rules_extension.dart'; +import 'package:fluffychat/pangea/user/user_controller.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../utils/firebase_analytics.dart'; class PangeaController { ///pangeaControllers late UserController userController; - late LanguageController languageController; - late SpaceCodeController spaceCodeController; - late PermissionsController permissionsController; - late GetAnalyticsController getAnalytics; - late PutAnalyticsController putAnalytics; - late MessageDataController messageData; - - // TODO: make these static so we can remove from here - late ContextualDefinitionController definitions; late SubscriptionController subscriptionController; - late TextToSpeechController textToSpeech; - late SpeechToTextController speechToText; ///store Services final pLanguageStore = PLanguageStore(); StreamSubscription? _languageSubscription; StreamSubscription? _settingsSubscription; + StreamSubscription? _joinSpaceSubscription; ///Matrix Variables - MatrixState matrixState; - Matrix matrix; + final MatrixState matrixState; - int? randomint; - PangeaController({required this.matrix, required this.matrixState}) { - _setup(); - _setSettingsSubscriptions(); - randomint = Random().nextInt(2000); - } - - /// Pangea Initialization - void _setup() { - _addRefInObjects(); + PangeaController({required this.matrixState}) { + userController = UserController(); + subscriptionController = SubscriptionController(this); + PAuthGaurd.pController = this; + _registerSubscriptions(); } /// Initializes various controllers and settings. @@ -75,35 +49,131 @@ class PangeaController { /// because of order of execution does not matter, /// and running them at the same times speeds them up. void initControllers() { - _initAnalyticsControllers(); + _initAnalytics(); subscriptionController.initialize(); - setPangeaPushRules(); + matrixState.client.setPangeaPushRules(); TtsController.setAvailableLanguages(); } - /// Initialize controllers - _addRefInObjects() { - userController = UserController(this); - languageController = LanguageController(this); - spaceCodeController = SpaceCodeController(this); - permissionsController = PermissionsController(this); - getAnalytics = GetAnalyticsController(this); - putAnalytics = PutAnalyticsController(this); - messageData = MessageDataController(this); - definitions = ContextualDefinitionController(this); - subscriptionController = SubscriptionController(this); - textToSpeech = TextToSpeechController(this); - speechToText = SpeechToTextController(this); - PAuthGaurd.pController = this; + void _onLogin(BuildContext context) { + initControllers(); + _registerSubscriptions(); + + userController.reinitialize().then((_) { + final l1 = userController.profile.userSettings.sourceLanguage; + Provider.of(context, listen: false).setLocale(l1); + }); + subscriptionController.reinitialize(); } - _logOutfromPangea(BuildContext context) { - debugPrint("Pangea logout"); + void _onLogout(BuildContext context) { + userController.clear(); + _languageSubscription?.cancel(); + _settingsSubscription?.cancel(); + _joinSpaceSubscription?.cancel(); + _languageSubscription = null; + _settingsSubscription = null; + _joinSpaceSubscription = null; + GoogleAnalytics.logout(); - clearCache(); + _clearCache(); Provider.of(context, listen: false).setLocale(null); } + void handleLoginStateChange( + LoginState state, + String? userID, + BuildContext context, + ) { + switch (state) { + case LoginState.loggedOut: + case LoginState.softLoggedOut: + _onLogout(context); + break; + case LoginState.loggedIn: + _onLogin(context); + break; + } + + Sentry.configureScope( + (scope) => scope.setUser( + SentryUser( + id: userID, + name: userID, + ), + ), + ); + GoogleAnalytics.analyticsUserUpdate(userID); + } + + void _registerSubscriptions() { + _languageSubscription?.cancel(); + _languageSubscription = + userController.languageStream.stream.listen(_onLanguageUpdate); + + _settingsSubscription?.cancel(); + _settingsSubscription = userController.settingsUpdateStream.stream + .listen((_) => matrixState.client.updateBotOptions()); + + _joinSpaceSubscription?.cancel(); + _joinSpaceSubscription ??= matrixState.client.onSync.stream + .where(matrixState.client.isJoinSpaceSyncUpdate) + .listen((_) => matrixState.client.addAnalyticsRoomsToSpaces()); + } + + Future _clearCache({List exclude = const []}) async { + final List> futures = []; + for (final key in _storageKeys) { + if (exclude.contains(key)) continue; + futures.add(GetStorage(key).erase()); + } + + if (AppConfig.showedActivityMenu) { + futures.add( + SharedPreferences.getInstance().then((prefs) async { + AppConfig.showedActivityMenu = false; + prefs.setBool( + SettingKeys.showedActivityMenu, + AppConfig.showedActivityMenu, + ); + }), + ); + } + + await Future.wait(futures); + } + + Future _initAnalytics() async { + await GetStorage.init("activity_analytics_storage"); + + matrixState.client.updateAnalyticsRoomJoinRules(); + matrixState.client.addAnalyticsRoomsToSpaces(); + } + + Future resetAnalytics() async { + await _initAnalytics(); + } + + Future _onLanguageUpdate(LanguageUpdate update) async { + final exclude = [ + 'course_location_media_storage', + 'course_location_storage', + 'course_media_storage', + ]; + + // only clear course data if the base language has changed + if (update.prevBaseLang == update.baseLang) { + exclude.addAll([ + 'course_storage', + 'course_topic_storage', + 'course_activity_storage', + ]); + } + + _clearCache(exclude: exclude); + matrixState.client.updateBotOptions(); + } + static final List _storageKeys = [ 'mode_list_storage', 'activity_plan_storage', @@ -111,7 +181,6 @@ class PangeaController { 'objective_list_storage', 'topic_list_storage', 'activity_plan_search_storage', - "analytics_storage", "version_storage", 'lemma_storage', 'svg_cache', @@ -132,205 +201,4 @@ class PangeaController { 'course_location_media_storage', 'language_mismatch', ]; - - Future clearCache({List exclude = const []}) async { - final List> futures = []; - for (final key in _storageKeys) { - if (exclude.contains(key)) continue; - futures.add(GetStorage(key).erase()); - } - await Future.wait(futures); - } - - Future checkHomeServerAction() async { - final client = await matrixState.getLoginClient(); - if (client.homeserver != null) { - await Future.delayed(Duration.zero); - return client; - } - - final String homeServer = - AppConfig.defaultHomeserver.trim().toLowerCase().replaceAll(' ', '-'); - var homeserver = Uri.parse(homeServer); - if (homeserver.scheme.isEmpty) { - homeserver = Uri.https(homeServer, ''); - } - - try { - await client.register(); - matrixState.loginRegistrationSupported = true; - } on MatrixException catch (e) { - matrixState.loginRegistrationSupported = - e.requireAdditionalAuthentication; - } - return client; - } - - /// check user information if not found then redirect to Date of birth page - void handleLoginStateChange( - LoginState state, - String? userID, - BuildContext context, - ) { - switch (state) { - case LoginState.loggedOut: - case LoginState.softLoggedOut: - // Reset cached analytics data - _disposeAnalyticsControllers(); - userController.clear(); - _languageSubscription?.cancel(); - _settingsSubscription?.cancel(); - _languageSubscription = null; - _settingsSubscription = null; - _logOutfromPangea(context); - break; - case LoginState.loggedIn: - // Initialize analytics data - initControllers(); - _setSettingsSubscriptions(); - - userController.reinitialize().then((_) { - final l1 = userController.profile.userSettings.sourceLanguage; - Provider.of(context, listen: false).setLocale(l1); - }); - subscriptionController.reinitialize(); - break; - } - - Sentry.configureScope( - (scope) => scope.setUser( - SentryUser( - id: userID, - name: userID, - ), - ), - ); - GoogleAnalytics.analyticsUserUpdate(userID); - } - - Future _initAnalyticsControllers() async { - putAnalytics.initialize(); - await getAnalytics.initialize(); - } - - void _disposeAnalyticsControllers() { - putAnalytics.dispose(); - getAnalytics.dispose(); - } - - Future resetAnalytics() async { - _disposeAnalyticsControllers(); - await _initAnalyticsControllers(); - } - - void _setSettingsSubscriptions() { - _languageSubscription?.cancel(); - _languageSubscription = - userController.languageStream.stream.listen(_onLanguageUpdate); - _settingsSubscription?.cancel(); - _settingsSubscription = userController.settingsUpdateStream.stream - .listen((_) => _updateBotOptions()); - } - - Future _onLanguageUpdate(LanguageUpdate update) async { - clearCache(exclude: ["analytics_storage"]); - _updateBotOptions(); - } - - Future _updateBotOptions() async { - if (!matrixState.client.isLogged()) return; - final botDM = matrixState.client.botDM; - if (botDM == null) { - return; - } - - final targetLanguage = languageController.userL2?.langCode; - final cefrLevel = userController.profile.userSettings.cefrLevel; - final updateBotOptions = botDM.botOptions ?? BotOptionsModel(); - - if (updateBotOptions.targetLanguage == targetLanguage && - updateBotOptions.languageLevel == cefrLevel) { - return; - } - - updateBotOptions.targetLanguage = targetLanguage; - updateBotOptions.languageLevel = cefrLevel; - await botDM.setBotOptions(updateBotOptions); - } - - Future setPangeaPushRules() async { - if (!matrixState.client.isLogged()) return; - final List analyticsRooms = - matrixState.client.rooms.where((room) => room.isAnalyticsRoom).toList(); - - for (final Room room in analyticsRooms) { - final pushRule = room.pushRuleState; - if (pushRule != PushRuleState.dontNotify) { - await room.setPushRuleState(PushRuleState.dontNotify); - } - } - - if (!(matrixState.client.globalPushRules?.override?.any( - (element) => element.ruleId == PangeaEventTypes.textToSpeechRule, - ) ?? - false)) { - await matrixState.client.setPushRule( - PushRuleKind.override, - PangeaEventTypes.textToSpeechRule, - [PushRuleAction.dontNotify], - conditions: [ - PushCondition( - kind: 'event_match', - key: 'content.msgtype', - pattern: MessageTypes.Audio, - ), - PushCondition( - kind: 'event_match', - key: 'content.transcription.lang_code', - pattern: '*', - ), - PushCondition( - kind: 'event_match', - key: 'content.transcription.text', - pattern: '*', - ), - ], - ); - } - } - - // /// Joins the user to the support space if they are - // /// not already a member and have not previously left. - // Future joinSupportSpace() async { - // // if the user is already in the space, return - // await matrixState.client.roomsLoading; - // final isInSupportSpace = matrixState.client.rooms.any( - // (room) => room.id == Environment.supportSpaceId, - // ); - // if (isInSupportSpace) return; - - // // if the user has previously joined the space, return - // final bool previouslyJoined = - // userController.profile.userSettings.hasJoinedHelpSpace ?? false; - // if (previouslyJoined) return; - - // // join the space - // try { - // await matrixState.client.joinRoomById(Environment.supportSpaceId); - // final room = matrixState.client.getRoomById(Environment.supportSpaceId); - // if (room == null) { - // await matrixState.client.waitForRoomInSync( - // Environment.supportSpaceId, - // join: true, - // ); - // } - // userController.updateProfile((profile) { - // profile.userSettings.hasJoinedHelpSpace = true; - // return profile; - // }); - // } catch (err, s) { - // ErrorHandler.logError(e: err, s: s); - // return; - // } - // } } diff --git a/lib/pangea/common/network/requests.dart b/lib/pangea/common/network/requests.dart index 69eeb5196..4cf4e792c 100644 --- a/lib/pangea/common/network/requests.dart +++ b/lib/pangea/common/network/requests.dart @@ -6,7 +6,7 @@ import 'package:http/http.dart' as http; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; class Requests { @@ -24,6 +24,8 @@ class Requests { }) async { body[ModelKey.cefrLevel] = MatrixState .pangeaController.userController.profile.userSettings.cefrLevel.string; + body[ModelKey.userGender] = MatrixState + .pangeaController.userController.profile.userSettings.gender.string; dynamic encoded; encoded = jsonEncode(body); diff --git a/lib/pangea/common/utils/any_state_holder.dart b/lib/pangea/common/utils/any_state_holder.dart index 64ea7936e..a2f8d4c61 100644 --- a/lib/pangea/common/utils/any_state_holder.dart +++ b/lib/pangea/common/utils/any_state_holder.dart @@ -84,6 +84,7 @@ class PangeaAnyState { if (entry != null) { try { entry.entry.remove(); + entry.entry.dispose(); } catch (err, s) { ErrorHandler.logError( e: err, @@ -117,6 +118,7 @@ class PangeaAnyState { for (int i = 0; i < shouldRemove.length; i++) { try { shouldRemove[i].entry.remove(); + shouldRemove[i].entry.dispose(); } catch (err, s) { ErrorHandler.logError( e: err, @@ -131,8 +133,11 @@ class PangeaAnyState { } } - RenderBox? getRenderBox(String key) => - layerLinkAndKey(key).key.currentContext?.findRenderObject() as RenderBox?; + RenderBox? getRenderBox(String key) { + final box = layerLinkAndKey(key).key.currentContext?.findRenderObject() + as RenderBox?; + return box?.hasSize == true ? box : null; + } bool isOverlayOpen(RegExp regex) { return entries.any( diff --git a/lib/pangea/common/utils/async_state.dart b/lib/pangea/common/utils/async_state.dart new file mode 100644 index 000000000..a2f15adbe --- /dev/null +++ b/lib/pangea/common/utils/async_state.dart @@ -0,0 +1,112 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; + +/// A generic sealed class that represents the state of an asynchronous operation. +sealed class AsyncState { + /// Base constructor for all asynchronous state variants. + const AsyncState(); + + /// Represents an idle state before any asynchronous work has begun. + const factory AsyncState.idle() = AsyncIdle; + + /// Represents an in-progress loading state. + const factory AsyncState.loading() = AsyncLoading; + + /// Represents a completed asynchronous operation with a successful [value]. + const factory AsyncState.loaded(T value) = AsyncLoaded; + + /// Represents a failed asynchronous operation with an [error]. + const factory AsyncState.error(Object error) = AsyncError; +} + +/// The idle state of an [AsyncState], indicating no active or completed work. +/// +/// Use this as the initial state before triggering an async operation. +class AsyncIdle extends AsyncState { + /// Creates an idle [AsyncState]. + const AsyncIdle(); +} + +/// The loading state of an [AsyncState], indicating that work is in progress. +/// +/// This state is typically used to show a loading spinner or progress indicator. +class AsyncLoading extends AsyncState { + /// Creates a loading [AsyncState]. + const AsyncLoading(); +} + +/// The success state of an [AsyncState], containing a completed [value]. +/// +/// This state indicates that the asynchronous work finished successfully. +class AsyncLoaded extends AsyncState { + /// The result of the successful asynchronous operation. + final T value; + + /// Creates a loaded [AsyncState] with a [value]. + const AsyncLoaded(this.value); +} + +/// The error state of an [AsyncState], containing an [error]. +/// +/// This state indicates that the asynchronous work failed. +class AsyncError extends AsyncState { + /// The error produced during the asynchronous operation. + final Object error; + + /// Creates an error [AsyncState] with an [error]. + const AsyncError(this.error); +} + +abstract class AsyncLoader { + final ValueNotifier> state = ValueNotifier(AsyncState.idle()); + bool _disposed = false; + + bool get isIdle => state.value is AsyncIdle; + bool get isLoading => state.value is AsyncLoading; + bool get isLoaded => state.value is AsyncLoaded; + bool get isError => state.value is AsyncError; + + T? get value => isLoaded ? (state.value as AsyncLoaded).value : null; + + final Completer completer = Completer(); + + void dispose() { + _disposed = true; + state.dispose(); + } + + Future fetch(); + + Future load() async { + if (state.value is AsyncLoaded) { + // If already loading or loaded, do nothing. + return; + } + + state.value = AsyncState.loading(); + + try { + final result = await fetch(); + if (_disposed) return; + state.value = AsyncState.loaded(result); + completer.complete(result); + } catch (e, s) { + completer.completeError(e); + if (!_disposed) { + state.value = AsyncState.error(e); + } + + if (e is! HttpException) { + ErrorHandler.logError( + e: e, + s: s, + data: {}, + ); + } + } + } +} diff --git a/lib/pangea/common/utils/overlay.dart b/lib/pangea/common/utils/overlay.dart index a18be4332..fcdaaf668 100644 --- a/lib/pangea/common/utils/overlay.dart +++ b/lib/pangea/common/utils/overlay.dart @@ -3,10 +3,17 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:fluffychat/pangea/analytics_misc/gain_points_animation.dart'; +import 'package:fluffychat/pangea/analytics_misc/level_up/star_rain_widget.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; +import 'package:fluffychat/pangea/choreographer/choreographer.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_state_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/span_card.dart'; import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/common/widgets/anchored_overlay_widget.dart'; import 'package:fluffychat/pangea/common/widgets/overlay_container.dart'; import 'package:fluffychat/pangea/common/widgets/transparent_backdrop.dart'; +import 'package:fluffychat/pangea/learning_settings/language_mismatch_popup.dart'; import '../../../config/themes.dart'; import '../../../widgets/matrix.dart'; import 'error_handler.dart'; @@ -50,50 +57,45 @@ class OverlayUtil { } final OverlayEntry entry = OverlayEntry( - builder: (context) => AnimatedContainer( - duration: FluffyThemes.animationDuration, - curve: FluffyThemes.animationCurve, - child: Stack( - children: [ - if (backDropToDismiss) - IgnorePointer( - ignoring: ignorePointer, - child: TransparentBackdrop( - backgroundColor: backgroundColor, - onDismiss: onDismiss, - blurBackground: blurBackground, - ), + builder: (context) => Stack( + children: [ + if (backDropToDismiss) + IgnorePointer( + ignoring: ignorePointer, + child: TransparentBackdrop( + backgroundColor: backgroundColor, + onDismiss: onDismiss, + blurBackground: blurBackground, ), - Positioned( - top: (position == OverlayPositionEnum.centered || - position == OverlayPositionEnum.top) - ? 0 - : null, - right: (position == OverlayPositionEnum.centered || - position == OverlayPositionEnum.top) - ? 0 - : null, - left: (position == OverlayPositionEnum.centered || - position == OverlayPositionEnum.top) - ? 0 - : null, - bottom: (position == OverlayPositionEnum.centered) ? 0 : null, - child: (position != OverlayPositionEnum.transform) - ? child - : CompositedTransformFollower( - targetAnchor: targetAnchor ?? Alignment.topCenter, - followerAnchor: - followerAnchor ?? Alignment.bottomCenter, - link: MatrixState.pAnyState - .layerLinkAndKey(transformTargetId!) - .link, - showWhenUnlinked: false, - offset: offset ?? Offset.zero, - child: child, - ), ), - ], - ), + Positioned( + top: (position == OverlayPositionEnum.centered || + position == OverlayPositionEnum.top) + ? 0 + : null, + right: (position == OverlayPositionEnum.centered || + position == OverlayPositionEnum.top) + ? 0 + : null, + left: (position == OverlayPositionEnum.centered || + position == OverlayPositionEnum.top) + ? 0 + : null, + bottom: (position == OverlayPositionEnum.centered) ? 0 : null, + child: (position != OverlayPositionEnum.transform) + ? child + : CompositedTransformFollower( + targetAnchor: targetAnchor ?? Alignment.topCenter, + followerAnchor: followerAnchor ?? Alignment.bottomCenter, + link: MatrixState.pAnyState + .layerLinkAndKey(transformTargetId!) + .link, + showWhenUnlinked: false, + offset: offset ?? Offset.zero, + child: child, + ), + ), + ], ), ); @@ -129,6 +131,8 @@ class OverlayUtil { bool addBorder = true, VoidCallback? onDismiss, bool ignorePointer = false, + Alignment? targetAnchor, + Alignment? followerAnchor, }) { try { final LayerLinkAndKey layerLinkAndKey = @@ -155,14 +159,11 @@ class OverlayUtil { final horizontalMidpoint = (transformTargetOffset.dx - columnWidth) + (transformTargetSize.width / 2); - final verticalMidpoint = - transformTargetOffset.dy + (transformTargetSize.height / 2); - final halfMaxWidth = maxWidth / 2; final hasLeftOverflow = (horizontalMidpoint - halfMaxWidth) < 10; final hasRightOverflow = (horizontalMidpoint + halfMaxWidth) > (MediaQuery.of(context).size.width - columnWidth - 10); - hasTopOverflow = (verticalMidpoint - maxHeight) < 0; + hasTopOverflow = maxHeight + kToolbarHeight > transformTargetOffset.dy; double xOffset = 0; @@ -200,10 +201,10 @@ class OverlayUtil { closePrevOverlay: closePrevOverlay, offset: offset, overlayKey: overlayKey, - targetAnchor: - hasTopOverflow ? Alignment.bottomCenter : Alignment.topCenter, - followerAnchor: - hasTopOverflow ? Alignment.topCenter : Alignment.bottomCenter, + targetAnchor: targetAnchor ?? + (hasTopOverflow ? Alignment.bottomCenter : Alignment.topCenter), + followerAnchor: followerAnchor ?? + (hasTopOverflow ? Alignment.topCenter : Alignment.bottomCenter), onDismiss: onDismiss, ignorePointer: ignorePointer, ); @@ -217,6 +218,32 @@ class OverlayUtil { } } + static void showIGCMatch( + PangeaMatchState match, + Choreographer choreographer, + BuildContext context, + VoidCallback showNextMatch, + ) { + MatrixState.pAnyState.closeAllOverlays(); + showPositionedCard( + overlayKey: + "span_card_overlay_${match.updatedMatch.match.offset}_${match.updatedMatch.match.length}", + context: context, + cardToShow: SpanCard( + match: match, + choreographer: choreographer, + showNextMatch: showNextMatch, + ), + maxHeight: 325, + maxWidth: 325, + transformTargetId: ChoreoConstants.inputTransformTargetKey, + ignorePointer: true, + isScrollable: false, + targetAnchor: Alignment.topCenter, + followerAnchor: Alignment.bottomCenter, + ); + } + static void showTutorialOverlay( BuildContext context, { required Widget overlayContent, @@ -250,4 +277,60 @@ class OverlayUtil { blockOverlay: true, ); } + + static void showStarRainOverlay(BuildContext context) { + showOverlay( + context: context, + position: OverlayPositionEnum.centered, + closePrevOverlay: false, + canPop: false, + overlayKey: "star_rain_level_up", + child: const StarRainWidget( + overlayKey: "star_rain_level_up", + ), + ); + } + + static void showPointsGained( + String targetId, + int points, + BuildContext context, + ) { + showOverlay( + overlayKey: "${targetId}_points", + followerAnchor: Alignment.bottomCenter, + targetAnchor: Alignment.bottomCenter, + context: context, + child: PointsGainedAnimation( + points: points, + targetID: targetId, + ), + transformTargetId: targetId, + closePrevOverlay: false, + backDropToDismiss: false, + ignorePointer: true, + ); + } + + static void showLanguageMismatchPopup({ + required BuildContext context, + required String targetId, + required String message, + required String targetLanguage, + required VoidCallback onConfirm, + }) { + showPositionedCard( + context: context, + cardToShow: LanguageMismatchPopup( + message: message, + overlayId: 'language_mismatch_popup', + onConfirm: onConfirm, + targetLanguage: targetLanguage, + ), + maxHeight: 325, + maxWidth: 325, + transformTargetId: targetId, + overlayKey: 'language_mismatch_popup', + ); + } } diff --git a/lib/pangea/guard/p_vguard.dart b/lib/pangea/common/utils/p_vguard.dart similarity index 97% rename from lib/pangea/guard/p_vguard.dart rename to lib/pangea/common/utils/p_vguard.dart index 42ec76e87..c977618c1 100644 --- a/lib/pangea/guard/p_vguard.dart +++ b/lib/pangea/common/utils/p_vguard.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../common/controllers/pangea_controller.dart'; +import '../controllers/pangea_controller.dart'; class PAuthGaurd { static bool isPublicLeaving = false; diff --git a/lib/pangea/choreographer/widgets/igc/card_error_widget.dart b/lib/pangea/common/widgets/card_error_widget.dart similarity index 55% rename from lib/pangea/choreographer/widgets/igc/card_error_widget.dart rename to lib/pangea/common/widgets/card_error_widget.dart index 029d2621b..43f7c107a 100644 --- a/lib/pangea/choreographer/widgets/igc/card_error_widget.dart +++ b/lib/pangea/common/widgets/card_error_widget.dart @@ -3,56 +3,38 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; class CardErrorWidget extends StatelessWidget { final String error; - final Choreographer? choreographer; - final int? offset; - final double maxWidth; - final double padding; - - const CardErrorWidget({ + const CardErrorWidget( + this.error, { super.key, - required this.error, - this.choreographer, - this.offset, - this.maxWidth = 275, - this.padding = 8, }); @override Widget build(BuildContext context) { - final ErrorCopy errorCopy = ErrorCopy( - context, - title: L10n.of(context).oopsSomethingWentWrong, - body: error, - ); - - return Container( - padding: EdgeInsets.all(padding), - constraints: BoxConstraints(maxWidth: maxWidth), + return Padding( + padding: const EdgeInsets.all(8.0), child: Column( + spacing: 6.0, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( - errorCopy.title, + L10n.of(context).oopsSomethingWentWrong, style: BotStyle.text(context), softWrap: true, ), - const SizedBox(height: 6.0), Row( + spacing: 12.0, mainAxisSize: MainAxisSize.min, children: [ const BotFace( width: 50.0, expression: BotExpression.addled, ), - const SizedBox(width: 12.0), Flexible( child: Text( - errorCopy.body, + error, style: BotStyle.text(context), softWrap: true, ), diff --git a/lib/pangea/common/widgets/card_header.dart b/lib/pangea/common/widgets/card_header.dart new file mode 100644 index 000000000..3999c0a40 --- /dev/null +++ b/lib/pangea/common/widgets/card_header.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../../bot/widgets/bot_face_svg.dart'; + +class CardHeader extends StatelessWidget { + const CardHeader( + this.text, { + super.key, + }); + + final String text; + + @override + Widget build(BuildContext context) { + return Row( + spacing: 12.0, + children: [ + Expanded( + child: Row( + spacing: 12.0, + children: [ + const BotFace( + width: 50.0, + expression: BotExpression.addled, + ), + Expanded( + child: Text( + text, + style: BotStyle.text(context), + softWrap: true, + ), + ), + ], + ), + ), + IconButton( + icon: const Icon(Icons.close_outlined), + onPressed: MatrixState.pAnyState.closeOverlay, + ), + ], + ); + } +} diff --git a/lib/pangea/choreographer/widgets/choice_animation.dart b/lib/pangea/common/widgets/choice_animation.dart similarity index 100% rename from lib/pangea/choreographer/widgets/choice_animation.dart rename to lib/pangea/common/widgets/choice_animation.dart diff --git a/lib/pangea/common/widgets/choice_array.dart b/lib/pangea/common/widgets/choice_array.dart new file mode 100644 index 000000000..d0c109259 --- /dev/null +++ b/lib/pangea/common/widgets/choice_array.dart @@ -0,0 +1,175 @@ +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/widgets/choice_animation.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../../bot/utils/bot_style.dart'; +import '../../choreographer/it/it_shimmer.dart'; + +typedef ChoiceCallback = void Function(String value, int index); + +class ChoicesArray extends StatelessWidget { + final bool isLoading; + final List? choices; + final ChoiceCallback onPressed; + final ChoiceCallback? onLongPress; + final int? selectedChoiceIndex; + + final bool enableAudio; + + /// language code for the TTS + final String? langCode; + + /// Used to unqiuely identify the keys for choices, in cases where multiple + /// choices could have identical text, like in back-to-back practice activities + final String? id; + + final String Function(String)? getDisplayCopy; + + const ChoicesArray({ + super.key, + required this.isLoading, + required this.choices, + required this.onPressed, + required this.selectedChoiceIndex, + this.enableAudio = true, + this.langCode, + this.onLongPress, + this.getDisplayCopy, + this.id, + }); + + @override + Widget build(BuildContext context) { + return isLoading && (choices == null || choices!.length <= 1) + ? const ItShimmer() + : Wrap( + alignment: WrapAlignment.center, + spacing: 4.0, + children: [ + ...choices!.mapIndexed( + (index, entry) => ChoiceItem( + onLongPress: onLongPress, + onPressed: (String value, int index) { + onPressed(value, index); + if (enableAudio && langCode != null) { + TtsController.tryToSpeak( + value, + targetID: null, + langCode: langCode!, + ); + } + }, + entry: MapEntry(index, entry), + isSelected: selectedChoiceIndex == index, + id: id, + getDisplayCopy: getDisplayCopy, + ), + ), + ], + ); + } +} + +class Choice { + Choice({ + this.color, + required this.text, + this.isGold = false, + }); + + final Color? color; + final String text; + final bool isGold; +} + +class ChoiceItem extends StatelessWidget { + final MapEntry entry; + final ChoiceCallback? onLongPress; + final ChoiceCallback onPressed; + final bool isSelected; + final String? id; + final String Function(String)? getDisplayCopy; + final double? fontSize; + + const ChoiceItem({ + super.key, + required this.onLongPress, + required this.onPressed, + required this.entry, + required this.isSelected, + required this.id, + this.getDisplayCopy, + this.fontSize, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Tooltip( + message: onLongPress != null ? L10n.of(context).holdForInfo : "", + waitDuration: onLongPress != null + ? const Duration(milliseconds: 500) + : const Duration(days: 1), + child: CompositedTransformTarget( + link: MatrixState.pAnyState + .layerLinkAndKey("${entry.value.text}$id") + .link, + child: ChoiceAnimationWidget( + isSelected: isSelected, + isCorrect: entry.value.isGold, + key: MatrixState.pAnyState + .layerLinkAndKey("${entry.value.text}$id") + .key, + child: Container( + margin: const EdgeInsets.all(2), + padding: EdgeInsets.zero, + decoration: BoxDecoration( + borderRadius: const BorderRadius.all( + Radius.circular(AppConfig.borderRadius), + ), + border: Border.all( + color: isSelected + ? entry.value.color ?? theme.colorScheme.primary + : Colors.transparent, + style: BorderStyle.solid, + width: 2.0, + ), + ), + child: TextButton( + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 4, + ), + backgroundColor: entry.value.color?.withAlpha(50) ?? + theme.colorScheme.primary.withAlpha(10), + textStyle: BotStyle.text(context), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + ), + ), + onLongPress: onLongPress != null + ? () => onLongPress!(entry.value.text, entry.key) + : null, + onPressed: () => onPressed(entry.value.text, entry.key), + child: Text( + getDisplayCopy != null + ? getDisplayCopy!(entry.value.text) + : entry.value.text, + style: BotStyle.text(context).copyWith( + fontSize: fontSize, + ), + textAlign: TextAlign.center, + ), + ), + ), + ), + ), + ); + } +} diff --git a/lib/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart b/lib/pangea/common/widgets/content_loading_indicator.dart similarity index 85% rename from lib/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart rename to lib/pangea/common/widgets/content_loading_indicator.dart index c1118a179..15655d9ee 100644 --- a/lib/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart +++ b/lib/pangea/common/widgets/content_loading_indicator.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; -class ToolbarContentLoadingIndicator extends StatelessWidget { - const ToolbarContentLoadingIndicator({ +class ContentLoadingIndicator extends StatelessWidget { + const ContentLoadingIndicator({ super.key, this.height, }); diff --git a/lib/pangea/common/widgets/feedback_dialog.dart b/lib/pangea/common/widgets/feedback_dialog.dart new file mode 100644 index 000000000..3ec11dee5 --- /dev/null +++ b/lib/pangea/common/widgets/feedback_dialog.dart @@ -0,0 +1,142 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; + +class FeedbackDialog extends StatefulWidget { + final String title; + final Function(String) onSubmit; + + final bool scrollable; + final Widget? extraContent; + + const FeedbackDialog({ + super.key, + required this.title, + required this.onSubmit, + this.scrollable = true, + this.extraContent, + }); + + @override + State createState() => _FeedbackDialogState(); +} + +class _FeedbackDialogState extends State { + final TextEditingController _feedbackController = TextEditingController(); + + @override + void dispose() { + _feedbackController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final content = Column( + spacing: 20.0, + mainAxisSize: MainAxisSize.min, + children: [ + const Center( + child: BotFace( + width: 50.0, + expression: BotExpression.addled, + ), + ), + Text( + L10n.of(context).feedbackDialogDesc, + textAlign: TextAlign.center, + ), + if (widget.extraContent != null) widget.extraContent!, + TextFormField( + controller: _feedbackController, + decoration: InputDecoration( + hintText: L10n.of(context).feedbackHint, + ), + keyboardType: TextInputType.multiline, + onFieldSubmitted: _feedbackController.text.isNotEmpty + ? (value) => widget.onSubmit(value) + : null, + maxLines: null, + onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(), + ), + ], + ); + + return BackdropFilter( + filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), + child: Dialog( + backgroundColor: Theme.of(context).colorScheme.surfaceContainerHigh, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20.0), + ), + child: Container( + width: 325.0, + constraints: const BoxConstraints( + maxHeight: 600.0, + ), + padding: const EdgeInsets.all(12.0), + child: Column( + spacing: 20.0, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + IconButton( + icon: const Icon(Icons.close), + onPressed: () => Navigator.of(context).pop(), + ), + Expanded( + child: Container( + constraints: const BoxConstraints( + minHeight: 40.0, + ), + alignment: Alignment.center, + child: Text( + widget.title, + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + textAlign: TextAlign.center, + ), + ), + ), + const SizedBox( + width: 40.0, + height: 40.0, + child: Center( + child: Icon(Icons.flag_outlined), + ), + ), + ], + ), + widget.scrollable + ? Expanded(child: SingleChildScrollView(child: content)) + : content, + ValueListenableBuilder( + valueListenable: _feedbackController, + builder: (context, value, _) { + final isNotEmpty = value.text.isNotEmpty; + return ElevatedButton( + onPressed: + isNotEmpty ? () => widget.onSubmit(value.text) : null, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(L10n.of(context).feedbackButton), + ], + ), + ); + }, + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/pangea/activity_sessions/activity_session_start/activity_feedback_response_dialog.dart b/lib/pangea/common/widgets/feedback_response_dialog.dart similarity index 83% rename from lib/pangea/activity_sessions/activity_session_start/activity_feedback_response_dialog.dart rename to lib/pangea/common/widgets/feedback_response_dialog.dart index 22a944f9d..e411116d1 100644 --- a/lib/pangea/activity_sessions/activity_session_start/activity_feedback_response_dialog.dart +++ b/lib/pangea/common/widgets/feedback_response_dialog.dart @@ -2,12 +2,19 @@ import 'dart:ui'; import 'package:flutter/material.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; -class ActivityFeedbackResponseDialog extends StatelessWidget { +class FeedbackResponseDialog extends StatelessWidget { + final String title; final String feedback; - const ActivityFeedbackResponseDialog({super.key, required this.feedback}); + final String? description; + + const FeedbackResponseDialog({ + super.key, + required this.title, + required this.feedback, + this.description, + }); @override Widget build(BuildContext context) { @@ -34,7 +41,7 @@ class ActivityFeedbackResponseDialog extends StatelessWidget { ), Expanded( child: Text( - L10n.of(context).feedbackTitle, + title, style: Theme.of(context).textTheme.titleLarge, textAlign: TextAlign.center, ), @@ -65,10 +72,11 @@ class ActivityFeedbackResponseDialog extends StatelessWidget { feedback, textAlign: TextAlign.center, ), - Text( - L10n.of(context).feedbackRespDesc, - textAlign: TextAlign.center, - ), + if (description != null) + Text( + description!, + textAlign: TextAlign.center, + ), const SizedBox.shrink(), ], ), diff --git a/lib/pangea/common/widgets/pressable_button.dart b/lib/pangea/common/widgets/pressable_button.dart index dc0aaf475..04fc8ffd7 100644 --- a/lib/pangea/common/widgets/pressable_button.dart +++ b/lib/pangea/common/widgets/pressable_button.dart @@ -11,7 +11,8 @@ class PressableButton extends StatefulWidget { final double buttonHeight; final bool depressed; final Color color; - final Widget child; + final Widget Function(BuildContext context, bool depressed, Color shadowColor) + builder; final void Function()? onPressed; final Stream? triggerAnimation; @@ -22,7 +23,7 @@ class PressableButton extends StatefulWidget { const PressableButton({ required this.borderRadius, - required this.child, + required this.builder, required this.onPressed, required this.color, this.buttonHeight = 4, @@ -137,8 +138,15 @@ class PressableButtonState extends State @override Widget build(BuildContext context) { + final shadowColor = Color.alphaBlend( + Colors.black.withAlpha( + (255 * widget.colorFactor).round(), + ), + widget.color, + ); + if (!widget.visible) { - return widget.child; + return widget.builder(context, _depressed, shadowColor); } return MouseRegion( @@ -157,15 +165,14 @@ class PressableButtonState extends State child: Column( mainAxisSize: MainAxisSize.min, children: [ - SizedBox(height: _tweenAnimation.value), + SizedBox( + height: _depressed + ? widget.buttonHeight + : _tweenAnimation.value, + ), Container( decoration: BoxDecoration( - color: Color.alphaBlend( - Colors.black.withAlpha( - (255 * widget.colorFactor).round(), - ), - widget.color, - ), + color: shadowColor, borderRadius: widget.borderRadius, ), padding: EdgeInsets.only( @@ -173,7 +180,16 @@ class PressableButtonState extends State ? widget.buttonHeight - _tweenAnimation.value : 0, ), - child: child, + child: Container( + decoration: BoxDecoration( + borderRadius: widget.borderRadius, + ), + child: widget.builder( + context, + _depressed || _tweenAnimation.value > 0, + shadowColor, + ), + ), ), ], ), @@ -181,12 +197,6 @@ class PressableButtonState extends State ], ); }, - child: Container( - decoration: BoxDecoration( - borderRadius: widget.borderRadius, - ), - child: widget.child, - ), ), ), ); diff --git a/lib/pangea/common/widgets/share_room_button.dart b/lib/pangea/common/widgets/share_room_button.dart index 04ec59091..b698ef703 100644 --- a/lib/pangea/common/widgets/share_room_button.dart +++ b/lib/pangea/common/widgets/share_room_button.dart @@ -9,7 +9,7 @@ import 'package:universal_html/html.dart' as html; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; class ShareRoomButton extends StatelessWidget { final Room room; diff --git a/lib/pangea/common/widgets/shimmer_background.dart b/lib/pangea/common/widgets/shimmer_background.dart new file mode 100644 index 000000000..0fbc5104e --- /dev/null +++ b/lib/pangea/common/widgets/shimmer_background.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; + +import 'package:shimmer/shimmer.dart'; + +import 'package:fluffychat/config/app_config.dart'; + +class ShimmerBackground extends StatelessWidget { + final Widget child; + final Color shimmerColor; + final Color? baseColor; + final bool enabled; + + const ShimmerBackground({ + super.key, + required this.child, + this.shimmerColor = AppConfig.goldLight, + this.baseColor, + this.enabled = true, + }); + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + child, + if (enabled) + Positioned.fill( + child: IgnorePointer( + child: ClipRRect( + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + child: Shimmer.fromColors( + baseColor: baseColor ?? shimmerColor.withValues(alpha: 0.1), + highlightColor: shimmerColor.withValues(alpha: 0.6), + direction: ShimmerDirection.ltr, + child: Container( + decoration: BoxDecoration( + color: shimmerColor.withValues(alpha: 0.3), + borderRadius: + BorderRadius.circular(AppConfig.borderRadius), + ), + ), + ), + ), + ), + ), + ], + ); + } +} diff --git a/lib/pangea/toolbar/utils/shrinkable_text.dart b/lib/pangea/common/widgets/shrinkable_text.dart similarity index 100% rename from lib/pangea/toolbar/utils/shrinkable_text.dart rename to lib/pangea/common/widgets/shrinkable_text.dart diff --git a/lib/pangea/common/widgets/transparent_backdrop.dart b/lib/pangea/common/widgets/transparent_backdrop.dart index 2c9b22a80..7103d1e0e 100644 --- a/lib/pangea/common/widgets/transparent_backdrop.dart +++ b/lib/pangea/common/widgets/transparent_backdrop.dart @@ -2,74 +2,45 @@ import 'dart:ui'; import 'package:flutter/material.dart'; -import 'package:fluffychat/config/app_config.dart'; -import '../../../config/themes.dart'; import '../../../widgets/matrix.dart'; -class TransparentBackdrop extends StatefulWidget { +class TransparentBackdrop extends StatelessWidget { final Color? backgroundColor; final VoidCallback? onDismiss; final bool blurBackground; + /// New + final bool animateBackground; + final Duration backgroundAnimationDuration; + const TransparentBackdrop({ super.key, this.onDismiss, this.backgroundColor, this.blurBackground = false, + this.animateBackground = false, + this.backgroundAnimationDuration = const Duration(milliseconds: 200), }); - @override - TransparentBackdropState createState() => TransparentBackdropState(); -} - -class TransparentBackdropState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _opacityTween; - late Animation _blurTween; - - @override - void initState() { - super.initState(); - _controller = AnimationController( - duration: - const Duration(milliseconds: AppConfig.overlayAnimationDuration), - vsync: this, - ); - _opacityTween = Tween(begin: 0.0, end: 0.8).animate( - CurvedAnimation( - parent: _controller, - curve: FluffyThemes.animationCurve, - ), - ); - _blurTween = Tween(begin: 0.0, end: 3.0).animate( - CurvedAnimation( - parent: _controller, - curve: FluffyThemes.animationCurve, - ), - ); - - Future.delayed(const Duration(milliseconds: 100), () { - if (mounted) _controller.forward(); - }); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - @override Widget build(BuildContext context) { - return AnimatedBuilder( - animation: _opacityTween, - builder: (context, _) { + final Color targetColor = + backgroundColor?.withAlpha((0.8 * 255).round()) ?? Colors.transparent; + + return TweenAnimationBuilder( + tween: Tween( + begin: animateBackground ? 0.0 : 1.0, + end: 1.0, + ), + duration: animateBackground ? backgroundAnimationDuration : Duration.zero, + builder: (context, t, child) { return Material( borderOnForeground: false, - color: widget.backgroundColor - ?.withAlpha((_opacityTween.value * 255).round()) ?? - Colors.transparent, + color: Color.lerp( + Colors.transparent, + targetColor, + t, + ), clipBehavior: Clip.antiAlias, child: InkWell( hoverColor: Colors.transparent, @@ -77,28 +48,15 @@ class TransparentBackdropState extends State focusColor: Colors.transparent, highlightColor: Colors.transparent, onTap: () { - if (widget.onDismiss != null) { - widget.onDismiss!(); - } + onDismiss?.call(); MatrixState.pAnyState.closeOverlay(); }, - child: AnimatedBuilder( - animation: _blurTween, - builder: (context, _) { - return BackdropFilter( - filter: widget.blurBackground - ? ImageFilter.blur( - sigmaX: _blurTween.value, - sigmaY: _blurTween.value, - ) - : ImageFilter.blur(sigmaX: 0, sigmaY: 0), - child: Container( - height: double.infinity, - width: double.infinity, - color: Colors.transparent, - ), - ); - }, + child: BackdropFilter( + filter: ImageFilter.blur( + sigmaX: blurBackground ? 3.0 * t : 0, + sigmaY: blurBackground ? 3.0 * t : 0, + ), + child: const SizedBox.expand(), ), ), ); diff --git a/lib/pangea/common/widgets/tutorial_overlay_message.dart b/lib/pangea/common/widgets/tutorial_overlay_message.dart new file mode 100644 index 000000000..8cb544401 --- /dev/null +++ b/lib/pangea/common/widgets/tutorial_overlay_message.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; + +class TutorialOverlayMessage extends StatelessWidget { + final String message; + + const TutorialOverlayMessage( + this.message, { + super.key, + }); + + @override + Widget build(BuildContext context) { + return Center( + child: Container( + padding: const EdgeInsets.all(16.0), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.onSurface, + borderRadius: BorderRadius.circular(12.0), + ), + width: 200, + alignment: Alignment.center, + child: RichText( + text: TextSpan( + style: TextStyle( + color: Theme.of(context).colorScheme.surface, + ), + children: [ + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: Icon( + Icons.info_outlined, + size: 16.0, + color: Theme.of(context).colorScheme.surface, + ), + ), + const WidgetSpan(child: SizedBox(width: 4.0)), + TextSpan( + text: message, + ), + ], + ), + textAlign: TextAlign.center, + ), + ), + ); + } +} diff --git a/lib/pangea/common/widgets/url_image_widget.dart b/lib/pangea/common/widgets/url_image_widget.dart index ea3b6eef9..23874ab36 100644 --- a/lib/pangea/common/widgets/url_image_widget.dart +++ b/lib/pangea/common/widgets/url_image_widget.dart @@ -6,6 +6,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:cached_network_image_platform_interface/cached_network_image_platform_interface.dart'; import 'package:shimmer/shimmer.dart'; +import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/mxc_image.dart'; @@ -29,6 +30,12 @@ class ImageByUrl extends StatelessWidget { return replacement ?? const SizedBox(); } + final Map headers = {}; + if (imageUrl.toString().contains(Environment.cmsApi)) { + headers['Authorization'] = + 'Bearer ${MatrixState.pangeaController.userController.accessToken}'; + } + return SizedBox( width: width, height: width, @@ -70,10 +77,7 @@ class ImageByUrl extends StatelessWidget { error, ) => replacement ?? const SizedBox(), - httpHeaders: { - 'Authorization': - 'Bearer ${MatrixState.pangeaController.userController.accessToken}', - }, + httpHeaders: headers, imageRenderMethodForWeb: ImageRenderMethodForWeb.HttpGet, ), ), diff --git a/lib/pangea/toolbar/widgets/practice_activity/word_audio_button.dart b/lib/pangea/common/widgets/word_audio_button.dart similarity index 98% rename from lib/pangea/toolbar/widgets/practice_activity/word_audio_button.dart rename to lib/pangea/common/widgets/word_audio_button.dart index cac792e8c..385290e38 100644 --- a/lib/pangea/toolbar/widgets/practice_activity/word_audio_button.dart +++ b/lib/pangea/common/widgets/word_audio_button.dart @@ -3,7 +3,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/widgets/matrix.dart'; class WordAudioButton extends StatefulWidget { diff --git a/lib/pangea/constructs/construct_identifier.dart b/lib/pangea/constructs/construct_identifier.dart index d6f108e27..ffc7136bb 100644 --- a/lib/pangea/constructs/construct_identifier.dart +++ b/lib/pangea/constructs/construct_identifier.dart @@ -1,30 +1,23 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; +import 'package:async/async.dart'; import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart' hide Result; import 'package:sentry_flutter/sentry_flutter.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/construct_use_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_type_enum.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; +import 'package:fluffychat/pangea/analytics_misc/user_lemma_info_extension.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/emojis/emoji_stack.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_repo.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_request.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; import 'package:fluffychat/pangea/lemmas/user_set_lemma_info.dart'; -import 'package:fluffychat/pangea/message_token_text/token_practice_button.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; -import 'package:fluffychat/pangea/morphs/morph_icon.dart'; import 'package:fluffychat/pangea/morphs/parts_of_speech_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; class ConstructIdentifier { @@ -143,238 +136,58 @@ class ConstructIdentifier { ); } - String get partialKey => "$lemma-${type.string}"; + bool get isContentWord => + PartOfSpeechEnum.fromString(category)?.isContentWord ?? false; - ConstructUses get constructUses => - MatrixState.pangeaController.getAnalytics.constructListModel - .getConstructUses( - this, - ) ?? - ConstructUses( - lemma: lemma, - constructType: ConstructTypeEnum.morph, - category: category, - uses: [], - ); - - List get userSetEmoji => userLemmaInfo?.emojis ?? []; - - String? get userSetMeaning => userLemmaInfo?.meaning; - - UserSetLemmaInfo? get userLemmaInfo { - switch (type) { - case ConstructTypeEnum.vocab: - return MatrixState.pangeaController.matrixState.client - .analyticsRoomLocal() - ?.getUserSetLemmaInfo(this); - case ConstructTypeEnum.morph: - debugger(when: kDebugMode); - ErrorHandler.logError( - e: Exception("Morphs should not have userSetEmoji"), - data: toJson(), - ); - return null; - } - } - - /// Sets emoji and awards XP if it's a NEW emoji selection or from game - Future setEmojiWithXP({ - required String emoji, - bool isFromCorrectAnswer = false, - String? eventId, - String? roomId, - }) async { - final hadEmojiPreviously = userSetEmoji.isNotEmpty; - //correct answers already award xp so we don't here, but we do still need to set the emoji if it isn't already set - final shouldAwardXP = !hadEmojiPreviously && !isFromCorrectAnswer; - - //Set emoji representation - await setUserLemmaInfo(UserSetLemmaInfo(emojis: [emoji])); - - if (shouldAwardXP) { - await _recordEmojiAnalytics( - eventId: eventId, - roomId: roomId, - ); - } - } - - Future _recordEmojiAnalytics({ - String? eventId, - String? roomId, - }) async { - const useType = ConstructUseTypeEnum.em; - - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - eventId: eventId, - roomId: roomId, - constructs: [ - OneConstructUse( - useType: useType, - lemma: lemma, - constructType: type, - metadata: ConstructUseMetaData( - roomId: roomId, - timeStamp: DateTime.now(), - eventId: eventId, - ), - category: category, - form: lemma, - xp: useType.pointValue, - ), - ], - ), - ); - } - - Future setUserLemmaInfo(UserSetLemmaInfo newLemmaInfo) async { - final client = MatrixState.pangeaController.matrixState.client; - final l2 = MatrixState.pangeaController.languageController.userL2; - if (l2 == null) return; - - final analyticsRoom = await client.getMyAnalyticsRoom(l2); - if (analyticsRoom == null) return; - if (userLemmaInfo == newLemmaInfo) return; - - try { - await analyticsRoom.setUserSetLemmaInfo(this, newLemmaInfo); - } catch (err, s) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - data: newLemmaInfo.toJson(), - s: s, - ); - } - } - - LemmaInfoRequest get _lemmaInfoRequest => LemmaInfoRequest( + LemmaInfoRequest lemmaInfoRequest(Map messageInfo) => + LemmaInfoRequest( partOfSpeech: category, - lemmaLang: MatrixState - .pangeaController.languageController.userL2?.langCodeShort ?? - LanguageKeys.defaultLanguage, - userL1: MatrixState - .pangeaController.languageController.userL1?.langCodeShort ?? - LanguageKeys.defaultLanguage, + lemmaLang: + MatrixState.pangeaController.userController.userL2?.langCodeShort ?? + LanguageKeys.defaultLanguage, + userL1: + MatrixState.pangeaController.userController.userL1?.langCodeShort ?? + LanguageKeys.defaultLanguage, lemma: lemma, + messageInfo: messageInfo, ); /// [lemmmaLang] if not set, assumed to be userL2 - Future getLemmaInfo() => LemmaInfoRepo.get( - _lemmaInfoRequest, + Future> getLemmaInfo( + Map messageInfo, + ) => + LemmaInfoRepo.get( + MatrixState.pangeaController.userController.accessToken, + lemmaInfoRequest(messageInfo), ); - LemmaInfoResponse? getLemmaInfoCached([ - String? lemmaLang, - String? userl1, - ]) => - LemmaInfoRepo.getCached( - _lemmaInfoRequest, - ); + String? get userSetEmoji => _userLemmaInfo.emojis?.firstOrNull; - bool get isContentWord => - PartOfSpeechEnumExtensions.fromString(category)?.isContentWord ?? false; + UserSetLemmaInfo get _userLemmaInfo => + MatrixState.pangeaController.matrixState.client + .analyticsRoomLocal() + ?.getUserSetLemmaInfo(this) ?? + UserSetLemmaInfo(); - /// [form] should be passed if available and is required for morphId - bool isActivityProbablyLevelAppropriate(ActivityTypeEnum a, String? form) { - switch (a) { - case ActivityTypeEnum.wordMeaning: - final double contentModifier = isContentWord ? 0.5 : 1; - if (daysSinceLastEligibleUseForMeaning < - 3 * constructUses.points * contentModifier) { - return false; - } + String get storageKey => TupleKey(lemma, type.name, category).toString(); - return true; - case ActivityTypeEnum.emoji: - return userSetEmoji.length < maxEmojisPerLemma; - case ActivityTypeEnum.morphId: - if (form == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: Exception( - "form is null in isActivityProbablyLevelAppropriate for morphId", - ), - data: { - "activity": a, - "construct": toJson(), - }, - ); - return false; - } - final uses = constructUses.uses - .where((u) => u.form == form) - .map((u) => u.timeStamp) - .toList(); + String get compositeKey => '$lemma|${type.name}'.toLowerCase(); - if (uses.isEmpty) return true; + static ConstructIdentifier fromStorageKey(String key) { + final parts = key.split('|'); + final lemma = parts[0]; + final typeName = parts[1]; + final category = parts[2]; - final lastUsed = uses.reduce((a, b) => a.isAfter(b) ? a : b); + final type = ConstructTypeEnum.values.firstWhereOrNull( + (e) => e.name == typeName, + ) ?? + ConstructTypeEnum.vocab; - return DateTime.now().difference(lastUsed).inDays > - 1 * constructUses.points; - case ActivityTypeEnum.wordFocusListening: - final pos = PartOfSpeechEnumExtensions.fromString(lemma) ?? - PartOfSpeechEnumExtensions.fromString(category); - - if (pos == null) { - debugger(when: kDebugMode); - return false; - } - - return pos.canBeHeard; - default: - debugger(when: kDebugMode); - ErrorHandler.logError( - e: Exception( - "Activity type $a not handled in ConstructIdentifier.isActivityProbablyLevelAppropriate", - ), - data: { - "activity": a, - "construct": toJson(), - }, - ); - return false; - } - } - - /// days since last eligible use for meaning - /// this is the number of days since the last time the user used this word - /// in a way that would engage with the meaning of the word - /// importantly, this excludes emoji activities - /// we want users to be able to do an emoji activity as a ramp up to - /// a word meaning activity - int get daysSinceLastEligibleUseForMeaning { - final times = constructUses.uses - .where( - (u) => - u.useType.sentByUser || - ActivityTypeEnum.wordMeaning.associatedUseTypes - .contains(u.useType) || - ActivityTypeEnum.messageMeaning.associatedUseTypes - .contains(u.useType), - ) - .map((u) => u.timeStamp) - .toList(); - - if (times.isEmpty) return 1000; - - // return the most recent timestamp - final last = times.reduce((a, b) => a.isAfter(b) ? a : b); - - return DateTime.now().difference(last).inDays; - } - - Widget get visual { - switch (type) { - case ConstructTypeEnum.vocab: - return EmojiStack(emoji: userSetEmoji); - case ConstructTypeEnum.morph: - return MorphIcon( - morphFeature: MorphFeaturesEnumExtension.fromString(category), - morphTag: lemma, - ); - } + return ConstructIdentifier( + lemma: lemma, + type: type, + category: category, + ); } } diff --git a/lib/pangea/constructs/construct_level_enum.dart b/lib/pangea/constructs/construct_level_enum.dart index 5874b37af..1fc003cf2 100644 --- a/lib/pangea/constructs/construct_level_enum.dart +++ b/lib/pangea/constructs/construct_level_enum.dart @@ -45,7 +45,7 @@ extension ConstructLevelEnumExt on ConstructLevelEnum { } } - String get svgURL { + String get _svgURL { switch (this) { case ConstructLevelEnum.seeds: return "${AppConfig.assetsBaseURL}/${AnalyticsConstants.seedSvgFileName}"; @@ -90,7 +90,7 @@ extension ConstructLevelEnumExt on ConstructLevelEnum { } Widget icon([double? size]) => CustomizedSvg( - svgUrl: svgURL, + svgUrl: _svgURL, colorReplacements: const {}, errorIcon: Text( emoji, diff --git a/lib/pangea/course_chats/activity_template_chat_list_item.dart b/lib/pangea/course_chats/activity_template_chat_list_item.dart index 749c3d51f..6396be97f 100644 --- a/lib/pangea/course_chats/activity_template_chat_list_item.dart +++ b/lib/pangea/course_chats/activity_template_chat_list_item.dart @@ -53,22 +53,6 @@ class ActivityTemplateChatListItem extends StatelessWidget { ), ), ), - trailing: Row( - spacing: 2.0, - mainAxisSize: MainAxisSize.min, - children: [ - const Icon( - Icons.chat_bubble_outline, - size: 8.0, - ), - Text( - "${sessions.length}", - style: const TextStyle( - fontSize: 8.0, - ), - ), - ], - ), title: Row( children: [ Expanded( @@ -92,6 +76,7 @@ class ActivityTemplateChatListItem extends StatelessWidget { left: 14.0, ), child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: OpenRolesIndicator( @@ -100,16 +85,20 @@ class ActivityTemplateChatListItem extends StatelessWidget { space: space, ), ), - SizedBox( - height: 24.0, - width: 40.0, + ConstrainedBox( + constraints: const BoxConstraints( + maxHeight: 24.0, + ), child: ElevatedButton( onPressed: () => showFutureLoadingDialog( context: context, future: () => joinActivity(e), ), style: ElevatedButton.styleFrom( - padding: const EdgeInsets.all(0), + padding: const EdgeInsets.only( + left: 8.0, + right: 8.0, + ), ), child: Text( L10n.of(context).join, diff --git a/lib/pangea/course_chats/course_chats_page.dart b/lib/pangea/course_chats/course_chats_page.dart index df301536e..6945aadfe 100644 --- a/lib/pangea/course_chats/course_chats_page.dart +++ b/lib/pangea/course_chats/course_chats_page.dart @@ -10,6 +10,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat_list/chat_list.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; +import 'package:fluffychat/pangea/chat_list/widgets/public_room_bottom_sheet.dart'; import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/course_chats/course_chats_view.dart'; @@ -19,8 +20,8 @@ import 'package:fluffychat/pangea/course_plans/course_activities/activity_summar import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/public_spaces/public_room_bottom_sheet.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/navigation/navigation_util.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; @@ -390,7 +391,10 @@ class CourseChatsController extends State return; case InviteAction.block: final userId = inviteEvent?.senderId; - context.go('/rooms/settings/security/ignorelist', extra: userId); + context.go( + '/rooms/settings/security/ignorelist', + extra: userId, + ); return; } if (!mounted) return; @@ -428,7 +432,7 @@ class CourseChatsController extends State return; } - context.go('/rooms/${room.id}'); + NavigationUtil.goToSpaceRoute(room.id, [], context); } void joinChildRoom(SpaceRoomsChunk item) async { diff --git a/lib/pangea/course_chats/course_chats_view.dart b/lib/pangea/course_chats/course_chats_view.dart index 091a46fbf..ce4b41310 100644 --- a/lib/pangea/course_chats/course_chats_view.dart +++ b/lib/pangea/course_chats/course_chats_view.dart @@ -16,7 +16,7 @@ import 'package:fluffychat/pangea/course_chats/course_chats_page.dart'; import 'package:fluffychat/pangea/course_chats/course_default_chats_enum.dart'; import 'package:fluffychat/pangea/course_chats/unjoined_chat_list_item.dart'; import 'package:fluffychat/pangea/space_analytics/analytics_request_indicator.dart'; -import 'package:fluffychat/pangea/spaces/widgets/knocking_users_indicator.dart'; +import 'package:fluffychat/pangea/spaces/knocking_users_indicator.dart'; import 'package:fluffychat/utils/stream_extension.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -54,9 +54,10 @@ class CourseChatsView extends StatelessWidget { final isColumnMode = FluffyThemes.isColumnMode(context); return Padding( padding: isColumnMode - ? const EdgeInsets.symmetric( - vertical: 12.0, - horizontal: 8.0, + ? const EdgeInsets.only( + top: 12.0, + left: 8.0, + right: 8.0, ) : const EdgeInsets.all(0.0), child: ListView.builder( @@ -154,7 +155,7 @@ class CourseChatsView extends StatelessWidget { title: Text(L10n.of(context).whatNow), subtitle: Text(L10n.of(context).chooseNextActivity), trailing: const Icon(Icons.arrow_forward), - onTap: () => context.go( + onTap: () => context.pushReplacement( "/rooms/spaces/${room.id}/details?tab=course", ), ) diff --git a/lib/pangea/course_chats/course_default_chats_enum.dart b/lib/pangea/course_chats/course_default_chats_enum.dart index 7392d2e57..a8390cb58 100644 --- a/lib/pangea/course_chats/course_default_chats_enum.dart +++ b/lib/pangea/course_chats/course_default_chats_enum.dart @@ -1,5 +1,5 @@ import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; enum CourseDefaultChatsEnum { introductions, diff --git a/lib/pangea/course_creation/course_info_chip_widget.dart b/lib/pangea/course_creation/course_info_chip_widget.dart index 0f75b75af..51daf3d2b 100644 --- a/lib/pangea/course_creation/course_info_chip_widget.dart +++ b/lib/pangea/course_creation/course_info_chip_widget.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; class CourseInfoChip extends StatelessWidget { final IconData icon; diff --git a/lib/pangea/course_creation/course_invite_page.dart b/lib/pangea/course_creation/course_invite_page.dart index 3ce10702b..2af4659e8 100644 --- a/lib/pangea/course_creation/course_invite_page.dart +++ b/lib/pangea/course_creation/course_invite_page.dart @@ -75,7 +75,7 @@ class CourseInvitePageController extends State body: SafeArea( child: Center( child: Container( - padding: const EdgeInsets.all(30.0), + padding: const EdgeInsets.all(20.0), constraints: const BoxConstraints( maxWidth: 750, ), diff --git a/lib/pangea/course_creation/course_language_filter.dart b/lib/pangea/course_creation/course_language_filter.dart index 059aa3cfc..e5c45cdf5 100644 --- a/lib/pangea/course_creation/course_language_filter.dart +++ b/lib/pangea/course_creation/course_language_filter.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/course_creation/course_plan_filter_widget.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; class CourseLanguageFilter extends StatelessWidget { @@ -22,10 +22,14 @@ class CourseLanguageFilter extends StatelessWidget { onChanged: onChanged, items: MatrixState.pangeaController.pLanguageStore.unlocalizedTargetOptions, - displayname: (v) => v.getDisplayName(context) ?? v.displayName, + displayname: (v) => v.getDisplayName(context), enableSearch: true, - defaultName: L10n.of(context).targetLanguageLabel, - shortName: L10n.of(context).allLanguages, + defaultName: L10n.of(context).allLanguages, + searchMatchFn: (item, searchValue) => LanguageModel.search( + item.value, + searchValue, + context, + ), ); } } diff --git a/lib/pangea/course_creation/course_plan_filter_widget.dart b/lib/pangea/course_creation/course_plan_filter_widget.dart index a52e321a6..8f95e6779 100644 --- a/lib/pangea/course_creation/course_plan_filter_widget.dart +++ b/lib/pangea/course_creation/course_plan_filter_widget.dart @@ -10,10 +10,10 @@ class CoursePlanFilter extends StatefulWidget { final void Function(T?) onChanged; final String defaultName; - final String? shortName; final String Function(T) displayname; final bool enableSearch; + final bool Function(DropdownMenuItem, String)? searchMatchFn; const CoursePlanFilter({ super.key, @@ -23,7 +23,7 @@ class CoursePlanFilter extends StatefulWidget { required this.defaultName, required this.displayname, this.enableSearch = false, - this.shortName, + this.searchMatchFn, }); @override @@ -75,7 +75,7 @@ class CoursePlanFilterState extends State> { child: DropdownTextButton( text: item != null ? widget.displayname(item) - : widget.shortName ?? widget.defaultName, + : widget.defaultName, isSelected: item == widget.value, ), ), @@ -87,30 +87,41 @@ class CoursePlanFilterState extends State> { borderRadius: BorderRadius.circular(40), ), ), + dropdownStyleData: DropdownStyleData( + elevation: 8, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(14), + color: theme.colorScheme.surfaceContainerHigh, + ), + ), + menuItemStyleData: const MenuItemStyleData( + padding: EdgeInsets.zero, + ), dropdownSearchData: widget.enableSearch ? DropdownSearchData( searchController: _searchController, searchInnerWidgetHeight: 50, - searchInnerWidget: Padding( - padding: - const EdgeInsets.symmetric(horizontal: 14, vertical: 10), - child: TextField( - autofocus: true, - controller: _searchController, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.search), + searchInnerWidget: Material( + elevation: 4, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(14), + topRight: Radius.circular(14), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 14, + vertical: 10, + ), + child: TextField( + autofocus: true, + controller: _searchController, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.search), + ), ), ), ), - searchMatchFn: (item, searchValue) { - final displayName = (item.value != null - ? widget.displayname(item.value as T) - : widget.defaultName) - .toLowerCase(); - - final search = searchValue.toLowerCase(); - return displayName.startsWith(search); - }, + searchMatchFn: widget.searchMatchFn, ) : null, onMenuStateChange: (isOpen) { diff --git a/lib/pangea/course_creation/course_plan_tile_widget.dart b/lib/pangea/course_creation/course_plan_tile_widget.dart index 5205b9a46..af39160fe 100644 --- a/lib/pangea/course_creation/course_plan_tile_widget.dart +++ b/lib/pangea/course_creation/course_plan_tile_widget.dart @@ -6,6 +6,7 @@ import 'package:fluffychat/pangea/common/widgets/url_image_widget.dart'; import 'package:fluffychat/pangea/course_creation/course_info_chip_widget.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_model.dart'; import 'package:fluffychat/pangea/course_plans/map_clipper.dart'; +import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; class CoursePlanTile extends StatelessWidget { @@ -50,12 +51,10 @@ class CoursePlanTile extends StatelessWidget { imageUrl: course.imageUrl, borderRadius: BorderRadius.circular(0.0), width: 40.0, - replacement: Container( - width: 40.0, - height: 40.0, - decoration: BoxDecoration( - color: theme.colorScheme.secondary, - ), + replacement: Avatar( + name: course.title, + size: 40.0, + borderRadius: BorderRadius.circular(0.0), ), ), ), diff --git a/lib/pangea/course_creation/course_search_provider.dart b/lib/pangea/course_creation/course_search_provider.dart deleted file mode 100644 index fafbe59f5..000000000 --- a/lib/pangea/course_creation/course_search_provider.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/course_plans/courses/course_filter.dart'; -import 'package:fluffychat/pangea/course_plans/courses/course_plan_model.dart'; -import 'package:fluffychat/pangea/course_plans/courses/course_plans_repo.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; - -mixin CourseSearchProvider on State { - bool loading = true; - Object? error; - - Map courses = {}; - LanguageModel? targetLanguageFilter; - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback( - (_) => _loadCourses(), - ); - } - - CourseFilter get _filter { - return CourseFilter( - targetLanguage: targetLanguageFilter, - ); - } - - void setTargetLanguageFilter(LanguageModel? language, {bool reload = true}) { - if (targetLanguageFilter?.langCodeShort == language?.langCodeShort) return; - setState(() => targetLanguageFilter = language); - if (reload) _loadCourses(); - } - - Future _loadCourses() async { - try { - setState(() { - loading = true; - error = null; - }); - final resp = await CoursePlansRepo.searchByFilter(filter: _filter); - courses = resp.coursePlans; - if (courses.isEmpty) { - ErrorHandler.logError( - e: "No courses found", - data: { - 'filter': _filter.toJson(), - }, - ); - } - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - 'filter': _filter.toJson(), - }, - ); - error = e; - } finally { - if (mounted) setState(() => loading = false); - } - } -} diff --git a/lib/pangea/course_creation/selected_course_page.dart b/lib/pangea/course_creation/selected_course_page.dart index 54fd2eca4..f43fa3401 100644 --- a/lib/pangea/course_creation/selected_course_page.dart +++ b/lib/pangea/course_creation/selected_course_page.dart @@ -12,7 +12,7 @@ import 'package:fluffychat/pangea/course_plans/courses/course_plan_builder.dart' import 'package:fluffychat/pangea/course_plans/courses/course_plan_model.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/spaces/utils/client_spaces_extension.dart'; +import 'package:fluffychat/pangea/spaces/client_spaces_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; enum SelectedCourseMode { launch, addToSpace, join } @@ -143,7 +143,7 @@ class SelectedCourseController extends State } if (!mounted) return; - context.push("/rooms/spaces/${space.id}/details?tab=course"); + context.go("/rooms/spaces/${space.id}/details?tab=course"); } Future joinCourse() async { diff --git a/lib/pangea/course_creation/selected_course_view.dart b/lib/pangea/course_creation/selected_course_view.dart index 0027c3663..463ceb453 100644 --- a/lib/pangea/course_creation/selected_course_view.dart +++ b/lib/pangea/course_creation/selected_course_view.dart @@ -7,6 +7,7 @@ import 'package:fluffychat/pangea/course_creation/course_info_chip_widget.dart'; import 'package:fluffychat/pangea/course_creation/selected_course_page.dart'; import 'package:fluffychat/pangea/course_plans/map_clipper.dart'; import 'package:fluffychat/pangea/course_settings/pin_clipper.dart'; +import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; class SelectedCourseView extends StatelessWidget { @@ -81,13 +82,11 @@ class SelectedCourseView extends StatelessWidget { width: 100.0, borderRadius: BorderRadius.circular(0.0), - replacement: Container( - width: 100.0, - height: 100.0, - decoration: BoxDecoration( - color: - theme.colorScheme.secondary, - ), + replacement: Avatar( + name: displayname, + size: 100.0, + borderRadius: + BorderRadius.circular(0.0), ), ), ), diff --git a/lib/pangea/course_plans/course_activities/activity_summaries_provider.dart b/lib/pangea/course_plans/course_activities/activity_summaries_provider.dart index ccdf37414..6b87e1f75 100644 --- a/lib/pangea/course_plans/course_activities/activity_summaries_provider.dart +++ b/lib/pangea/course_plans/course_activities/activity_summaries_provider.dart @@ -186,9 +186,7 @@ mixin ActivitySummariesProvider on State { final topicId = course.topicIds[i]; final topic = course.loadedTopics[topicId]; if (topic == null) continue; - if (!topic.activityListComplete) { - return null; - } + if (!topic.activityListComplete) continue; if (!_hasCompletedTopic( userID, diff --git a/lib/pangea/course_plans/course_activities/course_activity_repo.dart b/lib/pangea/course_plans/course_activities/course_activity_repo.dart index a644afd4f..d0e6175df 100644 --- a/lib/pangea/course_plans/course_activities/course_activity_repo.dart +++ b/lib/pangea/course_plans/course_activities/course_activity_repo.dart @@ -93,7 +93,7 @@ class CourseActivityRepo { DateTime.now().difference(sentActivityFeedback) > const Duration(minutes: 15)) { _storage.remove(cacheKey); - _clearSentFeedback(cacheKey, request.l1); + _clearSentFeedback(id, request.l1); continue; } diff --git a/lib/pangea/course_plans/course_topics/course_topic_model.dart b/lib/pangea/course_plans/course_topics/course_topic_model.dart index b48c8d923..36e1404d1 100644 --- a/lib/pangea/course_plans/course_topics/course_topic_model.dart +++ b/lib/pangea/course_plans/course_topics/course_topic_model.dart @@ -90,7 +90,7 @@ class CourseTopicModel { CourseActivityRepo.getCached( TranslateActivityRequest( activityIds: activityIds, - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), ).plans; @@ -98,7 +98,7 @@ class CourseTopicModel { final resp = await CourseActivityRepo.get( TranslateActivityRequest( activityIds: activityIds, - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), uuid, ); diff --git a/lib/pangea/course_plans/courses/course_filter.dart b/lib/pangea/course_plans/courses/course_filter.dart index a43fc59d7..d34a3ce85 100644 --- a/lib/pangea/course_plans/courses/course_filter.dart +++ b/lib/pangea/course_plans/courses/course_filter.dart @@ -1,5 +1,5 @@ -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; class CourseFilter { final LanguageModel? targetLanguage; diff --git a/lib/pangea/course_plans/courses/course_plan_builder.dart b/lib/pangea/course_plans/courses/course_plan_builder.dart index 9f88c7faa..2f8733e63 100644 --- a/lib/pangea/course_plans/courses/course_plan_builder.dart +++ b/lib/pangea/course_plans/courses/course_plan_builder.dart @@ -43,9 +43,10 @@ mixin CoursePlanProvider on State { course = await CoursePlansRepo.get( GetLocalizedCoursesRequest( coursePlanIds: [courseId], - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), ); + await course!.fetchMediaUrls(); } catch (e) { courseError = e; } finally { @@ -64,11 +65,7 @@ mixin CoursePlanProvider on State { throw Exception("Course is null"); } - final courseFutures = [ - course!.fetchMediaUrls(), - course!.fetchTopics(), - ]; - await Future.wait(courseFutures); + await course!.fetchTopics(); await _loadTopicsMedia(); } catch (e) { topicError = e; diff --git a/lib/pangea/course_plans/courses/course_plan_client_extension.dart b/lib/pangea/course_plans/courses/course_plan_client_extension.dart new file mode 100644 index 000000000..f24514ebd --- /dev/null +++ b/lib/pangea/course_plans/courses/course_plan_client_extension.dart @@ -0,0 +1,10 @@ +import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart'; + +extension CoursePlanClientExtension on Client { + Room? getRoomByCourseId(String courseId) => rooms.firstWhereOrNull( + (room) => room.coursePlan?.uuid == courseId, + ); +} diff --git a/lib/pangea/course_plans/courses/course_plan_model.dart b/lib/pangea/course_plans/courses/course_plan_model.dart index 2f52a44d6..f696c3a9b 100644 --- a/lib/pangea/course_plans/courses/course_plan_model.dart +++ b/lib/pangea/course_plans/courses/course_plan_model.dart @@ -7,9 +7,9 @@ import 'package:fluffychat/pangea/course_plans/course_media/course_media_respons import 'package:fluffychat/pangea/course_plans/course_topics/course_topic_model.dart'; import 'package:fluffychat/pangea/course_plans/course_topics/course_topic_repo.dart'; import 'package:fluffychat/pangea/course_plans/course_topics/course_topic_translation_request.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Represents a course plan in the course planner response. @@ -57,7 +57,7 @@ class CoursePlanModel { return CoursePlanModel( targetLanguage: json['target_language'] as String, languageOfInstructions: json['language_of_instructions'] as String, - cefrLevel: LanguageLevelTypeEnumExtension.fromString(json['cefr_level']), + cefrLevel: LanguageLevelTypeEnum.fromString(json['cefr_level']), title: json['title'] as String, description: json['description'] as String, uuid: json['uuid'] as String, @@ -95,7 +95,7 @@ class CoursePlanModel { Map get loadedTopics => CourseTopicRepo.getCached( TranslateTopicRequest( topicIds: topicIds, - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), ).topics; @@ -106,7 +106,7 @@ class CoursePlanModel { final resp = await CourseTopicRepo.get( TranslateTopicRequest( topicIds: topicIds, - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), uuid, ); @@ -131,5 +131,5 @@ class CoursePlanModel { ? loadedTopics.values .lastWhereOrNull((topic) => topic.imageUrl != null) ?.imageUrl - : "${Environment.cmsApi}${loadedMediaUrls.mediaUrls.first}"; + : "${Environment.cmsApi}${loadedMediaUrls.mediaUrls.first.url}"; } diff --git a/lib/pangea/course_plans/courses/course_plan_room_extension.dart b/lib/pangea/course_plans/courses/course_plan_room_extension.dart index 728b0bf84..94a59ae83 100644 --- a/lib/pangea/course_plans/courses/course_plan_room_extension.dart +++ b/lib/pangea/course_plans/courses/course_plan_room_extension.dart @@ -16,7 +16,7 @@ import 'package:fluffychat/pangea/course_settings/teacher_mode_model.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/extensions/join_rule_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; extension CoursePlanRoomExtension on Room { CoursePlanEvent? get coursePlan { @@ -39,6 +39,23 @@ extension CoursePlanRoomExtension on Room { } Future addCourseToSpace(String courseId) async { + // Ensure students in course can launch activity rooms + final powerLevels = Map.from( + getState(EventTypes.RoomPowerLevels)?.content ?? {}, + ); + powerLevels['events'] ??= {}; + final events = Map.from(powerLevels['events']); + if (events["m.space.child"] != 0) { + events["m.space.child"] = 0; + powerLevels['events'] = events; + await client.setRoomStateWithKey( + id, + EventTypes.RoomPowerLevels, + '', + powerLevels, + ); + } + if (coursePlan?.uuid == courseId) return; final future = waitForRoomInSync(); await client.setRoomStateWithKey( diff --git a/lib/pangea/course_plans/courses/course_plans_repo.dart b/lib/pangea/course_plans/courses/course_plans_repo.dart index 36011076a..0106046b3 100644 --- a/lib/pangea/course_plans/courses/course_plans_repo.dart +++ b/lib/pangea/course_plans/courses/course_plans_repo.dart @@ -151,7 +151,7 @@ class CoursePlansRepo { return search( GetLocalizedCoursesRequest( coursePlanIds: result.docs, - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), ); } diff --git a/lib/pangea/course_settings/course_settings.dart b/lib/pangea/course_settings/course_settings.dart index 27422cace..5edd6122c 100644 --- a/lib/pangea/course_settings/course_settings.dart +++ b/lib/pangea/course_settings/course_settings.dart @@ -6,6 +6,7 @@ import 'package:collection/collection.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:shimmer/shimmer.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -125,149 +126,188 @@ class CourseSettings extends StatelessWidget { return Column( spacing: isColumnMode ? 40.0 : 36.0, mainAxisSize: MainAxisSize.min, - children: controller.course!.topicIds.mapIndexed((index, topicId) { - final topic = controller.course!.loadedTopics[topicId]; - if (topic == null) { - return const SizedBox(); - } + children: [ + ...controller.course!.topicIds.mapIndexed((index, topicId) { + final topic = controller.course!.loadedTopics[topicId]; + if (topic == null) { + return const SizedBox(); + } - final usersInTopic = userTopics[topicId] ?? []; - final activityError = controller.activityErrors[topicId]; + final usersInTopic = userTopics[topicId] ?? []; + final activityError = controller.activityErrors[topicId]; - final bool locked = - !teacherMode && (topicIndex == null ? false : index > topicIndex); + final bool locked = + !teacherMode && (topicIndex == null ? false : index > topicIndex); - final disabled = - locked || controller.loadingActivities || activityError != null; + final disabled = + locked || controller.loadingActivities || activityError != null; - return AbsorbPointer( - absorbing: disabled, - child: Opacity( - opacity: disabled ? 0.5 : 1.0, - child: Column( - spacing: 12.0, - mainAxisSize: MainAxisSize.min, - children: [ - LayoutBuilder( - builder: (context, constraints) { - return Row( - spacing: 8.0, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Flexible( - child: Row( - spacing: 4.0, - mainAxisSize: MainAxisSize.min, - children: [ - Stack( - children: [ - ClipPath( - clipper: PinClipper(), - child: ImageByUrl( - imageUrl: topic.imageUrl, - width: 54.0, - replacement: Container( - width: 54.0, - height: 54.0, - decoration: BoxDecoration( - color: theme.colorScheme.secondary, - ), - ), - ), - ), - if (locked) - const Positioned( - bottom: 0, - right: 0, - child: Icon(Icons.lock, size: 24.0), - ) - else if (controller.loadingActivities) - const SizedBox( - width: 54.0, - height: 54.0, - child: - CircularProgressIndicator.adaptive(), - ), - ], - ), - Flexible( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, + return AbsorbPointer( + absorbing: disabled, + child: Opacity( + opacity: disabled ? 0.5 : 1.0, + child: Column( + spacing: 12.0, + mainAxisSize: MainAxisSize.min, + children: [ + LayoutBuilder( + builder: (context, constraints) { + return Row( + spacing: 8.0, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Flexible( + child: Row( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + children: [ + Stack( children: [ - Text( - topic.title, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: titleFontSize, + ClipPath( + clipper: PinClipper(), + child: ImageByUrl( + imageUrl: topic.imageUrl, + width: 54.0, + replacement: Container( + width: 54.0, + height: 54.0, + decoration: BoxDecoration( + color: theme.colorScheme.secondary, + ), + ), ), ), - if (topic.location != null) - CourseInfoChip( - icon: Icons.location_on, - text: topic.location!, - fontSize: descFontSize, - iconSize: iconSize, - ), - if (constraints.maxWidth < 700.0) - Padding( - padding: - const EdgeInsetsGeometry.symmetric( - vertical: 4.0, - ), - child: TopicParticipantList( - room: room, - users: usersInTopic, - avatarSize: - isColumnMode ? 50.0 : 25.0, - overlap: isColumnMode ? 20.0 : 8.0, - ), + if (locked) + const Positioned( + bottom: 0, + right: 0, + child: Icon(Icons.lock, size: 24.0), ), ], ), - ), - ], - ), - ), - if (constraints.maxWidth >= 700.0) - TopicParticipantList( - room: room, - users: usersInTopic, - avatarSize: isColumnMode ? 50.0 : 25.0, - overlap: isColumnMode ? 20.0 : 8.0, - ), - ], - ); - }, - ), - if (!locked) - controller.loadingActivities - ? const Center( - child: CircularProgressIndicator.adaptive(), - ) - : activityError != null - ? ErrorIndicator( - message: L10n.of(context).oopsSomethingWentWrong, - ) - : topic.loadedActivities.isNotEmpty - ? SizedBox( - height: isColumnMode ? 290.0 : 210.0, - child: TopicActivitiesList( - room: room, - activities: topic.loadedActivities, - loading: controller.loadingCourseSummary, - hasCompletedActivity: - controller.hasCompletedActivity, + Flexible( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + topic.title, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: titleFontSize, + ), + ), + if (topic.location != null) + CourseInfoChip( + icon: Icons.location_on, + text: topic.location!, + fontSize: descFontSize, + iconSize: iconSize, + ), + if (constraints.maxWidth < 700.0) + Padding( + padding: const EdgeInsetsGeometry + .symmetric( + vertical: 4.0, + ), + child: TopicParticipantList( + room: room, + users: usersInTopic, + avatarSize: + isColumnMode ? 50.0 : 25.0, + overlap: isColumnMode ? 20.0 : 8.0, + ), + ), + ], ), - ) - : const SizedBox(), - ], + ), + ], + ), + ), + if (constraints.maxWidth >= 700.0) + TopicParticipantList( + room: room, + users: usersInTopic, + avatarSize: isColumnMode ? 50.0 : 25.0, + overlap: isColumnMode ? 20.0 : 8.0, + ), + ], + ); + }, + ), + if (!locked) + controller.loadingActivities + ? ActivityCardPlaceholder( + activityCount: topic.activityIds.length, + ) + : activityError != null + ? ErrorIndicator( + message: + L10n.of(context).oopsSomethingWentWrong, + ) + : topic.loadedActivities.isNotEmpty + ? SizedBox( + height: isColumnMode ? 290.0 : 210.0, + child: TopicActivitiesList( + room: room, + activities: topic.loadedActivities, + loading: controller.loadingCourseSummary, + hasCompletedActivity: + controller.hasCompletedActivity, + ), + ) + : const SizedBox(), + ], + ), ), - ), - ); - }).toList(), + ); + }), + const SizedBox(height: 16.0), + ], + ); + } +} + +class ActivityCardPlaceholder extends StatelessWidget { + final int activityCount; + + const ActivityCardPlaceholder({ + super.key, + required this.activityCount, + }); + + @override + Widget build(BuildContext context) { + final int shimmerCount = activityCount; + final theme = Theme.of(context); + final isColumnMode = FluffyThemes.isColumnMode(context); + + return SizedBox( + height: isColumnMode ? 290.0 : 210.0, + child: ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: shimmerCount, + itemBuilder: (context, index) { + return Padding( + padding: const EdgeInsets.only(right: 24.0), + child: Shimmer.fromColors( + baseColor: theme.colorScheme.primary.withAlpha(20), + highlightColor: theme.colorScheme.primary.withAlpha(50), + child: Container( + width: isColumnMode ? 160.0 : 120.0, + height: isColumnMode ? 280.0 : 200.0, + decoration: BoxDecoration( + color: theme.colorScheme.surfaceContainer, + borderRadius: BorderRadius.circular(12.0), + ), + ), + ), + ); + }, + ), ); } } @@ -326,7 +366,9 @@ class TopicActivitiesListState extends State { final activity = activityEntry.value; return Padding( - padding: const EdgeInsets.only(right: 24.0), + padding: index != (activityEntries.length - 1) + ? const EdgeInsets.only(right: 24.0) + : EdgeInsets.zero, child: MouseRegion( cursor: SystemMouseCursors.click, child: GestureDetector( diff --git a/lib/pangea/course_settings/topic_participant_list.dart b/lib/pangea/course_settings/topic_participant_list.dart index 9ba87f871..e0bee5c2a 100644 --- a/lib/pangea/course_settings/topic_participant_list.dart +++ b/lib/pangea/course_settings/topic_participant_list.dart @@ -6,7 +6,7 @@ import 'package:collection/collection.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/spaces/utils/load_participants_util.dart'; +import 'package:fluffychat/pangea/spaces/load_participants_builder.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart'; diff --git a/lib/pangea/emojis/emoji_stack.dart b/lib/pangea/emojis/emoji_stack.dart deleted file mode 100644 index 962229f4b..000000000 --- a/lib/pangea/emojis/emoji_stack.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -class EmojiStack extends StatelessWidget { - const EmojiStack({ - super.key, - required List emoji, - this.style, - }) : _emoji = emoji; - - final List _emoji; - final TextStyle? style; - - @override - Widget build(BuildContext context) { - // return Text( - // _emoji.first, - // style: style, - // ); - return Text( - _emoji.join(''), - style: style, - ); - // return Stack( - // children: [ - // for (final emoji in _emoji) - // Positioned( - // left: _emoji.indexOf(emoji) * style!.fontSize! * 0.5, - // child: Text( - // emoji, - // style: style, - // ), - // ), - // ], - // ); - } -} diff --git a/lib/pangea/events/constants/pangea_event_types.dart b/lib/pangea/events/constants/pangea_event_types.dart index dbcc7ad7e..bf5570f52 100644 --- a/lib/pangea/events/constants/pangea_event_types.dart +++ b/lib/pangea/events/constants/pangea_event_types.dart @@ -54,4 +54,8 @@ class PangeaEventTypes { static const courseUser = "p.course_user"; static const teacherMode = "pangea.teacher_mode"; static const courseChatList = "pangea.course_chat_list"; + + static const analyticsSettings = "pangea.analytics_settings"; + + static const regenerationRequest = "pangea.regeneration_request"; } diff --git a/lib/pangea/events/controllers/message_data_controller.dart b/lib/pangea/events/controllers/message_data_controller.dart deleted file mode 100644 index 6bbcc5af2..000000000 --- a/lib/pangea/events/controllers/message_data_controller.dart +++ /dev/null @@ -1,274 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/choreographer/repo/tokens_repo.dart'; -import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/events/models/stt_translation_model.dart'; -import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; - -// TODO - make this static and take it out of the _pangeaController -// will need to pass accessToken to the requests -class MessageDataController extends BaseController { - late PangeaController _pangeaController; - - final Map> _tokensCache = {}; - final Map> _representationCache = {}; - final Map> _sttTranslationCache = {}; - late Timer _cacheTimer; - - MessageDataController(PangeaController pangeaController) { - _pangeaController = pangeaController; - _startCacheTimer(); - } - - /// Starts a timer that clears the cache every 10 minutes - void _startCacheTimer() { - _cacheTimer = Timer.periodic(const Duration(minutes: 10), (timer) { - _clearCache(); - }); - } - - /// Clears the token and representation caches - void _clearCache() { - _tokensCache.clear(); - _representationCache.clear(); - _sttTranslationCache.clear(); - debugPrint("message data cache cleared."); - } - - @override - void dispose() { - _cacheTimer.cancel(); // Cancel the timer when the controller is disposed - super.dispose(); - } - - /// get tokens from the server - /// if repEventId is not null, send the tokens to the room - Future _getTokens({ - required String? repEventId, - required TokensRequestModel req, - required Room? room, - }) async { - final TokensResponseModel res = await TokensRepo.get( - _pangeaController.userController.accessToken, - request: req, - ); - if (repEventId != null && room != null) { - room - .sendPangeaEvent( - content: PangeaMessageTokens( - tokens: res.tokens, - detections: res.detections, - ).toJson(), - parentEventId: repEventId, - type: PangeaEventTypes.tokens, - ) - .catchError( - (e) => ErrorHandler.logError( - m: "error in _getTokens.sendPangeaEvent", - e: e, - s: StackTrace.current, - data: req.toJson(), - ), - ); - } - - return res; - } - - /// get tokens from the server - /// first check if the tokens are in the cache - /// if repEventId is not null, send the tokens to the room - Future getTokens({ - required String? repEventId, - required TokensRequestModel req, - required Room? room, - }) => - _tokensCache[req.hashCode] ??= _getTokens( - repEventId: repEventId, - req: req, - room: room, - ).catchError((e, s) { - _tokensCache.remove(req.hashCode); - return Future.error(e, s); - }); - - /////// translation //////// - - /// get translation from the server - /// if in cache, return from cache - /// if not in cache, get from server - /// send the translation to the room as a representation event - Future getPangeaRepresentation({ - required FullTextTranslationRequestModel req, - required Event messageEvent, - }) async { - return _representationCache[req.hashCode] ??= - _getPangeaRepresentation(req: req, messageEvent: messageEvent); - } - - Future _getPangeaRepresentation({ - required FullTextTranslationRequestModel req, - required Event messageEvent, - }) async { - final FullTextTranslationResponseModel res = - await FullTextTranslationRepo.translate( - accessToken: _pangeaController.userController.accessToken, - request: req, - ); - - final rep = PangeaRepresentation( - langCode: req.tgtLang, - text: res.bestTranslation, - originalSent: false, - originalWritten: false, - ); - - messageEvent.room - .sendPangeaEvent( - content: rep.toJson(), - parentEventId: messageEvent.eventId, - type: PangeaEventTypes.representation, - ) - .catchError( - (e) => ErrorHandler.logError( - m: "error in _getPangeaRepresentation.sendPangeaEvent", - e: e, - s: StackTrace.current, - data: req.toJson(), - ), - ); - - return rep; - } - - Future getPangeaRepresentationEvent({ - required FullTextTranslationRequestModel req, - required PangeaMessageEvent messageEvent, - bool originalSent = false, - }) async { - final FullTextTranslationResponseModel res = - await FullTextTranslationRepo.translate( - accessToken: _pangeaController.userController.accessToken, - request: req, - ); - - if (originalSent && messageEvent.originalSent != null) { - originalSent = false; - } - - final rep = PangeaRepresentation( - langCode: req.tgtLang, - text: res.bestTranslation, - originalSent: originalSent, - originalWritten: false, - ); - - try { - final repEvent = await messageEvent.room.sendPangeaEvent( - content: rep.toJson(), - parentEventId: messageEvent.eventId, - type: PangeaEventTypes.representation, - ); - return repEvent?.eventId; - } catch (e, s) { - ErrorHandler.logError( - m: "error in _getPangeaRepresentation.sendPangeaEvent", - e: e, - s: s, - data: req.toJson(), - ); - return null; - } - } - - Future sendTokensEvent({ - required String repEventId, - required TokensRequestModel req, - required Room room, - }) async { - final TokensResponseModel res = await TokensRepo.get( - _pangeaController.userController.accessToken, - request: req, - ); - - try { - await room.sendPangeaEvent( - content: PangeaMessageTokens( - tokens: res.tokens, - detections: res.detections, - ).toJson(), - parentEventId: repEventId, - type: PangeaEventTypes.tokens, - ); - } catch (e, s) { - ErrorHandler.logError( - m: "error in _getTokens.sendPangeaEvent", - e: e, - s: s, - data: req.toJson(), - ); - } - } - - Future getSttTranslation({ - required String? repEventId, - required FullTextTranslationRequestModel req, - required Room? room, - }) => - _sttTranslationCache[req.hashCode] ??= _getSttTranslation( - repEventId: repEventId, - req: req, - room: room, - ).catchError((e, s) { - _sttTranslationCache.remove(req.hashCode); - return Future.error(e, s); - }); - - Future _getSttTranslation({ - required String? repEventId, - required FullTextTranslationRequestModel req, - required Room? room, - }) async { - final res = await FullTextTranslationRepo.translate( - accessToken: _pangeaController.userController.accessToken, - request: req, - ); - - final translation = SttTranslationModel( - translation: res.bestTranslation, - langCode: req.tgtLang, - ); - - if (repEventId != null && room != null) { - room - .sendPangeaEvent( - content: translation.toJson(), - parentEventId: repEventId, - type: PangeaEventTypes.sttTranslation, - ) - .catchError( - (e) => ErrorHandler.logError( - m: "error in _getSttTranslation.sendPangeaEvent", - e: e, - s: StackTrace.current, - data: req.toJson(), - ), - ); - } - - return translation; - } -} diff --git a/lib/pangea/events/event_wrappers/pangea_choreo_event.dart b/lib/pangea/events/event_wrappers/pangea_choreo_event.dart new file mode 100644 index 000000000..cd661c0c4 --- /dev/null +++ b/lib/pangea/events/event_wrappers/pangea_choreo_event.dart @@ -0,0 +1,40 @@ +import 'dart:developer'; + +import 'package:flutter/foundation.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import '../../choreographer/choreo_record_model.dart'; +import '../constants/pangea_event_types.dart'; + +class ChoreoEvent { + Event event; + ChoreoRecordModel? _content; + + ChoreoEvent({required this.event}) { + if (event.type != PangeaEventTypes.choreoRecord) { + throw Exception( + "${event.type} should not be used to make a ChoreoEvent", + ); + } + } + + ChoreoRecordModel? get content { + try { + _content ??= event.getPangeaContent(); + return _content; + } catch (err, s) { + debugger(when: kDebugMode); + ErrorHandler.logError( + e: err, + s: s, + data: { + "event": event.toJson(), + }, + ); + return null; + } + } +} diff --git a/lib/pangea/events/event_wrappers/pangea_message_event.dart b/lib/pangea/events/event_wrappers/pangea_message_event.dart index fd410a3ba..f1322fdf2 100644 --- a/lib/pangea/events/event_wrappers/pangea_message_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_message_event.dart @@ -4,31 +4,36 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; +import 'package:async/async.dart'; import 'package:collection/collection.dart'; -import 'package:matrix/matrix.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:matrix/matrix.dart' hide Result; -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; -import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; -import 'package:fluffychat/pangea/choreographer/repo/language_detection_repo.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_event.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/events/models/stt_translation_model.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/toolbar/enums/audio_encoding_enum.dart'; -import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; -import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; +import 'package:fluffychat/pangea/events/repo/language_detection_repo.dart'; +import 'package:fluffychat/pangea/events/repo/language_detection_request.dart'; +import 'package:fluffychat/pangea/events/repo/language_detection_response.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; +import 'package:fluffychat/pangea/speech_to_text/audio_encoding_enum.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_repo.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_request_model.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_response_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_repo.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_request_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_audio_card.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_request_model.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; import '../../../widgets/matrix.dart'; import '../../common/utils/error_handler.dart'; -import '../../learning_settings/constants/language_constants.dart'; +import '../../languages/language_constants.dart'; import '../constants/pangea_event_types.dart'; class PangeaMessageEvent { @@ -70,12 +75,10 @@ class PangeaMessageEvent { bool get isAudioMessage => _event.messageType == MessageTypes.Audio; - String? get mimetype { - if (!isAudioMessage) return null; - final Map? info = _event.content.tryGetMap("info"); - if (info == null) return null; - return info["mime_type"] ?? info["mimetype"]; - } + String? get _l2Code => MatrixState.pangeaController.userController.userL2Code; + + String? get _l1Code => + MatrixState.pangeaController.userController.userL1?.langCode; Event? _latestEditCache; Event get _latestEdit => _latestEditCache ??= _event @@ -90,133 +93,6 @@ class PangeaMessageEvent { .firstOrNull ?? _event; - void updateLatestEdit() { - _latestEditCache = null; - _representations = null; - } - - Future getMatrixAudioFile( - String langCode, - ) async { - final RepresentationEvent? rep = representationByLanguage(langCode); - - final TextToSpeechRequest params = TextToSpeechRequest( - text: rep?.content.text ?? body, - tokens: (await rep?.tokensGlobal( - senderId, - originServerTs, - )) - ?.map((t) => t.text) - .toList() ?? - [], - langCode: langCode, - userL1: l1Code ?? LanguageKeys.unknownLanguage, - userL2: l2Code ?? LanguageKeys.unknownLanguage, - ); - - final TextToSpeechResponse response = - await MatrixState.pangeaController.textToSpeech.get( - params, - ); - - final audioBytes = base64.decode(response.audioContent); - final eventIdParam = _event.eventId; - final fileName = - "audio_for_${eventIdParam}_$langCode.${response.fileExtension}"; - - final file = PangeaAudioFile( - bytes: audioBytes, - name: fileName, - mimeType: response.mimeType, - duration: response.durationMillis, - waveform: response.waveform, - tokens: response.ttsTokens, - ); - - sendAudioEvent(file, response, rep?.text ?? body, langCode); - - return file; - } - - Future sendAudioEvent( - PangeaAudioFile file, - TextToSpeechResponse response, - String text, - String langCode, - ) async { - final String? eventId = await room.sendFileEvent( - file, - inReplyTo: _event, - extraContent: { - 'info': { - ...file.info, - 'duration': response.durationMillis, - }, - 'org.matrix.msc3245.voice': {}, - 'org.matrix.msc1767.audio': { - 'duration': response.durationMillis, - 'waveform': response.waveform, - }, - ModelKey.transcription: - response.toPangeaAudioEventData(text, langCode).toJson(), - }, - ); - - debugPrint("eventId in getTextToSpeechGlobal $eventId"); - final Event? audioEvent = - eventId != null ? await room.getEventById(eventId) : null; - - if (audioEvent == null) { - return null; - } - allAudio.add(audioEvent); - return audioEvent; - } - - Event? getTextToSpeechLocal(String langCode, String text) { - return allAudio.firstWhereOrNull( - (event) { - try { - // Safely access - final dataMap = event.content.tryGetMap(ModelKey.transcription); - - if (dataMap == null) { - return false; - } - - // old text to speech content will not have TTSToken data - // we want to disregard them and just generate new ones - // for that, we'll return false if 'tokens' are null - // while in-development, we'll pause here to inspect - // debugger can be removed after we're sure it's working - if (dataMap['tokens'] == null) { - // events before today will definitely not have the tokens - debugger( - when: kDebugMode && - event.originServerTs.isAfter(DateTime(2024, 10, 16)), - ); - return false; - } - - final PangeaAudioEventData audioData = - PangeaAudioEventData.fromJson(dataMap as dynamic); - - // Check if both language code and text match - return audioData.langCode == langCode && audioData.text == text; - } catch (e, s) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: e, - s: s, - data: {}, - m: "error parsing data in getTextToSpeechLocal", - ); - return false; - } - }, - ); - } - // get audio events that are related to this event Set get allAudio => _latestEdit .aggregatedEvents( @@ -230,131 +106,42 @@ class PangeaMessageEvent { null; }).toSet(); - SpeechToTextModel? getSpeechToTextLocal() { - final rawBotTranscription = - event.content.tryGetMap(ModelKey.botTranscription); - - if (rawBotTranscription != null) { - return SpeechToTextModel.fromJson( - Map.from(rawBotTranscription), - ); - } - - return representations - .firstWhereOrNull( - (element) => element.content.speechToText != null, - ) - ?.content - .speechToText; - } - - Future getSpeechToText( - String l1Code, - String l2Code, - ) async { - if (!isAudioMessage) { - ErrorHandler.logError( - e: 'Calling getSpeechToText on non-audio message', - s: StackTrace.current, - data: { - "content": _event.content, - "eventId": _event.eventId, - "roomId": _event.roomId, - "userId": _event.room.client.userID, - "account_data": _event.room.client.accountData, + List get _repEvents => _latestEdit + .aggregatedEvents( + timeline, + PangeaEventTypes.representation, + ) + .map( + (e) => RepresentationEvent( + event: e, + parentMessageEvent: _event, + timeline: timeline, + ), + ) + .sorted( + (a, b) { + if (a.event == null) return -1; + if (b.event == null) return 1; + return b.event!.originServerTs.compareTo(a.event!.originServerTs); }, + ).toList(); + + ChoreoRecordModel? get _embeddedChoreo { + try { + if (_latestEdit.content[ModelKey.choreoRecord] == null) return null; + return ChoreoRecordModel.fromJson( + _latestEdit.content[ModelKey.choreoRecord] as Map, + originalWrittenContent, + ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: _latestEdit.content, + m: "error parsing choreoRecord", ); return null; } - - final rawBotTranscription = - event.content.tryGetMap(ModelKey.botTranscription); - if (rawBotTranscription != null) { - final botTranscription = SpeechToTextModel.fromJson( - Map.from(rawBotTranscription), - ); - - _representations ??= []; - _representations!.add( - RepresentationEvent( - timeline: timeline, - parentMessageEvent: _event, - content: PangeaRepresentation( - langCode: botTranscription.langCode, - text: botTranscription.transcript.text, - originalSent: false, - originalWritten: false, - speechToText: botTranscription, - ), - ), - ); - - return botTranscription; - } - - final SpeechToTextModel? speechToTextLocal = representations - .firstWhereOrNull( - (element) => element.content.speechToText != null, - ) - ?.content - .speechToText; - - if (speechToTextLocal != null) { - return speechToTextLocal; - } - - final matrixFile = await _event.downloadAndDecryptAttachment(); - - final SpeechToTextModel response = - await MatrixState.pangeaController.speechToText.get( - SpeechToTextRequestModel( - audioContent: matrixFile.bytes, - audioEvent: _event, - config: SpeechToTextAudioConfigModel( - encoding: mimeTypeToAudioEncoding(matrixFile.mimeType), - //this is the default in the RecordConfig in record package - //TODO: check if this is the correct value and make it a constant somewhere - sampleRateHertz: 22050, - userL1: l1Code, - userL2: l2Code, - ), - ), - ); - - _representations?.add( - RepresentationEvent( - timeline: timeline, - parentMessageEvent: _event, - content: PangeaRepresentation( - langCode: response.langCode, - text: response.transcript.text, - originalSent: false, - originalWritten: false, - speechToText: response, - ), - ), - ); - - return response; - } - - Future sttTranslationByLanguageGlobal({ - required String langCode, - required String l1Code, - required String l2Code, - }) async { - if (!representations.any( - (element) => element.content.speechToText != null, - )) { - await getSpeechToText(l1Code, l2Code); - } - - final rep = representations.firstWhereOrNull( - (element) => element.content.speechToText != null, - ); - - if (rep == null) return null; - return rep.getSttTranslation(userL1: l1Code, userL2: l2Code); } PangeaMessageTokens? _tokensSafe(Map? content) { @@ -373,72 +160,51 @@ class PangeaMessageEvent { } } - ChoreoRecord? get _embeddedChoreo { - try { - if (_latestEdit.content[ModelKey.choreoRecord] == null) return null; - return ChoreoRecord.fromJson( - _latestEdit.content[ModelKey.choreoRecord] as Map, - originalWrittenContent, - ); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: _latestEdit.content, - m: "error parsing choreoRecord", - ); - return null; - } - } - List? _representations; List get representations { if (_representations != null) return _representations!; _representations = []; - if (_latestEdit.content[ModelKey.originalSent] != null) { - try { - final RepresentationEvent sent = RepresentationEvent( - parentMessageEvent: _event, - content: PangeaRepresentation.fromJson( - _latestEdit.content[ModelKey.originalSent] as Map, - ), - tokens: _tokensSafe( - _latestEdit.content[ModelKey.tokensSent] as Map?, - ), - choreo: _embeddedChoreo, - timeline: timeline, - ); - if (_latestEdit.content[ModelKey.choreoRecord] == null) { - Sentry.addBreadcrumb( - Breadcrumb( - message: "originalSent created without _event or _choreo", - data: { - "eventId": _latestEdit.eventId, - "room": _latestEdit.room.id, - "sender": _latestEdit.senderId, - }, - ), - ); - } + try { + final tokens = _tokensSafe( + _latestEdit.content[ModelKey.tokensSent] as Map?, + ); - // If originalSent has no tokens, there is not way to generate a tokens event - // and send it as a related event, since original sent has not eventID to set - // as parentEventId. In this case, it's better to generate a new representation - // with an eventID and send the related tokens event to that representation. - // This is a rare situation, and has only been seen with some bot messages. - if (sent.tokens != null) { - _representations!.add(sent); - } - } catch (err, s) { - ErrorHandler.logError( - m: "error parsing originalSent", - e: err, - s: s, - data: { - "event": _event.toJson(), - }, + // If originalSent has no tokens, there is not way to generate a tokens event + // and send it as a related event, since original sent has not eventID to set + // as parentEventId. In this case, it's better to generate a new representation + // with an eventID and send the related tokens event to that representation. + // This is a rare situation, and has only been seen with some bot messages. + if (tokens != null) { + final lang = tokens.detections?.isNotEmpty == true + ? tokens.detections!.first.langCode + : null; + + final original = PangeaRepresentation( + langCode: lang ?? LanguageKeys.unknownLanguage, + text: _event.body, + originalSent: true, + originalWritten: false, + ); + + _representations!.add( + RepresentationEvent( + parentMessageEvent: _event, + content: original, + tokens: tokens, + choreo: _embeddedChoreo, + timeline: timeline, + ), ); } + } catch (err, s) { + ErrorHandler.logError( + m: "error parsing originalSent", + e: err, + s: s, + data: { + "event": _event.toJson(), + }, + ); } if (_latestEdit.content[ModelKey.originalWritten] != null) { @@ -469,130 +235,10 @@ class PangeaMessageEvent { } } - _representations!.addAll( - _latestEdit - .aggregatedEvents( - timeline, - PangeaEventTypes.representation, - ) - .map( - (e) => RepresentationEvent( - event: e, - parentMessageEvent: _event, - timeline: timeline, - ), - ) - .sorted( - (a, b) { - //TODO - test with edited events to make sure this is working - if (a.event == null) return -1; - if (b.event == null) return 1; - return b.event!.originServerTs.compareTo(a.event!.originServerTs); - }, - ).toList(), - ); - + _representations!.addAll(_repEvents); return _representations!; } - RepresentationEvent? representationByLanguage( - String langCode, { - bool Function(RepresentationEvent)? filter, - }) => - representations.firstWhereOrNull( - (element) => - element.langCode.split("-")[0] == langCode.split("-")[0] && - (filter?.call(element) ?? true), - ); - - Future representationByDetectedLanguage() async { - LanguageDetectionResponse? resp; - try { - resp = await LanguageDetectionRepo.get( - MatrixState.pangeaController.userController.accessToken, - request: LanguageDetectionRequest( - text: _latestEdit.body, - senderl1: l1Code, - senderl2: l2Code, - ), - ); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "event": _event.toJson(), - }, - ); - return null; - } - - final langCode = resp.detections.firstOrNull?.langCode; - if (langCode == null) return null; - if (langCode == originalSent?.langCode) { - return originalSent?.event?.eventId; - } - - // clear representations cache so the new representation event can be added when next requested - _representations = null; - - return MatrixState.pangeaController.messageData - .getPangeaRepresentationEvent( - req: FullTextTranslationRequestModel( - text: originalSent?.content.text ?? _latestEdit.body, - srcLang: originalSent?.langCode, - tgtLang: langCode, - userL2: l2Code ?? LanguageKeys.unknownLanguage, - userL1: l1Code ?? LanguageKeys.unknownLanguage, - ), - messageEvent: this, - originalSent: true, - ); - } - - Future l1Respresentation() async { - if (l1Code == null || l2Code == null) { - throw Exception("Missing language codes"); - } - - final includedIT = - (originalSent?.choreo?.endedWithIT(originalSent!.text) ?? false) && - !(originalSent?.choreo?.includedIGC ?? true); - - RepresentationEvent? rep; - if (!includedIT) { - // if the message didn't go through translation, get any l1 rep - rep = representationByLanguage(l1Code!); - } else { - // if the message went through translation, get the non-original - // l1 rep since originalWritten could contain some l2 words - // (https://github.com/pangeachat/client/issues/3591) - rep = representationByLanguage( - l1Code!, - filter: (rep) => !rep.content.originalWritten, - ); - } - - if (rep != null) return rep.content; - - final String srcLang = includedIT - ? (originalWritten?.langCode ?? l1Code!) - : (originalSent?.langCode ?? l2Code!); - - // clear representations cache so the new representation event can be added when next requested - _representations = null; - return MatrixState.pangeaController.messageData.getPangeaRepresentation( - req: FullTextTranslationRequestModel( - text: includedIT ? originalWrittenContent : messageDisplayText, - srcLang: srcLang, - tgtLang: l1Code!, - userL2: l2Code!, - userL1: l1Code!, - ), - messageEvent: _event, - ); - } - RepresentationEvent? get originalSent => representations .firstWhereOrNull((element) => element.content.originalSent); @@ -610,17 +256,6 @@ class PangeaMessageEvent { return written ?? body; } - String? get l2Code => - MatrixState.pangeaController.languageController.activeL2Code(); - - String? get l1Code => - MatrixState.pangeaController.languageController.userL1?.langCode; - - /// Should almost always be true. Useful in the case that the message - /// display rep has the langCode "unk" - bool get messageDisplayLangIsL2 => - messageDisplayLangCode.split("-")[0] == l2Code?.split("-")[0]; - String get messageDisplayLangCode { if (isAudioMessage) { final stt = getSpeechToTextLocal(); @@ -628,13 +263,12 @@ class PangeaMessageEvent { return stt.langCode; } - final bool immersionMode = MatrixState - .pangeaController.permissionsController - .isToolEnabled(ToolSetting.immersionMode, room); + final bool immersionMode = MatrixState.pangeaController.userController + .isToolEnabled(ToolSetting.immersionMode); final String? originalLangCode = originalSent?.langCode; - final String? langCode = immersionMode ? l2Code : originalLangCode; + final String? langCode = immersionMode ? _l2Code : originalLangCode; return langCode ?? LanguageKeys.unknownLanguage; } @@ -646,69 +280,390 @@ class PangeaMessageEvent { /// it returns the message body. String get messageDisplayText => messageDisplayRepresentation?.text ?? body; - /// Returns a list of all [PracticeActivityEvent] objects - /// associated with this message event. - List get _practiceActivityEvents { - final List events = _latestEdit - .aggregatedEvents( - timeline, - PangeaEventTypes.pangeaActivity, - ) - .where((event) => !event.redacted) - .toList(); + TextDirection get textDirection => + LanguageConstants.rtlLanguageCodes.contains(messageDisplayLangCode) + ? TextDirection.rtl + : TextDirection.ltr; - final List practiceEvents = []; - for (final event in events) { - try { - practiceEvents.add( - PracticeActivityEvent( - timeline: timeline, - event: event, - ), - ); - } catch (e, s) { - ErrorHandler.logError(e: e, s: s, data: event.toJson()); - } - } - return practiceEvents; + void updateLatestEdit() { + _latestEditCache = null; + _representations = null; } - /// Returns a list of [PracticeActivityEvent] objects for the given [langCode]. - List practiceActivitiesByLangCode( + RepresentationEvent? representationByLanguage( String langCode, { - bool debug = false, + bool Function(RepresentationEvent)? filter, }) => - _practiceActivityEvents - .where( - (event) => - event.practiceActivity.langCode.split("-")[0] == - langCode.split("")[0], - ) - .toList(); + representations.firstWhereOrNull( + (element) => + element.langCode.split("-")[0] == langCode.split("-")[0] && + (filter?.call(element) ?? true), + ); - /// Returns a list of [PracticeActivityEvent] for the user's active l2. - List get practiceActivities => - l2Code == null ? [] : practiceActivitiesByLangCode(l2Code!); + Event? getTextToSpeechLocal(String langCode, String text) { + for (final audio in allAudio) { + final dataMap = audio.content.tryGetMap(ModelKey.transcription); + if (dataMap == null || !dataMap.containsKey(ModelKey.tokens)) continue; - bool shouldDoActivity({ - required PangeaToken? token, - required ActivityTypeEnum a, - required MorphFeaturesEnum? feature, - required String? tag, - }) { - if (!messageDisplayLangIsL2 || token == null) { - return false; + try { + final PangeaAudioEventData audioData = PangeaAudioEventData.fromJson( + dataMap as dynamic, + ); + + if (audioData.langCode == langCode && audioData.text == text) { + return audio; + } + } catch (e, s) { + debugger(when: kDebugMode); + ErrorHandler.logError( + e: e, + s: s, + data: { + "event": audio.toJson(), + }, + m: "error parsing data in getTextToSpeechLocal", + ); + } + } + return null; + } + + RepresentationEvent? _getSpeechToTextRepresentation() => + representations.firstWhereOrNull( + (element) => element.content.speechToText != null, + ); + + SpeechToTextResponseModel? getSpeechToTextLocal() { + final rep = _getSpeechToTextRepresentation()?.content.speechToText; + if (rep != null) return rep; + + final rawBotTranscription = + event.content.tryGetMap(ModelKey.botTranscription); + + if (rawBotTranscription != null) { + try { + return SpeechToTextResponseModel.fromJson( + Map.from(rawBotTranscription), + ); + } catch (err, s) { + ErrorHandler.logError( + e: err, + s: s, + data: { + "event": _event.toJson(), + }, + m: "error parsing botTranscription", + ); + return null; + } } - return token.shouldDoActivity( - a: a, - feature: feature, - tag: tag, + return null; + } + + Future requestTextToSpeech( + String langCode, + String? voice, + ) async { + final local = getTextToSpeechLocal(langCode, messageDisplayText); + if (local != null) { + final file = await local.getPangeaAudioFile(); + if (file != null) return file; + } + + final rep = representationByLanguage(langCode); + final tokensResp = await rep?.requestTokens(); + final request = TextToSpeechRequestModel( + text: rep?.content.text ?? body, + tokens: tokensResp?.result?.map((t) => t.text).toList() ?? [], + langCode: langCode, + userL1: _l1Code ?? LanguageKeys.unknownLanguage, + userL2: _l2Code ?? LanguageKeys.unknownLanguage, + voice: voice, + ); + + final result = await TextToSpeechRepo.get( + MatrixState.pangeaController.userController.accessToken, + request, + ); + + if (result.error != null) { + throw Exception( + "Error getting text to speech: ${result.error}", + ); + } + + final response = result.result!; + final audioBytes = base64.decode(response.audioContent); + final fileName = + "audio_for_${_event.eventId}_$langCode.${response.fileExtension}"; + + final file = PangeaAudioFile( + bytes: audioBytes, + name: fileName, + mimeType: response.mimeType, + duration: response.durationMillis, + waveform: response.waveform, + tokens: response.ttsTokens, + ); + + room.sendFileEvent( + file, + inReplyTo: _event, + extraContent: { + 'info': { + ...file.info, + ModelKey.duration: response.durationMillis, + }, + 'org.matrix.msc3245.voice': {}, + 'org.matrix.msc1767.audio': { + ModelKey.duration: response.durationMillis, + 'waveform': response.waveform, + }, + ModelKey.transcription: response + .toPangeaAudioEventData(rep?.text ?? body, langCode) + .toJson(), + }, + ).then((eventId) async { + final Event? audioEvent = + eventId != null ? await room.getEventById(eventId) : null; + + if (audioEvent != null) { + allAudio.add(audioEvent); + } + }); + + return file; + } + + Future requestSpeechToText( + String l1Code, + String l2Code, { + bool sendEvent = true, + }) async { + if (!isAudioMessage) { + throw 'Calling getSpeechToText on non-audio message'; + } + + final speechToTextLocal = getSpeechToTextLocal(); + if (speechToTextLocal != null) { + return speechToTextLocal; + } + + final matrixFile = await _event.downloadAndDecryptAttachment(); + final result = await SpeechToTextRepo.get( + MatrixState.pangeaController.userController.accessToken, + SpeechToTextRequestModel( + audioContent: matrixFile.bytes, + audioEvent: _event, + config: SpeechToTextAudioConfigModel( + encoding: mimeTypeToAudioEncoding(matrixFile.mimeType), + sampleRateHertz: 22050, + userL1: l1Code, + userL2: l2Code, + ), + ), + ); + + if (result.error != null) { + throw Exception( + "Error getting speech to text: ${result.error}", + ); + } + + if (sendEvent) { + _sendSttRepresentationEvent(result.result!); + } + + return result.result!; + } + + Future _sendSttRepresentationEvent( + SpeechToTextResponseModel stt, + ) async { + final representation = PangeaRepresentation( + langCode: stt.langCode, + text: stt.transcript.text, + originalSent: false, + originalWritten: false, + speechToText: stt, + ); + + _representations = null; + return room.sendPangeaEvent( + content: representation.toJson(), + parentEventId: eventId, + type: PangeaEventTypes.representation, ); } - TextDirection get textDirection => - PLanguageStore.rtlLanguageCodes.contains(messageDisplayLangCode) - ? TextDirection.rtl - : TextDirection.ltr; + Future requestSttTranslation({ + required String langCode, + required String l1Code, + required String l2Code, + }) async { + // First try to access the local translation event via a representation event + RepresentationEvent? rep = _getSpeechToTextRepresentation(); + final local = rep?.getSpeechToTextTranslationLocal(langCode); + if (local != null) return local.translation; + + // The translation event needs a parent representation to relate to, + // so if the rep is null, we send a new representation event first. + // This happens mostly for bot audio messages, which store their transcripts + // in the original message event content. + SpeechToTextResponseModel? stt = rep?.content.speechToText; + if (rep == null) { + stt ??= await requestSpeechToText(l1Code, l2Code, sendEvent: false); + final repEvent = await _sendSttRepresentationEvent(stt); + if (repEvent == null) { + throw Exception("Failed to send representation event for STT"); + } + + rep = _getSpeechToTextRepresentation(); + if (rep == null) { + throw Exception("Failed to get representation event for STT"); + } + } + + // Make the translation request + final res = await FullTextTranslationRepo.get( + MatrixState.pangeaController.userController.accessToken, + FullTextTranslationRequestModel( + text: stt!.transcript.text, + tgtLang: l1Code, + userL2: l2Code, + userL1: l1Code, + ), + ); + if (res.isError) { + throw res.error!; + } + + final translation = SttTranslationModel( + translation: res.result!, + langCode: l1Code, + ); + + // Send the translation event if the representation event exists + rep.event?.room.sendPangeaEvent( + content: translation.toJson(), + parentEventId: rep.event!.eventId, + type: PangeaEventTypes.sttTranslation, + ); + + return translation.translation; + } + + Future requestRepresentationByDetectedLanguage() async { + LanguageDetectionResponse? resp; + final result = await LanguageDetectionRepo.get( + MatrixState.pangeaController.userController.accessToken, + LanguageDetectionRequest( + text: _latestEdit.body, + senderl1: _l1Code, + senderl2: _l2Code, + ), + ); + + if (result.isError) return null; + resp = result.result!; + + final langCode = resp.detections.firstOrNull?.langCode; + if (langCode == null) return null; + if (langCode == originalSent?.langCode) { + return originalSent?.event?.eventId; + } + + final res = await _requestRepresentation( + originalSent?.content.text ?? _latestEdit.body, + langCode, + originalSent?.langCode ?? LanguageKeys.unknownLanguage, + originalSent: originalSent == null, + ); + + if (res.isError) return null; + return _sendRepresentationEvent(res.result!); + } + + Future requestRespresentationByL1() async { + if (_l1Code == null || _l2Code == null) { + throw Exception("Missing language codes"); + } + + final includedIT = + (originalSent?.choreo?.endedWithIT(originalSent!.text) ?? false) && + !(originalSent?.choreo?.includedIGC ?? true); + + RepresentationEvent? rep; + if (!includedIT) { + // if the message didn't go through translation, get any l1 rep + rep = representationByLanguage(_l1Code!); + } else { + // if the message went through translation, get the non-original + // l1 rep since originalWritten could contain some l2 words + // (https://github.com/pangeachat/client/issues/3591) + rep = representationByLanguage( + _l1Code!, + filter: (rep) => !rep.content.originalWritten, + ); + } + + if (rep != null) return rep.content.text; + + final String srcLang = includedIT + ? (originalWritten?.langCode ?? _l1Code!) + : (originalSent?.langCode ?? _l2Code!); + + final resp = await _requestRepresentation( + includedIT ? originalWrittenContent : messageDisplayText, + _l1Code!, + srcLang, + ); + + if (resp.isError) throw resp.error!; + _sendRepresentationEvent(resp.result!); + return resp.result!.text; + } + + Future> _requestRepresentation( + String text, + String targetLang, + String sourceLang, { + bool originalSent = false, + }) async { + _representations = null; + + final res = await FullTextTranslationRepo.get( + MatrixState.pangeaController.userController.accessToken, + FullTextTranslationRequestModel( + text: text, + srcLang: sourceLang, + tgtLang: targetLang, + userL2: _l2Code ?? LanguageKeys.unknownLanguage, + userL1: _l1Code ?? LanguageKeys.unknownLanguage, + ), + ); + + return res.isError + ? Result.error(res.error!) + : Result.value( + PangeaRepresentation( + langCode: targetLang, + text: res.result!, + originalSent: originalSent, + originalWritten: false, + ), + ); + } + + Future _sendRepresentationEvent( + PangeaRepresentation representation, + ) async { + final repEvent = await room.sendPangeaEvent( + content: representation.toJson(), + parentEventId: eventId, + type: PangeaEventTypes.representation, + ); + return repEvent?.eventId; + } } diff --git a/lib/pangea/events/event_wrappers/pangea_representation_event.dart b/lib/pangea/events/event_wrappers/pangea_representation_event.dart index 741c60920..0dac12547 100644 --- a/lib/pangea/events/event_wrappers/pangea_representation_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_representation_event.dart @@ -4,35 +4,34 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; +import 'package:async/async.dart'; import 'package:collection/collection.dart'; -import 'package:matrix/matrix.dart'; -import 'package:matrix/src/utils/markdown.dart'; +import 'package:matrix/matrix.dart' hide Result; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/choreographer/event_wrappers/pangea_choreo_event.dart'; -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; -import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; -import 'package:fluffychat/pangea/choreographer/repo/full_text_translation_repo.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_choreo_event.dart'; import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/events/models/language_detection_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/events/models/stt_translation_model.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; -import 'package:fluffychat/pangea/morphs/parts_of_speech_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:fluffychat/pangea/events/repo/tokens_repo.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; class RepresentationEvent { Event? _event; PangeaRepresentation? _content; PangeaMessageTokens? _tokens; - ChoreoRecord? _choreo; + ChoreoRecordModel? _choreo; Timeline timeline; Event parentMessageEvent; @@ -42,7 +41,7 @@ class RepresentationEvent { Event? event, PangeaRepresentation? content, PangeaMessageTokens? tokens, - ChoreoRecord? choreo, + ChoreoRecordModel? choreo, }) { if (event != null && event.type != PangeaEventTypes.representation) { throw Exception( @@ -57,6 +56,33 @@ class RepresentationEvent { Event? get event => _event; + String get text => content.text; + + String get langCode => content.langCode; + + List? get detections => _tokens?.detections; + + Set get tokenEvents => + _event?.aggregatedEvents( + timeline, + PangeaEventTypes.tokens, + ) ?? + {}; + + Set get sttEvents => + _event?.aggregatedEvents( + timeline, + PangeaEventTypes.sttTranslation, + ) ?? + {}; + + Set get choreoEvents => + _event?.aggregatedEvents( + timeline, + PangeaEventTypes.choreoRecord, + ) ?? + {}; + // Note: in the case where the event is the originalSent or originalWritten event, // the content will be set on initialization by the PangeaMessageEvent // Otherwise, the content will be fetched from the event where it is stored in content[type] @@ -66,96 +92,38 @@ class RepresentationEvent { return _content!; } - String get text => content.text; - - String get langCode => content.langCode; - - bool get botAuthored => - content.originalSent == false && content.originalWritten == false; - - List? get detections => _tokens?.detections; - List? get tokens { if (_tokens != null) return _tokens!.tokens; if (_event == null) return null; - final Set tokenEvents = _event?.aggregatedEvents( - timeline, - PangeaEventTypes.tokens, - ) ?? - {}; - if (tokenEvents.isEmpty) return null; _tokens = tokenEvents.last.getPangeaContent(); return _tokens?.tokens; } - Future> tokensGlobal( - String senderID, - DateTime timestamp, - ) async { - if (tokens != null) return tokens!; + ChoreoRecordModel? get choreo { + if (_choreo != null) return _choreo; - if (_event == null && timestamp.isAfter(DateTime(2024, 9, 25))) { + if (_event == null) { Sentry.addBreadcrumb( Breadcrumb( - message: - 'representation with no _event and no tokens got tokens directly. This means an original_sent with no tokens. This should not happen in messages sent after September 25', - data: { - 'content': content.toJson(), - 'event': _event?.toJson(), - 'timestamp': timestamp.toIso8601String(), - 'senderID': senderID, - }, + message: "_event and _choreo both null", ), ); + return null; } - final TokensResponseModel res = - await MatrixState.pangeaController.messageData.getTokens( - repEventId: _event?.eventId, - room: _event?.room ?? parentMessageEvent.room, - req: TokensRequestModel( - fullText: text, - langCode: langCode, - senderL1: - MatrixState.pangeaController.languageController.userL1?.langCode ?? - LanguageKeys.unknownLanguage, - // since langCode is known, senderL2 will be used to determine whether these tokens - // need pos/mporph tags whether lemmas are eligible to marked as "save_vocab=true" - senderL2: - MatrixState.pangeaController.languageController.userL2?.langCode ?? - LanguageKeys.unknownLanguage, - ), - ); - return res.tokens; - } - - Future sendTokensEvent( - String repEventID, - Room room, - String userl1, - String userl2, - ) async { - if (tokens != null) return; - if (_event == null) { + if (choreoEvents.isEmpty) return null; + if (choreoEvents.length > 1) { + debugger(when: kDebugMode); ErrorHandler.logError( - e: "Called getTokensEvent with no _event", - data: {}, + m: 'should not have more than one choreoEvent per representation ${_event?.eventId}', + s: StackTrace.current, + data: {"event": _event?.toJson()}, ); - return; } - await MatrixState.pangeaController.messageData.sendTokensEvent( - repEventId: repEventID, - room: room, - req: TokensRequestModel( - fullText: text, - langCode: langCode, - senderL1: userl1, - senderL2: userl2, - ), - ); + return ChoreoEvent(event: choreoEvents.first).content; } List get sttTranslations { @@ -169,11 +137,6 @@ class RepresentationEvent { return []; } - final Set sttEvents = _event!.aggregatedEvents( - timeline, - PangeaEventTypes.sttTranslation, - ); - if (sttEvents.isEmpty) return []; final List sttTranslations = []; for (final event in sttEvents) { @@ -194,151 +157,10 @@ class RepresentationEvent { ); } } - return sttTranslations; } - Future getSttTranslation({ - required String userL1, - required String userL2, - }) async { - if (content.speechToText == null) { - throw Exception( - "RepresentationEvent.getSttTranslation called on a representation without speechToText", - ); - } - - final local = sttTranslations.firstWhereOrNull((t) => t.langCode == userL1); - if (local != null) return local; - - return MatrixState.pangeaController.messageData.getSttTranslation( - repEventId: _event?.eventId, - room: _event?.room, - req: FullTextTranslationRequestModel( - text: content.speechToText!.transcript.text, - tgtLang: userL1, - userL2: userL2, - userL1: userL1, - ), - ); - } - - ChoreoRecord? get choreo { - if (_choreo != null) return _choreo; - - if (_event == null) { - Sentry.addBreadcrumb( - Breadcrumb( - message: "_event and _choreo both null", - ), - ); - return null; - } - - final Set choreoMatrixEvents = - _event?.aggregatedEvents(timeline, PangeaEventTypes.choreoRecord) ?? {}; - - if (choreoMatrixEvents.isEmpty) return null; - - if (choreoMatrixEvents.length > 1) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: 'should not have more than one choreoEvent per representation ${_event?.eventId}', - s: StackTrace.current, - data: {"event": _event?.toJson()}, - ); - } - - _choreo = ChoreoEvent(event: choreoMatrixEvents.first).content; - - return _choreo; - } - - String? formatBody() { - return markdown(content.text); - } - - /// Finds the closest non-punctuation token to the given token. - /// - /// This method checks if the provided token is a punctuation token. If it is not, - /// it returns the token itself. If the token is a punctuation token, it searches - /// through the list of tokens to find the closest non-punctuation token either to - /// the left or right of the given token. - /// - /// If both left and right non-punctuation tokens are found, it returns the one - /// that is closest to the given token. If only one of them is found, it returns - /// that token. If no non-punctuation tokens are found, it returns null. - /// - /// - Parameters: - /// - token: The token for which to find the closest non-punctuation token. - /// - /// - Returns: The closest non-punctuation token, or null if no such token exists. - PangeaToken? getClosestNonPunctToken(PangeaToken token) { - if (token.pos != "PUNCT") return token; - if (tokens == null) return null; - final index = tokens!.indexOf(token); - if (index > -1) { - final leftTokens = tokens!.sublist(0, index); - final rightTokens = tokens!.sublist(index + 1); - final leftMostToken = leftTokens.lastWhereOrNull( - (element) => element.pos != "PUNCT", - ); - final rightMostToken = rightTokens.firstWhereOrNull( - (element) => element.pos != "PUNCT", - ); - - if (leftMostToken != null && rightMostToken != null) { - final leftDistance = token.start - leftMostToken.end; - final rightDistance = rightMostToken.start - token.end; - return leftDistance < rightDistance ? leftMostToken : rightMostToken; - } else if (leftMostToken != null) { - return leftMostToken; - } else if (rightMostToken != null) { - return rightMostToken; - } - } - return null; - } - - List get tokensToSave => - tokens?.where((token) => token.lemma.saveVocab).toList() ?? []; - - // List get allTokenMorphsToConstructIdentifiers => tokens?.map((t) => t.morphConstructIds).toList() ?? - // []; - - /// get allTokenMorphsToConstructIdentifiers - Set get morphFeatureSetToPractice => - MorphFeaturesEnum.values.where((feature) { - // pos is always included - if (feature == MorphFeaturesEnum.Pos) { - return true; - } - return tokens?.any((token) => token.morph.containsKey(feature)) ?? - false; - }).toSet(); - - Set posSetToPractice(ActivityTypeEnum a) => - PartOfSpeechEnum.values.where((pos) { - // some pos are not eligible for practice at all - if (!pos.eligibleForPractice(a)) { - return false; - } - return tokens?.any( - (token) => token.pos.toLowerCase() == pos.name.toLowerCase(), - ) ?? - false; - }).toSet(); - - List tagsByFeature(MorphFeaturesEnum feature) { - return tokens - ?.where((t) => t.morph.containsKey(feature)) - .map((t) => t.morph[feature]) - .cast() - .toList() ?? - []; - } - - List vocabAndMorphUses() { + List get vocabAndMorphUses { if (tokens == null || tokens!.isEmpty) { return []; } @@ -355,4 +177,80 @@ class RepresentationEvent { choreo: choreo, ); } + + /// Finds the closest non-punctuation token to the given token. + PangeaToken? getClosestNonPunctToken(PangeaToken token) { + // If it's not punctuation, it's already the closest. + if (token.pos != "PUNCT") return token; + + final list = tokens; + if (list == null) return null; + + final index = list.indexOf(token); + if (index == -1) return null; + + PangeaToken? left; + PangeaToken? right; + + // Scan left + for (int i = index - 1; i >= 0; i--) { + if (list[i].pos != "PUNCT") { + left = list[i]; + break; + } + } + + // Scan right + for (int i = index + 1; i < list.length; i++) { + if (list[i].pos != "PUNCT") { + right = list[i]; + break; + } + } + + if (left == null) return right; + if (right == null) return left; + + // Choose the nearest by distance + final leftDistance = token.start - left.end; + final rightDistance = right.start - token.end; + + return leftDistance < rightDistance ? left : right; + } + + Future>> requestTokens() async { + if (tokens != null) return Result.value(tokens!); + final res = await TokensRepo.get( + MatrixState.pangeaController.userController.accessToken, + TokensRequestModel( + fullText: text, + langCode: langCode, + senderL1: + MatrixState.pangeaController.userController.userL1?.langCode ?? + LanguageKeys.unknownLanguage, + senderL2: + MatrixState.pangeaController.userController.userL2?.langCode ?? + LanguageKeys.unknownLanguage, + ), + ); + + if (_event != null) { + _event!.room.sendPangeaEvent( + content: PangeaMessageTokens( + tokens: res.result!.tokens, + detections: res.result!.detections, + ).toJson(), + parentEventId: _event!.eventId, + type: PangeaEventTypes.tokens, + ); + } + + return res.isError + ? Result.error(res.error!) + : Result.value(res.result!.tokens); + } + + SttTranslationModel? getSpeechToTextTranslationLocal(String langCode) { + return sttTranslations.firstWhereOrNull((t) => t.langCode == langCode); + } } diff --git a/lib/pangea/events/extensions/pangea_event_extension.dart b/lib/pangea/events/extensions/pangea_event_extension.dart index 4a70baec1..6c71c7d22 100644 --- a/lib/pangea/events/extensions/pangea_event_extension.dart +++ b/lib/pangea/events/extensions/pangea_event_extension.dart @@ -4,16 +4,15 @@ import 'package:flutter/foundation.dart'; import 'package:matrix/matrix.dart'; -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_record.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_audio_card.dart'; extension PangeaEvent on Event { V getPangeaContent() { @@ -33,11 +32,9 @@ extension PangeaEvent on Event { case PangeaEventTypes.representation: return PangeaRepresentation.fromJson(json) as V; case PangeaEventTypes.choreoRecord: - return ChoreoRecord.fromJson(json) as V; + return ChoreoRecordModel.fromJson(json) as V; case PangeaEventTypes.pangeaActivity: return PracticeActivityModel.fromJson(json) as V; - case PangeaEventTypes.activityRecord: - return PracticeRecord.fromJson(json) as V; default: debugger(when: kDebugMode); throw Exception("$type events do not have pangea content"); @@ -62,8 +59,10 @@ extension PangeaEvent on Event { final matrixFile = await downloadAndDecryptAttachment(); - final duration = audioContent?.tryGet('duration') ?? - content.tryGetMap('info')?.tryGet('duration'); + final duration = audioContent?.tryGet(ModelKey.duration) ?? + content + .tryGetMap('info') + ?.tryGet(ModelKey.duration); final waveform = audioContent?.tryGetList('waveform') ?? content diff --git a/lib/pangea/events/models/content_feedback.dart b/lib/pangea/events/models/content_feedback.dart index cb12bae1a..7b554706f 100644 --- a/lib/pangea/events/models/content_feedback.dart +++ b/lib/pangea/events/models/content_feedback.dart @@ -6,7 +6,7 @@ abstract class JsonSerializable { } class ContentFeedback { - final JsonSerializable content; + final T content; final String feedback; ContentFeedback(this.content, this.feedback); diff --git a/lib/pangea/choreographer/models/language_detection_model.dart b/lib/pangea/events/models/language_detection_model.dart similarity index 75% rename from lib/pangea/choreographer/models/language_detection_model.dart rename to lib/pangea/events/models/language_detection_model.dart index aaac2decd..ea68d1a04 100644 --- a/lib/pangea/choreographer/models/language_detection_model.dart +++ b/lib/pangea/events/models/language_detection_model.dart @@ -1,15 +1,15 @@ import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -class LanguageDetection { - String langCode; - double confidence; +class LanguageDetectionModel { + final String langCode; + final double confidence; - LanguageDetection({ + const LanguageDetectionModel({ required this.langCode, required this.confidence, }); - factory LanguageDetection.fromJson(Map json) { + factory LanguageDetectionModel.fromJson(Map json) { final dynamic confValue = json[ModelKey.confidence]; double confidence; if (confValue is String) { @@ -21,7 +21,7 @@ class LanguageDetection { } else { throw TypeError(); } - return LanguageDetection( + return LanguageDetectionModel( langCode: json[ModelKey.langCode], confidence: confidence, ); diff --git a/lib/pangea/events/models/pangea_token_model.dart b/lib/pangea/events/models/pangea_token_model.dart index 9a75ab117..080cfaa85 100644 --- a/lib/pangea/events/models/pangea_token_model.dart +++ b/lib/pangea/events/models/pangea_token_model.dart @@ -1,27 +1,15 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - import 'package:collection/collection.dart'; -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/construct_use_model.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/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/constructs/construct_form.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/user_set_lemma_info.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/morphs/morph_repo.dart'; -import 'package:fluffychat/pangea/morphs/parts_of_speech_enum.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/message_morph_choice.dart'; -import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_morph_choice.dart'; import '../../common/constants/model_keys.dart'; import '../../lemmas/lemma.dart'; @@ -96,18 +84,19 @@ class PangeaToken { factory PangeaToken.fromJson(Map json) { final PangeaTokenText text = PangeaTokenText.fromJson(json[_textKey] as Map); + final morph = json['morph'] != null + ? (json['morph'] as Map).map( + (key, value) => MapEntry( + MorphFeaturesEnumExtension.fromString(key), + value as String, + ), + ) + : {}; return PangeaToken( text: text, lemma: _getLemmas(text.content, json[_lemmaKey]), - pos: json['pos'] ?? '', - morph: json['morph'] != null - ? (json['morph'] as Map).map( - (key, value) => MapEntry( - MorphFeaturesEnumExtension.fromString(key), - value as String, - ), - ) - : {}, + pos: morph[MorphFeaturesEnum.Pos] ?? '', + morph: morph, ); } @@ -117,8 +106,6 @@ class PangeaToken { Map toJson() => { _textKey: text.toJson(), _lemmaKey: [lemma.toJson()], - 'pos': pos, - // store morph as a map of strings ie Map 'morph': morph.map( (key, value) => MapEntry(key.name, value), ), @@ -130,19 +117,8 @@ class PangeaToken { /// alias for the end of the token ie offset + length int get end => text.offset + text.length; - bool get isContentWord => vocabConstructID.isContentWord; - - String get analyticsDebugPrint => - "content: ${text.content} isContentWord: $isContentWord vocab_construct_xp: ${vocabConstruct.points} daysSincelastUseInWordMeaning ${daysSinceLastUseByType(ActivityTypeEnum.wordMeaning, null)}"; - - bool get canBeDefined => - PartOfSpeechEnumExtensions.fromString(pos)?.canBeDefined ?? false; - - bool get canBeHeard => - PartOfSpeechEnumExtensions.fromString(pos)?.canBeHeard ?? false; - /// Given a [type] and [metadata], returns a [OneConstructUse] for this lemma - OneConstructUse toVocabUse( + OneConstructUse _toVocabUse( ConstructUseTypeEnum type, ConstructUseMetaData metadata, int xp, @@ -166,7 +142,7 @@ class PangeaToken { final List uses = []; if (!lemma.saveVocab) return uses; - uses.add(toVocabUse(type, metadata, xp)); + uses.add(_toVocabUse(type, metadata, xp)); for (final morphFeature in morph.keys) { uses.add( OneConstructUse( @@ -184,150 +160,6 @@ class PangeaToken { return uses; } - bool isActivityBasicallyEligible( - ActivityTypeEnum a, [ - MorphFeaturesEnum? morphFeature, - String? morphTag, - ]) { - if (!lemma.saveVocab) { - return false; - } - - switch (a) { - case ActivityTypeEnum.wordMeaning: - return canBeDefined; - case ActivityTypeEnum.lemmaId: - return lemma.saveVocab && - text.content.toLowerCase() != lemma.text.toLowerCase(); - case ActivityTypeEnum.emoji: - case ActivityTypeEnum.messageMeaning: - return true; - case ActivityTypeEnum.morphId: - return morph.isNotEmpty; - case ActivityTypeEnum.wordFocusListening: - case ActivityTypeEnum.hiddenWordListening: - return canBeHeard; - } - } - - // bool _didActivity( - // ActivityTypeEnum a, [ - // String? morphFeature, - // String? morphTag, - // ]) { - // if ((morphFeature == null || morphTag == null) && - // a == ActivityTypeEnum.morphId) { - // debugger(when: kDebugMode); - // return true; - // } - - // switch (a) { - // case ActivityTypeEnum.wordMeaning: - // case ActivityTypeEnum.wordFocusListening: - // case ActivityTypeEnum.hiddenWordListening: - // case ActivityTypeEnum.lemmaId: - // case ActivityTypeEnum.emoji: - // case ActivityTypeEnum.messageMeaning: - // return vocabConstruct.uses - // .map((u) => u.useType) - // .any((u) => a.associatedUseTypes.contains(u)); - // case ActivityTypeEnum.morphId: - // return morph.entries - // .map((e) => morphConstruct(morphFeature!, morphTag!).uses) - // .expand((e) => e) - // .any( - // (u) => - // a.associatedUseTypes.contains(u.useType) && - // u.form == text.content, - // ); - // } - // } - - bool didActivitySuccessfully( - ActivityTypeEnum a, [ - MorphFeaturesEnum? morphFeature, - String? morphTag, - ]) { - if ((morphFeature == null || morphTag == null) && - a == ActivityTypeEnum.morphId) { - debugger(when: kDebugMode); - return true; - } - switch (a) { - case ActivityTypeEnum.wordMeaning: - case ActivityTypeEnum.wordFocusListening: - case ActivityTypeEnum.hiddenWordListening: - case ActivityTypeEnum.lemmaId: - case ActivityTypeEnum.emoji: - return vocabConstruct.uses - .map((u) => u.useType) - .any((u) => u == a.correctUse); - // Note that it matters less if they did morphId in general, than if they did it with the particular feature - case ActivityTypeEnum.morphId: - // TODO: investigate if we take out condition "|| morphTag == null", will we get the expected number of morph activities? - if (morphFeature == null || morphTag == null) { - debugger(when: kDebugMode); - return false; - } - return morphConstruct(morphFeature)?.uses.any( - (u) => u.useType == a.correctUse && u.form == text.content, - ) ?? - false; - case ActivityTypeEnum.messageMeaning: - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "should not call didActivitySuccessfully for ActivityTypeEnum.messageMeaning", - data: toJson(), - ); - return true; - } - } - - bool _isActivityProbablyLevelAppropriate( - ActivityTypeEnum a, [ - MorphFeaturesEnum? morphFeature, - ]) { - switch (a) { - case ActivityTypeEnum.wordMeaning: - return vocabConstructID.isActivityProbablyLevelAppropriate( - a, - text.content, - ); - - case ActivityTypeEnum.wordFocusListening: - return !didActivitySuccessfully(a) || - daysSinceLastUseByType(a, null) > 30; - case ActivityTypeEnum.hiddenWordListening: - return daysSinceLastUseByType(a, null) > 7; - case ActivityTypeEnum.lemmaId: - return false; - // disabling lemma activities for now - // It has 2 purposes: - // • learning value - // • triangulating our determination of the lemma with AI plus user verification. - // However, displaying the lemma during the meaning activity helps - // disambiguate what the meaning activity is about. This is probably more valuable than the - // lemma activity itself. The piping for the lemma activity will stay there if we want to turn - // it back on, maybe in select instances. - // return _didActivitySuccessfully(ActivityTypeEnum.wordMeaning) && - // daysSinceLastUseByType(a) > 7; - case ActivityTypeEnum.emoji: - return vocabConstructID.isActivityProbablyLevelAppropriate( - a, - text.content, - ); - - case ActivityTypeEnum.messageMeaning: - return true; - case ActivityTypeEnum.morphId: - return morphFeature != null - ? morphIdByFeature(morphFeature) - ?.isActivityProbablyLevelAppropriate(a, text.content) ?? - false - : false; - } - } - /// Safely get morph tag for a given feature without regard for case String? getMorphTag(MorphFeaturesEnum feature) { // if the morph contains the feature, return it @@ -336,31 +168,6 @@ class PangeaToken { return null; } - // maybe for every 5 points of xp for a particular activity, increment the days between uses by 2 - bool shouldDoActivity({ - required ActivityTypeEnum a, - required MorphFeaturesEnum? feature, - required String? tag, - }) { - return isActivityBasicallyEligible(a, feature, tag) && - _isActivityProbablyLevelAppropriate(a, feature); - } - - ConstructUses get vocabConstruct => - MatrixState.pangeaController.getAnalytics.constructListModel - .getConstructUses( - vocabConstructID, - ) ?? - ConstructUses( - lemma: lemma.text, - constructType: ConstructTypeEnum.vocab, - category: pos, - uses: [], - ); - - ConstructUses? morphConstruct(MorphFeaturesEnum morphFeature) => - morphIdByFeature(morphFeature)?.constructUses; - ConstructIdentifier? morphIdByFeature(MorphFeaturesEnum feature) { final tag = getMorphTag(feature); if (tag == null) return null; @@ -371,70 +178,6 @@ class PangeaToken { ); } - /// lastUsed by activity type, construct and form - DateTime? _lastUsedByActivityType( - ActivityTypeEnum a, - MorphFeaturesEnum? feature, - ) { - if (a == ActivityTypeEnum.morphId && feature == null) { - debugger(when: kDebugMode); - return null; - } - final ConstructIdentifier? cId = a == ActivityTypeEnum.morphId - ? morphIdByFeature(feature!) - : vocabConstructID; - - if (cId == null) return null; - - final correctUseTimestamps = cId.constructUses.uses - .where((u) => u.form == text.content) - .map((u) => u.timeStamp) - .toList(); - - if (correctUseTimestamps.isEmpty) return null; - - // return the most recent timestamp - return correctUseTimestamps.reduce((a, b) => a.isAfter(b) ? a : b); - } - - /// daysSinceLastUse by activity type - /// returns 1000 if there is no last use - int daysSinceLastUseByType(ActivityTypeEnum a, MorphFeaturesEnum? feature) { - final lastUsed = _lastUsedByActivityType(a, feature); - if (lastUsed == null) return 20; - return DateTime.now().difference(lastUsed).inDays; - } - - List get _constructIDs { - final List ids = []; - ids.add( - ConstructIdentifier( - lemma: lemma.text, - type: ConstructTypeEnum.vocab, - category: pos, - ), - ); - for (final morph in morph.entries) { - ids.add( - ConstructIdentifier( - lemma: morph.value, - type: ConstructTypeEnum.morph, - category: morph.key.name, - ), - ); - } - return ids; - } - - List get constructs => _constructIDs - .map( - (id) => MatrixState.pangeaController.getAnalytics.constructListModel - .getConstructUses(id), - ) - .where((construct) => construct != null) - .cast() - .toList(); - ConstructIdentifier get vocabConstructID => ConstructIdentifier( lemma: lemma.text, type: ConstructTypeEnum.vocab, @@ -444,26 +187,7 @@ class PangeaToken { ConstructForm get vocabForm => ConstructForm(form: text.content, cId: vocabConstructID); - Future setEmoji(List emojis) => - vocabConstructID.setUserLemmaInfo(UserSetLemmaInfo(emojis: emojis)); - - /// [getEmoji] gets the emoji for the lemma - /// NOTE: assumes that the language of the lemma is the same as the user's current l2 - List getEmoji() => vocabConstructID.userSetEmoji; - - String get xpEmoji => vocabConstruct.xpEmoji; - - ConstructLevelEnum get lemmaXPCategory { - if (vocabConstruct.points >= AnalyticsConstants.xpForFlower) { - return ConstructLevelEnum.flowers; - } else if (vocabConstruct.points >= AnalyticsConstants.xpForGreens) { - return ConstructLevelEnum.greens; - } else { - return ConstructLevelEnum.seeds; - } - } - - List morphActivityDistractors( + Set morphActivityDistractors( MorphFeaturesEnum morphFeature, String morphTag, ) { @@ -477,67 +201,9 @@ class PangeaToken { .toList(); possibleDistractors.shuffle(); - return possibleDistractors.take(numberOfMorphDistractors).toList(); + return possibleDistractors.take(numberOfMorphDistractors).toSet(); } - /// initial default input mode for a token - MessageMode get modeForToken { - // if (getEmoji() == null) { - // return MessageMode.wordEmoji; - // } - - if (shouldDoActivity( - a: ActivityTypeEnum.wordMeaning, - feature: null, - tag: null, - )) { - return MessageMode.wordMeaning; - } - - // final String? morph = nextMorphFeatureEligibleForActivity; - // if (morph != null) { - // debugPrint("should do morph activity for ${text.content}"); - // return MessageMode.wordMorph; - // } - - return MessageMode.wordZoom; - } - - List get allMorphFeatures => morph.keys.toList(); - - /// cycle through morphs to get the next one where should do morph activity is true - /// if none are found, return null - MorphFeaturesEnum? get nextMorphFeatureEligibleForActivity { - for (final m in morph.entries) { - if (shouldDoActivity( - a: ActivityTypeEnum.morphId, - feature: m.key, - tag: m.value, - )) { - return m.key; - } - } - - return null; - } - - bool get doesLemmaTextMatchTokenText { - return lemma.text.toLowerCase() == text.content.toLowerCase(); - } - - bool shouldDoActivityByMessageMode(MessageMode mode) { - // debugPrint("should do activity for ${text.content} in $mode"); - return mode.associatedActivityType != null - ? shouldDoActivity( - a: mode.associatedActivityType!, - feature: null, - tag: null, - ) - : false; - } - - List get allConstructIds => _constructIDs; - List get morphsBasicallyEligibleForPracticeByPriority => MorphFeaturesEnumExtension.eligibleForPractice.where((f) { return morph.containsKey(f); @@ -549,21 +215,13 @@ class PangeaToken { ); }).toList(); - bool hasMorph(ConstructIdentifier cId) { - return morph.entries.any( - (e) => - e.key.name == cId.lemma.toLowerCase() && - e.value.toString().toLowerCase() == cId.category.toLowerCase(), - ); - } - - /// [0,infinity) - a higher number means higher priority - int activityPriorityScore( - ActivityTypeEnum a, - MorphFeaturesEnum? morphFeature, - ) { - return daysSinceLastUseByType(a, morphFeature) * - (vocabConstructID.isContentWord ? 10 : 9); + bool eligibleForPractice(ActivityTypeEnum activityType) { + switch (activityType) { + case ActivityTypeEnum.emoji: + return lemma.saveVocab && vocabConstructID.isContentWord; + default: + return lemma.saveVocab; + } } String get uniqueId => "${text.content}::${text.offset}"; diff --git a/lib/pangea/events/models/pangea_token_text_model.dart b/lib/pangea/events/models/pangea_token_text_model.dart index efef9a712..349923807 100644 --- a/lib/pangea/events/models/pangea_token_text_model.dart +++ b/lib/pangea/events/models/pangea_token_text_model.dart @@ -1,6 +1,4 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; class PangeaTokenText { int offset; @@ -14,11 +12,11 @@ class PangeaTokenText { }); factory PangeaTokenText.fromJson(Map json) { - debugger(when: kDebugMode && json[_offsetKey] == null); + final content = json[_contentKey] as String; return PangeaTokenText( offset: json[_offsetKey], - content: json[_contentKey], - length: json[_lengthKey] ?? (json[_contentKey] as String).length, + content: content, + length: content.characters.length, ); } @@ -26,16 +24,14 @@ class PangeaTokenText { return PangeaTokenText( offset: 0, content: content, - length: content.length, + length: content.characters.length, ); } static const String _offsetKey = "offset"; static const String _contentKey = "content"; - static const String _lengthKey = "length"; - Map toJson() => - {_offsetKey: offset, _contentKey: content, _lengthKey: length}; + Map toJson() => {_offsetKey: offset, _contentKey: content}; //override equals and hashcode @override diff --git a/lib/pangea/events/models/representation_content_model.dart b/lib/pangea/events/models/representation_content_model.dart index 4f56bfbd2..1f4d3d45d 100644 --- a/lib/pangea/events/models/representation_content_model.dart +++ b/lib/pangea/events/models/representation_content_model.dart @@ -4,17 +4,18 @@ import 'package:matrix/matrix.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/choreographer/models/choreo_record.dart'; -import 'package:fluffychat/pangea/choreographer/models/pangea_match_model.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; +import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_response_model.dart'; +import 'package:fluffychat/widgets/matrix.dart'; /// this class is contained within a [RepresentationEvent] /// this event is the child of a [EventTypes.Message] /// the event has two potential children events - /// [PangeaTokensEvent] and [PangeaIGCEvent] -/// these events contain [PangeaMessageTokens] and [ChoreoRecord], respectively. +/// these events contain [PangeaMessageTokens] and [ChoreoRecordModel], respectively. class PangeaRepresentation { /// system-detected language, possibly condensed from a list, /// but only with high certainty @@ -29,7 +30,7 @@ class PangeaRepresentation { bool originalWritten; // a representation can be create via speech to text on the original message - SpeechToTextModel? speechToText; + SpeechToTextResponseModel? speechToText; // how do we know which representation was sent by author? // RepresentationEvent.text == PangeaMessageEvent.event.body @@ -69,7 +70,7 @@ class PangeaRepresentation { originalWritten: json[_originalWrittenKey] ?? false, speechToText: json[_speechToTextKey] == null ? null - : SpeechToTextModel.fromJson(json[_speechToTextKey]), + : SpeechToTextResponseModel.fromJson(json[_speechToTextKey]), ); } @@ -91,6 +92,10 @@ class PangeaRepresentation { return data; } + bool get langCodeMatchesL2 => + langCode.split("-").first == + MatrixState.pangeaController.userController.userL2?.langCodeShort; + /// Get construct uses for the message that weren't captured during language assistance. /// Takes a list of tokens and a choreo record, which is searched /// through for each token for its construct use type. @@ -101,7 +106,7 @@ class PangeaRepresentation { required List tokens, Event? event, ConstructUseMetaData? metadata, - ChoreoRecord? choreo, + ChoreoRecordModel? choreo, }) { final List uses = []; @@ -132,8 +137,7 @@ class PangeaRepresentation { .toList(); } - if (choreo == null || - (choreo.choreoSteps.isEmpty && choreo.itSteps.isEmpty)) { + if (choreo == null || choreo.choreoSteps.isEmpty) { for (final token in tokensToSave) { uses.addAll( token.allUses( @@ -148,7 +152,7 @@ class PangeaRepresentation { } for (final token in tokensToSave) { - ChoreoRecordStep? tokenStep; + ChoreoRecordStepModel? tokenStep; for (final step in choreo.choreoSteps) { final igcMatch = step.acceptedOrIgnoredMatch; final itStep = step.itStep; @@ -177,7 +181,7 @@ class PangeaRepresentation { if (tokenStep == null || tokenStep.acceptedOrIgnoredMatch?.status == - PangeaMatchStatus.automatic) { + PangeaMatchStatusEnum.automatic) { // if the token wasn't found in any IT or IGC step, so it was wa uses.addAll( token.allUses( @@ -191,7 +195,7 @@ class PangeaRepresentation { if (tokenStep.acceptedOrIgnoredMatch != null && tokenStep.acceptedOrIgnoredMatch?.status != - PangeaMatchStatus.accepted) { + PangeaMatchStatusEnum.accepted) { uses.addAll( token.allUses( ConstructUseTypeEnum.ga, diff --git a/lib/pangea/events/models/stt_translation_model.dart b/lib/pangea/events/models/stt_translation_model.dart index 47f31be4f..06becba21 100644 --- a/lib/pangea/events/models/stt_translation_model.dart +++ b/lib/pangea/events/models/stt_translation_model.dart @@ -1,3 +1,7 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; + class SttTranslationModel { final String translation; final String langCode; @@ -8,9 +12,14 @@ class SttTranslationModel { }); factory SttTranslationModel.fromJson(Map json) { + final content = json.tryGetMap(PangeaEventTypes.sttTranslation); + if (content == null) { + throw Exception("STT Translation content is null"); + } + return SttTranslationModel( - translation: json['translation'] as String, - langCode: json['lang_code'] as String, + translation: content['translation'] as String, + langCode: content['lang_code'] as String, ); } diff --git a/lib/pangea/events/models/tokens_event_content_model.dart b/lib/pangea/events/models/tokens_event_content_model.dart index ddd153e73..45260340b 100644 --- a/lib/pangea/events/models/tokens_event_content_model.dart +++ b/lib/pangea/events/models/tokens_event_content_model.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; +import 'package:fluffychat/pangea/events/models/language_detection_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; /// this class lives within a [PangeaTokensEvent] @@ -9,7 +9,7 @@ import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; /// representation class PangeaMessageTokens { List tokens; - List? detections; + List? detections; PangeaMessageTokens({ required this.tokens, @@ -38,9 +38,9 @@ class PangeaMessageTokens { .toList() .cast(), detections: detectionsIterable - ?.map((e) => LanguageDetection.fromJson(e)) + ?.map((e) => LanguageDetectionModel.fromJson(e)) .toList() - .cast(), + .cast(), ); } diff --git a/lib/pangea/events/repo/language_detection_repo.dart b/lib/pangea/events/repo/language_detection_repo.dart new file mode 100644 index 000000000..c4f6a6864 --- /dev/null +++ b/lib/pangea/events/repo/language_detection_repo.dart @@ -0,0 +1,104 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/repo/language_detection_request.dart'; +import 'package:fluffychat/pangea/events/repo/language_detection_response.dart'; + +class _LanguageDetectionCacheItem { + final Future data; + final DateTime timestamp; + + const _LanguageDetectionCacheItem({ + required this.data, + required this.timestamp, + }); +} + +class LanguageDetectionRepo { + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String accessToken, + LanguageDetectionRequest request, + ) { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch(accessToken, request); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String accessToken, + LanguageDetectionRequest request, + ) async { + final Requests req = Requests( + accessToken: accessToken, + choreoApiKey: Environment.choreoApiKey, + ); + final Response res = await req.post( + url: PApiUrls.languageDetection, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to detect language: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + return LanguageDetectionResponse.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); + } + + static Future> _getResult( + LanguageDetectionRequest request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + LanguageDetectionRequest request, + ) { + final cacheKeys = [..._cache.keys]; + for (final key in cacheKeys) { + if (DateTime.now().difference(_cache[key]!.timestamp) >= _cacheDuration) { + _cache.remove(key); + } + } + + return _cache[request.hashCode.toString()]?.data; + } + + static void _setCached( + LanguageDetectionRequest request, + Future response, + ) => + _cache[request.hashCode.toString()] = _LanguageDetectionCacheItem( + data: response, + timestamp: DateTime.now(), + ); +} diff --git a/lib/pangea/events/repo/language_detection_request.dart b/lib/pangea/events/repo/language_detection_request.dart new file mode 100644 index 000000000..803d5db83 --- /dev/null +++ b/lib/pangea/events/repo/language_detection_request.dart @@ -0,0 +1,31 @@ +class LanguageDetectionRequest { + final String text; + final String? senderl1; + final String? senderl2; + + LanguageDetectionRequest({ + required this.text, + this.senderl1, + this.senderl2, + }); + + Map toJson() { + return { + 'full_text': text, + 'sender_l1': senderl1, + 'sender_l2': senderl2, + }; + } + + @override + int get hashCode => text.hashCode ^ senderl1.hashCode ^ senderl2.hashCode; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + return other is LanguageDetectionRequest && + other.text == text && + other.senderl1 == senderl1 && + other.senderl2 == senderl2; + } +} diff --git a/lib/pangea/events/repo/language_detection_response.dart b/lib/pangea/events/repo/language_detection_response.dart new file mode 100644 index 000000000..a73d01c60 --- /dev/null +++ b/lib/pangea/events/repo/language_detection_response.dart @@ -0,0 +1,29 @@ +import 'package:fluffychat/pangea/events/models/language_detection_model.dart'; + +class LanguageDetectionResponse { + List detections; + String fullText; + + LanguageDetectionResponse({ + required this.detections, + required this.fullText, + }); + + factory LanguageDetectionResponse.fromJson(Map json) { + return LanguageDetectionResponse( + detections: List.from( + (json['detections'] as Iterable).map( + (e) => LanguageDetectionModel.fromJson(e), + ), + ), + fullText: json['full_text'], + ); + } + + Map toJson() { + return { + 'detections': detections.map((e) => e.toJson()).toList(), + 'full_text': fullText, + }; + } +} diff --git a/lib/pangea/events/repo/token_api_models.dart b/lib/pangea/events/repo/token_api_models.dart index 2c3744454..13c245723 100644 --- a/lib/pangea/events/repo/token_api_models.dart +++ b/lib/pangea/events/repo/token_api_models.dart @@ -1,7 +1,7 @@ -import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/models/language_detection_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; class TokensRequestModel { /// the text to be tokenized @@ -55,7 +55,7 @@ class TokensRequestModel { class TokensResponseModel { List tokens; String lang; - List detections; + List detections; TokensResponseModel({ required this.tokens, @@ -75,10 +75,10 @@ class TokensResponseModel { .cast(), lang: json[ModelKey.lang], detections: (json[ModelKey.allDetections] as Iterable) - .map( - (e) => LanguageDetection.fromJson(e as Map), + .map( + (e) => LanguageDetectionModel.fromJson(e as Map), ) .toList() - .cast(), + .cast(), ); } diff --git a/lib/pangea/events/repo/tokens_repo.dart b/lib/pangea/events/repo/tokens_repo.dart new file mode 100644 index 000000000..0f9d8b4d6 --- /dev/null +++ b/lib/pangea/events/repo/tokens_repo.dart @@ -0,0 +1,109 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; + +class _TokensCacheItem { + final Future data; + final DateTime timestamp; + + const _TokensCacheItem({ + required this.data, + required this.timestamp, + }); +} + +class TokensRepo { + static final Map _tokensCache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String? accessToken, + TokensRequestModel request, + ) { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch( + accessToken, + request: request, + ); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String? accessToken, { + required TokensRequestModel request, + }) async { + final Requests req = Requests( + accessToken: accessToken, + choreoApiKey: Environment.choreoApiKey, + ); + final Response res = await req.post( + url: PApiUrls.tokenize, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to fetch Tokens data: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + final Map json = + jsonDecode(utf8.decode(res.bodyBytes).toString()); + + return TokensResponseModel.fromJson(json); + } + + static Future> _getResult( + TokensRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _tokensCache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + TokensRequestModel request, + ) { + final cacheKeys = [..._tokensCache.keys]; + for (final key in cacheKeys) { + if (_tokensCache[key]! + .timestamp + .isBefore(DateTime.now().subtract(_cacheDuration))) { + _tokensCache.remove(key); + } + } + + return _tokensCache[request.hashCode.toString()]?.data; + } + + static void _setCached( + TokensRequestModel request, + Future response, + ) => + _tokensCache[request.hashCode.toString()] = _TokensCacheItem( + data: response, + timestamp: DateTime.now(), + ); +} diff --git a/lib/pangea/extensions/join_rule_extension.dart b/lib/pangea/extensions/join_rule_extension.dart index 18c77103e..ede8eef50 100644 --- a/lib/pangea/extensions/join_rule_extension.dart +++ b/lib/pangea/extensions/join_rule_extension.dart @@ -2,7 +2,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/spaces/utils/space_code.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_extension.dart'; extension JoinRuleExtension on Client { Future pangeaJoinRules( @@ -11,7 +11,7 @@ extension JoinRuleExtension on Client { }) async { String? joinCode; try { - joinCode = await SpaceCodeUtil.generateSpaceCode(this); + joinCode = await requestSpaceCode(); } catch (e, s) { ErrorHandler.logError( e: e, @@ -42,7 +42,7 @@ extension JoinRuleExtensionOnRoom on Room { final currentJoinRules = getState(EventTypes.RoomJoinRules)?.content ?? {}; if (currentJoinRules[ModelKey.accessCode] != null) return; - final joinCode = await SpaceCodeUtil.generateSpaceCode(client); + final joinCode = await client.requestSpaceCode(); currentJoinRules[ModelKey.accessCode] = joinCode; await client.setRoomStateWithKey( diff --git a/lib/pangea/extensions/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart index cacdc7d52..85c869ba3 100644 --- a/lib/pangea/extensions/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -7,7 +7,6 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:collection/collection.dart'; import 'package:html_unescape/html_unescape.dart'; import 'package:matrix/matrix.dart'; import 'package:matrix/src/utils/markdown.dart'; @@ -18,22 +17,19 @@ import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart import 'package:fluffychat/pangea/analytics_misc/constructs_event.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; import 'package:fluffychat/pangea/chat/constants/default_power_level.dart'; -import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; import 'package:fluffychat/pangea/chat_settings/constants/pangea_room_types.dart'; +import 'package:fluffychat/pangea/choreographer/igc/igc_request_model.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/extensions/join_rule_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/lemmas/user_set_lemma_info.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import '../choreographer/models/choreo_record.dart'; +import '../choreographer/choreo_record_model.dart'; import '../events/constants/pangea_event_types.dart'; import '../events/models/representation_content_model.dart'; diff --git a/lib/pangea/extensions/pangea_rooms_chunk_extension.dart b/lib/pangea/extensions/pangea_rooms_chunk_extension.dart index 78785948f..8906094e8 100644 --- a/lib/pangea/extensions/pangea_rooms_chunk_extension.dart +++ b/lib/pangea/extensions/pangea_rooms_chunk_extension.dart @@ -2,7 +2,7 @@ import 'dart:math'; import 'package:matrix/matrix_api_lite/generated/model.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; extension PangeaRoomsChunk on PublicRoomsChunk { /// Use Random with a seed to get the default diff --git a/lib/pangea/extensions/room_events_extension.dart b/lib/pangea/extensions/room_events_extension.dart index 4b8195601..0f10dcbe6 100644 --- a/lib/pangea/extensions/room_events_extension.dart +++ b/lib/pangea/extensions/room_events_extension.dart @@ -158,11 +158,11 @@ extension EventsRoomExtension on Room { return content; } - String sendFakeMessage({ + Future sendFakeMessage({ required String text, Event? inReplyTo, String? editEventId, - }) { + }) async { // Create new transaction id final messageID = client.generateUniqueTransactionId(); @@ -180,9 +180,29 @@ extension EventsRoomExtension on Room { room: this, originServerTs: DateTime.now(), status: EventStatus.sending, + unsigned: { + messageSendingStatusKey: EventStatus.sending.intValue, + 'transaction_id': messageID, + }, ); - timeline?.events.insert(0, event); + final syncUpdate = SyncUpdate( + nextBatch: '', + rooms: RoomsUpdate( + join: { + id: JoinedRoomUpdate( + timeline: TimelineUpdate( + events: [ + event, + ], + ), + ), + }, + ), + ); + await client.database.transaction(() async { + await client.handleSync(syncUpdate); + }); return messageID; } @@ -196,13 +216,11 @@ extension EventsRoomExtension on Room { String msgtype = MessageTypes.Text, String? threadRootEventId, String? threadLastEventId, - PangeaRepresentation? originalSent, PangeaRepresentation? originalWritten, PangeaMessageTokens? tokensSent, PangeaMessageTokens? tokensWritten, - ChoreoRecord? choreo, + ChoreoRecordModel? choreo, String? messageTag, - String? tempEventId, }) { // if (parseCommands) { // return client.parseAndRunCommand( @@ -223,9 +241,6 @@ extension EventsRoomExtension on Room { if (choreo != null) { event[ModelKey.choreoRecord] = choreo.toJson(); } - if (originalSent != null) { - event[ModelKey.originalSent] = originalSent.toJson(); - } if (originalWritten != null) { event[ModelKey.originalWritten] = originalWritten.toJson(); } @@ -238,9 +253,6 @@ extension EventsRoomExtension on Room { if (messageTag != null) { event[ModelKey.messageTags] = messageTag; } - if (tempEventId != null) { - event[ModelKey.tempEventId] = tempEventId; - } if (parseMarkdown) { final html = markdown( @@ -281,46 +293,59 @@ extension EventsRoomExtension on Room { Future> getRoomAnalyticsEvents({ String? userID, int? count, + DateTime? since, }) async { userID ??= client.userID; if (userID == null) return []; - GetRoomEventsResponse resp = await client.getRoomEvents( - id, - Direction.b, - limit: count ?? 100, - filter: jsonEncode( - StateFilter( + + final timeline = await getTimeline(); + + int numSearches = 0; + while (numSearches < 10 && timeline.canRequestFuture) { + await timeline.requestFuture( + historyCount: 100, + filter: StateFilter( types: [ PangeaEventTypes.construct, ], senders: [userID], ), - ), - ); - - int numSearches = 0; - while (numSearches < 10 && resp.end != null) { - if (count != null && resp.chunk.length <= count) break; - final nextResp = await client.getRoomEvents( - id, - Direction.b, - limit: count ?? 100, - filter: jsonEncode( - StateFilter( - types: [ - PangeaEventTypes.construct, - ], - senders: [userID], - ), - ), - from: resp.end, ); - nextResp.chunk.addAll(resp.chunk); - resp = nextResp; numSearches += 1; } - return resp.chunk.map((e) => Event.fromMatrixEvent(e, this)).toList(); + while (numSearches < 10 && + timeline.canRequestHistory && + (count == null || timeline.events.length < count) && + (since == null || + timeline.chunk.events.first.originServerTs.isAfter(since))) { + await timeline.requestHistory( + historyCount: 100, + filter: StateFilter( + types: [ + PangeaEventTypes.construct, + ], + senders: [userID], + ), + ); + numSearches += 1; + } + + final events = timeline.chunk.events + .where( + (e) => e.type == PangeaEventTypes.construct && e.senderId == userID, + ) + .map((e) => Event.fromMatrixEvent(e, this)); + + if (count != null) { + return events.take(count).toList(); + } + + if (since != null) { + return events.where((e) => e.originServerTs.isAfter(since)).toList(); + } + + return events.toList(); } Future> getAllEvents({String? since}) async { @@ -385,4 +410,40 @@ extension EventsRoomExtension on Room { return allPangeaMessages; } + + List getPreviousMessages({int numMessages = 5}) { + if (timeline == null) return []; + final events = timeline!.events + .where( + (e) => + e.type == EventTypes.Message && + (e.messageType == MessageTypes.Text || + e.messageType == MessageTypes.Audio), + ) + .toList(); + + final List messages = []; + for (final Event event in events) { + final String? content = event.messageType == MessageTypes.Text + ? event.content.toString() + : PangeaMessageEvent( + event: event, + timeline: timeline!, + ownMessage: event.senderId == client.userID, + ).getSpeechToTextLocal()?.transcript.text.trim(); + + if (content == null) continue; + messages.add( + PreviousMessage( + content: content, + sender: event.senderId, + timestamp: event.originServerTs, + ), + ); + if (messages.length >= numMessages) { + return messages; + } + } + return messages; + } } diff --git a/lib/pangea/extensions/room_information_extension.dart b/lib/pangea/extensions/room_information_extension.dart index e0ba4f362..cb2fbbb86 100644 --- a/lib/pangea/extensions/room_information_extension.dart +++ b/lib/pangea/extensions/room_information_extension.dart @@ -15,10 +15,6 @@ extension RoomInformationRoomExtension on Room { ); } - Future get isBotDM async { - return botOptions?.mode == BotMode.directChat && await botIsInRoom; - } - String? get roomType => getState(EventTypes.RoomCreate)?.content.tryGet('type'); diff --git a/lib/pangea/find_your_people/find_your_people_constants.dart b/lib/pangea/find_your_people/find_your_people_constants.dart deleted file mode 100644 index 04cf879ff..000000000 --- a/lib/pangea/find_your_people/find_your_people_constants.dart +++ /dev/null @@ -1,3 +0,0 @@ -class FindYourPeopleConstants { - static const String sideBearFileName = "Bear_Find_your_people.png"; -} diff --git a/lib/pangea/instructions/instructions_enum.dart b/lib/pangea/instructions/instructions_enum.dart index ae0d821d1..da6c019a7 100644 --- a/lib/pangea/instructions/instructions_enum.dart +++ b/lib/pangea/instructions/instructions_enum.dart @@ -22,10 +22,18 @@ enum InstructionsEnum { analyticsVocabList, morphAnalyticsList, activityAnalyticsList, + levelAnalytics, readingAssistanceOverview, emptyChatWarning, activityStatsMenu, - chatListTooltip, + chatParticipantTooltip, + courseParticipantTooltip, + noSavedActivitiesYet, + setLemmaEmoji, + disableLanguageTools, + selectMeaning, + clickTextMessages, + clickAudioMessages, } extension InstructionsEnumExtension on InstructionsEnum { @@ -36,6 +44,7 @@ extension InstructionsEnumExtension on InstructionsEnum { case InstructionsEnum.ttsDisabled: return l10n.ttsDisbledTitle; case InstructionsEnum.chooseWordAudio: + case InstructionsEnum.selectMeaning: case InstructionsEnum.chooseEmoji: case InstructionsEnum.activityPlannerOverview: case InstructionsEnum.speechToText: @@ -49,8 +58,15 @@ extension InstructionsEnumExtension on InstructionsEnum { case InstructionsEnum.morphAnalyticsList: case InstructionsEnum.readingAssistanceOverview: case InstructionsEnum.activityStatsMenu: - case InstructionsEnum.chatListTooltip: + case InstructionsEnum.chatParticipantTooltip: + case InstructionsEnum.courseParticipantTooltip: case InstructionsEnum.activityAnalyticsList: + case InstructionsEnum.levelAnalytics: + case InstructionsEnum.noSavedActivitiesYet: + case InstructionsEnum.setLemmaEmoji: + case InstructionsEnum.disableLanguageTools: + case InstructionsEnum.clickTextMessages: + case InstructionsEnum.clickAudioMessages: ErrorHandler.logError( e: Exception("No title for this instruction"), m: 'InstructionsEnumExtension.title', @@ -96,15 +112,29 @@ extension InstructionsEnumExtension on InstructionsEnum { case InstructionsEnum.morphAnalyticsList: return l10n.morphAnalyticsListBody; case InstructionsEnum.activityAnalyticsList: - return l10n.activityAnalyticsListBody; + return l10n.activityAnalyticsTooltipBody; case InstructionsEnum.readingAssistanceOverview: return l10n.readingAssistanceOverviewBody; case InstructionsEnum.emptyChatWarning: return l10n.emptyChatWarningDesc; case InstructionsEnum.activityStatsMenu: return l10n.activityStatsButtonInstruction; - case InstructionsEnum.chatListTooltip: - return l10n.chatListTooltip; + case InstructionsEnum.chatParticipantTooltip: + return l10n.chatParticipantTooltip; + case InstructionsEnum.courseParticipantTooltip: + return l10n.courseParticipantTooltip; + case InstructionsEnum.levelAnalytics: + return l10n.levelInfoTooltip; + case InstructionsEnum.noSavedActivitiesYet: + return l10n.noSavedActivitiesYet; + case InstructionsEnum.setLemmaEmoji: + case InstructionsEnum.clickTextMessages: + case InstructionsEnum.clickAudioMessages: + return ""; + case InstructionsEnum.disableLanguageTools: + return l10n.disableLanguageToolsDesc; + case InstructionsEnum.selectMeaning: + return l10n.selectMeaning; } } diff --git a/lib/pangea/instructions/instructions_show_popup.dart b/lib/pangea/instructions/instructions_show_popup.dart deleted file mode 100644 index 65b53ac87..000000000 --- a/lib/pangea/instructions/instructions_show_popup.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; -import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/card_header.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_toggle.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -/// Instruction Card gives users tips on -/// how to use Pangea Chat's features -Future instructionsShowPopup( - BuildContext context, - InstructionsEnum key, - String transformTargetKey, { - bool showToggle = true, - Widget? customContent, - bool forceShow = false, -}) async { - final bool userLangsSet = - await MatrixState.pangeaController.userController.areUserLanguagesSet; - if (!userLangsSet) { - return; - } - - // if ((_instructionsShown[key.toString()] ?? false) && !forceShow) { - // return; - // } - // _instructionsShown[key.toString()] = true; - - if (key.isToggledOff && !forceShow) { - return; - } - - final botStyle = BotStyle.text(context); - Future.delayed( - const Duration(seconds: 1), - () { - if (!context.mounted) return; - OverlayUtil.showPositionedCard( - context: context, - backDropToDismiss: false, - cardToShow: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - CardHeader( - text: key.title(L10n.of(context)), - botExpression: BotExpression.idle, - // onClose: () => {_instructionsClosed[key.toString()] = true}, - ), - const SizedBox(height: 10.0), - Padding( - padding: const EdgeInsets.all(6.0), - child: Text( - key.body(L10n.of(context)), - style: botStyle, - ), - ), - if (customContent != null) customContent, - if (showToggle) InstructionsToggle(instructionsKey: key), - ], - ), - maxHeight: 300, - maxWidth: 300, - transformTargetId: transformTargetKey, - closePrevOverlay: false, - overlayKey: key.toString(), - ); - }, - ); -} diff --git a/lib/pangea/instructions/reset_instructions_list_tile.dart b/lib/pangea/instructions/reset_instructions_list_tile.dart index 5d3d1bafe..4154498ee 100644 --- a/lib/pangea/instructions/reset_instructions_list_tile.dart +++ b/lib/pangea/instructions/reset_instructions_list_tile.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; class ResetInstructionsListTile extends StatelessWidget { diff --git a/lib/pangea/spaces/utils/join_with_link.dart b/lib/pangea/join_codes/join_with_link_page.dart similarity index 88% rename from lib/pangea/spaces/utils/join_with_link.dart rename to lib/pangea/join_codes/join_with_link_page.dart index b37f750b4..ddf28debb 100644 --- a/lib/pangea/spaces/utils/join_with_link.dart +++ b/lib/pangea/join_codes/join_with_link_page.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; -import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; //if on home with classcode in url and not logged in, then save it soemhow and after llogin, join class automatically //if on home with classcode in url and logged in, then join class automatically @@ -33,8 +33,7 @@ class _JoinClassWithLinkState extends State { } if (widget.classCode != null) { - await MatrixState.pangeaController.spaceCodeController - .cacheSpaceCode(widget.classCode!); + await SpaceCodeRepo.setSpaceCode(widget.classCode!); } context.push("/home"); }); diff --git a/lib/pangea/spaces/utils/knock_space_extension.dart b/lib/pangea/join_codes/knock_space_extension.dart similarity index 100% rename from lib/pangea/spaces/utils/knock_space_extension.dart rename to lib/pangea/join_codes/knock_space_extension.dart diff --git a/lib/pangea/spaces/controllers/space_code_controller.dart b/lib/pangea/join_codes/space_code_controller.dart similarity index 66% rename from lib/pangea/spaces/controllers/space_code_controller.dart rename to lib/pangea/join_codes/space_code_controller.dart index d0404a19f..1606f2792 100644 --- a/lib/pangea/spaces/controllers/space_code_controller.dart +++ b/lib/pangea/join_codes/space_code_controller.dart @@ -5,81 +5,61 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:go_router/go_router.dart'; -import 'package:http/http.dart'; +import 'package:http/http.dart' hide Client; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/common/constants/local.key.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/spaces/utils/knock_space_extension.dart'; -import 'package:fluffychat/pangea/spaces/widgets/too_many_requests_dialog.dart'; +import 'package:fluffychat/pangea/join_codes/knock_space_extension.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; +import 'package:fluffychat/pangea/join_codes/too_many_requests_dialog.dart'; +import 'package:fluffychat/pangea/spaces/space_constants.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import '../../common/controllers/base_controller.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../common/controllers/base_controller.dart'; class NotFoundException implements Exception {} class SpaceCodeController extends BaseController { - late PangeaController _pangeaController; - static final GetStorage _spaceStorage = GetStorage('class_storage'); + static ValueNotifier codeNotifier = ValueNotifier(null); - Completer initCompleter = Completer(); - - SpaceCodeController(PangeaController pangeaController) : super() { - _pangeaController = pangeaController; - GetStorage.init('class_storage').then( - (_) => initCompleter.complete(), - ); + static Future onOpenAppViaUrl(Uri url) async { + if (url.fragment.isEmpty) return; + final fragment = Uri.parse(url.fragment); + final code = fragment.queryParameters[SpaceConstants.classCode]; + if (code != null && fragment.path.contains('join_with_link')) { + await SpaceCodeRepo.setSpaceCode(code); + codeNotifier.value = code; + } } - Future cacheSpaceCode(String code) async { - if (code.isEmpty) return; - await _spaceStorage.write( - PLocalKey.cachedSpaceCodeToJoin, - code, - ); - } - - String? get justInputtedCode => - _spaceStorage.read(PLocalKey.justInputtedCode); - - String? get cachedSpaceCode => - _spaceStorage.read(PLocalKey.cachedSpaceCodeToJoin); - - Future joinCachedSpaceCode(BuildContext context) async { - final String? spaceCode = cachedSpaceCode; + static Future joinCachedSpaceCode(BuildContext context) async { + final String? spaceCode = SpaceCodeRepo.spaceCode; if (spaceCode == null) return null; final spaceId = await joinSpaceWithCode( context, spaceCode, ); - await _spaceStorage.remove( - PLocalKey.cachedSpaceCodeToJoin, - ); - + await SpaceCodeRepo.clearSpaceCode(); if (spaceId != null) { - final room = _pangeaController.matrixState.client.getRoomById(spaceId); + final room = + MatrixState.pangeaController.matrixState.client.getRoomById(spaceId); room?.isSpace ?? true ? context.go('/rooms/spaces/$spaceId/details') : context.go('/rooms/${room?.id}'); return spaceId; } - return null; } - Future joinSpaceWithCode( + static Future joinSpaceWithCode( BuildContext context, String spaceCode, { String? notFoundError, }) async { - final client = _pangeaController.matrixState.client; - await _spaceStorage.write( - PLocalKey.justInputtedCode, - spaceCode, - ); + final client = MatrixState.pangeaController.matrixState.client; + await SpaceCodeRepo.setRecentCode(spaceCode); final resp = await showFutureLoadingDialog( context: context, @@ -144,8 +124,8 @@ class SpaceCodeController extends BaseController { return roomIdToJoin; } - Future _joinSpace(String spaceId) async { - final client = _pangeaController.matrixState.client; + static Future _joinSpace(String spaceId) async { + final client = MatrixState.pangeaController.matrixState.client; await client.joinRoomById(spaceId); Room? room = client.getRoomById(spaceId); diff --git a/lib/pangea/join_codes/space_code_extension.dart b/lib/pangea/join_codes/space_code_extension.dart new file mode 100644 index 000000000..2fa43262d --- /dev/null +++ b/lib/pangea/join_codes/space_code_extension.dart @@ -0,0 +1,34 @@ +import 'dart:convert'; + +import 'package:http/http.dart' hide Client; +import 'package:matrix/matrix.dart'; +import 'package:matrix/matrix_api_lite/generated/api.dart'; + +extension SpaceCodeExtension on Api { + Future getSpaceCode() async { + final requestUri = Uri( + path: '/_synapse/client/pangea/v1/request_room_code', + ); + final request = Request('GET', baseUri!.resolveUri(requestUri)); + request.headers['content-type'] = 'application/json'; + request.headers['authorization'] = 'Bearer ${bearerToken!}'; + final response = await httpClient.send(request); + final responseBody = await response.stream.toBytes(); + final responseString = utf8.decode(responseBody); + if (response.statusCode != 200) { + throw Exception( + 'HTTP error response: statusCode=${response.statusCode}, body=$responseString', + ); + } + final json = jsonDecode(responseString); + if (json['access_code'] is String) { + return json['access_code'] as String; + } else { + throw Exception('Invalid response, access_code not found $response'); + } + } +} + +extension SpaceCodeRequest on Client { + Future requestSpaceCode() => getSpaceCode(); +} diff --git a/lib/pangea/join_codes/space_code_repo.dart b/lib/pangea/join_codes/space_code_repo.dart new file mode 100644 index 000000000..af6ab3fd8 --- /dev/null +++ b/lib/pangea/join_codes/space_code_repo.dart @@ -0,0 +1,36 @@ +import 'package:get_storage/get_storage.dart'; + +import 'package:fluffychat/pangea/common/constants/local.key.dart'; + +class SpaceCodeRepo { + static final GetStorage _spaceStorage = GetStorage('class_storage'); + + static String? get spaceCode => + _spaceStorage.read(PLocalKey.cachedSpaceCodeToJoin); + + static String? get recentCode => + _spaceStorage.read(PLocalKey.justInputtedCode); + + static Future setSpaceCode(String code) async { + if (code.isEmpty) return; + await _spaceStorage.write( + PLocalKey.cachedSpaceCodeToJoin, + code, + ); + } + + static Future setRecentCode(String code) async { + await _spaceStorage.write( + PLocalKey.justInputtedCode, + code, + ); + } + + static Future clearSpaceCode() async { + await _spaceStorage.remove(PLocalKey.cachedSpaceCodeToJoin); + } + + static Future clearRecentCode() async { + await _spaceStorage.remove(PLocalKey.justInputtedCode); + } +} diff --git a/lib/pangea/spaces/widgets/too_many_requests_dialog.dart b/lib/pangea/join_codes/too_many_requests_dialog.dart similarity index 100% rename from lib/pangea/spaces/widgets/too_many_requests_dialog.dart rename to lib/pangea/join_codes/too_many_requests_dialog.dart diff --git a/lib/pangea/learning_settings/enums/l2_support_enum.dart b/lib/pangea/languages/l2_support_enum.dart similarity index 97% rename from lib/pangea/learning_settings/enums/l2_support_enum.dart rename to lib/pangea/languages/l2_support_enum.dart index 5d49df919..e5083ce39 100644 --- a/lib/pangea/learning_settings/enums/l2_support_enum.dart +++ b/lib/pangea/languages/l2_support_enum.dart @@ -6,10 +6,8 @@ enum L2SupportEnum { na, alpha, beta, - full, -} + full; -extension L2SupportEnumExtension on L2SupportEnum { String get storageString { switch (this) { case L2SupportEnum.na: diff --git a/lib/pangea/languages/language_arc_model.dart b/lib/pangea/languages/language_arc_model.dart new file mode 100644 index 000000000..c55d8a66b --- /dev/null +++ b/lib/pangea/languages/language_arc_model.dart @@ -0,0 +1,33 @@ +import 'package:fluffychat/pangea/languages/language_model.dart'; + +class LanguageArc { + final LanguageModel l1; + final LanguageModel l2; + + LanguageArc({ + required this.l1, + required this.l2, + }); + + factory LanguageArc.fromJson(Map json) { + return LanguageArc( + l1: LanguageModel.fromJson(json['l1'] as Map), + l2: LanguageModel.fromJson(json['l2'] as Map), + ); + } + + Map toJson() { + return { + 'l1': l1.toJson(), + 'l2': l2.toJson(), + }; + } + + @override + int get hashCode => l1.hashCode ^ l2.hashCode; + + @override + bool operator ==(Object other) { + return other is LanguageArc && other.l1 == l1 && other.l2 == l2; + } +} diff --git a/lib/pangea/learning_settings/constants/language_constants.dart b/lib/pangea/languages/language_constants.dart similarity index 98% rename from lib/pangea/learning_settings/constants/language_constants.dart rename to lib/pangea/languages/language_constants.dart index 972bb3614..89a005ce5 100644 --- a/lib/pangea/learning_settings/constants/language_constants.dart +++ b/lib/pangea/languages/language_constants.dart @@ -1,23 +1,24 @@ -import 'package:fluffychat/pangea/choreographer/models/language_detection_model.dart'; - class LanguageKeys { static const unknownLanguage = "unk"; - static const mixedLanguage = "mixed"; static const defaultLanguage = "en"; - static const multiLanguage = "multi"; } -class PrefKey { - static const lastFetched = 'p_lang_lastfetched'; - static const languagesKey = 'p_lang_flag'; -} +class LanguageConstants { + static final List rtlLanguageCodes = [ + 'ar', + 'arc', + 'dv', + 'fa', + 'ha', + 'he', + 'khw', + 'ks', + 'ku', + 'ps', + 'ur', + 'yi', + ]; -final LanguageDetection unknownLanguageDetection = LanguageDetection( - langCode: LanguageKeys.unknownLanguage, - confidence: 0.5, -); - -class FallbackLanguage { static List> get languageList => [ { "language_code": "ab", diff --git a/lib/pangea/languages/language_model.dart b/lib/pangea/languages/language_model.dart new file mode 100644 index 000000000..4eda72f43 --- /dev/null +++ b/lib/pangea/languages/language_model.dart @@ -0,0 +1,353 @@ +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/languages/l2_support_enum.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; + +class LanguageModel { + final String langCode; + final String displayName; + final String script; + final String? localeEmoji; + final L2SupportEnum l2Support; + final TextDirection? _textDirection; + final List voices; + + LanguageModel({ + required this.langCode, + required this.displayName, + this.localeEmoji, + this.script = LanguageKeys.unknownLanguage, + this.l2Support = L2SupportEnum.na, + this.voices = const [], + TextDirection? textDirection, + }) : _textDirection = textDirection; + + factory LanguageModel.fromJson(json) { + final String code = json['language_code'] ?? + codeFromNameOrCode( + json['language_name'], + json['language_flag'], + ); + + return LanguageModel( + langCode: code, + displayName: json['language_name'], + l2Support: json['l2_support'] != null + ? L2SupportEnum.na.fromStorageString(json['l2_support']) + : L2SupportEnum.na, + script: json['script'] ?? LanguageKeys.unknownLanguage, + textDirection: json['text_direction'] != null + ? TextDirection.values.firstWhereOrNull( + (e) => e.name == json['text_direction'], + ) + : null, + localeEmoji: json['locale_emoji'], + voices: json['voices'] != null ? List.from(json['voices']) : [], + ); + } + + Map toJson() => { + 'language_code': langCode, + 'language_name': displayName, + 'script': script, + 'l2_support': l2Support.storageString, + 'text_direction': textDirection.name, + 'locale_emoji': localeEmoji, + 'voices': voices, + }; + + bool get l2 => l2Support != L2SupportEnum.na; + + // Discuss with Jordan - adding langCode field to language objects as separate from displayName + static String codeFromNameOrCode(String codeOrName, [String? url]) { + if (codeOrName.isEmpty) return LanguageKeys.unknownLanguage; + if (codeOrName == LanguageKeys.unknownLanguage) return codeOrName; + + if (url == null) return LanguageKeys.unknownLanguage; + + final List split = url.split('/'); + return split.last.split('.').first; + } + + //PTODO - add flag for unknown + static LanguageModel get unknown => LanguageModel( + langCode: LanguageKeys.unknownLanguage, + displayName: "Unknown", + ); + + String getDisplayName(BuildContext context) { + final langKey = "${langCode.replaceAll("-", "")}DisplayName"; + final l10n = L10n.of(context); + + final displayNameMap = { + "aceDisplayName": l10n.aceDisplayName, + "achDisplayName": l10n.achDisplayName, + "afDisplayName": l10n.afDisplayName, + "akDisplayName": l10n.akDisplayName, + "alzDisplayName": l10n.alzDisplayName, + "amDisplayName": l10n.amDisplayName, + "arDisplayName": l10n.arDisplayName, + "asDisplayName": l10n.asDisplayName, + "awaDisplayName": l10n.awaDisplayName, + "ayDisplayName": l10n.ayDisplayName, + "azDisplayName": l10n.azDisplayName, + "baDisplayName": l10n.baDisplayName, + "banDisplayName": l10n.banDisplayName, + "bbcDisplayName": l10n.bbcDisplayName, + "beDisplayName": l10n.beDisplayName, + "bemDisplayName": l10n.bemDisplayName, + "bewDisplayName": l10n.bewDisplayName, + "bgDisplayName": l10n.bgDisplayName, + "bhoDisplayName": l10n.bhoDisplayName, + "bikDisplayName": l10n.bikDisplayName, + "bmDisplayName": l10n.bmDisplayName, + "bnDisplayName": l10n.bnDisplayName, + "bnBDDisplayName": l10n.bnBDDisplayName, + "bnINDisplayName": l10n.bnINDisplayName, + "brDisplayName": l10n.brDisplayName, + "bsDisplayName": l10n.bsDisplayName, + "btsDisplayName": l10n.btsDisplayName, + "btxDisplayName": l10n.btxDisplayName, + "buaDisplayName": l10n.buaDisplayName, + "caDisplayName": l10n.caDisplayName, + "cebDisplayName": l10n.cebDisplayName, + "cggDisplayName": l10n.cggDisplayName, + "chmDisplayName": l10n.chmDisplayName, + "ckbDisplayName": l10n.ckbDisplayName, + "cnhDisplayName": l10n.cnhDisplayName, + "coDisplayName": l10n.coDisplayName, + "crhDisplayName": l10n.crhDisplayName, + "crsDisplayName": l10n.crsDisplayName, + "csDisplayName": l10n.csDisplayName, + "cvDisplayName": l10n.cvDisplayName, + "cyDisplayName": l10n.cyDisplayName, + "daDisplayName": l10n.daDisplayName, + "deDisplayName": l10n.deDisplayName, + "dinDisplayName": l10n.dinDisplayName, + "doiDisplayName": l10n.doiDisplayName, + "dovDisplayName": l10n.dovDisplayName, + "dzDisplayName": l10n.dzDisplayName, + "eeDisplayName": l10n.eeDisplayName, + "enDisplayName": l10n.enDisplayName, + "enAUDisplayName": l10n.enAUDisplayName, + "enGBDisplayName": l10n.enGBDisplayName, + "enINDisplayName": l10n.enINDisplayName, + "enUSDisplayName": l10n.enUSDisplayName, + "eoDisplayName": l10n.eoDisplayName, + "esDisplayName": l10n.esDisplayName, + "esESDisplayName": l10n.esESDisplayName, + "esMXDisplayName": l10n.esMXDisplayName, + "euDisplayName": l10n.euDisplayName, + "faDisplayName": l10n.faDisplayName, + "ffDisplayName": l10n.ffDisplayName, + "fiDisplayName": l10n.fiDisplayName, + "filDisplayName": l10n.filDisplayName, + "fjDisplayName": l10n.fjDisplayName, + "foDisplayName": l10n.foDisplayName, + "frDisplayName": l10n.frDisplayName, + "frCADisplayName": l10n.frCADisplayName, + "frFRDisplayName": l10n.frFRDisplayName, + "fyDisplayName": l10n.fyDisplayName, + "gaDisplayName": l10n.gaDisplayName, + "gaaDisplayName": l10n.gaaDisplayName, + "gdDisplayName": l10n.gdDisplayName, + "glDisplayName": l10n.glDisplayName, + "gnDisplayName": l10n.gnDisplayName, + "gomDisplayName": l10n.gomDisplayName, + "guDisplayName": l10n.guDisplayName, + "haDisplayName": l10n.haDisplayName, + "hawDisplayName": l10n.hawDisplayName, + "heDisplayName": l10n.heDisplayName, + "hiDisplayName": l10n.hiDisplayName, + "hilDisplayName": l10n.hilDisplayName, + "hmnDisplayName": l10n.hmnDisplayName, + "hneDisplayName": l10n.hneDisplayName, + "hrDisplayName": l10n.hrDisplayName, + "hrxDisplayName": l10n.hrxDisplayName, + "htDisplayName": l10n.htDisplayName, + "huDisplayName": l10n.huDisplayName, + "hyDisplayName": l10n.hyDisplayName, + "idDisplayName": l10n.idDisplayName, + "igDisplayName": l10n.igDisplayName, + "iloDisplayName": l10n.iloDisplayName, + "isDisplayName": l10n.isDisplayName, + "itDisplayName": l10n.itDisplayName, + "jaDisplayName": l10n.jaDisplayName, + "jvDisplayName": l10n.jvDisplayName, + "kaDisplayName": l10n.kaDisplayName, + "kkDisplayName": l10n.kkDisplayName, + "kmDisplayName": l10n.kmDisplayName, + "knDisplayName": l10n.knDisplayName, + "koDisplayName": l10n.koDisplayName, + "kokDisplayName": l10n.kokDisplayName, + "kriDisplayName": l10n.kriDisplayName, + "ksDisplayName": l10n.ksDisplayName, + "ktuDisplayName": l10n.ktuDisplayName, + "kuDisplayName": l10n.kuDisplayName, + "kyDisplayName": l10n.kyDisplayName, + "laDisplayName": l10n.laDisplayName, + "lbDisplayName": l10n.lbDisplayName, + "lgDisplayName": l10n.lgDisplayName, + "liDisplayName": l10n.liDisplayName, + "lijDisplayName": l10n.lijDisplayName, + "lmoDisplayName": l10n.lmoDisplayName, + "lnDisplayName": l10n.lnDisplayName, + "loDisplayName": l10n.loDisplayName, + "ltDisplayName": l10n.ltDisplayName, + "ltgDisplayName": l10n.ltgDisplayName, + "luoDisplayName": l10n.luoDisplayName, + "lusDisplayName": l10n.lusDisplayName, + "lvDisplayName": l10n.lvDisplayName, + "maiDisplayName": l10n.maiDisplayName, + "makDisplayName": l10n.makDisplayName, + "mgDisplayName": l10n.mgDisplayName, + "miDisplayName": l10n.miDisplayName, + "minDisplayName": l10n.minDisplayName, + "mkDisplayName": l10n.mkDisplayName, + "mlDisplayName": l10n.mlDisplayName, + "mnDisplayName": l10n.mnDisplayName, + "mniDisplayName": l10n.mniDisplayName, + "mrDisplayName": l10n.mrDisplayName, + "msDisplayName": l10n.msDisplayName, + "msArabDisplayName": l10n.msArabDisplayName, + "msMYDisplayName": l10n.msMYDisplayName, + "mtDisplayName": l10n.mtDisplayName, + "mwrDisplayName": l10n.mwrDisplayName, + "myDisplayName": l10n.myDisplayName, + "nanDisplayName": l10n.nanDisplayName, + "nbDisplayName": l10n.nbDisplayName, + "neDisplayName": l10n.neDisplayName, + "newDisplayName": l10n.newDisplayName, + "nlDisplayName": l10n.nlDisplayName, + "nlBEDisplayName": l10n.nlBEDisplayName, + "noDisplayName": l10n.noDisplayName, + "nrDisplayName": l10n.nrDisplayName, + "nsoDisplayName": l10n.nsoDisplayName, + "nusDisplayName": l10n.nusDisplayName, + "nyDisplayName": l10n.nyDisplayName, + "ocDisplayName": l10n.ocDisplayName, + "omDisplayName": l10n.omDisplayName, + "orDisplayName": l10n.orDisplayName, + "paDisplayName": l10n.paDisplayName, + "paArabDisplayName": l10n.paArabDisplayName, + "paINDisplayName": l10n.paINDisplayName, + "pagDisplayName": l10n.pagDisplayName, + "pamDisplayName": l10n.pamDisplayName, + "papDisplayName": l10n.papDisplayName, + "plDisplayName": l10n.plDisplayName, + "psDisplayName": l10n.psDisplayName, + "ptDisplayName": l10n.ptDisplayName, + "ptBRDisplayName": l10n.ptBRDisplayName, + "ptPTDisplayName": l10n.ptPTDisplayName, + "quDisplayName": l10n.quDisplayName, + "rajDisplayName": l10n.rajDisplayName, + "rnDisplayName": l10n.rnDisplayName, + "roDisplayName": l10n.roDisplayName, + "roMDDisplayName": l10n.roMDDisplayName, + "romDisplayName": l10n.romDisplayName, + "ruDisplayName": l10n.ruDisplayName, + "rwDisplayName": l10n.rwDisplayName, + "saDisplayName": l10n.saDisplayName, + "satDisplayName": l10n.satDisplayName, + "scnDisplayName": l10n.scnDisplayName, + "sdDisplayName": l10n.sdDisplayName, + "sgDisplayName": l10n.sgDisplayName, + "shnDisplayName": l10n.shnDisplayName, + "siDisplayName": l10n.siDisplayName, + "skDisplayName": l10n.skDisplayName, + "slDisplayName": l10n.slDisplayName, + "smDisplayName": l10n.smDisplayName, + "snDisplayName": l10n.snDisplayName, + "soDisplayName": l10n.soDisplayName, + "sqDisplayName": l10n.sqDisplayName, + "srDisplayName": l10n.srDisplayName, + "srMEDisplayName": l10n.srMEDisplayName, + "ssDisplayName": l10n.ssDisplayName, + "stDisplayName": l10n.stDisplayName, + "suDisplayName": l10n.suDisplayName, + "svDisplayName": l10n.svDisplayName, + "swDisplayName": l10n.swDisplayName, + "szlDisplayName": l10n.szlDisplayName, + "taDisplayName": l10n.taDisplayName, + "teDisplayName": l10n.teDisplayName, + "tetDisplayName": l10n.tetDisplayName, + "tgDisplayName": l10n.tgDisplayName, + "thDisplayName": l10n.thDisplayName, + "tiDisplayName": l10n.tiDisplayName, + "tkDisplayName": l10n.tkDisplayName, + "tlDisplayName": l10n.tlDisplayName, + "tnDisplayName": l10n.tnDisplayName, + "trDisplayName": l10n.trDisplayName, + "tsDisplayName": l10n.tsDisplayName, + "ttDisplayName": l10n.ttDisplayName, + "ugDisplayName": l10n.ugDisplayName, + "ukDisplayName": l10n.ukDisplayName, + "urDisplayName": l10n.urDisplayName, + "urINDisplayName": l10n.urINDisplayName, + "urPKDisplayName": l10n.urPKDisplayName, + "uzDisplayName": l10n.uzDisplayName, + "viDisplayName": l10n.viDisplayName, + "wuuDisplayName": l10n.wuuDisplayName, + "xhDisplayName": l10n.xhDisplayName, + "yiDisplayName": l10n.yiDisplayName, + "yoDisplayName": l10n.yoDisplayName, + "yuaDisplayName": l10n.yuaDisplayName, + "yueDisplayName": l10n.yueDisplayName, + "yueCNDisplayName": l10n.yueCNDisplayName, + "yueHKDisplayName": l10n.yueHKDisplayName, + "zhDisplayName": l10n.zhDisplayName, + "zhCNDisplayName": l10n.zhCNDisplayName, + "zhTWDisplayName": l10n.zhTWDisplayName, + "zuDisplayName": l10n.zuDisplayName, + }; + + final display = displayNameMap[langKey] ?? displayName; + if (langCode.contains('-') && localeEmoji != null) { + // use regex to replace parentheses content with the locale emoji + final regex = RegExp(r'\s*\(.*?\)\s*'); + return display.replaceFirst(regex, ' $localeEmoji '); + } + return display; + } + + String get langCodeShort => langCode.split('-').first; + + TextDirection get _defaultTextDirection { + return LanguageConstants.rtlLanguageCodes.contains(langCodeShort) + ? TextDirection.rtl + : TextDirection.ltr; + } + + TextDirection get textDirection { + return _textDirection ?? _defaultTextDirection; + } + + static bool search( + LanguageModel? item, + String searchValue, + BuildContext context, + ) { + if (item == null) return searchValue.isEmpty; + final search = searchValue.toLowerCase(); + final displayName = item.displayName.toLowerCase(); + final displayNameLocal = item.getDisplayName(context).toLowerCase(); + final langCode = item.langCode.toLowerCase(); + return displayName.startsWith(search) || + displayNameLocal.startsWith(search) || + langCode.startsWith(search); + } + + @override + bool operator ==(Object other) { + if (other is LanguageModel) { + return langCode == other.langCode; + } + return false; + } + + @override + int get hashCode => langCode.hashCode; +} diff --git a/lib/pangea/languages/language_repo.dart b/lib/pangea/languages/language_repo.dart new file mode 100644 index 000000000..9ad7b6329 --- /dev/null +++ b/lib/pangea/languages/language_repo.dart @@ -0,0 +1,53 @@ +import 'dart:convert'; +import 'dart:developer'; + +import 'package:flutter/foundation.dart'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import '../common/network/requests.dart'; + +class LanguageRepo { + static Future>> get() async { + try { + final languages = await _fetch(); + return Result.value(languages); + } catch (e) { + return Result.error(e); + } + } + + static Future> _fetch() async { + final Requests req = Requests( + choreoApiKey: Environment.choreoApiKey, + ); + + final Response res = await req.get( + url: PApiUrls.getLanguages, + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to fetch languages: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + return (jsonDecode(utf8.decode(res.bodyBytes)) as List) + .map((e) { + try { + return LanguageModel.fromJson(e); + } catch (err, stack) { + debugger(when: kDebugMode); + ErrorHandler.logError(e: err, s: stack, data: e); + return null; + } + }) + .whereType() + .toList(); + } +} diff --git a/lib/pangea/languages/language_service.dart b/lib/pangea/languages/language_service.dart new file mode 100644 index 000000000..685322937 --- /dev/null +++ b/lib/pangea/languages/language_service.dart @@ -0,0 +1,27 @@ +// ignore_for_file: depend_on_referenced_packages + +import 'package:flutter/material.dart'; + +import 'package:universal_io/io.dart'; + +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import '../learning_settings/p_language_dialog.dart'; + +class LanguageService { + static void showDialogOnEmptyLanguage( + BuildContext context, + Function callback, + ) { + if (!MatrixState.pangeaController.userController.languagesSet) { + pLanguageDialog(context, callback); + } + } + + static LanguageModel? get systemLanguage { + if (Platform.localeName.length < 2) return null; + final String systemLang = Platform.localeName.substring(0, 2); + return PLanguageStore.byLangCode(systemLang); + } +} diff --git a/lib/pangea/learning_settings/utils/locale_provider.dart b/lib/pangea/languages/locale_provider.dart similarity index 100% rename from lib/pangea/learning_settings/utils/locale_provider.dart rename to lib/pangea/languages/locale_provider.dart diff --git a/lib/pangea/languages/p_language_store.dart b/lib/pangea/languages/p_language_store.dart new file mode 100644 index 000000000..02c238b88 --- /dev/null +++ b/lib/pangea/languages/p_language_store.dart @@ -0,0 +1,145 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:collection/collection.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_repo.dart'; + +class PrefKey { + static const lastFetched = 'p_lang_lastfetched'; + static const languagesKey = 'p_lang_flag'; +} + +class PLanguageStore { + PLanguageStore() { + initialize(); + } + + static List _langList = []; + + List get targetOptions => + _langList.where((element) => element.l2).toList(); + + List get baseOptions => _langList.toList(); + + List get unlocalizedTargetOptions => _langList + .where( + (element) => + element.l2 && + (element.langCode == element.langCodeShort || + !element.displayName.contains("(")), + ) + .toList(); + + static Future initialize({forceRefresh = false}) async { + _langList = await _getCachedLanguages(); + final isOutdated = await _shouldFetch; + final shouldFetch = forceRefresh || + isOutdated || + _langList.isEmpty || + _langList.every((lang) => !lang.l2); + + if (shouldFetch) { + final result = await LanguageRepo.get(); + _langList = result.isValue + ? result.asValue!.value + : LanguageConstants.languageList + .map((e) => LanguageModel.fromJson(e)) + .toList(); + } + + await _MyShared.saveJson(PrefKey.languagesKey, { + PrefKey.languagesKey: _langList.map((e) => e.toJson()).toList(), + }); + + await _MyShared.saveString( + PrefKey.lastFetched, + DateTime.now().toIso8601String(), + ); + + _langList.removeWhere( + (element) => element.langCode == LanguageKeys.unknownLanguage, + ); + _langList = _langList.toSet().toList(); + _langList.sort((a, b) => a.displayName.compareTo(b.displayName)); + } + + static Future get _shouldFetch async { + final String? dateString = await _MyShared.readString(PrefKey.lastFetched); + if (dateString == null) { + return true; + } + + final DateTime? lastFetchedDate = DateTime.tryParse(dateString); + if (lastFetchedDate == null) { + return true; + } + + final DateTime targetDate = DateTime(2026, 1, 9); + if (lastFetchedDate.isBefore(targetDate)) { + return true; + } + + final int lastFetched = lastFetchedDate.millisecondsSinceEpoch; + final int now = DateTime.now().millisecondsSinceEpoch; + const int fetchIntervalInMilliseconds = 86534601; + return (now - lastFetched) >= fetchIntervalInMilliseconds; + } + + static Future> _getCachedLanguages() async { + final Map? languagesMap = await _MyShared.readJson( + PrefKey.languagesKey, + ); + + if (languagesMap == null) return []; + try { + return (languagesMap[PrefKey.languagesKey] as List) + .map((e) => LanguageModel.fromJson(e)) + .toList(); + } catch (err) { + return []; + } + } + + static LanguageModel? byLangCode(String langCode) => + _langList.firstWhereOrNull( + (element) => element.langCode == langCode, + ); +} + +class _MyShared { + static saveString(String key, String value) async { + final SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, value); + } + + static Future? readString(String key) async { + final SharedPreferences prefs = await SharedPreferences.getInstance(); + final String? source = prefs.getString(key); + return source; + } + + static saveJson(String key, Map value) async { + final SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, json.encode(value)); + } + + static Future? readJson(String key) async { + try { + final SharedPreferences prefs = await SharedPreferences.getInstance(); + final String? source = prefs.getString(key); + + if (source == null) { + return null; + } + final decodedJson = json.decoder.convert(source); + //var decodedJson = json.decode(source); + return decodedJson; + } catch (err) { + return null; + } + } +} diff --git a/lib/pangea/learning_settings/controllers/language_controller.dart b/lib/pangea/learning_settings/controllers/language_controller.dart deleted file mode 100644 index e76270af6..000000000 --- a/lib/pangea/learning_settings/controllers/language_controller.dart +++ /dev/null @@ -1,125 +0,0 @@ -// ignore_for_file: depend_on_referenced_packages - -import 'package:flutter/material.dart'; - -import 'package:universal_io/io.dart'; - -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import '../widgets/p_language_dialog.dart'; - -class LanguageController { - late PangeaController _pangeaController; - - LanguageController(PangeaController pangeaController) { - _pangeaController = pangeaController; - } - //show diloag when user does not have languages selected - showDialogOnEmptyLanguage(BuildContext context, Function callback) { - if (!languagesSet) { - pLanguageDialog(context, callback); - } - } - - bool get languagesSet => - _userL1Code != null && - _userL2Code != null && - _userL1Code!.isNotEmpty && - _userL2Code!.isNotEmpty && - _userL1Code != LanguageKeys.unknownLanguage && - _userL2Code != LanguageKeys.unknownLanguage; - - LanguageModel? get systemLanguage { - if (Platform.localeName.length < 2) return null; - final String systemLang = Platform.localeName.substring(0, 2); - return PLanguageStore.byLangCode(systemLang); - } - - String? get _userL1Code { - final source = - _pangeaController.userController.profile.userSettings.sourceLanguage; - return source == null || source.isEmpty ? systemLanguage?.langCode : source; - } - - String? get _userL2Code { - final target = - _pangeaController.userController.profile.userSettings.targetLanguage; - return target == null || target.isEmpty ? null : target; - } - - LanguageModel? get userL1 { - if (_userL1Code == null) return null; - final langModel = PLanguageStore.byLangCode(_userL1Code!); - return langModel?.langCode == LanguageKeys.unknownLanguage - ? null - : langModel; - } - - LanguageModel? get userL2 { - if (_userL2Code == null) return null; - final langModel = PLanguageStore.byLangCode(_userL2Code!); - return langModel?.langCode == LanguageKeys.unknownLanguage - ? null - : langModel; - } - - String? activeL1Code() { - return _userL1Code; - // final String? activeL2 = activeL2Code(roomID: roomID); - // if (roomID == null || activeL2 != _userL1Code) { - // return _userL1Code; - // } - // final LanguageSettingsModel? classContext = _pangeaController - // .matrixState.client - // .getRoomById(roomID) - // ?.firstLanguageSettings; - // final String? classL1 = classContext?.dominantLanguage; - // if (classL1 == LanguageKeys.mixedLanguage || - // classL1 == LanguageKeys.multiLanguage || - // classL1 == null) { - // if (_userL2Code != _userL1Code) { - // return _userL2Code; - // } - // return LanguageKeys.unknownLanguage; - // } - // return classL1; - } - - /// Class languages override user languages within a class context - String? activeL2Code() { - return _userL2Code; - // if (roomID == null) { - // return _userL2Code; - // } - // final LanguageSettingsModel? classContext = _pangeaController - // .matrixState.client - // .getRoomById(roomID) - // ?.firstLanguageSettings; - // return classContext?.targetLanguage ?? _userL2Code; - } - - LanguageModel? activeL1Model() { - return userL1; - // final activeL1 = activeL1Code(roomID: roomID); - // return activeL1 != null ? PangeaLanguage.byLangCode(activeL1) : null; - } - - LanguageModel? activeL2Model() { - return userL2; - // final activeL2 = activeL2Code(roomID: roomID); - // final model = activeL2 != null ? PangeaLanguage.byLangCode(activeL2) : null; - // return model; - } - - bool get showTranscription => - (_pangeaController.languageController.userL1 != null && - _pangeaController.languageController.userL2 != null && - _pangeaController.languageController.userL1?.script != - _pangeaController.languageController.userL2?.script) || - (_pangeaController.languageController.userL1?.script != - LanguageKeys.unknownLanguage || - _pangeaController.languageController.userL2?.script == - LanguageKeys.unknownLanguage); -} diff --git a/lib/pangea/learning_settings/utils/country_display.dart b/lib/pangea/learning_settings/country_display.dart similarity index 100% rename from lib/pangea/learning_settings/utils/country_display.dart rename to lib/pangea/learning_settings/country_display.dart diff --git a/lib/pangea/learning_settings/widgets/country_picker_tile.dart b/lib/pangea/learning_settings/country_picker_tile.dart similarity index 96% rename from lib/pangea/learning_settings/widgets/country_picker_tile.dart rename to lib/pangea/learning_settings/country_picker_tile.dart index 96f1c0658..250b4e6ba 100644 --- a/lib/pangea/learning_settings/widgets/country_picker_tile.dart +++ b/lib/pangea/learning_settings/country_picker_tile.dart @@ -6,8 +6,8 @@ import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/country_display.dart'; +import 'package:fluffychat/pangea/learning_settings/country_display.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; import 'package:fluffychat/widgets/matrix.dart'; class CountryPickerDropdown extends StatefulWidget { diff --git a/lib/pangea/learning_settings/disable_language_tools_popup.dart b/lib/pangea/learning_settings/disable_language_tools_popup.dart new file mode 100644 index 000000000..120161211 --- /dev/null +++ b/lib/pangea/learning_settings/disable_language_tools_popup.dart @@ -0,0 +1,68 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/common/widgets/card_header.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class DisableLanguageToolsPopup extends StatelessWidget { + final String overlayId; + + const DisableLanguageToolsPopup({ + super.key, + required this.overlayId, + }); + + Future _disableLanguageTools() async { + await MatrixState.pangeaController.userController.updateProfile( + (profile) { + profile.toolSettings.autoIGC = false; + return profile; + }, + waitForDataInSync: true, + ); + } + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CardHeader(L10n.of(context).disableLanguageToolsTitle), + Padding( + padding: const EdgeInsets.all(8), + child: Column( + spacing: 12.0, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Text( + L10n.of(context).disableLanguageToolsDesc, + style: BotStyle.text(context), + textAlign: TextAlign.center, + ), + SizedBox( + width: double.infinity, + child: TextButton( + onPressed: () async { + await showFutureLoadingDialog( + context: context, + future: _disableLanguageTools, + ); + MatrixState.pAnyState.closeOverlay(overlayId); + }, + style: TextButton.styleFrom( + backgroundColor: + Theme.of(context).colorScheme.primary.withAlpha(25), + ), + child: Text(L10n.of(context).confirm), + ), + ), + ], + ), + ), + ], + ); + } +} diff --git a/lib/pangea/learning_settings/gender_dropdown.dart b/lib/pangea/learning_settings/gender_dropdown.dart new file mode 100644 index 000000000..352bf6956 --- /dev/null +++ b/lib/pangea/learning_settings/gender_dropdown.dart @@ -0,0 +1,77 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import 'package:dropdown_button2/dropdown_button2.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/widgets/dropdown_text_button.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_enum.dart'; + +class GenderDropdown extends StatelessWidget { + final GenderEnum initialGender; + final Function(GenderEnum)? onChanged; + final FormFieldValidator? validator; + final bool enabled; + final Color? backgroundColor; + + const GenderDropdown({ + super.key, + this.initialGender = GenderEnum.unselected, + this.onChanged, + this.validator, + this.enabled = true, + this.backgroundColor, + }); + + @override + Widget build(BuildContext context) { + final l10n = L10n.of(context); + + return DropdownButtonFormField2( + customButton: + CustomDropdownTextButton(text: initialGender.title(context)), + menuItemStyleData: const MenuItemStyleData( + padding: EdgeInsets.zero, + ), + decoration: InputDecoration( + labelText: l10n.gender, + ), + isExpanded: true, + dropdownStyleData: DropdownStyleData( + maxHeight: kIsWeb ? 500 : null, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(14.0), + color: Theme.of(context).colorScheme.surfaceContainerHigh, + ), + ), + items: GenderEnum.values.map((GenderEnum genderOption) { + return DropdownMenuItem( + enabled: genderOption != GenderEnum.unselected, + value: genderOption, + child: Container( + color: Colors.transparent, + padding: const EdgeInsets.symmetric( + vertical: 8, + horizontal: 12, + ), + child: Text( + genderOption.title(context), + style: const TextStyle().copyWith( + color: Theme.of(context).textTheme.bodyLarge!.color, + fontSize: 14, + ), + overflow: TextOverflow.ellipsis, + ), + ), + ); + }).toList(), + onChanged: enabled + ? (value) { + if (value != null) onChanged?.call(value); + } + : null, + value: initialGender, + validator: validator, + ); + } +} diff --git a/lib/pangea/learning_settings/gender_enum.dart b/lib/pangea/learning_settings/gender_enum.dart new file mode 100644 index 000000000..47f7bc82c --- /dev/null +++ b/lib/pangea/learning_settings/gender_enum.dart @@ -0,0 +1,52 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; + +enum GenderEnum { + unselected, + woman, + man, + other, +} + +extension GenderEnumExtension on GenderEnum { + String get string { + switch (this) { + case GenderEnum.unselected: + return 'unselected'; + case GenderEnum.woman: + return 'woman'; + case GenderEnum.man: + return 'man'; + case GenderEnum.other: + return 'other'; + } + } + + static GenderEnum fromString(String? value) { + switch (value) { + case 'woman': + return GenderEnum.woman; + case 'man': + return GenderEnum.man; + case 'other': + return GenderEnum.other; + default: + return GenderEnum.unselected; + } + } + + String title(BuildContext context) { + final L10n l10n = L10n.of(context); + switch (this) { + case GenderEnum.unselected: + return l10n.unselectedGender; + case GenderEnum.woman: + return l10n.woman; + case GenderEnum.man: + return l10n.man; + case GenderEnum.other: + return l10n.otherGender; + } + } +} diff --git a/lib/pangea/learning_settings/enums/language_level_type_enum.dart b/lib/pangea/learning_settings/language_level_type_enum.dart similarity index 96% rename from lib/pangea/learning_settings/enums/language_level_type_enum.dart rename to lib/pangea/learning_settings/language_level_type_enum.dart index e44a75a22..9910819b3 100644 --- a/lib/pangea/learning_settings/enums/language_level_type_enum.dart +++ b/lib/pangea/learning_settings/language_level_type_enum.dart @@ -2,9 +2,15 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; -enum LanguageLevelTypeEnum { preA1, a1, a2, b1, b2, c1, c2 } +enum LanguageLevelTypeEnum { + preA1, + a1, + a2, + b1, + b2, + c1, + c2; -extension LanguageLevelTypeEnumExtension on LanguageLevelTypeEnum { // Makes enum a string String get string { switch (this) { diff --git a/lib/pangea/choreographer/widgets/igc/language_mismatch_popup.dart b/lib/pangea/learning_settings/language_mismatch_popup.dart similarity index 63% rename from lib/pangea/choreographer/widgets/igc/language_mismatch_popup.dart rename to lib/pangea/learning_settings/language_mismatch_popup.dart index 62edb4798..34f0dcb6c 100644 --- a/lib/pangea/choreographer/widgets/igc/language_mismatch_popup.dart +++ b/lib/pangea/learning_settings/language_mismatch_popup.dart @@ -2,25 +2,25 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; -import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; -import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/card_header.dart'; +import 'package:fluffychat/pangea/common/widgets/card_header.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LanguageMismatchPopup extends StatelessWidget { + final String message; + final String overlayId; final String targetLanguage; - final Choreographer choreographer; - final VoidCallback onUpdate; + final VoidCallback onConfirm; const LanguageMismatchPopup({ super.key, + required this.message, + required this.overlayId, required this.targetLanguage, - required this.choreographer, - required this.onUpdate, + required this.onConfirm, }); - Future _onConfirm(BuildContext context) async { + Future _updateLanguage() async { await MatrixState.pangeaController.userController.updateProfile( (profile) { profile.userSettings.targetLanguage = targetLanguage; @@ -28,6 +28,7 @@ class LanguageMismatchPopup extends StatelessWidget { }, waitForDataInSync: true, ); + onConfirm(); } @override @@ -36,10 +37,7 @@ class LanguageMismatchPopup extends StatelessWidget { mainAxisSize: MainAxisSize.max, crossAxisAlignment: CrossAxisAlignment.center, children: [ - CardHeader( - text: L10n.of(context).languageMismatchTitle, - botExpression: BotExpression.addled, - ), + CardHeader(L10n.of(context).languageMismatchTitle), Padding( padding: const EdgeInsets.all(8), child: Column( @@ -47,7 +45,7 @@ class LanguageMismatchPopup extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( - L10n.of(context).languageMismatchDesc, + message, style: BotStyle.text(context), textAlign: TextAlign.center, ), @@ -57,15 +55,13 @@ class LanguageMismatchPopup extends StatelessWidget { onPressed: () async { await showFutureLoadingDialog( context: context, - future: () => _onConfirm(context), + future: _updateLanguage, ); - MatrixState.pAnyState.closeOverlay(); - onUpdate(); + MatrixState.pAnyState.closeOverlay(overlayId); }, - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - (Theme.of(context).colorScheme.primary).withAlpha(25), - ), + style: TextButton.styleFrom( + backgroundColor: + Theme.of(context).colorScheme.primary.withAlpha(25), ), child: Text(L10n.of(context).confirm), ), diff --git a/lib/pangea/learning_settings/language_mismatch_repo.dart b/lib/pangea/learning_settings/language_mismatch_repo.dart new file mode 100644 index 000000000..0096bff42 --- /dev/null +++ b/lib/pangea/learning_settings/language_mismatch_repo.dart @@ -0,0 +1,47 @@ +import 'package:get_storage/get_storage.dart'; + +class LanguageMismatchRepo { + static final GetStorage _storage = GetStorage('language_mismatch'); + static const Duration displayInterval = Duration(minutes: 30); + + static String _roomKey(String roomId) => 'language_mismatch_room_$roomId'; + static String _eventKey(String eventId) => 'language_mismatch_event_$eventId'; + + static bool shouldShowByRoom(String roomId) => _get(_roomKey(roomId)); + static bool shouldShowByEvent(String eventId) => _get(_eventKey(eventId)); + + static Future setRoom(String roomId) async => _set(_roomKey(roomId)); + static Future setEvent(String eventId) async => + _set(_eventKey(eventId)); + + static Future _set(String key) async { + await _storage.write( + key, + DateTime.now().toIso8601String(), + ); + } + + static bool _get(String key) { + final lastShown = _getCached(key); + if (lastShown == null) return true; + return DateTime.now().difference(lastShown) >= displayInterval; + } + + static DateTime? _getCached(String key) { + final entry = _storage.read(key); + if (entry == null) return null; + + final value = DateTime.tryParse(entry); + if (value == null) { + _storage.remove(key); + return null; + } + + final timeSince = DateTime.now().difference(value); + if (timeSince > displayInterval) { + _storage.remove(key); + return null; + } + return value; + } +} diff --git a/lib/pangea/learning_settings/models/language_model.dart b/lib/pangea/learning_settings/models/language_model.dart deleted file mode 100644 index 285577bfc..000000000 --- a/lib/pangea/learning_settings/models/language_model.dart +++ /dev/null @@ -1,123 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; - -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/l2_support_enum.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; - -class LanguageModel { - final String langCode; - final String displayName; - final String script; - final L2SupportEnum l2Support; - final TextDirection? _textDirection; - - LanguageModel({ - required this.langCode, - required this.displayName, - this.script = LanguageKeys.unknownLanguage, - this.l2Support = L2SupportEnum.na, - TextDirection? textDirection, - }) : _textDirection = textDirection; - - factory LanguageModel.fromJson(json) { - final String code = json['language_code'] ?? - codeFromNameOrCode( - json['language_name'], - json['language_flag'], - ); - - return LanguageModel( - langCode: code, - displayName: json['language_name'], - l2Support: json['l2_support'] != null - ? L2SupportEnum.na.fromStorageString(json['l2_support']) - : L2SupportEnum.na, - script: json['script'] ?? LanguageKeys.unknownLanguage, - textDirection: json['text_direction'] != null - ? TextDirection.values.firstWhereOrNull( - (e) => e.name == json['text_direction'], - ) - : null, - ); - } - - toJson() => { - 'language_code': langCode, - 'language_name': displayName, - 'script': script, - 'l2_support': l2Support.storageString, - 'text_direction': textDirection.name, - }; - - bool get l2 => l2Support != L2SupportEnum.na; - - // Discuss with Jordan - adding langCode field to language objects as separate from displayName - static String codeFromNameOrCode(String codeOrName, [String? url]) { - if (codeOrName.isEmpty) return LanguageKeys.unknownLanguage; - if (codeOrName == LanguageKeys.unknownLanguage) return codeOrName; - - if (url == null) return LanguageKeys.unknownLanguage; - - final List split = url.split('/'); - return split.last.split('.').first; - } - - //PTODO - add flag for unknown - static LanguageModel get unknown => LanguageModel( - langCode: LanguageKeys.unknownLanguage, - displayName: "Unknown", - ); - - String? getDisplayName(BuildContext context) { - return displayName; - } - - String get langCodeShort => langCode.split('-').first; - - TextDirection get _defaultTextDirection { - return PLanguageStore.rtlLanguageCodes.contains(langCodeShort) - ? TextDirection.rtl - : TextDirection.ltr; - } - - TextDirection get textDirection { - return _textDirection ?? _defaultTextDirection; - } - - @override - bool operator ==(Object other) { - if (other is LanguageModel) { - return langCode == other.langCode; - } - return false; - } - - @override - int get hashCode => langCode.hashCode; -} - -class LanguageArc { - final LanguageModel l1; - final LanguageModel l2; - - LanguageArc({ - required this.l1, - required this.l2, - }); - - factory LanguageArc.fromJson(Map json) { - return LanguageArc( - l1: LanguageModel.fromJson(json['l1'] as Map), - l2: LanguageModel.fromJson(json['l2'] as Map), - ); - } - - Map toJson() { - return { - 'l1': l1.toJson(), - 'l2': l2.toJson(), - }; - } -} diff --git a/lib/pangea/learning_settings/widgets/p_language_dialog.dart b/lib/pangea/learning_settings/p_language_dialog.dart similarity index 90% rename from lib/pangea/learning_settings/widgets/p_language_dialog.dart rename to lib/pangea/learning_settings/p_language_dialog.dart index 92dce18a8..92a79d816 100644 --- a/lib/pangea/learning_settings/widgets/p_language_dialog.dart +++ b/lib/pangea/learning_settings/p_language_dialog.dart @@ -6,12 +6,13 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import '../../../config/themes.dart'; -import '../../../widgets/matrix.dart'; +import '../../config/themes.dart'; +import '../../widgets/matrix.dart'; import 'p_language_dropdown.dart'; import 'p_question_container.dart'; @@ -21,10 +22,9 @@ Future pLanguageDialog( ) async { final PangeaController pangeaController = MatrixState.pangeaController; //PTODO: if source language not set by user, default to languge from device settings - final LanguageModel? userL1 = pangeaController.languageController.userL1; - final LanguageModel? userL2 = pangeaController.languageController.userL2; - final LanguageModel? systemLanguage = - pangeaController.languageController.systemLanguage; + final LanguageModel? userL1 = pangeaController.userController.userL1; + final LanguageModel? userL2 = pangeaController.userController.userL2; + final LanguageModel? systemLanguage = LanguageService.systemLanguage; LanguageModel? selectedSourceLanguage = systemLanguage; if (userL1 != null && userL1.langCode != LanguageKeys.unknownLanguage) { diff --git a/lib/pangea/learning_settings/widgets/p_language_dropdown.dart b/lib/pangea/learning_settings/p_language_dropdown.dart similarity index 90% rename from lib/pangea/learning_settings/widgets/p_language_dropdown.dart rename to lib/pangea/learning_settings/p_language_dropdown.dart index d1fca14bb..5957e003a 100644 --- a/lib/pangea/learning_settings/widgets/p_language_dropdown.dart +++ b/lib/pangea/learning_settings/p_language_dropdown.dart @@ -6,9 +6,9 @@ import 'package:flutter/material.dart'; import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/l2_support_enum.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'flag.dart'; +import 'package:fluffychat/pangea/languages/l2_support_enum.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/widgets/avatar.dart'; class PLanguageDropdown extends StatefulWidget { final List languages; @@ -19,6 +19,7 @@ class PLanguageDropdown extends StatefulWidget { final String? error; final Color? backgroundColor; final bool hasError; + final bool enabled; const PLanguageDropdown({ super.key, @@ -30,6 +31,7 @@ class PLanguageDropdown extends StatefulWidget { this.error, this.backgroundColor, this.hasError = false, + this.enabled = true, }); @override @@ -63,7 +65,7 @@ class PLanguageDropdownState extends State { final bool aIsPriority = languagePriority.contains(a.langCode); final bool bIsPriority = languagePriority.contains(b.langCode); if (!aIsPriority && !bIsPriority) { - return a.getDisplayName(context)!.compareTo(b.getDisplayName(context)!); + return a.getDisplayName(context).compareTo(b.getDisplayName(context)); } if (aIsPriority && bIsPriority) { @@ -89,6 +91,7 @@ class PLanguageDropdownState extends State { languageModel: widget.initialLanguage!, isL2List: widget.isL2List, isDropdown: true, + enabled: widget.enabled, ) : null, menuItemStyleData: const MenuItemStyleData( @@ -143,7 +146,7 @@ class PLanguageDropdownState extends State { ), ), ], - onChanged: (value) => widget.onChange(value!), + onChanged: widget.enabled ? (value) => widget.onChange(value!) : null, value: widget.initialLanguage, dropdownSearchData: DropdownSearchData( searchController: _searchController, @@ -158,17 +161,16 @@ class PLanguageDropdownState extends State { ), ), ), - searchMatchFn: (item, searchValue) { - final displayName = item.value?.displayName.toLowerCase(); - if (displayName == null) return false; - - final search = searchValue.toLowerCase(); - return displayName.startsWith(search); - }, + searchMatchFn: (item, searchValue) => LanguageModel.search( + item.value, + searchValue, + context, + ), ), onMenuStateChange: (isOpen) { if (!isOpen) _searchController.clear(); }, + enableFeedback: widget.enabled, ), AnimatedSize( duration: FluffyThemes.animationDuration, @@ -212,8 +214,9 @@ class LanguageDropDownEntry extends StatelessWidget { children: [ Opacity( opacity: enabled ? 1 : 0.5, - child: LanguageFlag( - language: languageModel, + child: Avatar( + name: languageModel.langCode, + size: 30, ), ), const SizedBox(width: 10), @@ -222,7 +225,7 @@ class LanguageDropDownEntry extends StatelessWidget { children: [ Flexible( child: Text( - languageModel.getDisplayName(context) ?? "", + languageModel.getDisplayName(context), style: const TextStyle().copyWith( color: enabled ? Theme.of(context).textTheme.bodyLarge!.color diff --git a/lib/pangea/learning_settings/widgets/p_question_container.dart b/lib/pangea/learning_settings/p_question_container.dart similarity index 100% rename from lib/pangea/learning_settings/widgets/p_question_container.dart rename to lib/pangea/learning_settings/p_question_container.dart diff --git a/lib/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart b/lib/pangea/learning_settings/p_settings_switch_list_tile.dart similarity index 100% rename from lib/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart rename to lib/pangea/learning_settings/p_settings_switch_list_tile.dart diff --git a/lib/pangea/learning_settings/repo/language_repo.dart b/lib/pangea/learning_settings/repo/language_repo.dart deleted file mode 100644 index 52806e6a0..000000000 --- a/lib/pangea/learning_settings/repo/language_repo.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'dart:convert'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/network/urls.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import '../../common/network/requests.dart'; - -class LanguageRepo { - static Future> fetchLanguages() async { - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - ); - - List languageResp = []; - try { - final Response res = await req.get(url: PApiUrls.getLanguages); - languageResp = jsonDecode(utf8.decode(res.bodyBytes).toString()) as List; - } catch (e) { - languageResp = FallbackLanguage.languageList; - } - - final List langFlag = languageResp.map((e) { - try { - return LanguageModel.fromJson(e); - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError(e: err, s: stack, data: e); - return LanguageModel.unknown; - } - }).toList(); - return langFlag; - } -} diff --git a/lib/pangea/learning_settings/pages/settings_learning.dart b/lib/pangea/learning_settings/settings_learning.dart similarity index 70% rename from lib/pangea/learning_settings/pages/settings_learning.dart rename to lib/pangea/learning_settings/settings_learning.dart index c57c66229..f3e5f8765 100644 --- a/lib/pangea/learning_settings/pages/settings_learning.dart +++ b/lib/pangea/learning_settings/settings_learning.dart @@ -1,21 +1,26 @@ import 'dart:developer'; +import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:app_settings/app_settings.dart'; import 'package:country_picker/country_picker.dart'; +import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/instructions/instruction_settings.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning_view.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/user/models/user_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning_view.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/pangea/user/user_model.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'; @@ -161,6 +166,11 @@ class SettingsLearningController extends State { if (mounted) setState(() {}); } + void setGender(GenderEnum? gender) { + _profile.userSettings.gender = gender ?? GenderEnum.unselected; + if (mounted) setState(() {}); + } + void setPublicProfile(bool isPublic) { _profile.userSettings.publicProfile = isPublic; if (mounted) setState(() {}); @@ -203,11 +213,83 @@ class SettingsLearningController extends State { if (mounted) setState(() {}); } + void showKeyboardSettingsDialog() { + String title; + String? steps; + String? description; + String buttonText; + VoidCallback buttonAction; + + if (kIsWeb) { + title = L10n.of(context).autocorrectNotAvailable; // Default + buttonText = 'OK'; + buttonAction = () { + Navigator.of(context).pop(); + }; + } else if (Platform.isIOS) { + title = L10n.of(context).enableAutocorrectPopupTitle; + steps = L10n.of(context).enableAutocorrectPopupSteps; + description = L10n.of(context).enableAutocorrectPopupDescription; + buttonText = L10n.of(context).settings; + buttonAction = () { + AppSettings.openAppSettings(); + }; + } else { + title = L10n.of(context).downloadGboardTitle; + steps = L10n.of(context).downloadGboardSteps; + description = L10n.of(context).downloadGboardDescription; + buttonText = L10n.of(context).downloadGboard; + buttonAction = () { + launchUrlString( + 'https://play.google.com/store/apps/details?id=com.google.android.inputmethod.latin', + ); + }; + } + + showAdaptiveDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog.adaptive( + title: Text(L10n.of(context).enableAutocorrectWarning), + content: SingleChildScrollView( + child: Column( + spacing: 8.0, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text(title), + if (steps != null) + Text( + steps, + textAlign: TextAlign.start, + ), + if (description != null) Text(description), + ], + ), + ), + actions: [ + TextButton( + child: Text(L10n.of(context).close), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + onPressed: buttonAction, + child: Text(buttonText), + ), + ], + ); + }, + ); + } + LanguageModel? get _targetLanguage => _profile.userSettings.targetLanguage != null ? PLanguageStore.byLangCode(_profile.userSettings.targetLanguage!) : null; + GenderEnum get gender => _profile.userSettings.gender; + bool getToolSetting(ToolSetting toolSetting) { final toolSettings = _profile.toolSettings; switch (toolSetting) { @@ -234,8 +316,7 @@ class SettingsLearningController extends State { _profile.userSettings.targetLanguage != null && _targetLanguage != null; LanguageModel? get selectedSourceLanguage { - return _selectedBaseLanguage ?? - pangeaController.languageController.systemLanguage; + return _selectedBaseLanguage ?? LanguageService.systemLanguage; } LanguageModel? get selectedTargetLanguage { @@ -255,8 +336,8 @@ class SettingsLearningController extends State { ? PLanguageStore.byLangCode(_profile.userSettings.targetLanguage!) : null; - LanguageModel? get userL1 => pangeaController.languageController.userL1; - LanguageModel? get userL2 => pangeaController.languageController.userL2; + LanguageModel? get userL1 => pangeaController.userController.userL1; + LanguageModel? get userL2 => pangeaController.userController.userL2; bool get publicProfile => _profile.userSettings.publicProfile ?? false; diff --git a/lib/pangea/learning_settings/pages/settings_learning_view.dart b/lib/pangea/learning_settings/settings_learning_view.dart similarity index 81% rename from lib/pangea/learning_settings/pages/settings_learning_view.dart rename to lib/pangea/learning_settings/settings_learning_view.dart index 952d50d39..d6037fc87 100644 --- a/lib/pangea/learning_settings/pages/settings_learning_view.dart +++ b/lib/pangea/learning_settings/settings_learning_view.dart @@ -1,11 +1,5 @@ -import 'dart:io'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:app_settings/app_settings.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -13,12 +7,13 @@ import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown. import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart'; import 'package:fluffychat/pangea/instructions/reset_instructions_list_tile.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/pages/settings_learning.dart'; -import 'package:fluffychat/pangea/learning_settings/widgets/country_picker_tile.dart'; -import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dropdown.dart'; -import 'package:fluffychat/pangea/learning_settings/widgets/p_settings_switch_list_tile.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/country_picker_tile.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_dropdown.dart'; +import 'package:fluffychat/pangea/learning_settings/p_language_dropdown.dart'; +import 'package:fluffychat/pangea/learning_settings/p_settings_switch_list_tile.dart'; +import 'package:fluffychat/pangea/learning_settings/settings_learning.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -26,76 +21,6 @@ class SettingsLearningView extends StatelessWidget { final SettingsLearningController controller; const SettingsLearningView(this.controller, {super.key}); - void _showKeyboardSettingsDialog(BuildContext context) { - String title; - String? steps; - String? description; - String buttonText; - VoidCallback buttonAction; - - if (kIsWeb) { - title = L10n.of(context).autocorrectNotAvailable; // Default - buttonText = 'OK'; - buttonAction = () { - Navigator.of(context).pop(); - }; - } else if (Platform.isIOS) { - title = L10n.of(context).enableAutocorrectPopupTitle; - steps = L10n.of(context).enableAutocorrectPopupSteps; - description = L10n.of(context).enableAutocorrectPopupDescription; - buttonText = L10n.of(context).settings; - buttonAction = () { - AppSettings.openAppSettings(); - }; - } else { - title = L10n.of(context).downloadGboardTitle; - steps = L10n.of(context).downloadGboardSteps; - description = L10n.of(context).downloadGboardDescription; - buttonText = L10n.of(context).downloadGboard; - buttonAction = () { - launchUrlString( - 'https://play.google.com/store/apps/details?id=com.google.android.inputmethod.latin', - ); - }; - } - - showAdaptiveDialog( - context: context, - builder: (BuildContext context) { - return AlertDialog.adaptive( - title: Text(L10n.of(context).enableAutocorrectWarning), - content: SingleChildScrollView( - child: Column( - spacing: 8.0, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text(title), - if (steps != null) - Text( - steps, - textAlign: TextAlign.start, - ), - if (description != null) Text(description), - ], - ), - ), - actions: [ - TextButton( - child: Text(L10n.of(context).close), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - TextButton( - onPressed: buttonAction, - child: Text(buttonText), - ), - ], - ); - }, - ); - } - @override Widget build(BuildContext context) { return StreamBuilder( @@ -213,6 +138,10 @@ class SettingsLearningView extends StatelessWidget { initialLevel: controller.cefrLevel, onChanged: controller.setCefrLevel, ), + GenderDropdown( + initialGender: controller.gender, + onChanged: controller.setGender, + ), Container( decoration: BoxDecoration( border: Border.all( @@ -255,9 +184,8 @@ class SettingsLearningView extends StatelessWidget { value, ); if (value) { - _showKeyboardSettingsDialog( - context, - ); + controller + .showKeyboardSettingsDialog(); } }, enabled: true, diff --git a/lib/pangea/learning_settings/tool_settings_enum.dart b/lib/pangea/learning_settings/tool_settings_enum.dart new file mode 100644 index 000000000..a2d7f56e6 --- /dev/null +++ b/lib/pangea/learning_settings/tool_settings_enum.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +enum ToolSetting { + interactiveTranslator, + interactiveGrammar, + immersionMode, + definitions, + autoIGC, + enableTTS, + enableAutocorrect; + + String toolName(BuildContext context) { + switch (this) { + case ToolSetting.interactiveTranslator: + return L10n.of(context).interactiveTranslatorSliderHeader; + case ToolSetting.interactiveGrammar: + return L10n.of(context).interactiveGrammarSliderHeader; + case ToolSetting.immersionMode: + return L10n.of(context).toggleImmersionMode; + case ToolSetting.definitions: + return L10n.of(context).definitionsToolName; + case ToolSetting.autoIGC: + return L10n.of(context).autoIGCToolName; + case ToolSetting.enableTTS: + return L10n.of(context).enableTTSToolName; + case ToolSetting.enableAutocorrect: + return L10n.of(context).enableAutocorrectToolName; + } + } + + //use l10n to get tool name + String toolDescription(BuildContext context) { + switch (this) { + case ToolSetting.interactiveTranslator: + return L10n.of(context).itToggleDescription; + case ToolSetting.interactiveGrammar: + return L10n.of(context).igcToggleDescription; + case ToolSetting.immersionMode: + return L10n.of(context).toggleImmersionModeDesc; + case ToolSetting.definitions: + return L10n.of(context).definitionsToolDescription; + case ToolSetting.autoIGC: + return L10n.of(context).autoIGCToolDescription; + case ToolSetting.enableTTS: + return L10n.of(context).enableTTSToolDescription; + case ToolSetting.enableAutocorrect: + return L10n.of(context).enableAutocorrectDescription; + } + } + + bool get isAvailableSetting { + switch (this) { + case ToolSetting.interactiveTranslator: + case ToolSetting.interactiveGrammar: + case ToolSetting.definitions: + case ToolSetting.immersionMode: + return false; + case ToolSetting.autoIGC: + case ToolSetting.enableTTS: + case ToolSetting.enableAutocorrect: + return true; + } + } + + bool get enabled => + MatrixState.pangeaController.userController.isToolEnabled(this); +} diff --git a/lib/pangea/learning_settings/utils/p_language_store.dart b/lib/pangea/learning_settings/utils/p_language_store.dart deleted file mode 100644 index e0ea88727..000000000 --- a/lib/pangea/learning_settings/utils/p_language_store.dart +++ /dev/null @@ -1,130 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/repo/language_repo.dart'; -import 'shared_prefs.dart'; - -class PLanguageStore { - PLanguageStore() { - initialize(); - } - - static List _langList = []; - - List get langList => _langList; - - List get targetOptions => - _langList.where((element) => element.l2).toList(); - - List get unlocalizedTargetOptions => _langList - .where( - (element) => element.l2 && element.langCode == element.langCodeShort, - ) - .toList(); - - List get baseOptions => _langList.toList(); - - static Future initialize({forceRefresh = false}) async { - try { - _langList = await _getCachedLanguages(); - if (forceRefresh || - await _shouldFetch || - _langList.isEmpty || - _langList.every((lang) => !lang.l2)) { - _langList = await LanguageRepo.fetchLanguages(); - - await _saveLanguages(_langList); - await saveLastFetchDate(); - } - _langList.removeWhere( - (element) => element.langCode == LanguageKeys.unknownLanguage, - ); - // remove any duplicates - _langList = _langList.toSet().toList(); - - _langList.sort((a, b) => a.displayName.compareTo(b.displayName)); - } catch (err, stack) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: err, - s: stack, - data: { - "langList": _langList.map((e) => e.toJson()), - }, - ); - } - } - - static saveLastFetchDate() async { - final String now = DateTime.now().toIso8601String(); - await MyShared.saveString(PrefKey.lastFetched, now); - } - - static Future get _shouldFetch async { - final String? dateString = await MyShared.readString(PrefKey.lastFetched); - if (dateString == null) { - return true; - } - // return true; - final DateTime lastFetchedDate = DateTime.parse(dateString); - final DateTime targetDate = DateTime(2025, 2, 26); - if (lastFetchedDate.isBefore(targetDate)) { - return true; - } - - final int lastFetched = DateTime.parse(dateString).millisecondsSinceEpoch; - final int now = DateTime.now().millisecondsSinceEpoch; - const int fetchIntervalInMilliseconds = 86534601; - return (now - lastFetched) >= fetchIntervalInMilliseconds ? true : false; - } - - static Future _saveLanguages(List languages) async { - final Map languagesMaps = { - PrefKey.languagesKey: languages.map((e) => e.toJson()).toList(), - }; - await MyShared.saveJson(PrefKey.languagesKey, languagesMaps); - } - - static Future> _getCachedLanguages() async { - final Map? languagesMap = - await MyShared.readJson(PrefKey.languagesKey); - if (languagesMap == null) { - return []; - } - - final List languages = []; - final List mapList = languagesMap[PrefKey.languagesKey] as List; - for (final element in mapList) { - languages.add(LanguageModel.fromJson(element)); - } - - return languages; - } - - static LanguageModel? byLangCode(String langCode) { - for (final element in _langList) { - if (element.langCode == langCode) return element; - } - return null; - } - - static final List rtlLanguageCodes = [ - 'ar', - 'arc', - 'dv', - 'fa', - 'ha', - 'he', - 'khw', - 'ks', - 'ku', - 'ps', - 'ur', - 'yi', - ]; -} diff --git a/lib/pangea/learning_settings/utils/shared_prefs.dart b/lib/pangea/learning_settings/utils/shared_prefs.dart deleted file mode 100644 index 3d22a9971..000000000 --- a/lib/pangea/learning_settings/utils/shared_prefs.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'dart:convert'; - -import 'package:shared_preferences/shared_preferences.dart'; - -class MyShared { - static saveString(String key, String value) async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - prefs.setString(key, value); - } - - static Future? readString(String key) async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - final String? source = prefs.getString(key); - return source; - } - - static saveJson(String key, Map value) async { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - prefs.setString(key, json.encode(value)); - } - - static Future? readJson(String key) async { - try { - final SharedPreferences prefs = await SharedPreferences.getInstance(); - final String? source = prefs.getString(key); - - if (source == null) { - return null; - } - final decodedJson = json.decoder.convert(source); - //var decodedJson = json.decode(source); - return decodedJson; - } catch (err) { - return null; - } - } -} diff --git a/lib/pangea/learning_settings/widgets/flag.dart b/lib/pangea/learning_settings/widgets/flag.dart deleted file mode 100644 index 0b8e6526b..000000000 --- a/lib/pangea/learning_settings/widgets/flag.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/widgets/avatar.dart'; -import '../models/language_model.dart'; - -class LanguageFlag extends StatelessWidget { - final LanguageModel? language; - final double size; - const LanguageFlag({ - super.key, - required this.language, - this.size = 30, - }); - - @override - Widget build(BuildContext context) { - return Avatar( - name: language?.langCode, - size: size, - ); - } -} diff --git a/lib/pangea/lemmas/construct_xp_widget.dart b/lib/pangea/lemmas/construct_xp_widget.dart index 9f2ce4720..093c33806 100644 --- a/lib/pangea/lemmas/construct_xp_widget.dart +++ b/lib/pangea/lemmas/construct_xp_widget.dart @@ -1,114 +1,37 @@ -import 'dart:async'; - import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/constructs/construct_level_enum.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -/// display the construct xp widget -/// listen to analytics stream and, if the lemmaCategory has changed, -/// animate the constructSvg by making it animate in then rise up and float away - -class ConstructXpWidget extends StatefulWidget { - final ConstructIdentifier id; - final VoidCallback? onTap; - final double size; +class ConstructXpWidget extends StatelessWidget { + final ConstructLevelEnum level; + final int points; + final Widget icon; const ConstructXpWidget({ super.key, - required this.id, - this.onTap, - this.size = 24.0, + required this.level, + required this.points, + required this.icon, }); - @override - ConstructXpWidgetState createState() => ConstructXpWidgetState(); -} - -class ConstructXpWidgetState extends State - with SingleTickerProviderStateMixin { - ConstructLevelEnum? constructLemmaCategory; - bool didChange = false; - - late AnimationController _controller; - - StreamSubscription? _sub; - - @override - void initState() { - super.initState(); - - _controller = AnimationController( - duration: const Duration(milliseconds: 2000), - vsync: this, - ); - - setState(() => constructLemmaCategory = constructUse?.lemmaCategory); - - debugPrint('constructLemmaCategory: $constructLemmaCategory'); - - _sub = stream.listen((_) { - if (constructUse?.lemmaCategory != constructLemmaCategory) { - setState(() { - constructLemmaCategory = constructUse?.lemmaCategory; - didChange = true; - //_controller.reset(); - //_controller.forward(); - }); - } - }); - } - - ConstructUses? get constructUse => - MatrixState.pangeaController.getAnalytics.constructListModel - .getConstructUses(widget.id); - - Stream get stream => - MatrixState.pangeaController.getAnalytics.analyticsStream.stream; - - Widget? get svg => constructLemmaCategory?.icon(); - - @override - void dispose() { - _controller.dispose(); - _sub?.cancel(); - super.dispose(); - } - @override Widget build(BuildContext context) { - return SizedBox( - width: widget.size, - height: widget.size, - child: GestureDetector( - onTap: svg != null ? widget.onTap : null, - child: MouseRegion( - cursor: - svg != null ? SystemMouseCursors.click : SystemMouseCursors.basic, - child: Stack( - alignment: Alignment.center, - children: [ - //replaces rise animation, remove 116 and uncomment everything to revert - svg != null ? svg! : const SizedBox.shrink(), - // AnimatedSwitcher( - // duration: const Duration(milliseconds: 1000), - // child: svg, - // ), - // if (didChange) - // SlideTransition( - // position: _offsetAnimation, - // child: FadeTransition( - // opacity: _fadeAnimation, - // child: svg, - // ), - // ), - ], - ), + final Color textColor = Theme.of(context).brightness != Brightness.light + ? level.color(context) + : level.darkColor(context); + + return Row( + spacing: 16.0, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + icon, + Text( + "$points XP", + style: Theme.of(context).textTheme.titleMedium?.copyWith( + color: textColor, + ), ), - ), + ], ); } } diff --git a/lib/pangea/lemmas/lemma.dart b/lib/pangea/lemmas/lemma.dart index 384a4f972..26a551620 100644 --- a/lib/pangea/lemmas/lemma.dart +++ b/lib/pangea/lemmas/lemma.dart @@ -25,12 +25,20 @@ class Lemma { ); } - toJson() { - return { + Map toJson() { + final Map data = { 'text': text, - 'save_vocab': saveVocab, - 'form': form, }; + + if (saveVocab) { + data['save_vocab'] = saveVocab; + } + + if (text != form) { + data['form'] = form; + } + + return data; } static Lemma create(String form) => diff --git a/lib/pangea/lemmas/lemma_highlight_emoji_row.dart b/lib/pangea/lemmas/lemma_highlight_emoji_row.dart index 1e6e23e82..4dec278b9 100644 --- a/lib/pangea/lemmas/lemma_highlight_emoji_row.dart +++ b/lib/pangea/lemmas/lemma_highlight_emoji_row.dart @@ -1,198 +1,208 @@ import 'dart:async'; -import 'dart:developer'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:shimmer/shimmer.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_misc/gain_points_animation.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_updater_mixin.dart'; +import 'package:fluffychat/pangea/common/widgets/shimmer_background.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_meaning_builder.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LemmaHighlightEmojiRow extends StatefulWidget { - final LemmaMeaningBuilderState controller; final ConstructIdentifier cId; + final String langCode; + final String targetId; + + final Function(String, String) onEmojiSelected; + final Map messageInfo; + + final String? emoji; + final Widget? selectedEmojiBadge; + final bool enabled; const LemmaHighlightEmojiRow({ super.key, - required this.controller, required this.cId, + required this.langCode, + required this.targetId, + required this.onEmojiSelected, + required this.messageInfo, + this.emoji, + this.selectedEmojiBadge, + this.enabled = true, }); @override - LemmaHighlightEmojiRowState createState() => LemmaHighlightEmojiRowState(); + State createState() => LemmaHighlightEmojiRowState(); } -class LemmaHighlightEmojiRowState extends State { - String? displayEmoji; - bool _showShimmer = true; - bool _hasShimmered = false; - - @override - void initState() { - super.initState(); - displayEmoji = widget.cId.userSetEmoji.firstOrNull; - _showShimmer = (displayEmoji == null); - } - - void _startShimmer() { - if (!widget.controller.isLoading && _showShimmer) { - Future.delayed(const Duration(milliseconds: 1500), () { - if (mounted) { - setState(() => _showShimmer = false); - setState(() => _hasShimmered = true); - } - }); - } - } - - @override - didUpdateWidget(LemmaHighlightEmojiRow oldWidget) { - //Reset shimmer state for diff constructs in 2 column mode - if (oldWidget.cId != widget.cId) { - setState(() { - displayEmoji = widget.cId.userSetEmoji.firstOrNull; - _showShimmer = (displayEmoji == null); - _hasShimmered = false; - }); - } - super.didUpdateWidget(oldWidget); - } - - @override - void dispose() { - super.dispose(); - } - - String transformTargetId(String emoji) => - "emoji-choice-item-$emoji-${widget.cId.lemma}"; - - Future setEmoji(String emoji, BuildContext context) async { - try { - final String? userSetEmoji = widget.cId.userSetEmoji.firstOrNull; - setState(() => displayEmoji = emoji); - await widget.cId.setEmojiWithXP( - emoji: emoji, - isFromCorrectAnswer: false, - ); - if (userSetEmoji == null) { - OverlayUtil.showOverlay( - overlayKey: "${transformTargetId(emoji)}_points", - followerAnchor: Alignment.bottomCenter, - targetAnchor: Alignment.bottomCenter, - context: context, - child: PointsGainedAnimation( - points: 2, - targetID: transformTargetId(emoji), - ), - transformTargetId: transformTargetId(emoji), - closePrevOverlay: false, - backDropToDismiss: false, - ignorePointer: true, - ); - } - } catch (e, s) { - debugger(when: kDebugMode); - ErrorHandler.logError(data: widget.cId.toJson(), e: e, s: s); - } - } - +class LemmaHighlightEmojiRowState extends State + with AnalyticsUpdater { @override Widget build(BuildContext context) { - if (widget.controller.isLoading) { - return const CircularProgressIndicator.adaptive(); - } - _startShimmer(); + return LemmaMeaningBuilder( + langCode: widget.langCode, + constructId: widget.cId, + messageInfo: widget.messageInfo, + builder: (context, controller) { + if (controller.error != null) { + return const SizedBox.shrink(); + } - final emojis = widget.controller.lemmaInfo?.emoji; - if (widget.controller.error != null || emojis == null || emojis.isEmpty) { - return const SizedBox.shrink(); - } - - return Material( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - child: Container( - padding: const EdgeInsets.all(8), - height: 80, - alignment: Alignment.center, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, + final emojis = controller.lemmaInfo?.emoji; + return SizedBox( + height: 70.0, child: Row( - mainAxisAlignment: MainAxisAlignment.center, + spacing: 4.0, mainAxisSize: MainAxisSize.min, - children: emojis - .map( - (emoji) => EmojiChoiceItem( - emoji: emoji, - onSelectEmoji: () => setEmoji(emoji, context), - isDisplay: (displayEmoji == emoji), - showShimmer: (_showShimmer && !_hasShimmered), - transformTargetId: transformTargetId(emoji), - ), - ) - .toList(), + children: emojis == null || emojis.isEmpty + ? List.generate( + 3, + (_) => Shimmer.fromColors( + baseColor: Colors.transparent, + highlightColor: + Theme.of(context).colorScheme.primary.withAlpha(70), + child: Container( + height: 55.0, + width: 55.0, + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.primary, + borderRadius: + BorderRadius.circular(AppConfig.borderRadius), + ), + ), + ), + ) + : emojis.map( + (emoji) { + final targetId = "${widget.targetId}-$emoji"; + return EmojiChoiceItem( + cId: widget.cId, + emoji: emoji, + onSelectEmoji: () => + widget.onEmojiSelected(emoji, targetId), + selected: widget.emoji == emoji, + transformTargetId: targetId, + badge: widget.emoji == emoji + ? widget.selectedEmojiBadge + : null, + showShimmer: widget.emoji == null, + enabled: widget.enabled, + ); + }, + ).toList(), ), - ), - ), + ); + }, ); } } class EmojiChoiceItem extends StatefulWidget { + final ConstructIdentifier cId; final String emoji; final VoidCallback onSelectEmoji; - final bool isDisplay; - final bool showShimmer; + final bool selected; final String transformTargetId; + final Widget? badge; + final bool showShimmer; + final bool enabled; const EmojiChoiceItem({ super.key, + required this.cId, required this.emoji, - required this.isDisplay, + required this.selected, required this.onSelectEmoji, - required this.showShimmer, required this.transformTargetId, + this.badge, + this.showShimmer = true, + this.enabled = true, }); @override - EmojiChoiceItemState createState() => EmojiChoiceItemState(); + State createState() => EmojiChoiceItemState(); } class EmojiChoiceItemState extends State { - bool _isHovered = false; + bool shimmer = false; + Timer? _shimmerTimer; - LayerLink get layerLink => - MatrixState.pAnyState.layerLinkAndKey(widget.transformTargetId).link; + @override + void initState() { + super.initState(); + _showShimmer(); + } + + @override + void didUpdateWidget(covariant EmojiChoiceItem oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.emoji != widget.emoji) { + _showShimmer(); + } + } + + @override + void dispose() { + _shimmerTimer?.cancel(); + super.dispose(); + } + + void _showShimmer() { + if (!widget.showShimmer || !widget.enabled) return; + + setState(() => shimmer = true); + _shimmerTimer?.cancel(); + _shimmerTimer = Timer(const Duration(milliseconds: 1500), () { + if (mounted) { + setState(() => shimmer = false); + _repeatShimmer(); + } + }); + } + + void _repeatShimmer() { + _shimmerTimer?.cancel(); + _shimmerTimer = Timer(const Duration(seconds: 5), () { + if (mounted) _showShimmer(); + }); + } @override Widget build(BuildContext context) { - return MouseRegion( - onEnter: (_) => setState(() => _isHovered = true), - onExit: (_) => setState(() => _isHovered = false), - child: GestureDetector( - onTap: widget.onSelectEmoji, - child: Padding( - padding: const EdgeInsets.all(2.0), - child: Stack( - children: [ - CompositedTransformTarget( - link: layerLink, + return HoverBuilder( + builder: (context, hovered) => GestureDetector( + onTap: widget.enabled ? widget.onSelectEmoji : null, + child: Stack( + children: [ + ShimmerBackground( + enabled: shimmer, + shimmerColor: (Theme.of(context).brightness == Brightness.dark) + ? Colors.white + : Theme.of(context).colorScheme.primary, + baseColor: Colors.transparent, + child: CompositedTransformTarget( + link: MatrixState.pAnyState + .layerLinkAndKey(widget.transformTargetId) + .link, child: AnimatedContainer( + key: MatrixState.pAnyState + .layerLinkAndKey(widget.transformTargetId) + .key, duration: const Duration(milliseconds: 200), - padding: const EdgeInsets.all(8), + padding: const EdgeInsets.all(10), decoration: BoxDecoration( - color: _isHovered - ? Theme.of(context).colorScheme.primary.withAlpha(50) + color: widget.enabled && (hovered || widget.selected) + ? Theme.of(context).colorScheme.secondary.withAlpha(30) : Colors.transparent, borderRadius: BorderRadius.circular(AppConfig.borderRadius), - border: widget.isDisplay + border: widget.selected ? Border.all( - color: AppConfig.goldLight, + color: Colors.transparent, width: 4, ) : null, @@ -203,26 +213,14 @@ class EmojiChoiceItemState extends State { ), ), ), - if (widget.showShimmer) - Positioned.fill( - child: ClipRRect( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - child: Shimmer.fromColors( - baseColor: Colors.white.withValues(alpha: 0.1), - highlightColor: Colors.white.withValues(alpha: 0.6), - direction: ShimmerDirection.ltr, - child: Container( - decoration: BoxDecoration( - color: Colors.white.withValues(alpha: 0.3), - borderRadius: - BorderRadius.circular(AppConfig.borderRadius), - ), - ), - ), - ), - ), - ], - ), + ), + if (widget.badge != null) + Positioned( + right: 6, + bottom: 6, + child: widget.badge!, + ), + ], ), ), ); diff --git a/lib/pangea/lemmas/lemma_info_repo.dart b/lib/pangea/lemmas/lemma_info_repo.dart index bdb3d3763..00b95922a 100644 --- a/lib/pangea/lemmas/lemma_info_repo.dart +++ b/lib/pangea/lemmas/lemma_info_repo.dart @@ -1,48 +1,119 @@ import 'dart:convert'; +import 'dart:io'; +import 'package:async/async.dart'; import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/network/requests.dart'; import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_request.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; -import 'package:fluffychat/widgets/matrix.dart'; + +class _LemmaInfoCacheItem { + final Future> resultFuture; + final DateTime timestamp; + + const _LemmaInfoCacheItem({ + required this.resultFuture, + required this.timestamp, + }); +} class LemmaInfoRepo { - static final GetStorage _lemmaStorage = GetStorage('lemma_storage'); + // In-memory cache + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); - static void set(LemmaInfoRequest request, LemmaInfoResponse response) { - // set expireAt if not set - response.expireAt ??= DateTime.now().add(const Duration(days: 100)); - _lemmaStorage.write(request.storageKey, response.toJson()); - } + // Persistent storage + static final GetStorage _storage = GetStorage('lemma_storage'); - static LemmaInfoResponse? getCached(LemmaInfoRequest request) { - final cachedJson = _lemmaStorage.read(request.storageKey); - - final cached = - cachedJson == null ? null : LemmaInfoResponse.fromJson(cachedJson); + /// Public entry point + static Future> get( + String accessToken, + LemmaInfoRequest request, + ) async { + await GetStorage.init('lemma_storage'); + // 1. Try memory cache + final cached = _getCached(request); if (cached != null) { - if (DateTime.now().isBefore(cached.expireAt!)) { - return cached; - } else { - _lemmaStorage.remove(request.storageKey); - } + return cached; } - return null; + + // 2. Try disk cache + final stored = _getStored(request); + if (stored != null) { + return Result.value(stored); + } + + // 3. Fetch from network (safe future) + final future = _safeFetch(accessToken, request); + + // 4. Save to in-memory cache + _cache[request.hashCode.toString()] = _LemmaInfoCacheItem( + resultFuture: future, + timestamp: DateTime.now(), + ); + + // 5. Write to disk *after* the fetch finishes, without rethrowing + writeToDisk(request, future); + + return future; } - /// Get lemma info, prefering user set data over fetched data - static Future get(LemmaInfoRequest request) async { - final cached = getCached(request); - if (cached != null) return cached; + static Future set( + LemmaInfoRequest request, + LemmaInfoResponse resultFuture, + ) async { + await GetStorage.init('lemma_storage'); - final Requests req = Requests( + final key = request.hashCode.toString(); + try { + await _storage.write(key, resultFuture.toJson()); + _cache.remove(key); // Invalidate in-memory cache + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'lemma': request.lemma}, + ); + } + } + + ///clear cache of a specific request to retry if failed + static void clearCache(LemmaInfoRequest request) { + final key = request.hashCode.toString(); + _cache.remove(key); + } + + static void clearAllCache() { + _cache.clear(); + } + + static Future> _safeFetch( + String token, + LemmaInfoRequest request, + ) async { + try { + final resp = await _fetch(token, request); + return Result.value(resp); + } catch (e, s) { + // Ensure error is logged and converted to a Result + ErrorHandler.logError(e: e, s: s, data: request.toJson()); + return Result.error(e); + } + } + + static Future _fetch( + String accessToken, + LemmaInfoRequest request, + ) async { + final req = Requests( choreoApiKey: Environment.choreoApiKey, - accessToken: MatrixState.pangeaController.userController.accessToken, + accessToken: accessToken, ); final Response res = await req.post( @@ -50,10 +121,59 @@ class LemmaInfoRepo { body: request.toJson(), ); - final decodedBody = jsonDecode(utf8.decode(res.bodyBytes)); - final response = LemmaInfoResponse.fromJson(decodedBody); + if (res.statusCode != 200) { + throw HttpException( + 'Failed to fetch lemma info: ${res.statusCode} ${res.reasonPhrase}', + ); + } - set(request, response); - return response; + return LemmaInfoResponse.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); + } + + static Future>? _getCached( + LemmaInfoRequest request, + ) { + final now = DateTime.now(); + final key = request.hashCode.toString(); + + // Remove stale entries first + _cache.removeWhere( + (_, item) => now.difference(item.timestamp) >= _cacheDuration, + ); + + final item = _cache[key]; + return item?.resultFuture; + } + + static Future writeToDisk( + LemmaInfoRequest request, + Future> resultFuture, + ) async { + final result = await resultFuture; // SAFE: never throws + + if (!result.isValue) return; // only cache successful responses + await set(request, result.asValue!.value); + } + + static LemmaInfoResponse? _getStored( + LemmaInfoRequest request, + ) { + final key = request.hashCode.toString(); + try { + final entry = _storage.read(key); + if (entry == null) return null; + + return LemmaInfoResponse.fromJson(entry); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'lemma': request.lemma}, + ); + _storage.remove(key); + return null; + } } } diff --git a/lib/pangea/lemmas/lemma_info_request.dart b/lib/pangea/lemmas/lemma_info_request.dart index f934a02af..75ca7dd8a 100644 --- a/lib/pangea/lemmas/lemma_info_request.dart +++ b/lib/pangea/lemmas/lemma_info_request.dart @@ -1,6 +1,7 @@ +import 'package:collection/collection.dart'; + import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/events/models/content_feedback.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; class LemmaInfoRequest { @@ -8,14 +9,16 @@ class LemmaInfoRequest { final String partOfSpeech; final String lemmaLang; final String userL1; + final Map messageInfo; - List> feedback; + List feedback; LemmaInfoRequest({ required String partOfSpeech, required String lemmaLang, required this.userL1, required this.lemma, + required this.messageInfo, this.feedback = const [], }) : partOfSpeech = partOfSpeech.toLowerCase(), lemmaLang = lemmaLang.toLowerCase(); @@ -27,6 +30,7 @@ class LemmaInfoRequest { 'lemma_lang': lemmaLang, 'user_l1': userL1, 'feedback': feedback.map((e) => e.toJson()).toList(), + 'message_info': messageInfo, }; } @@ -37,11 +41,15 @@ class LemmaInfoRequest { runtimeType == other.runtimeType && lemma == other.lemma && partOfSpeech == other.partOfSpeech && - feedback == other.feedback; + const ListEquality().equals(feedback, other.feedback) && + userL1 == other.userL1; @override int get hashCode => - lemma.hashCode ^ partOfSpeech.hashCode ^ feedback.hashCode; + lemma.hashCode ^ + partOfSpeech.hashCode ^ + const ListEquality().hash(feedback) ^ + userL1.hashCode; String get storageKey { return 'l:$lemma,p:$partOfSpeech,lang:$lemmaLang,l1:$userL1'; diff --git a/lib/pangea/lemmas/lemma_info_response.dart b/lib/pangea/lemmas/lemma_info_response.dart index fb5bca198..1035cd6e7 100644 --- a/lib/pangea/lemmas/lemma_info_response.dart +++ b/lib/pangea/lemmas/lemma_info_response.dart @@ -1,14 +1,14 @@ +import 'package:collection/collection.dart'; + import 'package:fluffychat/pangea/events/models/content_feedback.dart'; class LemmaInfoResponse implements JsonSerializable { final List emoji; final String meaning; - DateTime? expireAt; LemmaInfoResponse({ required this.emoji, required this.meaning, - this.expireAt, }); factory LemmaInfoResponse.fromJson(Map json) { @@ -16,18 +16,19 @@ class LemmaInfoResponse implements JsonSerializable { // NOTE: This is a workaround for the fact that the server sometimes sends more than 3 emojis emoji: (json['emoji'] as List).map((e) => e as String).toList(), meaning: json['meaning'] as String, - expireAt: json['expireAt'] == null - ? null - : DateTime.parse(json['expireAt'] as String), ); } + static LemmaInfoResponse get error => LemmaInfoResponse( + emoji: [], + meaning: 'ERROR', + ); + @override Map toJson() { return { 'emoji': emoji, 'meaning': meaning, - 'expireAt': expireAt?.toIso8601String(), }; } @@ -36,12 +37,9 @@ class LemmaInfoResponse implements JsonSerializable { identical(this, other) || other is LemmaInfoResponse && runtimeType == other.runtimeType && - emoji.length == other.emoji.length && - emoji.every((element) => other.emoji.contains(element)) && + const ListEquality().equals(emoji, other.emoji) && meaning == other.meaning; @override - int get hashCode => - emoji.fold(0, (prev, element) => prev ^ element.hashCode) ^ - meaning.hashCode; + int get hashCode => const ListEquality().hash(emoji) ^ meaning.hashCode; } diff --git a/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart b/lib/pangea/lemmas/lemma_meaning_builder.dart similarity index 50% rename from lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart rename to lib/pangea/lemmas/lemma_meaning_builder.dart index a1dc4f238..b6cfcd0f3 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart +++ b/lib/pangea/lemmas/lemma_meaning_builder.dart @@ -1,15 +1,37 @@ import 'package:flutter/material.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_repo.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_request.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; import 'package:fluffychat/widgets/matrix.dart'; +class _LemmaMeaningLoader extends AsyncLoader { + final LemmaInfoRequest request; + _LemmaMeaningLoader(this.request) : super(); + + @override + Future fetch() async { + final result = await LemmaInfoRepo.get( + MatrixState.pangeaController.userController.accessToken, + request, + ); + + if (result.isError) { + throw result.asError!.error; + } + + return result.asValue!.value; + } +} + class LemmaMeaningBuilder extends StatefulWidget { final String langCode; final ConstructIdentifier constructId; + final Map messageInfo; + final Widget Function( BuildContext context, LemmaMeaningBuilderState controller, @@ -20,6 +42,7 @@ class LemmaMeaningBuilder extends StatefulWidget { required this.langCode, required this.constructId, required this.builder, + required this.messageInfo, }); @override @@ -27,14 +50,12 @@ class LemmaMeaningBuilder extends StatefulWidget { } class LemmaMeaningBuilderState extends State { - LemmaInfoResponse? lemmaInfo; - bool isLoading = true; - Object? error; + late _LemmaMeaningLoader _loader; @override void initState() { super.initState(); - _fetchLemmaMeaning(); + _reload(); } @override @@ -42,40 +63,47 @@ class LemmaMeaningBuilderState extends State { super.didUpdateWidget(oldWidget); if (oldWidget.constructId != widget.constructId || oldWidget.langCode != widget.langCode) { - _fetchLemmaMeaning(); + _loader.dispose(); + _reload(); } } + @override + void dispose() { + _loader.dispose(); + super.dispose(); + } + + bool get isLoading => _loader.isLoading; + bool get isError => _loader.isError; + + Object? get error => + isError ? (_loader.state.value as AsyncError).error : null; + + LemmaInfoResponse? get lemmaInfo => _loader.value; + LemmaInfoRequest get _request => LemmaInfoRequest( lemma: widget.constructId.lemma, partOfSpeech: widget.constructId.category, lemmaLang: widget.langCode, - userL1: - MatrixState.pangeaController.languageController.userL1?.langCode ?? - LanguageKeys.defaultLanguage, + userL1: MatrixState.pangeaController.userController.userL1?.langCode ?? + LanguageKeys.defaultLanguage, + messageInfo: widget.messageInfo, ); - Future _fetchLemmaMeaning() async { - setState(() { - isLoading = true; - error = null; - }); - - try { - final resp = await LemmaInfoRepo.get(_request); - lemmaInfo = resp; - } catch (e) { - error = e; - } finally { - if (mounted) setState(() => isLoading = false); - } + void _reload() { + _loader = _LemmaMeaningLoader(_request); + _loader.load(); } @override Widget build(BuildContext context) { - return widget.builder( - context, - this, + return ValueListenableBuilder( + valueListenable: _loader.state, + builder: (context, _, __) => widget.builder( + context, + this, + ), ); } } diff --git a/lib/pangea/lemmas/lemma_meaning_widget.dart b/lib/pangea/lemmas/lemma_meaning_widget.dart new file mode 100644 index 000000000..e2daea447 --- /dev/null +++ b/lib/pangea/lemmas/lemma_meaning_widget.dart @@ -0,0 +1,77 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_meaning_builder.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class LemmaMeaningWidget extends StatelessWidget { + final ConstructIdentifier constructId; + final TextStyle? style; + final InlineSpan? leading; + final Map messageInfo; + + const LemmaMeaningWidget({ + super.key, + required this.constructId, + required this.messageInfo, + this.style, + this.leading, + }); + + @override + Widget build(BuildContext context) { + return LemmaMeaningBuilder( + langCode: MatrixState.pangeaController.userController.userL2!.langCode, + constructId: constructId, + messageInfo: messageInfo, + builder: (context, controller) { + if (controller.isLoading) { + return const TextLoadingShimmer(); + } + + if (controller.error != null) { + if (controller.error is UnsubscribedException) { + return ErrorIndicator( + message: L10n.of(context).subscribeToUnlockDefinitions, + style: style, + onTap: () { + MatrixState.pangeaController.subscriptionController + .showPaywall(context); + }, + ); + } + return ErrorIndicator( + message: L10n.of(context).errorFetchingDefinition, + style: style, + ); + } + + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: RichText( + textAlign: leading == null ? TextAlign.center : TextAlign.start, + text: TextSpan( + style: style, + children: [ + if (leading != null) leading!, + if (leading != null) + const WidgetSpan(child: SizedBox(width: 6.0)), + TextSpan( + text: controller.lemmaInfo?.meaning, + ), + ], + ), + ), + ), + ], + ); + }, + ); + } +} diff --git a/lib/pangea/lemmas/lemma_reaction_picker.dart b/lib/pangea/lemmas/lemma_reaction_picker.dart deleted file mode 100644 index 6f3e2ab92..000000000 --- a/lib/pangea/lemmas/lemma_reaction_picker.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/lemmas/lemma_emoji_picker.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class LemmaReactionPicker extends StatelessWidget { - final List emojis; - final bool loading; - final Event? event; - - const LemmaReactionPicker({ - super.key, - required this.emojis, - required this.loading, - required this.event, - }); - - void setEmoji(String emoji, BuildContext context) { - if (event?.room.timeline == null) { - throw Exception("Timeline is null in reaction picker"); - } - - final allReactionEvents = event!.aggregatedEvents( - event!.room.timeline!, - RelationshipTypes.reaction, - ); - - final client = Matrix.of(context).client; - final reactionEvent = allReactionEvents.firstWhereOrNull( - (e) => - e.senderId == client.userID && - e.content.tryGetMap('m.relates_to')?['key'] == emoji, - ); - - if (reactionEvent != null) { - showFutureLoadingDialog( - context: context, - future: () => reactionEvent.redactEvent(), - ); - } else { - event!.room.sendReaction( - event!.eventId, - emoji, - ); - } - } - - @override - Widget build(BuildContext context) { - final sentReactions = {}; - if (event?.room.timeline != null) { - sentReactions.addAll( - event! - .aggregatedEvents( - event!.room.timeline!, - RelationshipTypes.reaction, - ) - .where( - (event) => - event.senderId == event.room.client.userID && - event.type == 'm.reaction', - ) - .map( - (event) => event.content - .tryGetMap('m.relates_to') - ?.tryGet('key'), - ) - .whereType(), - ); - } - - return LemmaEmojiPicker( - emojis: emojis, - onSelect: (emoji) => setEmoji(emoji, context), - disabled: (emoji) => sentReactions.contains(emoji), - loading: loading, - ); - } -} diff --git a/lib/pangea/lemmas/user_set_lemma_info.dart b/lib/pangea/lemmas/user_set_lemma_info.dart index 1387c89b9..33d1ed6ca 100644 --- a/lib/pangea/lemmas/user_set_lemma_info.dart +++ b/lib/pangea/lemmas/user_set_lemma_info.dart @@ -23,6 +23,16 @@ class UserSetLemmaInfo { }; } + UserSetLemmaInfo copyWith({ + List? emojis, + String? meaning, + }) { + return UserSetLemmaInfo( + emojis: emojis ?? this.emojis, + meaning: meaning ?? this.meaning, + ); + } + @override bool operator ==(Object other) => identical(this, other) || @@ -32,5 +42,6 @@ class UserSetLemmaInfo { meaning == other.meaning; @override - int get hashCode => meaning.hashCode ^ Object.hashAll(emojis ?? []); + int get hashCode => + meaning.hashCode ^ const ListEquality().hash(emojis ?? []); } diff --git a/lib/pangea/login/pages/add_course_page.dart b/lib/pangea/login/pages/add_course_page.dart index 221b85fc4..b6822332d 100644 --- a/lib/pangea/login/pages/add_course_page.dart +++ b/lib/pangea/login/pages/add_course_page.dart @@ -32,11 +32,12 @@ class AddCoursePage extends StatelessWidget { ], ), automaticallyImplyLeading: false, + centerTitle: true, ), body: SafeArea( child: Center( child: Container( - padding: const EdgeInsets.all(30.0), + padding: const EdgeInsets.all(20.0), constraints: const BoxConstraints( maxWidth: 350, maxHeight: 600, @@ -72,7 +73,12 @@ class AddCoursePage extends StatelessWidget { BlendMode.srcIn, ), ), - Text(L10n.of(context).joinCourseWithCode), + Flexible( + child: Text( + L10n.of(context).joinWithCode, + textAlign: TextAlign.center, + ), + ), ], ), ), @@ -93,7 +99,12 @@ class AddCoursePage extends StatelessWidget { size: 24.0, color: theme.colorScheme.onPrimaryContainer, ), - Text(L10n.of(context).joinPublicCourse), + Flexible( + child: Text( + L10n.of(context).joinPublicCourse, + textAlign: TextAlign.center, + ), + ), ], ), ), @@ -118,7 +129,12 @@ class AddCoursePage extends StatelessWidget { BlendMode.srcIn, ), ), - Text(L10n.of(context).startOwn), + Flexible( + child: Text( + L10n.of(context).startOwn, + textAlign: TextAlign.center, + ), + ), ], ), ), diff --git a/lib/pangea/login/pages/course_code_page.dart b/lib/pangea/login/pages/course_code_page.dart index 1a976f54f..6d3cd55ce 100644 --- a/lib/pangea/login/pages/course_code_page.dart +++ b/lib/pangea/login/pages/course_code_page.dart @@ -5,7 +5,7 @@ import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_controller.dart'; import 'package:fluffychat/pangea/login/pages/add_course_page.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -40,8 +40,7 @@ class CourseCodePageState extends State { return; } - final roomId = await MatrixState.pangeaController.spaceCodeController - .joinSpaceWithCode( + final roomId = await SpaceCodeController.joinSpaceWithCode( context, _code, ); @@ -59,27 +58,12 @@ class CourseCodePageState extends State { final theme = Theme.of(context); return Scaffold( appBar: AppBar( - title: Row( - spacing: 10.0, - mainAxisSize: MainAxisSize.min, - children: [ - SvgPicture.network( - "${AppConfig.assetsBaseURL}/${AddCoursePage.mapUnlockFileName}", - width: 24.0, - height: 24.0, - colorFilter: ColorFilter.mode( - theme.colorScheme.onSurface, - BlendMode.srcIn, - ), - ), - Text(L10n.of(context).joinCourseWithCode), - ], - ), + title: Text(L10n.of(context).joinWithCode), ), body: SafeArea( child: Center( child: Container( - padding: const EdgeInsets.all(30.0), + padding: const EdgeInsets.all(20.0), constraints: const BoxConstraints( maxWidth: 350, maxHeight: 600, @@ -87,9 +71,14 @@ class CourseCodePageState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - PangeaLogoSvg( + SvgPicture.network( + "${AppConfig.assetsBaseURL}/${AddCoursePage.mapUnlockFileName}", width: 100.0, - forceColor: theme.colorScheme.onSurface, + height: 100.0, + colorFilter: ColorFilter.mode( + theme.colorScheme.onSurface, + BlendMode.srcIn, + ), ), Column( spacing: 16.0, diff --git a/lib/pangea/login/pages/create_pangea_account_page.dart b/lib/pangea/login/pages/create_pangea_account_page.dart index 3a5b6309c..6565912ef 100644 --- a/lib/pangea/login/pages/create_pangea_account_page.dart +++ b/lib/pangea/login/pages/create_pangea_account_page.dart @@ -2,18 +2,21 @@ import 'dart:async'; import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_room_extension.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plans_repo.dart'; import 'package:fluffychat/pangea/course_plans/courses/get_localized_courses_request.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_controller.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; +import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/pangea/login/utils/lang_code_repo.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -32,14 +35,6 @@ class CreatePangeaAccountPageState extends State { Object? _profileError; Object? _courseError; - final List avatarPaths = const [ - "assets/pangea/Avatar_1.png", - "assets/pangea/Avatar_2.png", - "assets/pangea/Avatar_3.png", - "assets/pangea/Avatar_4.png", - "assets/pangea/Avatar_5.png", - ]; - @override void initState() { super.initState(); @@ -49,6 +44,8 @@ class CreatePangeaAccountPageState extends State { String? _spaceId; String? _courseLangCode; + String avatarPath(int num) => "avatar_$num.png"; + Future get _cachedLangCode => LangCodeRepo.get(); Future get _targetLangCode async => @@ -56,10 +53,9 @@ class CreatePangeaAccountPageState extends State { Future get _baseLangCode async => (await _cachedLangCode)?.baseLangCode ?? - MatrixState.pangeaController.languageController.systemLanguage?.langCode; + LanguageService.systemLanguage?.langCode; - String? get _cachedSpaceCode => - MatrixState.pangeaController.spaceCodeController.cachedSpaceCode; + String? get _cachedSpaceCode => SpaceCodeRepo.spaceCode; Future _createProfile() async { setState(() { @@ -78,13 +74,10 @@ class CreatePangeaAccountPageState extends State { } Future _joinCachedCourse() async { - await MatrixState.pangeaController.spaceCodeController.initCompleter.future; if (_cachedSpaceCode == null) return; try { - final spaceId = await MatrixState.pangeaController.spaceCodeController - .joinCachedSpaceCode(context); - + final spaceId = await SpaceCodeController.joinCachedSpaceCode(context); if (spaceId == null) { throw Exception('Failed to join space with code $_cachedSpaceCode'); } @@ -107,7 +100,7 @@ class CreatePangeaAccountPageState extends State { final course = await CoursePlansRepo.get( GetLocalizedCoursesRequest( coursePlanIds: [courseId], - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), ); @@ -122,16 +115,10 @@ class CreatePangeaAccountPageState extends State { final client = Matrix.of(context).client; try { final random = Random(); - final selectedAvatarPath = - avatarPaths[random.nextInt(avatarPaths.length)]; - - final ByteData byteData = await rootBundle.load(selectedAvatarPath); - final Uint8List bytes = byteData.buffer.asUint8List(); - final file = MatrixFile( - bytes: bytes, - name: selectedAvatarPath, - ); - await client.setAvatar(file); + final selectedAvatarPath = avatarPath(random.nextInt(4) + 1); + final avatarUrl = + Uri.parse("${AppConfig.assetsBaseURL}/$selectedAvatarPath"); + await client.setAvatarUrl(client.userID!, avatarUrl); } catch (err, s) { ErrorHandler.logError( e: err, @@ -201,8 +188,7 @@ class CreatePangeaAccountPageState extends State { if (targetLangCode != null) MatrixState.pangeaController.userController.updateAnalyticsProfile( targetLanguage: PLanguageStore.byLangCode(targetLangCode), - baseLanguage: - MatrixState.pangeaController.languageController.systemLanguage, + baseLanguage: LanguageService.systemLanguage, level: 1, ), ]; diff --git a/lib/pangea/login/pages/language_selection_page.dart b/lib/pangea/login/pages/language_selection_page.dart index 80c7450f1..fad33f3fd 100644 --- a/lib/pangea/login/pages/language_selection_page.dart +++ b/lib/pangea/login/pages/language_selection_page.dart @@ -4,8 +4,10 @@ import 'package:go_router/go_router.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dropdown.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/learning_settings/p_language_dropdown.dart'; import 'package:fluffychat/pangea/login/utils/lang_code_repo.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -24,11 +26,42 @@ class LanguageSelectionPageState extends State { LanguageModel? _selectedLanguage; LanguageModel? _baseLanguage; + final TextEditingController _searchController = TextEditingController(); + @override void initState() { super.initState(); - _baseLanguage = - MatrixState.pangeaController.languageController.systemLanguage; + _baseLanguage = LanguageService.systemLanguage; + _setFromCache(); + } + + @override + void dispose() { + _searchController.dispose(); + super.dispose(); + } + + // The user may set their target language initally, then return to this page + // to change it again. Try and get the cached values if present. + void _setFromCache() { + LangCodeRepo.get().then((langSettings) { + if (langSettings == null) return; + final cachedTargetLang = + PLanguageStore.byLangCode(langSettings.targetLangCode); + final cachedBaseLang = langSettings.baseLangCode != null + ? PLanguageStore.byLangCode(langSettings.baseLangCode!) + : null; + + if (cachedTargetLang == _selectedLanguage && + cachedBaseLang == _baseLanguage) { + return; + } + + setState(() { + _selectedLanguage = cachedTargetLang ?? _selectedLanguage; + _baseLanguage = cachedBaseLang ?? _baseLanguage; + }); + }); } void _setSelectedLanguage(LanguageModel? l) { @@ -65,6 +98,7 @@ class LanguageSelectionPageState extends State { Widget build(BuildContext context) { final theme = Theme.of(context); final languages = MatrixState.pangeaController.pLanguageStore.targetOptions; + final isColumnMode = FluffyThemes.isColumnMode(context); return Scaffold( appBar: AppBar( @@ -73,52 +107,80 @@ class LanguageSelectionPageState extends State { body: SafeArea( child: Center( child: Container( - padding: const EdgeInsets.all(30.0), + padding: const EdgeInsets.all(20.0), constraints: const BoxConstraints( maxWidth: 450, ), child: Column( spacing: 24.0, children: [ + TextField( + controller: _searchController, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.search), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(50), + ), + ), + ), Expanded( child: Stack( children: [ - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only( - left: 16.0, - right: 16.0, - bottom: 60.0, - ), - child: Wrap( - spacing: 8.0, - runSpacing: 8.0, - alignment: WrapAlignment.center, - children: languages - .map( - (l) => FilterChip( - selected: _selectedLanguage == l, - backgroundColor: _selectedLanguage == l - ? theme.colorScheme.primary - : theme.colorScheme.surface, - padding: const EdgeInsets.symmetric( - horizontal: 8.0, - vertical: 4.0, - ), - label: Text( - l.getDisplayName(context) ?? - l.displayName, - style: theme.textTheme.bodyMedium, - ), - onSelected: (selected) { - _setSelectedLanguage( - selected ? l : null, - ); - }, - ), - ) - .toList(), - ), + Align( + alignment: Alignment.topCenter, + child: ValueListenableBuilder( + valueListenable: _searchController, + builder: (context, val, __) { + return SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only( + left: 16.0, + right: 16.0, + bottom: 60.0, + ), + child: Wrap( + spacing: isColumnMode ? 16.0 : 8.0, + runSpacing: isColumnMode ? 16.0 : 8.0, + alignment: WrapAlignment.center, + children: languages + .where( + (l) => l + .getDisplayName(context) + .toLowerCase() + .contains( + _searchController.text + .toLowerCase(), + ), + ) + .map( + (l) => FilterChip( + selected: _selectedLanguage == l, + backgroundColor: + _selectedLanguage == l + ? theme.colorScheme.primary + : theme.colorScheme.surface, + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 4.0, + ), + label: Text( + l.getDisplayName(context), + style: isColumnMode + ? theme.textTheme.bodyLarge + : theme.textTheme.bodyMedium, + ), + onSelected: (selected) { + _setSelectedLanguage( + selected ? l : null, + ); + }, + ), + ) + .toList(), + ), + ), + ); + }, ), ), Align( diff --git a/lib/pangea/login/pages/login_options_view.dart b/lib/pangea/login/pages/login_options_view.dart index d12f6b32f..5ef1bc512 100644 --- a/lib/pangea/login/pages/login_options_view.dart +++ b/lib/pangea/login/pages/login_options_view.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/login/login.dart'; import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/sso_provider_enum.dart'; import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; class LoginOptionsView extends StatelessWidget { @@ -35,17 +36,13 @@ class LoginOptionsView extends StatelessWidget { spacing: 16.0, mainAxisAlignment: MainAxisAlignment.end, children: [ - PangeaSsoButton( + const PangeaSsoButton( provider: SSOProvider.apple, title: "Apple", - loading: controller.loadingAppleSSO, - setLoading: controller.setLoadingSSO, ), - PangeaSsoButton( + const PangeaSsoButton( provider: SSOProvider.google, title: "Google", - loading: controller.loadingGoogleSSO, - setLoading: controller.setLoadingSSO, ), ElevatedButton( onPressed: () => context.go('/home/login/email'), diff --git a/lib/pangea/login/pages/login_or_signup_view.dart b/lib/pangea/login/pages/login_or_signup_view.dart index 39774f615..b0b8086c4 100644 --- a/lib/pangea/login/pages/login_or_signup_view.dart +++ b/lib/pangea/login/pages/login_or_signup_view.dart @@ -6,8 +6,8 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_repo.dart'; import 'package:fluffychat/pangea/login/widgets/app_config_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; class LoginOrSignupView extends StatefulWidget { const LoginOrSignupView({super.key}); @@ -25,8 +25,7 @@ class LoginOrSignupViewState extends State { _loadOverrides(); } - String? get _cachedSpaceCode => - MatrixState.pangeaController.spaceCodeController.cachedSpaceCode; + String? get _cachedSpaceCode => SpaceCodeRepo.spaceCode; Future _loadOverrides() async { final overrides = await Environment.getAppConfigOverrides(); diff --git a/lib/pangea/login/pages/new_course_page.dart b/lib/pangea/login/pages/new_course_page.dart index d6a8fb6c7..65903c224 100644 --- a/lib/pangea/login/pages/new_course_page.dart +++ b/lib/pangea/login/pages/new_course_page.dart @@ -1,17 +1,26 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; +import 'package:async/async.dart'; import 'package:go_router/go_router.dart'; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/url_image_widget.dart'; import 'package:fluffychat/pangea/course_creation/course_info_chip_widget.dart'; import 'package:fluffychat/pangea/course_creation/course_language_filter.dart'; -import 'package:fluffychat/pangea/course_creation/course_search_provider.dart'; -import 'package:fluffychat/pangea/login/pages/add_course_page.dart'; +import 'package:fluffychat/pangea/course_plans/courses/course_filter.dart'; +import 'package:fluffychat/pangea/course_plans/courses/course_plan_client_extension.dart'; +import 'package:fluffychat/pangea/course_plans/courses/course_plan_model.dart'; +import 'package:fluffychat/pangea/course_plans/courses/course_plans_repo.dart'; +import 'package:fluffychat/pangea/course_plans/courses/get_localized_courses_response.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; +import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/avatar.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; class NewCoursePage extends StatefulWidget { @@ -30,15 +39,146 @@ class NewCoursePage extends StatefulWidget { State createState() => NewCoursePageState(); } -class NewCoursePageState extends State - with CourseSearchProvider { +class NewCoursePageState extends State { + final ValueNotifier?> _courses = + ValueNotifier(null); + + final ValueNotifier _targetLanguageFilter = + ValueNotifier(null); + @override void initState() { super.initState(); - final target = MatrixState.pangeaController.languageController.userL2; - if (target != null) { - setTargetLanguageFilter(target, reload: false); + _targetLanguageFilter.value = + MatrixState.pangeaController.userController.userL2; + + _loadCourses(); + } + + @override + void dispose() { + _courses.dispose(); + _targetLanguageFilter.dispose(); + super.dispose(); + } + + CourseFilter get _filter { + return CourseFilter( + targetLanguage: _targetLanguageFilter.value, + ); + } + + void _setTargetLanguageFilter(LanguageModel? language) { + if (_targetLanguageFilter.value?.langCodeShort == language?.langCodeShort) { + return; + } + + _targetLanguageFilter.value = language; + _loadCourses(); + } + + Future _loadCourses() async { + try { + _courses.value = null; + final resp = await CoursePlansRepo.searchByFilter(filter: _filter); + _courses.value = Result.value(resp); + if (resp.coursePlans.isEmpty) { + ErrorHandler.logError( + e: "No courses found", + data: { + 'filter': _filter.toJson(), + }, + ); + } + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'filter': _filter.toJson(), + }, + ); + _courses.value = Result.error(e); + } + } + + Future _onSelect(CoursePlanModel course) async { + final existingRoom = + Matrix.of(context).client.getRoomByCourseId(course.uuid); + + if (existingRoom == null || widget.spaceId != null) { + context.go( + widget.spaceId != null + ? '/rooms/spaces/${widget.spaceId}/addcourse/${course.uuid}' + : '/${widget.route}/course/own/${course.uuid}', + ); + return; + } + + final action = await showAdaptiveDialog( + barrierDismissible: true, + context: context, + builder: (context) => AlertDialog.adaptive( + title: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Center( + child: Text( + course.title, + textAlign: TextAlign.center, + ), + ), + ), + content: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256, maxHeight: 256), + child: Text( + L10n.of(context).alreadyInCourseWithID, + textAlign: TextAlign.center, + ), + ), + actions: [ + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(0), + bigButtons: true, + child: Text(L10n.of(context).createCourse), + ), + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(1), + bigButtons: true, + child: Text( + L10n.of(context).goToExistingCourse, + ), + ), + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(null), + bigButtons: true, + child: Text( + L10n.of(context).cancel, + ), + ), + ], + ), + ); + + if (action == 0) { + context.go( + widget.spaceId != null + ? '/rooms/spaces/${widget.spaceId}/addcourse/${course.uuid}' + : '/${widget.route}/course/own/${course.uuid}', + ); + } else if (action == 1) { + if (existingRoom.isSpace) { + context.go('/rooms/spaces/${existingRoom.id}'); + } else { + ErrorHandler.logError( + e: "Existing course room is not a space", + data: { + 'roomId': existingRoom.id, + 'courseId': course.uuid, + }, + ); + context.go('/rooms/${existingRoom.id}'); + } } } @@ -46,34 +186,18 @@ class NewCoursePageState extends State Widget build(BuildContext context) { final theme = Theme.of(context); final spaceId = widget.spaceId; - final courseEntries = courses.entries.toList(); return Scaffold( appBar: AppBar( - title: Row( - spacing: 10.0, - mainAxisSize: MainAxisSize.min, - children: [ - SvgPicture.network( - "${AppConfig.assetsBaseURL}/${AddCoursePage.mapStartFileName}", - width: 24.0, - height: 24.0, - colorFilter: ColorFilter.mode( - theme.colorScheme.onSurface, - BlendMode.srcIn, - ), - ), - Text( - spaceId != null - ? L10n.of(context).addCoursePlan - : L10n.of(context).startOwn, - ), - ], + title: Text( + spaceId != null + ? L10n.of(context).addCoursePlan + : L10n.of(context).startOwn, ), ), body: SafeArea( child: Center( child: Container( - padding: const EdgeInsets.all(30.0), + padding: const EdgeInsets.all(20.0), constraints: const BoxConstraints( maxWidth: 450, ), @@ -88,9 +212,14 @@ class NewCoursePageState extends State runSpacing: 8.0, alignment: WrapAlignment.start, children: [ - CourseLanguageFilter( - value: targetLanguageFilter, - onChanged: setTargetLanguageFilter, + ValueListenableBuilder( + valueListenable: _targetLanguageFilter, + builder: (context, value, __) { + return CourseLanguageFilter( + value: _targetLanguageFilter.value, + onChanged: _setTargetLanguageFilter, + ); + }, ), ], ), @@ -99,8 +228,14 @@ class NewCoursePageState extends State ), const SizedBox(height: 20.0), ], - loading || error != null || courses.isEmpty - ? Center( + ValueListenableBuilder( + valueListenable: _courses, + builder: (context, value, __) { + final loading = value == null; + if (loading || + value.isError || + value.result!.coursePlans.isEmpty) { + return Center( child: Padding( padding: const EdgeInsets.all(32.0), child: loading @@ -142,21 +277,29 @@ class NewCoursePageState extends State ), ), ), - ) - : Expanded( - child: ListView.separated( - separatorBuilder: (context, index) => - const SizedBox(height: 10.0), - itemCount: courseEntries.length, - itemBuilder: (context, index) { - final course = courseEntries[index].value; - final courseId = courseEntries[index].key; - return InkWell( - onTap: () => context.go( - spaceId != null - ? '/rooms/spaces/$spaceId/addcourse/$courseId' - : '/${widget.route}/course/own/$courseId', - ), + ); + } + + final courses = value.result!.coursePlans.values.toList(); + courses.sort( + (a, b) => LanguageLevelTypeEnum.values + .indexOf(a.cefrLevel) + .compareTo( + LanguageLevelTypeEnum.values.indexOf(b.cefrLevel), + ), + ); + + return Expanded( + child: ListView.separated( + separatorBuilder: (context, index) => + const SizedBox(height: 10.0), + itemCount: courses.length, + itemBuilder: (context, index) { + final course = courses[index]; + return Material( + type: MaterialType.transparency, + child: InkWell( + onTap: () => _onSelect(course), borderRadius: BorderRadius.circular(12.0), child: Container( padding: const EdgeInsets.all(12.0), @@ -179,15 +322,12 @@ class NewCoursePageState extends State width: 58.0, borderRadius: BorderRadius.circular(10.0), - replacement: Container( - height: 58.0, - width: 58.0, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(10.0), - color: theme - .colorScheme.surfaceContainer, + replacement: Avatar( + name: course.title, + borderRadius: BorderRadius.circular( + 10.0, ), + size: 58.0, ), ), Flexible( @@ -201,7 +341,7 @@ class NewCoursePageState extends State ], ), CourseInfoChips( - courseId, + course.uuid, iconSize: 12.0, fontSize: 12.0, ), @@ -212,10 +352,13 @@ class NewCoursePageState extends State ], ), ), - ); - }, - ), + ), + ); + }, ), + ); + }, + ), ], ), ), diff --git a/lib/pangea/login/pages/public_courses_page.dart b/lib/pangea/login/pages/public_courses_page.dart index e3fba542e..db782fcf4 100644 --- a/lib/pangea/login/pages/public_courses_page.dart +++ b/lib/pangea/login/pages/public_courses_page.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:material_symbols_icons/symbols.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -13,8 +12,8 @@ import 'package:fluffychat/pangea/course_creation/course_language_filter.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plan_model.dart'; import 'package:fluffychat/pangea/course_plans/courses/course_plans_repo.dart'; import 'package:fluffychat/pangea/course_plans/courses/get_localized_courses_request.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/spaces/utils/public_course_extension.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/spaces/public_course_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -45,7 +44,7 @@ class PublicCoursesPageState extends State { void initState() { super.initState(); - final target = MatrixState.pangeaController.languageController.userL2; + final target = MatrixState.pangeaController.userController.userL2; if (target != null) { setTargetLanguageFilter(target); } @@ -121,7 +120,7 @@ class PublicCoursesPageState extends State { GetLocalizedCoursesRequest( coursePlanIds: discoveredCourses.map((c) => c.courseId).toSet().toList(), - l1: MatrixState.pangeaController.languageController.activeL1Code()!, + l1: MatrixState.pangeaController.userController.userL1Code!, ), ); final searchResult = resp.coursePlans; @@ -151,21 +150,14 @@ class PublicCoursesPageState extends State { final theme = Theme.of(context); return Scaffold( appBar: AppBar( - title: Row( - spacing: 10.0, - mainAxisSize: MainAxisSize.min, - children: [ - const Icon( - Symbols.map_search, - ), - Text(L10n.of(context).joinPublicCourse), - ], + title: Text( + L10n.of(context).joinPublicCourse, ), ), body: SafeArea( child: Center( child: Container( - padding: const EdgeInsets.all(30.0), + padding: const EdgeInsets.all(20.0), constraints: const BoxConstraints( maxWidth: 450, ), @@ -257,90 +249,92 @@ class PublicCoursesPageState extends State { roomChunk.canonicalAlias ?? L10n.of(context).emptyChat; - return InkWell( - onTap: () => context.go( - '/${widget.route}/course/public/$courseId', - extra: roomChunk, - ), - borderRadius: BorderRadius.circular(12.0), - child: Container( - padding: const EdgeInsets.all(12.0), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12.0), - border: Border.all( - color: theme.colorScheme.primary, - ), + return Material( + type: MaterialType.transparency, + child: InkWell( + onTap: () => context.go( + '/${widget.route}/course/public/$courseId', + extra: roomChunk, ), - child: Column( - spacing: 4.0, - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - spacing: 8.0, - children: [ - ImageByUrl( - imageUrl: roomChunk.avatarUrl?.toString(), - width: 58.0, - borderRadius: BorderRadius.circular(10.0), - replacement: Container( - height: 58.0, + borderRadius: BorderRadius.circular(12.0), + child: Container( + padding: const EdgeInsets.all(12.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12.0), + border: Border.all( + color: theme.colorScheme.primary, + ), + ), + child: Column( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + spacing: 8.0, + children: [ + ImageByUrl( + imageUrl: + roomChunk.avatarUrl?.toString(), width: 58.0, - decoration: BoxDecoration( - borderRadius: - BorderRadius.circular(10.0), - color: theme - .colorScheme.surfaceContainer, + borderRadius: + BorderRadius.circular(10.0), + replacement: Avatar( + name: displayname, + borderRadius: BorderRadius.circular( + 10.0, + ), + size: 58.0, ), ), - ), - Flexible( - child: Column( - spacing: 0.0, - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - displayname, - style: theme.textTheme.bodyLarge, - maxLines: 2, - overflow: TextOverflow.ellipsis, - ), - Row( - spacing: 4.0, - mainAxisSize: MainAxisSize.min, - children: [ - const Icon( - Icons.group, - size: 16.0, - ), - Text( - L10n.of(context) - .countParticipants( - roomChunk.numJoinedMembers, + Flexible( + child: Column( + spacing: 0.0, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + displayname, + style: theme.textTheme.bodyLarge, + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + Row( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + children: [ + const Icon( + Icons.group, + size: 16.0, ), - style: - theme.textTheme.bodyMedium, - ), - ], - ), - ], + Text( + L10n.of(context) + .countParticipants( + roomChunk.numJoinedMembers, + ), + style: theme + .textTheme.bodyMedium, + ), + ], + ), + ], + ), ), + ], + ), + if (course != null) ...[ + CourseInfoChips( + courseId, + iconSize: 12.0, + fontSize: 12.0, + ), + Text( + course.description, + style: theme.textTheme.bodyMedium, ), ], - ), - if (course != null) ...[ - CourseInfoChips( - courseId, - iconSize: 12.0, - fontSize: 12.0, - ), - Text( - course.description, - style: theme.textTheme.bodyMedium, - ), ], - ], + ), ), ), ); diff --git a/lib/pangea/login/pages/signup.dart b/lib/pangea/login/pages/signup.dart index 3028cc26e..a30527363 100644 --- a/lib/pangea/login/pages/signup.dart +++ b/lib/pangea/login/pages/signup.dart @@ -7,7 +7,6 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/login/pages/signup_view.dart'; import 'package:fluffychat/pangea/login/pages/signup_with_email_view.dart'; -import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -34,9 +33,6 @@ class SignupPageController extends State { String? emailText; bool loadingSignup = false; - bool loadingAppleSSO = false; - bool loadingGoogleSSO = false; - bool showPassword = false; bool noEmailWarningConfirmed = false; bool displaySecondPasswordField = false; @@ -70,17 +66,6 @@ class SignupPageController extends State { super.dispose(); } - void setLoadingSSO(bool loading, SSOProvider provider) { - if (provider == SSOProvider.apple) { - loadingAppleSSO = loading; - loadingGoogleSSO = false; - } else if (provider == SSOProvider.google) { - loadingGoogleSSO = loading; - loadingAppleSSO = false; - } - if (mounted) setState(() {}); - } - void setSignupError(String? error) { signupError = error; if (mounted) setState(() {}); @@ -162,8 +147,6 @@ class SignupPageController extends State { onError: (e, s) { setState(() { loadingSignup = false; - loadingAppleSSO = false; - loadingGoogleSSO = false; }); if (e.toString().contains("Request has been canceled")) { Navigator.of(context).pop(); diff --git a/lib/pangea/login/pages/signup_view.dart b/lib/pangea/login/pages/signup_view.dart index caa985e98..8492775ca 100644 --- a/lib/pangea/login/pages/signup_view.dart +++ b/lib/pangea/login/pages/signup_view.dart @@ -9,6 +9,7 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/widgets/pangea_logo_svg.dart'; +import 'package:fluffychat/pangea/login/sso_provider_enum.dart'; import 'package:fluffychat/pangea/login/widgets/p_sso_button.dart'; import 'signup.dart'; @@ -45,18 +46,8 @@ class SignupPageView extends StatelessWidget { fontWeight: FontWeight.bold, ), ), - PangeaSsoButton( - provider: SSOProvider.google, - setLoading: controller.setLoadingSSO, - loading: controller.loadingGoogleSSO, - validator: validator, - ), - PangeaSsoButton( - provider: SSOProvider.apple, - setLoading: controller.setLoadingSSO, - loading: controller.loadingAppleSSO, - validator: validator, - ), + const PangeaSsoButton(provider: SSOProvider.google), + const PangeaSsoButton(provider: SSOProvider.apple), ElevatedButton( onPressed: () => context.go( '/home/language/signup/email', diff --git a/lib/pangea/login/sso_provider_enum.dart b/lib/pangea/login/sso_provider_enum.dart new file mode 100644 index 000000000..f98e81058 --- /dev/null +++ b/lib/pangea/login/sso_provider_enum.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; + +enum SSOProvider { + google, + apple; + + String get id { + switch (this) { + case SSOProvider.google: + return "oidc-google"; + case SSOProvider.apple: + return "oidc-apple"; + } + } + + String get asset { + switch (this) { + case SSOProvider.google: + return "assets/pangea/google.svg"; + case SSOProvider.apple: + return "assets/pangea/apple.svg"; + } + } + + String description(BuildContext context) { + switch (this) { + case SSOProvider.google: + return L10n.of(context).withGoogle; + case SSOProvider.apple: + return L10n.of(context).withApple; + } + } +} diff --git a/lib/pangea/login/widgets/full_width_button.dart b/lib/pangea/login/widgets/full_width_button.dart index 3ea6180f1..fe30be714 100644 --- a/lib/pangea/login/widgets/full_width_button.dart +++ b/lib/pangea/login/widgets/full_width_button.dart @@ -44,13 +44,14 @@ class FullWidthButtonState extends State { onPressed: widget.onPressed, borderRadius: BorderRadius.circular(36), color: Theme.of(context).colorScheme.primary, - child: Container( - // internal padding + builder: (context, depressed, shadowColor) => Container( padding: const EdgeInsets.symmetric(horizontal: 16), height: 40, decoration: BoxDecoration( color: widget.enabled - ? Theme.of(context).colorScheme.primary + ? depressed + ? shadowColor + : Theme.of(context).colorScheme.primary : Theme.of(context).disabledColor, borderRadius: BorderRadius.circular(36), ), diff --git a/lib/pangea/login/widgets/p_sso_button.dart b/lib/pangea/login/widgets/p_sso_button.dart index 2b2125bee..d89c0e0e1 100644 --- a/lib/pangea/login/widgets/p_sso_button.dart +++ b/lib/pangea/login/widgets/p_sso_button.dart @@ -1,81 +1,116 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:matrix/matrix_api_lite/model/matrix_exception.dart'; +import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; +import 'package:go_router/go_router.dart'; +import 'package:matrix/matrix.dart'; +import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker.dart'; -import 'package:fluffychat/pangea/login/utils/sso_login_action.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; - -enum SSOProvider { google, apple } - -extension on SSOProvider { - String get id { - switch (this) { - case SSOProvider.google: - return "oidc-google"; - case SSOProvider.apple: - return "oidc-apple"; - } - } - - String get asset { - switch (this) { - case SSOProvider.google: - return "assets/pangea/google.svg"; - case SSOProvider.apple: - return "assets/pangea/apple.svg"; - } - } - - String description(BuildContext context) { - switch (this) { - case SSOProvider.google: - return L10n.of(context).withGoogle; - case SSOProvider.apple: - return L10n.of(context).withApple; - } - } -} +import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; +import 'package:fluffychat/pangea/login/sso_provider_enum.dart'; +import 'package:fluffychat/pangea/login/widgets/p_sso_dialog.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/fluffy_chat_app.dart'; +import 'package:fluffychat/widgets/matrix.dart'; class PangeaSsoButton extends StatelessWidget { - final String? title; final SSOProvider provider; - - final Function(bool, SSOProvider) setLoading; - final bool loading; - final bool? Function()? validator; + final String? title; const PangeaSsoButton({ required this.provider, - required this.setLoading, this.title, - this.loading = false, - this.validator, super.key, }); - Future _runSSOLogin(BuildContext context) async { - setLoading(true, provider); - await showFutureLoadingDialog( - context: context, - future: () async => pangeaSSOLoginAction( - IdentityProvider( - id: provider.id, - name: provider.name, + Future _runSSOLogin(BuildContext context) => showAdaptiveDialog( + context: context, + builder: (context) => SSODialog( + future: () => _ssoAction( + IdentityProvider( + id: provider.id, + name: provider.name, + ), + context, + ), ), - context, - ), - onError: (e, s) { - setLoading(false, provider); - return e is MatrixException - ? e.errorMessage - : L10n.of(context).oopsSomethingWentWrong; - }, - onDismiss: () => setLoading(false, provider), + ); + + Future _ssoAction( + IdentityProvider provider, + BuildContext context, + ) async { + final bool isDefaultPlatform = (PlatformInfos.isMobile || + PlatformInfos.isWeb || + PlatformInfos.isMacOS); + final redirectUrl = kIsWeb + ? Uri.parse(html.window.location.href) + .resolveUri( + Uri(pathSegments: ['auth.html']), + ) + .toString() + : isDefaultPlatform + ? '${AppConfig.appOpenUrlScheme.toLowerCase()}://login' + : 'http://localhost:3001//login'; + final client = await Matrix.of(context).getLoginClient(); + final url = client.homeserver!.replace( + path: '/_matrix/client/v3/login/sso/redirect/${provider.id ?? ''}', + queryParameters: {'redirectUrl': redirectUrl}, ); - setLoading(false, provider); + + final urlScheme = isDefaultPlatform + ? Uri.parse(redirectUrl).scheme + : "http://localhost:3001"; + String result; + try { + result = await FlutterWebAuth2.authenticate( + url: url.toString(), + callbackUrlScheme: urlScheme, + ); + } catch (err) { + if (err is PlatformException && err.code == 'CANCELED') { + debugPrint("user cancelled SSO login"); + return; + } + rethrow; + } + final token = Uri.parse(result).queryParameters['loginToken']; + if (token?.isEmpty ?? false) return; + + final redirect = client.onLoginStateChanged.stream + .where((state) => state == LoginState.loggedIn) + .first + .then( + (_) { + final route = FluffyChatApp.router.state.fullPath; + if (route == null || + (!route.contains("/rooms") && !route.contains('registration'))) { + context.go('/rooms'); + } + }, + ).timeout(const Duration(seconds: 30)); + + final loginRes = await client.login( + LoginType.mLoginToken, + token: token, + initialDeviceDisplayName: PlatformInfos.clientName, + ); + + if (client.onLoginStateChanged.value == LoginState.loggedIn) { + final route = FluffyChatApp.router.state.fullPath; + if (route == null || + (!route.contains("/rooms") && !route.contains('registration'))) { + context.go('/rooms'); + } + } else { + await redirect; + } + + GoogleAnalytics.login(provider.name!, loginRes.userId); } @override @@ -102,13 +137,7 @@ class PangeaSsoButton extends StatelessWidget { Text(title ?? provider.description(context)), ], ), - onPressed: () { - if (validator != null) { - final valid = validator!.call() ?? false; - if (!valid) return; - } - _runSSOLogin(context); - }, + onPressed: () => _runSSOLogin(context), ); } } diff --git a/lib/pangea/login/widgets/p_sso_dialog.dart b/lib/pangea/login/widgets/p_sso_dialog.dart new file mode 100644 index 000000000..fb7184672 --- /dev/null +++ b/lib/pangea/login/widgets/p_sso_dialog.dart @@ -0,0 +1,132 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:flutter_linkify/flutter_linkify.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/utils/url_launcher.dart'; + +class SSODialog extends StatefulWidget { + final Future Function() future; + const SSODialog({ + super.key, + required this.future, + }); + + @override + SSODialogState createState() => SSODialogState(); +} + +class SSODialogState extends State { + Timer? _hintTimer; + bool _showHint = false; + Object? _error; + + @override + void initState() { + super.initState(); + _runFuture(); + _hintTimer = Timer(const Duration(seconds: 5), () { + if (mounted) { + setState(() => _showHint = true); + } + }); + } + + @override + void dispose() { + _hintTimer?.cancel(); + super.dispose(); + } + + Future _runFuture() async { + try { + await widget.future(); + } catch (e) { + setState(() => _error = e); + } + } + + @override + Widget build(BuildContext context) { + return Dialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.0), + ), + backgroundColor: Theme.of(context).colorScheme.surface, + child: Container( + padding: const EdgeInsets.all(12.0), + constraints: const BoxConstraints(maxWidth: 450), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Align( + alignment: Alignment.topRight, + child: IconButton( + onPressed: Navigator.of(context).pop, + icon: const Icon(Icons.close), + ), + ), + _error == null + ? Text( + L10n.of(context).ssoDialogTitle, + style: Theme.of(context).textTheme.headlineMedium, + textAlign: TextAlign.center, + ) + : Icon( + Icons.error_outline_outlined, + color: Theme.of(context).colorScheme.error, + size: 48, + ), + Container( + alignment: Alignment.center, + constraints: const BoxConstraints(minHeight: 150), + padding: const EdgeInsets.all(4.0), + child: Column( + spacing: 16.0, + mainAxisSize: MainAxisSize.min, + children: [ + if (_error != null) + Text( + _error!.toLocalizedString(context), + style: Theme.of(context).textTheme.titleMedium, + textAlign: TextAlign.center, + ) + else ...[ + SelectableLinkify( + text: L10n.of(context).ssoDialogDesc, + textScaleFactor: + MediaQuery.textScalerOf(context).scale(1), + linkStyle: TextStyle( + color: Theme.of(context).colorScheme.primary, + decorationColor: Theme.of(context).colorScheme.primary, + ), + options: const LinkifyOptions(humanize: false), + onOpen: (url) => + UrlLauncher(context, url.url).launchUrl(), + style: Theme.of(context).textTheme.bodyLarge, + textAlign: TextAlign.center, + ), + _showHint + ? Text( + L10n.of(context).ssoDialogHelpText, + style: Theme.of(context).textTheme.bodyLarge, + textAlign: TextAlign.center, + ) + : const SizedBox( + height: 16.0, + width: 16.0, + child: CircularProgressIndicator.adaptive(), + ), + ], + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/pangea/message_token_text/hidden_text.dart b/lib/pangea/message_token_text/hidden_text.dart deleted file mode 100644 index 7ac6415e3..000000000 --- a/lib/pangea/message_token_text/hidden_text.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - -class HiddenText extends StatelessWidget { - final String text; - final TextStyle style; - - const HiddenText({ - super.key, - required this.text, - required this.style, - }); - - @override - Widget build(BuildContext context) { - final TextPainter textPainter = TextPainter( - text: TextSpan(text: text, style: style), - textDirection: TextDirection.ltr, - )..layout(); - - final textWidth = textPainter.size.width; - final textHeight = textPainter.size.height; - - textPainter.dispose(); - - return SizedBox( - height: textHeight, - child: Stack( - children: [ - Container( - width: textWidth, - height: textHeight, - color: Colors.transparent, - ), - Positioned( - bottom: 0, - child: Container( - width: textWidth, - height: 1, - color: style.color, - ), - ), - ], - ), - ); - } -} diff --git a/lib/pangea/message_token_text/token_emoji_button.dart b/lib/pangea/message_token_text/token_emoji_button.dart deleted file mode 100644 index 449f0d14d..000000000 --- a/lib/pangea/message_token_text/token_emoji_button.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class TokenEmojiButton extends StatefulWidget { - final PangeaToken? token; - final String eventId; - final String? targetId; - final VoidCallback? onSelect; - - const TokenEmojiButton({ - super.key, - required this.token, - required this.eventId, - this.targetId, - this.onSelect, - }); - - @override - State createState() => TokenEmojiButtonState(); -} - -class TokenEmojiButtonState extends State - with TickerProviderStateMixin { - final double buttonSize = 20.0; - AnimationController? _controller; - Animation? _sizeAnimation; - - @override - void initState() { - super.initState(); - - _controller = AnimationController( - vsync: this, - duration: FluffyThemes.animationDuration, - ); - - _sizeAnimation = Tween( - begin: 0, - end: buttonSize, - ).animate(CurvedAnimation(parent: _controller!, curve: Curves.easeOut)); - - _controller?.forward(); - } - - @override - void dispose() { - _controller?.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final eligible = widget.token?.lemma.saveVocab ?? false; - final emoji = widget.token?.vocabConstructID.userSetEmoji.firstOrNull; - if (_sizeAnimation != null) { - final content = AnimatedBuilder( - key: widget.targetId != null - ? MatrixState.pAnyState.layerLinkAndKey(widget.targetId!).key - : null, - animation: _sizeAnimation!, - builder: (context, child) { - return Container( - height: _sizeAnimation!.value, - width: eligible ? _sizeAnimation!.value : 0, - alignment: Alignment.center, - child: eligible - ? InkWell( - onTap: widget.onSelect, - borderRadius: BorderRadius.circular(99.0), - child: emoji != null - ? Text( - emoji, - style: TextStyle(fontSize: buttonSize - 4.0), - textScaler: TextScaler.noScaling, - ) - : Icon( - Icons.add_reaction_outlined, - size: buttonSize - 4.0, - color: Theme.of(context).colorScheme.primary, - ), - ) - : null, - ); - }, - ); - return widget.targetId != null - ? CompositedTransformTarget( - link: - MatrixState.pAnyState.layerLinkAndKey(widget.targetId!).link, - child: content, - ) - : content; - } - - return const SizedBox.shrink(); - } -} diff --git a/lib/pangea/message_token_text/token_practice_button.dart b/lib/pangea/message_token_text/token_practice_button.dart deleted file mode 100644 index 8a0827a66..000000000 --- a/lib/pangea/message_token_text/token_practice_button.dart +++ /dev/null @@ -1,420 +0,0 @@ -import 'dart:developer'; -import 'dart:math'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; -import 'package:material_symbols_icons/symbols.dart'; -import 'package:shimmer/shimmer.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/message_token_text/dotted_border_painter.dart'; -import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; -import 'package:fluffychat/pangea/morphs/morph_icon.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/morph_selection.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; - -const double tokenButtonHeight = 40.0; -const double tokenButtonDefaultFontSize = 10; -const int maxEmojisPerLemma = 1; -const double estimatedEmojiWidthRatio = 2; - -class TokenPracticeButton extends StatefulWidget { - final MessageOverlayController? overlayController; - final PangeaToken token; - final TextStyle textStyle; - final double width; - final bool animateIn; - final Color textColor; - - const TokenPracticeButton({ - super.key, - required this.overlayController, - required this.token, - required this.textStyle, - required this.width, - required this.textColor, - this.animateIn = false, - }); - - @override - TokenPracticeButtonState createState() => TokenPracticeButtonState(); -} - -class TokenPracticeButtonState extends State - with TickerProviderStateMixin { - AnimationController? _controller; - Animation? _heightAnimation; - - // New controller and animation for icon size - AnimationController? _iconSizeController; - Animation? _iconSizeAnimation; - - bool _isHovered = false; - bool _isSelected = false; - bool _finishedInitialAnimation = false; - bool _wasEmpty = false; - - @override - void initState() { - super.initState(); - - _controller = AnimationController( - vsync: this, - duration: const Duration( - milliseconds: AppConfig.overlayAnimationDuration, - ), - ); - - _heightAnimation = Tween( - begin: 0, - end: tokenButtonHeight, - ).animate(CurvedAnimation(parent: _controller!, curve: Curves.easeOut)); - - // Initialize the new icon size controller and animation - _iconSizeController = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 200), - ); - - _iconSizeAnimation = Tween( - begin: 24, // Default icon size - end: 30, // Enlarged icon size - ).animate( - CurvedAnimation(parent: _iconSizeController!, curve: Curves.easeInOut), - ); - - _setSelected(); // Call _setSelected after initializing _iconSizeController - - _wasEmpty = _isEmpty; - - if (!_isEmpty) { - _controller?.forward().then((_) { - if (mounted) setState(() => _finishedInitialAnimation = true); - }); - } else { - setState(() => _finishedInitialAnimation = true); - } - } - - @override - void didUpdateWidget(covariant TokenPracticeButton oldWidget) { - super.didUpdateWidget(oldWidget); - _setSelected(); - if (_isEmpty != _wasEmpty) { - if (_isEmpty && _animate) { - _controller?.reverse(); - } else if (!_isEmpty && _animate) { - _controller?.forward(); - } - setState(() => _wasEmpty = _isEmpty); - } - } - - @override - void dispose() { - _controller?.dispose(); - _iconSizeController?.dispose(); // Dispose the new controller - super.dispose(); - } - - PracticeTarget? get _activity => - widget.overlayController?.practiceTargetForToken(widget.token); - - bool get _animate => widget.animateIn || _finishedInitialAnimation; - - bool get _isActivityCompleteOrNullForToken => - _activity?.isCompleteByToken( - widget.token, - _activity!.morphFeature, - ) == - true; - - void _setSelected() { - final selected = - widget.overlayController?.selectedMorph?.token == widget.token && - widget.overlayController?.selectedMorph?.morph == - _activity?.morphFeature; - - if (selected != _isSelected) { - setState(() { - _isSelected = selected; - }); - - _isSelected - ? _iconSizeController?.forward() - : _iconSizeController?.reverse(); - } - } - - void _setHovered(bool isHovered) { - if (isHovered != _isHovered) { - setState(() { - _isHovered = isHovered; - }); - - if (!_isHovered && _isSelected) { - return; - } - - _isHovered - ? _iconSizeController?.forward() - : _iconSizeController?.reverse(); - } - } - - void _onMatch(PracticeChoice form) { - if (widget.overlayController?.activity == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "should not be in onAcceptWithDetails with null activity", - data: {"details": form}, - ); - return; - } - widget.overlayController!.onChoiceSelect(null); - widget.overlayController!.activity!.onMatch( - widget.token, - form, - widget.overlayController!.pangeaMessageEvent, - () => widget.overlayController!.setState(() {}), - ); - } - - bool get _isEmpty { - final mode = widget.overlayController?.toolbarMode; - if (MessageMode.wordEmoji == mode && - widget.token.vocabConstructID.userSetEmoji.firstOrNull != null) { - return false; - } - - return _activity == null || - (_isActivityCompleteOrNullForToken && - ![MessageMode.wordEmoji, MessageMode.wordMorph].contains(mode)) || - (MessageMode.wordMorph == mode && _activity?.morphFeature == null); - } - - @override - Widget build(BuildContext context) { - if (widget.overlayController == null) { - return const SizedBox.shrink(); - } - - if (!_animate && _iconSizeAnimation != null) { - return MessageTokenButtonContent( - activity: _activity, - messageMode: widget.overlayController!.toolbarMode, - token: widget.token, - selectedChoice: widget.overlayController?.selectedChoice, - isActivityCompleteOrNullForToken: _isActivityCompleteOrNullForToken, - isSelected: _isSelected, - height: tokenButtonHeight, - width: widget.width, - textStyle: widget.textStyle, - textColor: widget.textColor, - sizeAnimation: _iconSizeAnimation!, - onHover: _setHovered, - onTap: () => widget.overlayController!.onMorphActivitySelect( - MorphSelection(widget.token, _activity!.morphFeature!), - ), - onMatch: _onMatch, - ); - } - - if (_heightAnimation != null && _iconSizeAnimation != null) { - return AnimatedBuilder( - animation: _heightAnimation!, - builder: (context, child) { - return MessageTokenButtonContent( - activity: _activity, - messageMode: widget.overlayController!.toolbarMode, - token: widget.token, - selectedChoice: widget.overlayController?.selectedChoice, - isActivityCompleteOrNullForToken: _isActivityCompleteOrNullForToken, - isSelected: _isSelected, - height: _heightAnimation!.value, - width: widget.width, - textStyle: widget.textStyle, - textColor: widget.textColor, - sizeAnimation: _iconSizeAnimation!, - onHover: _setHovered, - onTap: () => widget.overlayController!.onMorphActivitySelect( - MorphSelection(widget.token, _activity!.morphFeature!), - ), - onMatch: _onMatch, - ); - }, - ); - } - - return const SizedBox.shrink(); - } -} - -class MessageTokenButtonContent extends StatelessWidget { - final PracticeTarget? activity; - final MessageMode messageMode; - final PangeaToken token; - final PracticeChoice? selectedChoice; - - final bool isActivityCompleteOrNullForToken; - final bool isSelected; - final double height; - final double width; - final TextStyle textStyle; - final Color textColor; - final Animation sizeAnimation; - - final Function(bool)? onHover; - final Function()? onTap; - final Function(PracticeChoice)? onMatch; - - const MessageTokenButtonContent({ - super.key, - required this.activity, - required this.messageMode, - required this.token, - required this.selectedChoice, - required this.isActivityCompleteOrNullForToken, - required this.isSelected, - required this.height, - required this.width, - required this.textStyle, - required this.textColor, - required this.sizeAnimation, - this.onHover, - this.onTap, - this.onMatch, - }); - - TextStyle get _emojiStyle => TextStyle( - fontSize: (textStyle.fontSize ?? tokenButtonDefaultFontSize) + 4, - ); - - static final _borderRadius = - BorderRadius.circular(AppConfig.borderRadius - 4); - - @override - Widget build(BuildContext context) { - if (isActivityCompleteOrNullForToken || activity == null) { - if (MessageMode.wordEmoji == messageMode) { - return SizedBox( - height: height, - child: Text( - activity?.record.responses - .firstWhereOrNull( - (res) => - res.cId == token.vocabConstructID && res.isCorrect, - ) - ?.text ?? - token.vocabConstructID.userSetEmoji.firstOrNull ?? - '', - style: _emojiStyle, - ), - ); - } - if (MessageMode.wordMorph == messageMode && activity != null) { - final morphFeature = activity!.morphFeature!; - final morphTag = token.morphIdByFeature(morphFeature); - if (morphTag != null) { - return Tooltip( - message: getGrammarCopy( - category: morphFeature.toShortString(), - lemma: morphTag.lemma, - context: context, - ), - child: SizedBox( - width: 24.0, - child: Center( - child: MorphIcon( - morphFeature: morphFeature, - morphTag: morphTag.lemma, - ), - ), - ), - ); - } - } else { - return SizedBox(height: height); - } - } - - if (MessageMode.wordMorph == messageMode) { - if (activity?.morphFeature == null) { - return SizedBox(height: height); - } - - return InkWell( - onHover: onHover, - onTap: onTap, - borderRadius: _borderRadius, - child: SizedBox( - height: height, - child: Opacity( - opacity: isSelected ? 1.0 : 0.6, - child: AnimatedBuilder( - animation: sizeAnimation, - builder: (context, child) { - return Icon( - Symbols.toys_and_games, - color: textColor, - size: sizeAnimation.value, // Use the new animation - ); - }, - ), - ), - ), - ); - } - - return DragTarget( - builder: (BuildContext context, accepted, rejected) { - final double colorAlpha = 0.3 + - (selectedChoice != null ? 0.4 : 0.0) + - (accepted.isNotEmpty ? 0.3 : 0.0); - - final theme = Theme.of(context); - - return InkWell( - onTap: selectedChoice != null - ? () => onMatch?.call(selectedChoice!) - : null, - borderRadius: _borderRadius, - child: CustomPaint( - painter: DottedBorderPainter( - color: textColor.withAlpha((colorAlpha * 255).toInt()), - borderRadius: _borderRadius, - ), - child: Shimmer.fromColors( - enabled: selectedChoice != null, - baseColor: selectedChoice != null - ? AppConfig.gold.withAlpha(20) - : Colors.transparent, - highlightColor: selectedChoice != null - ? AppConfig.gold.withAlpha(50) - : Colors.transparent, - child: Container( - height: height, - padding: const EdgeInsets.only(top: 10.0), - width: max(width, 24.0), - alignment: Alignment.center, - decoration: BoxDecoration( - color: theme.colorScheme.surface, - borderRadius: _borderRadius, - ), - ), - ), - ), - ); - }, - onAcceptWithDetails: (details) => onMatch?.call(details.data), - ); - } -} diff --git a/lib/pangea/morphs/get_grammar_copy.dart b/lib/pangea/morphs/get_grammar_copy.dart index ab23c75f9..14085ab4a 100644 --- a/lib/pangea/morphs/get_grammar_copy.dart +++ b/lib/pangea/morphs/get_grammar_copy.dart @@ -15,7 +15,7 @@ String? getGrammarCopy({ required String lemma, required BuildContext context, }) { - if (category.toLowerCase() == 'other') { + if (category.toLowerCase() == 'other' || lemma.toLowerCase() == 'other') { return null; } diff --git a/lib/pangea/morphs/morph_meaning/morph_info_repo.dart b/lib/pangea/morphs/morph_meaning/morph_info_repo.dart index 049dffcda..684c3134d 100644 --- a/lib/pangea/morphs/morph_meaning/morph_info_repo.dart +++ b/lib/pangea/morphs/morph_meaning/morph_info_repo.dart @@ -1,132 +1,192 @@ import 'dart:convert'; +import 'dart:io'; -import 'package:flutter/foundation.dart'; - +import 'package:async/async.dart'; import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/network/requests.dart'; import 'package:fluffychat/pangea/common/network/urls.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/morphs/morph_meaning/morph_info_request.dart'; import 'package:fluffychat/pangea/morphs/morph_meaning/morph_info_response.dart'; -import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; -class _APICallCacheItem { - final DateTime time; - final Future future; +class _MorphInfoCacheItem { + final Future> resultFuture; + final DateTime timestamp; - _APICallCacheItem(this.time, this.future); + const _MorphInfoCacheItem({ + required this.resultFuture, + required this.timestamp, + }); } class MorphInfoRepo { - static final GetStorage _morphMeaningStorage = - GetStorage('morph_meaning_storage'); - static final shortTermCache = {}; - static const int _cacheDurationMinutes = 1; + // In-memory cache + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); - static void set(MorphInfoRequest request, MorphInfoResponse response) { - _morphMeaningStorage.write(request.storageKey, response.toJson()); - } +// Persistent storage + static final GetStorage _storage = GetStorage('morph_info_storage'); - static Future _fetch(MorphInfoRequest request) async { - try { - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: MatrixState.pangeaController.userController.accessToken, - ); - - final Response res = await req.post( - url: PApiUrls.morphDictionary, - body: request.toJson(), - ); - - final decodedBody = jsonDecode(utf8.decode(res.bodyBytes)); - final response = MorphInfoResponse.fromJson(decodedBody); - - set(request, response); - - return response; - } catch (e) { - debugPrint('Error fetching morph info: $e'); - return Future.error(e); - } - } - - static Future _get(MorphInfoRequest request) async { - request.userL1 == request.userL1.split('-').first; - request.userL2 == request.userL2.split('-').first; - - final cachedJson = _morphMeaningStorage.read(request.storageKey); - if (cachedJson != null) { - return MorphInfoResponse.fromJson(cachedJson); + static Future> get( + String accessToken, + MorphInfoRequest request, + ) { + // 1. Try memory cache + final cached = _getCached(request); + if (cached != null) { + return cached; } - final _APICallCacheItem? cachedCall = shortTermCache[request.storageKey]; - if (cachedCall != null) { - if (DateTime.now().difference(cachedCall.time).inMinutes < - _cacheDurationMinutes) { - return cachedCall.future; - } else { - shortTermCache.remove(request.storageKey); - } + // 2. Try disk cache + final stored = _getStored(request); + if (stored != null) { + return Future.value(Result.value(stored)); } - final future = _fetch(request); - shortTermCache[request.storageKey] = - _APICallCacheItem(DateTime.now(), future); + // 3. Fetch from network (safe future) + final future = _safeFetch(accessToken, request); + + // 4. Save to in-memory cache + _cache[request.hashCode.toString()] = _MorphInfoCacheItem( + resultFuture: future, + timestamp: DateTime.now(), + ); + + // 5. Write to disk *after* the fetch finishes, without rethrowing + writeToDisk(request, future); + return future; } - static Future get({ - required MorphFeaturesEnum feature, - required String tag, - }) async { - final res = await _get( - MorphInfoRequest( - userL1: - MatrixState.pangeaController.languageController.userL1?.langCode ?? - LanguageKeys.defaultLanguage, - userL2: - MatrixState.pangeaController.languageController.userL2?.langCode ?? - LanguageKeys.defaultLanguage, - ), - ); - final morph = res.getFeatureByCode(feature.name); - - final data = morph?.getTagByCode(tag); - - return data?.l1Description; + static Future set( + MorphInfoRequest request, + MorphInfoResponse resultFuture, + ) async { + final key = request.hashCode.toString(); + try { + await _storage.write(key, resultFuture.toJson()); + _cache.remove(key); // Invalidate in-memory cache + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'request': request.toJson()}, + ); + } } - static Future setMorphDefinition({ + static Future update( + MorphInfoRequest request, { required MorphFeaturesEnum feature, required String tag, - required String defintion, + required String definition, }) async { - final userL1 = - MatrixState.pangeaController.languageController.userL1?.langCode ?? - LanguageKeys.defaultLanguage; - final userL2 = - MatrixState.pangeaController.languageController.userL2?.langCode ?? - LanguageKeys.defaultLanguage; - final userL1Short = userL1.split('-').first; - final userL2Short = userL2.split('-').first; - final cachedJson = _morphMeaningStorage.read(userL1Short + userL2Short); + try { + final cachedJson = await _getCached(request); + final resp = cachedJson?.result ?? + MorphInfoResponse( + userL1: request.userL1, + userL2: request.userL2, + features: [], + ); - MorphInfoResponse? resp = MorphInfoResponse( - userL1: userL1, - userL2: userL2, - features: [], + resp.setMorphDefinition(feature.name, tag, definition); + await set(request, resp); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'request': request.toJson()}, + ); + } + } + + static Future> _safeFetch( + String token, + MorphInfoRequest request, + ) async { + try { + final resp = await _fetch(token, request); + return Result.value(resp); + } catch (e, s) { + // Ensure error is logged and converted to a Result + ErrorHandler.logError(e: e, s: s, data: request.toJson()); + return Result.error(e); + } + } + + static Future _fetch( + String accessToken, + MorphInfoRequest request, + ) async { + final req = Requests( + choreoApiKey: Environment.choreoApiKey, + accessToken: accessToken, ); - if (cachedJson is Map) { - resp = MorphInfoResponse.fromJson(cachedJson); + final Response res = await req.post( + url: PApiUrls.morphDictionary, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw HttpException( + 'Failed to fetch morph info: ${res.statusCode} ${res.reasonPhrase}', + ); } - resp.setMorphDefinition(feature.name, tag, defintion); - await _morphMeaningStorage.write(userL1Short + userL2Short, resp.toJson()); + return MorphInfoResponse.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); + } + + static Future>? _getCached( + MorphInfoRequest request, + ) { + final now = DateTime.now(); + final key = request.hashCode.toString(); + + // Remove stale entries first + _cache.removeWhere( + (_, item) => now.difference(item.timestamp) >= _cacheDuration, + ); + + final item = _cache[key]; + return item?.resultFuture; + } + + static Future writeToDisk( + MorphInfoRequest request, + Future> resultFuture, + ) async { + final result = await resultFuture; // SAFE: never throws + + if (!result.isValue) return; // only cache successful responses + await set(request, result.asValue!.value); + } + + static MorphInfoResponse? _getStored( + MorphInfoRequest request, + ) { + final key = request.hashCode.toString(); + try { + final entry = _storage.read(key); + if (entry == null) return null; + + return MorphInfoResponse.fromJson(entry); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'request': request.toJson()}, + ); + _storage.remove(key); + return null; + } } } diff --git a/lib/pangea/morphs/morph_repo.dart b/lib/pangea/morphs/morph_repo.dart index b3ee8e9f3..40f5d0a37 100644 --- a/lib/pangea/morphs/morph_repo.dart +++ b/lib/pangea/morphs/morph_repo.dart @@ -9,7 +9,7 @@ import 'package:http/http.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; import 'package:fluffychat/pangea/common/network/urls.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/pangea/morphs/default_morph_mapping.dart'; import 'package:fluffychat/pangea/morphs/morph_models.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -78,7 +78,7 @@ class MorphsRepo { /// if not, we can make it async and update uses of this function /// to be async as well static Future get([LanguageModel? language]) async { - language ??= MatrixState.pangeaController.languageController.userL2; + language ??= MatrixState.pangeaController.userController.userL2; if (language == null) { return defaultMorphMapping; @@ -111,12 +111,12 @@ class MorphsRepo { } static MorphFeaturesAndTags get cached { - if (MatrixState.pangeaController.languageController.userL2?.langCodeShort == + if (MatrixState.pangeaController.userController.userL2?.langCodeShort == null) { return defaultMorphMapping; } final cachedJson = _morphsStorage.read( - MatrixState.pangeaController.languageController.userL2!.langCodeShort, + MatrixState.pangeaController.userController.userL2!.langCodeShort, ); if (cachedJson != null) { return MorphsRepo.fromJson(cachedJson); diff --git a/lib/pangea/morphs/parts_of_speech_enum.dart b/lib/pangea/morphs/parts_of_speech_enum.dart index b3d202c1b..c9103781d 100644 --- a/lib/pangea/morphs/parts_of_speech_enum.dart +++ b/lib/pangea/morphs/parts_of_speech_enum.dart @@ -32,20 +32,13 @@ enum PartOfSpeechEnum { adp, propn, intj, - x, -} - -extension PartOfSpeechEnumExtensions on PartOfSpeechEnum { - /// Convert enum to string - String toShortString() { - return toString().split('.').last.toLowerCase(); - } + x; static PartOfSpeechEnum? fromString(String categoryName) { final pos = PartOfSpeechEnum.values.firstWhereOrNull( - (pos) => pos.toShortString() == categoryName.toLowerCase(), + (pos) => pos.name.toLowerCase() == categoryName.toLowerCase(), ); - if (pos == null) { + if (pos == null && categoryName.toLowerCase() != 'other') { ErrorHandler.logError( e: "Missing part of speech", s: StackTrace.current, @@ -154,6 +147,8 @@ extension PartOfSpeechEnumExtensions on PartOfSpeechEnum { String? getVocabCategoryName(String category, BuildContext context) { return PartOfSpeechEnum.values - .firstWhereOrNull((pos) => pos.toShortString() == category.toLowerCase()) + .firstWhereOrNull( + (pos) => pos.name.toLowerCase() == category.toLowerCase(), + ) ?.getDisplayCopy(context); } diff --git a/lib/pangea/navigation/navigation_util.dart b/lib/pangea/navigation/navigation_util.dart new file mode 100644 index 000000000..3a9607374 --- /dev/null +++ b/lib/pangea/navigation/navigation_util.dart @@ -0,0 +1,73 @@ +import 'package:flutter/material.dart'; + +import 'package:go_router/go_router.dart'; + +class NavigationUtil { + static void goToSpaceRoute( + String? goalRoomID, + List goalSubroute, + BuildContext context, { + Object? extra, + Map? queryParams, + }) { + final currentRoute = GoRouterState.of(context); + final currentRouteSegments = currentRoute.uri.pathSegments; + String queryString = ''; + if (queryParams != null && queryParams.isNotEmpty) { + queryString = + '?${queryParams.entries.map((e) => '${Uri.encodeComponent(e.key)}=${Uri.encodeComponent(e.value)}').join('&')}'; + } + + if (currentRouteSegments.length > 1 && + currentRouteSegments[0] == 'rooms' && + currentRouteSegments[1] == 'spaces' && + currentRoute.pathParameters.containsKey('spaceid')) { + final spaceId = currentRoute.pathParameters['spaceid']!; + if (goalRoomID == null) { + context.go('/rooms/spaces/$spaceId$queryString', extra: extra); + return; + } + + if (spaceId == goalRoomID) { + if (goalSubroute.isEmpty) { + context.go('/rooms/spaces/$spaceId$queryString', extra: extra); + return; + } + context.go( + '/rooms/spaces/$spaceId/${goalSubroute.join('/')}$queryString', + extra: extra, + ); + return; + } + + if (goalSubroute.isEmpty) { + context.go( + '/rooms/spaces/$spaceId/$goalRoomID$queryString', + extra: extra, + ); + return; + } + + context.go( + '/rooms/spaces/$spaceId/$goalRoomID/${goalSubroute.join('/')}$queryString', + extra: extra, + ); + return; + } + + if (goalRoomID == null) { + context.go('/rooms$queryString', extra: extra); + return; + } + + if (goalSubroute.isEmpty) { + context.go('/rooms/$goalRoomID$queryString', extra: extra); + return; + } + + context.go( + '/rooms/$goalRoomID/${goalSubroute.join('/')}$queryString', + extra: extra, + ); + } +} diff --git a/lib/pangea/phonetic_transcription/phonetic_transcription_builder.dart b/lib/pangea/phonetic_transcription/phonetic_transcription_builder.dart new file mode 100644 index 000000000..366f9b1fe --- /dev/null +++ b/lib/pangea/phonetic_transcription/phonetic_transcription_builder.dart @@ -0,0 +1,110 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/languages/language_arc_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_request.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'phonetic_transcription_repo.dart'; + +class _TranscriptLoader extends AsyncLoader { + final PhoneticTranscriptionRequest request; + _TranscriptLoader(this.request) : super(); + + @override + Future fetch() async { + final resp = await PhoneticTranscriptionRepo.get( + MatrixState.pangeaController.userController.accessToken, + request, + ); + + if (resp.isError) { + throw resp.asError!.error; + } + + return resp.asValue!.value.phoneticTranscriptionResult.phoneticTranscription + .first.phoneticL1Transcription.content; + } +} + +class PhoneticTranscriptionBuilder extends StatefulWidget { + final LanguageModel textLanguage; + final String text; + + final Widget Function( + BuildContext context, + PhoneticTranscriptionBuilderState controller, + ) builder; + + const PhoneticTranscriptionBuilder({ + super.key, + required this.textLanguage, + required this.text, + required this.builder, + }); + + @override + PhoneticTranscriptionBuilderState createState() => + PhoneticTranscriptionBuilderState(); +} + +class PhoneticTranscriptionBuilderState + extends State { + late _TranscriptLoader _loader; + + @override + void initState() { + super.initState(); + _reload(); + } + + @override + void didUpdateWidget(covariant PhoneticTranscriptionBuilder oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.text != widget.text || + oldWidget.textLanguage != widget.textLanguage) { + _loader.dispose(); + _reload(); + } + } + + @override + void dispose() { + _loader.dispose(); + super.dispose(); + } + + bool get isLoading => _loader.isLoading; + bool get isError => _loader.isError; + + Object? get error => + isError ? (_loader.state.value as AsyncError).error : null; + + String? get transcription => _loader.value; + + PhoneticTranscriptionRequest get _transcriptRequest => + PhoneticTranscriptionRequest( + arc: LanguageArc( + l1: MatrixState.pangeaController.userController.userL1!, + l2: widget.textLanguage, + ), + content: PangeaTokenText.fromString(widget.text), + ); + + void _reload() { + _loader = _TranscriptLoader(_transcriptRequest); + _loader.load(); + } + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: _loader.state, + builder: (context, _, __) => widget.builder( + context, + this, + ), + ); + } +} diff --git a/lib/pangea/phonetic_transcription/phonetic_transcription_repo.dart b/lib/pangea/phonetic_transcription/phonetic_transcription_repo.dart index 7fe6885fe..d42728437 100644 --- a/lib/pangea/phonetic_transcription/phonetic_transcription_repo.dart +++ b/lib/pangea/phonetic_transcription/phonetic_transcription_repo.dart @@ -1,8 +1,7 @@ import 'dart:convert'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; +import 'dart:io'; +import 'package:async/async.dart'; import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart'; @@ -12,39 +11,98 @@ import 'package:fluffychat/pangea/common/network/urls.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_request.dart'; import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_response.dart'; -import 'package:fluffychat/widgets/matrix.dart'; + +class _PhoneticTranscriptionCacheItem { + final Future> resultFuture; + final DateTime timestamp; + + const _PhoneticTranscriptionCacheItem({ + required this.resultFuture, + required this.timestamp, + }); +} class PhoneticTranscriptionRepo { + // In-memory cache + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + +// Persistent storage static final GetStorage _storage = GetStorage('phonetic_transcription_storage'); + static Future> get( + String accessToken, + PhoneticTranscriptionRequest request, + ) async { + await GetStorage.init('phonetic_transcription_storage'); + + // 1. Try memory cache + final cached = _getCached(request); + if (cached != null) { + return cached; + } + + // 2. Try disk cache + final stored = _getStored(request); + if (stored != null) { + return Future.value(Result.value(stored)); + } + + // 3. Fetch from network (safe future) + final future = _safeFetch(accessToken, request); + + // 4. Save to in-memory cache + _cache[request.hashCode.toString()] = _PhoneticTranscriptionCacheItem( + resultFuture: future, + timestamp: DateTime.now(), + ); + + // 5. Write to disk *after* the fetch finishes, without rethrowing + writeToDisk(request, future); + + return future; + } + static Future set( PhoneticTranscriptionRequest request, - PhoneticTranscriptionResponse response, + PhoneticTranscriptionResponse resultFuture, ) async { - response.expireAt ??= DateTime.now().add(const Duration(days: 100)); - await _storage.write(request.storageKey, response.toJson()); + await GetStorage.init('phonetic_transcription_storage'); + final key = request.hashCode.toString(); + try { + await _storage.write(key, resultFuture.toJson()); + _cache.remove(key); // Invalidate in-memory cache + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'request': request.toJson()}, + ); + } + } + + static Future> _safeFetch( + String token, + PhoneticTranscriptionRequest request, + ) async { + try { + final resp = await _fetch(token, request); + return Result.value(resp); + } catch (e, s) { + // Ensure error is logged and converted to a Result + ErrorHandler.logError(e: e, s: s, data: request.toJson()); + return Result.error(e); + } } static Future _fetch( + String accessToken, PhoneticTranscriptionRequest request, ) async { - final cachedJson = _storage.read(request.storageKey); - final cached = cachedJson == null - ? null - : PhoneticTranscriptionResponse.fromJson(cachedJson); - - if (cached != null) { - if (DateTime.now().isBefore(cached.expireAt!)) { - return cached; - } else { - _storage.remove(request.storageKey); - } - } - - final Requests req = Requests( + final req = Requests( choreoApiKey: Environment.choreoApiKey, - accessToken: MatrixState.pangeaController.userController.accessToken, + accessToken: accessToken, ); final Response res = await req.post( @@ -52,21 +110,59 @@ class PhoneticTranscriptionRepo { body: request.toJson(), ); - final decodedBody = jsonDecode(utf8.decode(res.bodyBytes)); - final response = PhoneticTranscriptionResponse.fromJson(decodedBody); - set(request, response); - return response; + if (res.statusCode != 200) { + throw HttpException( + 'Failed to fetch phonetic transcription: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + return PhoneticTranscriptionResponse.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); } - static Future get( + static Future>? _getCached( PhoneticTranscriptionRequest request, + ) { + final now = DateTime.now(); + final key = request.hashCode.toString(); + + // Remove stale entries first + _cache.removeWhere( + (_, item) => now.difference(item.timestamp) >= _cacheDuration, + ); + + final item = _cache[key]; + return item?.resultFuture; + } + + static Future writeToDisk( + PhoneticTranscriptionRequest request, + Future> resultFuture, ) async { + final result = await resultFuture; // SAFE: never throws + + if (!result.isValue) return; // only cache successful responses + await set(request, result.asValue!.value); + } + + static PhoneticTranscriptionResponse? _getStored( + PhoneticTranscriptionRequest request, + ) { + final key = request.hashCode.toString(); try { - return await _fetch(request); - } catch (e) { - debugger(when: kDebugMode); - ErrorHandler.logError(e: e, data: request.toJson()); - rethrow; + final entry = _storage.read(key); + if (entry == null) return null; + + return PhoneticTranscriptionResponse.fromJson(entry); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: {'request': request.toJson()}, + ); + _storage.remove(key); + return null; } } } diff --git a/lib/pangea/phonetic_transcription/phonetic_transcription_request.dart b/lib/pangea/phonetic_transcription/phonetic_transcription_request.dart index cbd22fc22..464193b01 100644 --- a/lib/pangea/phonetic_transcription/phonetic_transcription_request.dart +++ b/lib/pangea/phonetic_transcription/phonetic_transcription_request.dart @@ -1,5 +1,5 @@ import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_arc_model.dart'; class PhoneticTranscriptionRequest { final LanguageArc arc; @@ -30,4 +30,16 @@ class PhoneticTranscriptionRequest { } String get storageKey => '${arc.l1}-${arc.l2}-${content.hashCode}'; + + @override + int get hashCode => + content.hashCode ^ arc.hashCode ^ requiresTokenization.hashCode; + + @override + bool operator ==(Object other) { + return other is PhoneticTranscriptionRequest && + other.content == content && + other.arc == arc && + other.requiresTokenization == requiresTokenization; + } } diff --git a/lib/pangea/phonetic_transcription/phonetic_transcription_response.dart b/lib/pangea/phonetic_transcription/phonetic_transcription_response.dart index a4cd2b3a3..612ef42c1 100644 --- a/lib/pangea/phonetic_transcription/phonetic_transcription_response.dart +++ b/lib/pangea/phonetic_transcription/phonetic_transcription_response.dart @@ -1,5 +1,5 @@ import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_arc_model.dart'; enum PhoneticTranscriptionDelimEnum { sp, noSp } @@ -102,14 +102,12 @@ class PhoneticTranscriptionResponse { final Map tokenization; // You can define a typesafe model if needed final PhoneticTranscription phoneticTranscriptionResult; - DateTime? expireAt; PhoneticTranscriptionResponse({ required this.arc, required this.content, required this.tokenization, required this.phoneticTranscriptionResult, - this.expireAt, }); factory PhoneticTranscriptionResponse.fromJson(Map json) { @@ -121,9 +119,6 @@ class PhoneticTranscriptionResponse { phoneticTranscriptionResult: PhoneticTranscription.fromJson( json['phonetic_transcription_result'] as Map, ), - expireAt: json['expireAt'] == null - ? null - : DateTime.parse(json['expireAt'] as String), ); } @@ -133,7 +128,6 @@ class PhoneticTranscriptionResponse { 'content': content.toJson(), 'tokenization': tokenization, 'phonetic_transcription_result': phoneticTranscriptionResult.toJson(), - 'expireAt': expireAt?.toIso8601String(), }; } diff --git a/lib/pangea/phonetic_transcription/phonetic_transcription_widget.dart b/lib/pangea/phonetic_transcription/phonetic_transcription_widget.dart index 59d71d1d2..7736c13b9 100644 --- a/lib/pangea/phonetic_transcription/phonetic_transcription_widget.dart +++ b/lib/pangea/phonetic_transcription/phonetic_transcription_widget.dart @@ -3,14 +3,12 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_repo.dart'; -import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_request.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_builder.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; import 'package:fluffychat/widgets/hover_builder.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -21,8 +19,7 @@ class PhoneticTranscriptionWidget extends StatefulWidget { final TextStyle? style; final double? iconSize; final Color? iconColor; - - final bool enabled; + final int? maxLines; final VoidCallback? onTranscriptionFetched; @@ -33,7 +30,7 @@ class PhoneticTranscriptionWidget extends StatefulWidget { this.style, this.iconSize, this.iconColor, - this.enabled = true, + this.maxLines, this.onTranscriptionFetched, }); @@ -45,81 +42,8 @@ class PhoneticTranscriptionWidget extends StatefulWidget { class _PhoneticTranscriptionWidgetState extends State { bool _isPlaying = false; - bool _isLoading = false; - Object? _error; - String? _transcription; - - @override - void initState() { - super.initState(); - _fetchTranscription(); - } - - @override - void didUpdateWidget( - covariant PhoneticTranscriptionWidget oldWidget, - ) { - super.didUpdateWidget(oldWidget); - if (oldWidget.text != widget.text || - oldWidget.textLanguage != widget.textLanguage) { - _fetchTranscription(); - } - } - - Future _fetchTranscription() async { - try { - setState(() { - _isLoading = true; - _error = null; - _transcription = null; - }); - - if (MatrixState.pangeaController.languageController.userL1 == null) { - ErrorHandler.logError( - e: Exception('User L1 is not set'), - data: { - 'text': widget.text, - 'textLanguageCode': widget.textLanguage.langCode, - }, - ); - _error = Exception('User L1 is not set'); - return; - } - final req = PhoneticTranscriptionRequest( - arc: LanguageArc( - l1: MatrixState.pangeaController.languageController.userL1!, - l2: widget.textLanguage, - ), - content: PangeaTokenText.fromString(widget.text), - // arc can be omitted for default empty map - ); - final res = await PhoneticTranscriptionRepo.get(req); - _transcription = res.phoneticTranscriptionResult.phoneticTranscription - .first.phoneticL1Transcription.content; - } catch (e, s) { - _error = e; - if (e is! UnsubscribedException) { - ErrorHandler.logError( - e: e, - s: s, - data: { - 'text': widget.text, - 'textLanguageCode': widget.textLanguage.langCode, - }, - ); - } - } finally { - if (mounted) { - setState(() { - _isLoading = false; - widget.onTranscriptionFetched?.call(); - }); - } - } - } - - Future _handleAudioTap(BuildContext context) async { + Future _handleAudioTap(String targetId) async { if (_isPlaying) { await TtsController.stop(); setState(() => _isPlaying = false); @@ -127,7 +51,7 @@ class _PhoneticTranscriptionWidgetState await TtsController.tryToSpeak( widget.text, context: context, - targetID: 'phonetic-transcription-${widget.text}', + targetID: targetId, langCode: widget.textLanguage.langCode, onStart: () { if (mounted) setState(() => _isPlaying = true); @@ -141,26 +65,29 @@ class _PhoneticTranscriptionWidgetState @override Widget build(BuildContext context) { - return IgnorePointer( - ignoring: !widget.enabled, - child: HoverBuilder( - builder: (context, hovering) { - return GestureDetector( - onTap: () => _handleAudioTap(context), - child: AnimatedContainer( - duration: const Duration(milliseconds: 150), - decoration: BoxDecoration( - color: hovering - ? Colors.grey.withAlpha((0.2 * 255).round()) - : Colors.transparent, - borderRadius: BorderRadius.circular(6), - ), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - if (_error != null) - _error is UnsubscribedException + final targetId = 'phonetic-transcription-${widget.text}-$hashCode'; + return HoverBuilder( + builder: (context, hovering) { + return GestureDetector( + onTap: () => _handleAudioTap(targetId), + child: AnimatedContainer( + duration: const Duration(milliseconds: 150), + decoration: BoxDecoration( + color: hovering + ? Colors.grey.withAlpha((0.2 * 255).round()) + : Colors.transparent, + borderRadius: BorderRadius.circular(6), + ), + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + child: CompositedTransformTarget( + link: MatrixState.pAnyState.layerLinkAndKey(targetId).link, + child: PhoneticTranscriptionBuilder( + key: MatrixState.pAnyState.layerLinkAndKey(targetId).key, + textLanguage: widget.textLanguage, + text: widget.text, + builder: (context, controller) { + if (controller.isError) { + return controller.error is UnsubscribedException ? ErrorIndicator( message: L10n.of(context) .subscribeToUnlockTranscriptions, @@ -173,46 +100,50 @@ class _PhoneticTranscriptionWidgetState : ErrorIndicator( message: L10n.of(context).failedToFetchTranscription, - ) - else if (_isLoading || _transcription == null) - const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator.adaptive(), - ) - else - Flexible( - child: Text( - _transcription!, - textScaler: TextScaler.noScaling, - style: widget.style ?? - Theme.of(context).textTheme.bodyMedium, + ); + } + + if (controller.isLoading || + controller.transcription == null) { + return const TextLoadingShimmer( + width: 125.0, + height: 20.0, + ); + } + + return Row( + spacing: 8.0, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + controller.transcription!, + textScaler: TextScaler.noScaling, + style: widget.style ?? + Theme.of(context).textTheme.bodyMedium, + maxLines: widget.maxLines, + overflow: TextOverflow.ellipsis, + ), ), - ), - if (_transcription != null && - _error == null && - widget.enabled) - const SizedBox(width: 8), - if (_transcription != null && - _error == null && - widget.enabled) - Tooltip( - message: _isPlaying - ? L10n.of(context).stop - : L10n.of(context).playAudio, - child: Icon( - _isPlaying ? Icons.pause_outlined : Icons.volume_up, - size: widget.iconSize ?? 24, - color: widget.iconColor ?? - Theme.of(context).iconTheme.color, + Tooltip( + message: _isPlaying + ? L10n.of(context).stop + : L10n.of(context).playAudio, + child: Icon( + _isPlaying ? Icons.pause_outlined : Icons.volume_up, + size: widget.iconSize ?? 24, + color: widget.iconColor ?? + Theme.of(context).iconTheme.color, + ), ), - ), - ], + ], + ); + }, ), ), - ); - }, - ), + ), + ); + }, ); } } diff --git a/lib/pangea/practice_activities/activity_display_instructions_enum.dart b/lib/pangea/practice_activities/activity_display_instructions_enum.dart deleted file mode 100644 index 36dc530b5..000000000 --- a/lib/pangea/practice_activities/activity_display_instructions_enum.dart +++ /dev/null @@ -1,6 +0,0 @@ -enum ActivityDisplayInstructionsEnum { highlight, hide, nothing } - -extension ActivityDisplayInstructionsEnumExt - on ActivityDisplayInstructionsEnum { - String get string => toString().split('.').last; -} diff --git a/lib/pangea/practice_activities/activity_type_enum.dart b/lib/pangea/practice_activities/activity_type_enum.dart index 681bcf5db..6a3134f5b 100644 --- a/lib/pangea/practice_activities/activity_type_enum.dart +++ b/lib/pangea/practice_activities/activity_type_enum.dart @@ -11,23 +11,9 @@ enum ActivityTypeEnum { lemmaId, emoji, morphId, - messageMeaning, // TODO: Add to L10n -} - -extension ActivityTypeExtension on ActivityTypeEnum { - bool get hiddenType { - switch (this) { - case ActivityTypeEnum.wordMeaning: - case ActivityTypeEnum.wordFocusListening: - case ActivityTypeEnum.lemmaId: - case ActivityTypeEnum.emoji: - case ActivityTypeEnum.morphId: - case ActivityTypeEnum.messageMeaning: - return false; - case ActivityTypeEnum.hiddenWordListening: - return true; - } - } + messageMeaning, + lemmaMeaning, + lemmaAudio; bool get includeTTSOnClick { switch (this) { @@ -39,11 +25,13 @@ extension ActivityTypeExtension on ActivityTypeEnum { return false; case ActivityTypeEnum.wordFocusListening: case ActivityTypeEnum.hiddenWordListening: + case ActivityTypeEnum.lemmaAudio: + case ActivityTypeEnum.lemmaMeaning: return true; } } - ActivityTypeEnum fromString(String value) { + static ActivityTypeEnum fromString(String value) { final split = value.split('.').last; switch (split) { // used to be called multiple_choice, but we changed it to word_meaning @@ -68,6 +56,12 @@ extension ActivityTypeExtension on ActivityTypeEnum { return ActivityTypeEnum.morphId; case 'message_meaning': return ActivityTypeEnum.messageMeaning; // TODO: Add to L10n + case 'lemma_meaning': + case 'lemmaMeaning': + return ActivityTypeEnum.lemmaMeaning; + case 'lemma_audio': + case 'lemmaAudio': + return ActivityTypeEnum.lemmaAudio; default: throw Exception('Unknown activity type: $split'); } @@ -112,7 +106,17 @@ extension ActivityTypeExtension on ActivityTypeEnum { ConstructUseTypeEnum.corMM, ConstructUseTypeEnum.incMM, ConstructUseTypeEnum.ignMM, - ]; // TODO: Add to L10n + ]; + case ActivityTypeEnum.lemmaAudio: + return [ + ConstructUseTypeEnum.corLA, + ConstructUseTypeEnum.incLA, + ]; + case ActivityTypeEnum.lemmaMeaning: + return [ + ConstructUseTypeEnum.corLM, + ConstructUseTypeEnum.incLM, + ]; } } @@ -132,6 +136,10 @@ extension ActivityTypeExtension on ActivityTypeEnum { return ConstructUseTypeEnum.corM; case ActivityTypeEnum.messageMeaning: return ConstructUseTypeEnum.corMM; + case ActivityTypeEnum.lemmaAudio: + return ConstructUseTypeEnum.corLA; + case ActivityTypeEnum.lemmaMeaning: + return ConstructUseTypeEnum.corLM; } } @@ -151,15 +159,21 @@ extension ActivityTypeExtension on ActivityTypeEnum { return ConstructUseTypeEnum.incM; case ActivityTypeEnum.messageMeaning: return ConstructUseTypeEnum.incMM; + case ActivityTypeEnum.lemmaAudio: + return ConstructUseTypeEnum.incLA; + case ActivityTypeEnum.lemmaMeaning: + return ConstructUseTypeEnum.incLM; } } IconData get icon { switch (this) { case ActivityTypeEnum.wordMeaning: + case ActivityTypeEnum.lemmaMeaning: return Icons.translate; case ActivityTypeEnum.wordFocusListening: case ActivityTypeEnum.hiddenWordListening: + case ActivityTypeEnum.lemmaAudio: return Icons.volume_up; case ActivityTypeEnum.lemmaId: return Symbols.dictionary; @@ -172,25 +186,6 @@ extension ActivityTypeExtension on ActivityTypeEnum { } } - Widget? get contentChallengeWidget { - switch (this) { - case ActivityTypeEnum.wordMeaning: - return null; - case ActivityTypeEnum.wordFocusListening: - return null; - case ActivityTypeEnum.hiddenWordListening: - return null; - case ActivityTypeEnum.lemmaId: - return null; - case ActivityTypeEnum.emoji: - return null; - case ActivityTypeEnum.morphId: - return null; - case ActivityTypeEnum.messageMeaning: - return null; // TODO: Add to L10n - } - } - /// The minimum number of tokens in a message for this activity type to be available. /// Matching activities don't make sense for a single-word message. int get minTokensForMatchActivity { @@ -203,7 +198,16 @@ extension ActivityTypeExtension on ActivityTypeEnum { case ActivityTypeEnum.hiddenWordListening: case ActivityTypeEnum.morphId: case ActivityTypeEnum.messageMeaning: + case ActivityTypeEnum.lemmaMeaning: + case ActivityTypeEnum.lemmaAudio: return 1; } } + + static List get practiceTypes => [ + ActivityTypeEnum.emoji, + ActivityTypeEnum.wordMeaning, + ActivityTypeEnum.wordFocusListening, + ActivityTypeEnum.morphId, + ]; } diff --git a/lib/pangea/practice_activities/emoji_activity_generator.dart b/lib/pangea/practice_activities/emoji_activity_generator.dart index 500934cce..2bb790379 100644 --- a/lib/pangea/practice_activities/emoji_activity_generator.dart +++ b/lib/pangea/practice_activities/emoji_activity_generator.dart @@ -1,3 +1,5 @@ +import 'package:async/async.dart'; + import 'package:fluffychat/pangea/constructs/construct_form.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; @@ -7,43 +9,49 @@ import 'package:fluffychat/pangea/practice_activities/practice_activity_model.da import 'package:fluffychat/pangea/practice_activities/practice_match.dart'; class EmojiActivityGenerator { - Future get( - MessageActivityRequest req, - ) async { + static Future get( + MessageActivityRequest req, { + required Map messageInfo, + }) async { if (req.targetTokens.length <= 1) { throw Exception("Emoji activity requires at least 2 tokens"); } - return _matchActivity(req); + return _matchActivity(req, messageInfo: messageInfo); } - Future _matchActivity( - MessageActivityRequest req, - ) async { + static Future _matchActivity( + MessageActivityRequest req, { + required Map messageInfo, + }) async { final Map> matchInfo = {}; final List missingEmojis = []; final List usedEmojis = []; for (final token in req.targetTokens) { - final List userSavedEmojis = token.vocabConstructID.userSetEmoji; - if (userSavedEmojis.isNotEmpty && - !usedEmojis.contains(userSavedEmojis.first)) { - matchInfo[token.vocabForm] = [userSavedEmojis.first]; - usedEmojis.add(userSavedEmojis.first); + final userSavedEmoji = token.vocabConstructID.userSetEmoji; + if (userSavedEmoji != null && !usedEmojis.contains(userSavedEmoji)) { + matchInfo[token.vocabForm] = [userSavedEmoji]; + usedEmojis.add(userSavedEmoji); } else { missingEmojis.add(token); } } - final List> lemmaInfoFutures = missingEmojis - .map((token) => token.vocabConstructID.getLemmaInfo()) - .toList(); + final List>> lemmaInfoFutures = + missingEmojis + .map((token) => token.vocabConstructID.getLemmaInfo(messageInfo)) + .toList(); - final List lemmaInfos = + final List> lemmaInfos = await Future.wait(lemmaInfoFutures); for (int i = 0; i < missingEmojis.length; i++) { - final e = lemmaInfos[i].emoji.firstWhere( + if (lemmaInfos[i].isError) { + throw lemmaInfos[i].asError!.error; + } + + final e = lemmaInfos[i].asValue!.value.emoji.firstWhere( (e) => !usedEmojis.contains(e), orElse: () => throw Exception( "Not enough unique emojis for tokens in message", diff --git a/lib/pangea/practice_activities/lemma_activity_generator.dart b/lib/pangea/practice_activities/lemma_activity_generator.dart index 17d425b93..dafef270c 100644 --- a/lib/pangea/practice_activities/lemma_activity_generator.dart +++ b/lib/pangea/practice_activities/lemma_activity_generator.dart @@ -1,10 +1,9 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; @@ -13,14 +12,13 @@ import 'package:fluffychat/pangea/practice_activities/practice_activity_model.da import 'package:fluffychat/widgets/matrix.dart'; class LemmaActivityGenerator { - Future get( + static Future get( MessageActivityRequest req, - BuildContext context, ) async { debugger(when: kDebugMode && req.targetTokens.length != 1); final token = req.targetTokens.first; - final List choices = await lemmaActivityDistractors(token); + final choices = await lemmaActivityDistractors(token); // TODO - modify MultipleChoiceActivity flow to allow no correct answer return MessageActivityResponse( @@ -29,27 +27,25 @@ class LemmaActivityGenerator { targetTokens: [token], langCode: req.userL2, multipleChoiceContent: MultipleChoiceActivity( - question: L10n.of(context).chooseBaseForm, - choices: choices, - answers: [token.lemma.text], - spanDisplayDetails: null, + choices: choices.map((c) => c.lemma).toSet(), + answers: {token.lemma.text}, ), ), ); } - Future> lemmaActivityDistractors(PangeaToken token) async { - final List lemmas = MatrixState - .pangeaController.getAnalytics.constructListModel - .constructList(type: ConstructTypeEnum.vocab) - .map((c) => c.lemma) - .toSet() - .toList(); + static Future> lemmaActivityDistractors( + PangeaToken token, + ) async { + final constructs = await MatrixState + .pangeaController.matrixState.analyticsDataService + .getAggregatedConstructs(ConstructTypeEnum.vocab); + final List constructIds = constructs.keys.toList(); // Offload computation to an isolate - final Map distances = + final Map distances = await compute(_computeDistancesInIsolate, { - 'lemmas': lemmas, + 'lemmas': constructIds, 'target': token.lemma.text, }); @@ -57,33 +53,58 @@ class LemmaActivityGenerator { final sortedLemmas = distances.keys.toList() ..sort((a, b) => distances[a]!.compareTo(distances[b]!)); - // Take the shortest 4 - final choices = sortedLemmas.take(4).toList(); - if (choices.isEmpty) { - return [token.lemma.text]; + // Skip the first 7 lemmas (to avoid very similar and conjugated forms of verbs) if we have enough lemmas + final int startIndex = sortedLemmas.length > 11 ? 7 : 0; + + // Take up to 4 lemmas ensuring uniqueness by lemma text + final List uniqueByLemma = []; + for (int i = startIndex; i < sortedLemmas.length; i++) { + final cid = sortedLemmas[i]; + if (!uniqueByLemma.any((c) => c.lemma == cid.lemma)) { + uniqueByLemma.add(cid); + if (uniqueByLemma.length == 4) break; + } } - if (!choices.contains(token.lemma.text)) { - choices.add(token.lemma.text); - choices.shuffle(); + if (uniqueByLemma.isEmpty) { + return {token.vocabConstructID}; } - return choices; + + // Ensure the target lemma (token.vocabConstructID) is included while keeping unique lemma texts + final int existingIndex = uniqueByLemma + .indexWhere((c) => c.lemma == token.vocabConstructID.lemma); + if (existingIndex >= 0) { + uniqueByLemma[existingIndex] = token.vocabConstructID; + } else { + if (uniqueByLemma.length < 4) { + uniqueByLemma.add(token.vocabConstructID); + } else { + uniqueByLemma[uniqueByLemma.length - 1] = token.vocabConstructID; + } + } + + //shuffle so correct answer isn't always first + uniqueByLemma.shuffle(); + + return uniqueByLemma.toSet(); } // isolate helper function - Map _computeDistancesInIsolate(Map params) { - final List lemmas = params['lemmas']; + static Map _computeDistancesInIsolate( + Map params, + ) { + final List lemmas = params['lemmas']; final String target = params['target']; // Calculate Levenshtein distances - final Map distances = {}; + final Map distances = {}; for (final lemma in lemmas) { - distances[lemma] = levenshteinDistanceSync(target, lemma); + distances[lemma] = _levenshteinDistanceSync(target, lemma.lemma); } return distances; } - int levenshteinDistanceSync(String s, String t) { + static int _levenshteinDistanceSync(String s, String t) { final int m = s.length; final int n = t.length; final List> dp = List.generate( diff --git a/lib/pangea/practice_activities/lemma_meaning_activity_generator.dart b/lib/pangea/practice_activities/lemma_meaning_activity_generator.dart index 44c0df5b1..274334fb3 100644 --- a/lib/pangea/practice_activities/lemma_meaning_activity_generator.dart +++ b/lib/pangea/practice_activities/lemma_meaning_activity_generator.dart @@ -1,88 +1,35 @@ import 'dart:async'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:async/async.dart'; + import 'package:fluffychat/pangea/constructs/construct_form.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/lemmas/lemma_info_repo.dart'; -import 'package:fluffychat/pangea/lemmas/lemma_info_request.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; -import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_match.dart'; -import 'package:fluffychat/pangea/word_bank/vocab_bank_repo.dart'; -import 'package:fluffychat/pangea/word_bank/vocab_request.dart'; -import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; class LemmaMeaningActivityGenerator { - Future get( - MessageActivityRequest req, - ) async { - if (req.targetTokens.length == 1) { - return _multipleChoiceActivity(req); - } else { - return _matchActivity(req); - } - } - - Future _multipleChoiceActivity( - MessageActivityRequest req, - ) async { - final ConstructIdentifier lemmaId = ConstructIdentifier( - lemma: req.targetTokens[0].lemma.text.isNotEmpty - ? req.targetTokens[0].lemma.text - : req.targetTokens[0].lemma.form, - type: ConstructTypeEnum.vocab, - category: req.targetTokens[0].pos, - ); - - final lemmaDefReq = LemmaInfoRequest( - lemma: lemmaId.lemma, - partOfSpeech: lemmaId.category, - lemmaLang: req.userL2, - userL1: req.userL1, - ); - - final res = await LemmaInfoRepo.get(lemmaDefReq); - - final choices = await getDistractorMeanings(lemmaDefReq, 3); - - if (!choices.contains(res.meaning)) { - choices.add(res.meaning); - choices.shuffle(); - } - - return MessageActivityResponse( - activity: PracticeActivityModel( - targetTokens: req.targetTokens, - langCode: req.userL2, - activityType: ActivityTypeEnum.wordMeaning, - multipleChoiceContent: MultipleChoiceActivity( - question: L10n.of(MatrixState.pangeaController.matrixState.context) - .whatIsMeaning(lemmaId.lemma, lemmaId.category), - choices: choices, - answers: [res.meaning], - spanDisplayDetails: null, - ), - ), - ); - } - - Future _matchActivity( - MessageActivityRequest req, - ) async { - final List> lemmaInfoFutures = req.targetTokens - .map((token) => token.vocabConstructID.getLemmaInfo()) + static Future get( + MessageActivityRequest req, { + required Map messageInfo, + }) async { + final List>> lemmaInfoFutures = req + .targetTokens + .map((token) => token.vocabConstructID.getLemmaInfo(messageInfo)) .toList(); - final List lemmaInfos = + final List> lemmaInfos = await Future.wait(lemmaInfoFutures); + if (lemmaInfos.any((result) => result.isError)) { + throw lemmaInfos.firstWhere((result) => result.isError).error!; + } + final Map> matchInfo = Map.fromIterables( req.targetTokens.map((token) => token.vocabForm), - lemmaInfos.map((lemmaInfo) => [lemmaInfo.meaning]), + lemmaInfos.map((lemmaInfo) => [lemmaInfo.asValue!.value.meaning]), ); return MessageActivityResponse( @@ -96,46 +43,4 @@ class LemmaMeaningActivityGenerator { ), ); } - - /// From the cache, get a random set of cached definitions that are not for a specific lemma - static Future> getDistractorMeanings( - LemmaInfoRequest req, - int count, - ) async { - final eligible = await VocabRepo.getSemanticallySimilarWords( - VocabRequest( - langCode: req.lemmaLang, - level: MatrixState - .pangeaController.userController.profile.userSettings.cefrLevel, - lemma: req.lemma, - pos: req.partOfSpeech, - count: count, - ), - ); - eligible.vocab.shuffle(); - - final List distractorConstructUses = - eligible.vocab.take(count).toList(); - - final List> futureDefs = []; - for (final construct in distractorConstructUses) { - futureDefs.add( - LemmaInfoRepo.get( - LemmaInfoRequest( - lemma: construct.lemma, - partOfSpeech: construct.category, - lemmaLang: req.lemmaLang, - userL1: req.userL1, - ), - ), - ); - } - - final Set distractorDefs = {}; - for (final def in await Future.wait(futureDefs)) { - distractorDefs.add(def.meaning); - } - - return distractorDefs.toList(); - } } diff --git a/lib/pangea/practice_activities/message_activity_request.dart b/lib/pangea/practice_activities/message_activity_request.dart index f3427514e..1200440b1 100644 --- a/lib/pangea/practice_activities/message_activity_request.dart +++ b/lib/pangea/practice_activities/message_activity_request.dart @@ -51,9 +51,6 @@ class MessageActivityRequest { final String userL1; final String userL2; - final String messageText; - final List messageTokens; - final List targetTokens; final ActivityTypeEnum targetType; final MorphFeaturesEnum? targetMorphFeature; @@ -63,8 +60,6 @@ class MessageActivityRequest { MessageActivityRequest({ required this.userL1, required this.userL2, - required this.messageText, - required this.messageTokens, required this.activityQualityFeedback, required this.targetTokens, required this.targetType, @@ -79,8 +74,6 @@ class MessageActivityRequest { return { 'user_l1': userL1, 'user_l2': userL2, - 'message_text': messageText, - 'message_tokens': messageTokens.map((e) => e.toJson()).toList(), 'activity_quality_feedback': activityQualityFeedback?.toJson(), 'target_tokens': targetTokens.map((e) => e.toJson()).toList(), 'target_type': targetType.name, @@ -93,7 +86,6 @@ class MessageActivityRequest { if (identical(this, other)) return true; return other is MessageActivityRequest && - other.messageText == messageText && other.targetType == targetType && other.activityQualityFeedback?.feedbackText == activityQualityFeedback?.feedbackText && @@ -103,8 +95,7 @@ class MessageActivityRequest { @override int get hashCode { - return messageText.hashCode ^ - targetType.hashCode ^ + return targetType.hashCode ^ activityQualityFeedback.hashCode ^ targetTokens.hashCode ^ targetMorphFeature.hashCode; diff --git a/lib/pangea/practice_activities/morph_activity_generator.dart b/lib/pangea/practice_activities/morph_activity_generator.dart index ed5239235..aff0eec88 100644 --- a/lib/pangea/practice_activities/morph_activity_generator.dart +++ b/lib/pangea/practice_activities/morph_activity_generator.dart @@ -2,14 +2,12 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; -import 'package:fluffychat/widgets/matrix.dart'; typedef MorphActivitySequence = Map; @@ -17,9 +15,9 @@ typedef POSActivitySequence = List; class MorphActivityGenerator { /// Generate a morphological activity for a given token and morphological feature - Future get( + static MessageActivityResponse get( MessageActivityRequest req, - ) async { + ) { debugger(when: kDebugMode && req.targetTokens.length != 1); debugger(when: kDebugMode && req.targetMorphFeature == null); @@ -34,8 +32,8 @@ class MorphActivityGenerator { throw "No morph tag found for morph feature"; } - final List distractors = - token.morphActivityDistractors(morphFeature, morphTag); + final distractors = token.morphActivityDistractors(morphFeature, morphTag); + distractors.add(morphTag); debugger(when: kDebugMode && distractors.length < 3); @@ -46,18 +44,8 @@ class MorphActivityGenerator { activityType: ActivityTypeEnum.morphId, morphFeature: req.targetMorphFeature, multipleChoiceContent: MultipleChoiceActivity( - question: MatrixState.pangeaController.matrixState.context.mounted - ? L10n.of(MatrixState.pangeaController.matrixState.context) - .whatIsTheMorphTag( - morphFeature.getDisplayCopy( - MatrixState.pangeaController.matrixState.context, - ), - token.text.content, - ) - : morphFeature.name, - choices: distractors + [morphTag], - answers: [morphTag], - spanDisplayDetails: null, + choices: distractors, + answers: {morphTag}, ), ), ); diff --git a/lib/pangea/practice_activities/multiple_choice_activity_model.dart b/lib/pangea/practice_activities/multiple_choice_activity_model.dart index 91d123acf..8ab9119b2 100644 --- a/lib/pangea/practice_activities/multiple_choice_activity_model.dart +++ b/lib/pangea/practice_activities/multiple_choice_activity_model.dart @@ -1,62 +1,25 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/practice_activities/relevant_span_display_details.dart'; class MultipleChoiceActivity { - final String question; - /// choices, including the correct answer - final List choices; - final List answers; - final RelevantSpanDisplayDetails? spanDisplayDetails; + final Set choices; + final Set answers; MultipleChoiceActivity({ - required this.question, required this.choices, required this.answers, - required this.spanDisplayDetails, }); - /// we've had some bugs where the index is not expected - /// so we're going to check if the index or the value is correct - /// and if not, we'll investigate - bool isCorrect(String value, int index) { - if (value != choices[index]) { - debugger(when: kDebugMode); - } - return answers.contains(value) || correctAnswerIndices.contains(index); - } + Color choiceColor(String value) => + answers.contains(value) ? AppConfig.success : AppConfig.warning; - bool get isValidQuestion => choices.toSet().containsAll(answers); - - List get correctAnswerIndices { - final List indices = []; - for (var i = 0; i < choices.length; i++) { - if (answers.contains(choices[i])) { - indices.add(i); - } - } - return indices; - } - - int choiceIndex(String choice) => choices.indexOf(choice); - - Color choiceColor(int index) => correctAnswerIndices.contains(index) - ? AppConfig.success - : AppConfig.warning; + bool isCorrect(String value) => answers.contains(value); factory MultipleChoiceActivity.fromJson(Map json) { - final spanDisplay = json['span_display_details'] != null && - json['span_display_details'] is Map - ? RelevantSpanDisplayDetails.fromJson(json['span_display_details']) - : null; - final answerEntry = json['answer'] ?? json['correct_answer'] ?? ""; List answers = []; if (answerEntry is String) { @@ -66,19 +29,15 @@ class MultipleChoiceActivity { } return MultipleChoiceActivity( - question: json['question'] as String, - choices: (json['choices'] as List).map((e) => e as String).toList(), - answers: answers, - spanDisplayDetails: spanDisplay, + choices: (json['choices'] as List).map((e) => e as String).toSet(), + answers: answers.toSet(), ); } Map toJson() { return { - 'question': question, - 'choices': choices, - 'answer': answers, - 'span_display_details': spanDisplayDetails?.toJson(), + 'choices': List.from(choices), + 'answer': List.from(answers), }; } @@ -88,13 +47,12 @@ class MultipleChoiceActivity { if (identical(this, other)) return true; return other is MultipleChoiceActivity && - other.question == question && other.choices == choices && const ListEquality().equals(other.answers.sorted(), answers.sorted()); } @override int get hashCode { - return question.hashCode ^ choices.hashCode ^ Object.hashAll(answers); + return choices.hashCode ^ Object.hashAll(answers); } } diff --git a/lib/pangea/practice_activities/practice_activity_model.dart b/lib/pangea/practice_activities/practice_activity_model.dart index 5844f60f9..d884e1315 100644 --- a/lib/pangea/practice_activities/practice_activity_model.dart +++ b/lib/pangea/practice_activities/practice_activity_model.dart @@ -1,32 +1,22 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:sentry_flutter/sentry_flutter.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_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/lemmas/user_set_lemma_info.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; import 'package:fluffychat/pangea/practice_activities/practice_match.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_record.dart'; import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; -import 'package:fluffychat/pangea/practice_activities/relevant_span_display_details.dart'; -import 'package:fluffychat/widgets/matrix.dart'; class PracticeActivityModel { - List targetTokens; + final List targetTokens; final ActivityTypeEnum activityType; final MorphFeaturesEnum? morphFeature; @@ -57,13 +47,15 @@ class PracticeActivityModel { } } - bool get isComplete => practiceTarget.isComplete; + PracticeTarget get practiceTarget => PracticeTarget( + tokens: targetTokens, + activityType: activityType, + morphFeature: morphFeature, + ); - void onMultipleChoiceSelect( - PangeaToken token, - PracticeChoice choice, - PangeaMessageEvent? event, - void Function() callback, + bool onMultipleChoiceSelect( + ConstructIdentifier choiceConstruct, + String choice, ) { if (multipleChoiceContent == null) { debugger(when: kDebugMode); @@ -72,81 +64,46 @@ class PracticeActivityModel { s: StackTrace.current, data: toJson(), ); - return; + return false; } - // final ConstructIdentifier? cId = activityType == ActivityTypeEnum.morphId - // ? morphFeature ?= null ? token.getMorphTag(morphFeature) : null - // : choice.form.cId; - - if (practiceTarget.record.hasTextResponse(choice.choiceContent) || - isComplete) { + if (practiceTarget.isComplete || + practiceTarget.record.alreadyHasMatchResponse( + choiceConstruct, + choice, + )) { // the user has already selected this choice // so we don't want to record it again - return; + return false; } - final bool isCorrect = multipleChoiceContent!.answers.any( - (answer) => answer.toLowerCase() == choice.choiceContent.toLowerCase(), - ); + final bool isCorrect = multipleChoiceContent!.isCorrect(choice); // NOTE: the response is associated with the contructId of the choice, not the selected token // example: the user selects the word "cat" to match with the emoji 🐶 // the response is associated with correct word "dog", not the word "cat" practiceTarget.record.addResponse( - cId: choice.form.cId, + cId: choiceConstruct, target: practiceTarget, - text: choice.choiceContent, + text: choice, score: isCorrect ? 1 : 0, ); - // debugPrint( - // "onMultipleChoiceSelect: ${choice.form} ${responseUseType(choice)}", - // ); - - final constructUseType = - practiceTarget.record.responses.last.useType(activityType); - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - eventId: event?.eventId, - roomId: event?.room.id, - constructs: [ - OneConstructUse( - useType: constructUseType, - lemma: choice.form.cId.lemma, - constructType: choice.form.cId.type, - metadata: ConstructUseMetaData( - roomId: event?.room.id, - timeStamp: DateTime.now(), - eventId: event?.eventId, - ), - category: choice.form.cId.category, - form: choice.form.form, - xp: constructUseType.pointValue, - ), - ], - targetID: targetTokens.first.text.uniqueKey, - ), - ); - - callback(); + return isCorrect; } - /// only set up for vocab constructs atm - void onMatch( + bool onMatch( PangeaToken token, PracticeChoice choice, - PangeaMessageEvent? event, - void Function() callback, ) { // the user has already selected this choice // so we don't want to record it again - if (practiceTarget.record.alreadyHasMatchResponse( + if (practiceTarget.isComplete || + practiceTarget.record.alreadyHasMatchResponse( token.vocabConstructID, choice.choiceContent, - ) || - isComplete) { - return; + )) { + return false; } bool isCorrect = false; @@ -154,21 +111,13 @@ class PracticeActivityModel { isCorrect = multipleChoiceContent!.answers.any( (answer) => answer.toLowerCase() == choice.choiceContent.toLowerCase(), ); - } else if (matchContent != null) { + } else { // we check to see if it's in the list of acceptable answers // rather than if the vocabForm is the same because an emoji // could be in multiple constructs so there could be multiple answers final answers = matchContent!.matchInfo[token.vocabForm]; debugger(when: answers == null && kDebugMode); isCorrect = answers!.contains(choice.choiceContent); - } else { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "in onMatch with null matchContent and multipleChoiceContent", - s: StackTrace.current, - data: toJson(), - ); - return; } // NOTE: the response is associated with the contructId of the selected token, not the choice @@ -176,100 +125,12 @@ class PracticeActivityModel { // the response is associated with incorrect word "cat", not the word "dog" practiceTarget.record.addResponse( cId: token.vocabConstructID, - text: choice.choiceContent, target: practiceTarget, + text: choice.choiceContent, score: isCorrect ? 1 : 0, ); - // we don't take off points for incorrect emoji matches - if (ActivityTypeEnum.emoji != activityType || isCorrect) { - final constructUseType = - practiceTarget.record.responses.last.useType(activityType); - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - eventId: event?.eventId, - roomId: event?.room.id, - constructs: [ - OneConstructUse( - useType: constructUseType, - lemma: token.lemma.text, - constructType: ConstructTypeEnum.vocab, - metadata: ConstructUseMetaData( - roomId: event?.room.id, - timeStamp: DateTime.now(), - eventId: event?.eventId, - ), - category: token.pos, - // in the case of a wrong answer, the cId doesn't match the token - form: token.text.content, - xp: constructUseType.pointValue, - ), - ], - targetID: "message-token-${token.text.uniqueKey}-${event?.eventId}", - ), - ); - } - if (isCorrect) { - if (activityType == ActivityTypeEnum.emoji) { - choice.form.cId - .setEmojiWithXP( - emoji: choice.choiceContent, - isFromCorrectAnswer: true, - eventId: event?.eventId, - roomId: event?.room.id, - ) - .then((value) { - callback(); - }); - } - - if (activityType == ActivityTypeEnum.wordMeaning) { - choice.form.cId - .setUserLemmaInfo(UserSetLemmaInfo(meaning: choice.choiceContent)) - .then((value) { - callback(); - }); - } - } - callback(); - } - - PracticeRecord get record => practiceTarget.record; - - PracticeTarget get practiceTarget => PracticeTarget( - tokens: targetTokens, - activityType: activityType, - userL2: langCode, - morphFeature: morphFeature, - ); - - String get targetLemma => targetTokens.first.lemma.text; - - String get partOfSpeech => targetTokens.first.pos; - - String get targetWordForm => targetTokens.first.text.content; - - /// we were setting the question copy on creation of the activity - /// but, in order to localize the question using the same system - /// as other copy, we should do it with context, when it is built - /// some types are doing this now, others should be migrated - String question(BuildContext context, MorphFeaturesEnum? morphFeature) { - switch (activityType) { - case ActivityTypeEnum.hiddenWordListening: - case ActivityTypeEnum.wordFocusListening: - case ActivityTypeEnum.lemmaId: - case ActivityTypeEnum.messageMeaning: - return multipleChoiceContent?.question ?? "You can do it!"; - case ActivityTypeEnum.emoji: - return L10n.of(context).pickAnEmoji(targetLemma, partOfSpeech); - case ActivityTypeEnum.wordMeaning: - return L10n.of(context).whatIsMeaning(targetLemma, partOfSpeech); - case ActivityTypeEnum.morphId: - return L10n.of(context).whatIsTheMorphTag( - morphFeature!.getDisplayCopy(context), - targetWordForm, - ); - } + return isCorrect; } factory PracticeActivityModel.fromJson(Map json) { @@ -304,8 +165,7 @@ class PracticeActivityModel { return PracticeActivityModel( langCode: json['lang_code'] as String, - activityType: - ActivityTypeEnum.wordMeaning.fromString(json['activity_type']), + activityType: ActivityTypeEnum.fromString(json['activity_type']), multipleChoiceContent: json['content'] != null ? MultipleChoiceActivity.fromJson(contentMap) : null, @@ -323,9 +183,6 @@ class PracticeActivityModel { ); } - RelevantSpanDisplayDetails? get relevantSpanDisplayDetails => - multipleChoiceContent?.spanDisplayDetails; - Map toJson() { return { 'lang_code': langCode, diff --git a/lib/pangea/practice_activities/practice_generation_repo.dart b/lib/pangea/practice_activities/practice_generation_repo.dart index d0c983e09..118f01a9e 100644 --- a/lib/pangea/practice_activities/practice_generation_repo.dart +++ b/lib/pangea/practice_activities/practice_generation_repo.dart @@ -1,20 +1,18 @@ import 'dart:async'; import 'dart:convert'; import 'dart:developer'; +import 'dart:io'; import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; +import 'package:async/async.dart'; +import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart'; -import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/network/requests.dart'; import 'package:fluffychat/pangea/common/network/urls.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/emoji_activity_generator.dart'; import 'package:fluffychat/pangea/practice_activities/lemma_activity_generator.dart'; @@ -23,80 +21,75 @@ import 'package:fluffychat/pangea/practice_activities/message_activity_request.d import 'package:fluffychat/pangea/practice_activities/morph_activity_generator.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/word_focus_listening_generator.dart'; -import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_audio_activity_generator.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_meaning_activity_generator.dart'; import 'package:fluffychat/widgets/matrix.dart'; /// Represents an item in the completion cache. class _RequestCacheItem { - final MessageActivityRequest req; - final PracticeActivityModelResponse practiceActivity; - final DateTime createdAt = DateTime.now(); + final PracticeActivityModel practiceActivity; + final DateTime timestamp; _RequestCacheItem({ - required this.req, required this.practiceActivity, + required this.timestamp, }); + + bool get isExpired => + DateTime.now().difference(timestamp) > PracticeRepo._cacheDuration; + + factory _RequestCacheItem.fromJson(Map json) { + return _RequestCacheItem( + practiceActivity: + PracticeActivityModel.fromJson(json['practiceActivity']), + timestamp: DateTime.parse(json['timestamp']), + ); + } + + Map toJson() => { + 'practiceActivity': practiceActivity.toJson(), + 'timestamp': timestamp.toIso8601String(), + }; } /// Controller for handling activity completions. class PracticeRepo { - static final Map _cache = {}; - Timer? _cacheClearTimer; + static final GetStorage _storage = GetStorage('practice_activity_cache'); + static const Duration _cacheDuration = Duration(minutes: 1); - late PangeaController _pangeaController; + /// [event] is optional and used for saving the activity event to Matrix + static Future> getPracticeActivity( + MessageActivityRequest req, { + required Map messageInfo, + }) async { + final cached = _getCached(req); + if (cached != null) return Result.value(cached); - final _morph = MorphActivityGenerator(); - final _emoji = EmojiActivityGenerator(); - final _lemma = LemmaActivityGenerator(); - final _wordFocusListening = WordFocusListeningGenerator(); - final _wordMeaning = LemmaMeaningActivityGenerator(); + try { + final MessageActivityResponse res = await _routePracticeActivity( + accessToken: MatrixState.pangeaController.userController.accessToken, + req: req, + messageInfo: messageInfo, + ); - PracticeRepo() { - _pangeaController = MatrixState.pangeaController; - _initializeCacheClearing(); - } - - void _initializeCacheClearing() { - const duration = Duration(minutes: 10); - _cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache()); - } - - void _clearCache() { - final now = DateTime.now(); - final keys = _cache.keys.toList(); - for (final key in keys) { - final item = _cache[key]!; - if (now.difference(item.createdAt) > const Duration(minutes: 10)) { - _cache.remove(key); - } + await _setCached(req, res); + return Result.value(res.activity); + } on HttpException catch (e, s) { + return Result.error(e, s); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'message': 'Error fetching practice activity', + 'request': req.toJson(), + }, + ); + return Result.error(e, s); } } - void dispose() { - _cacheClearTimer?.cancel(); - } - - Future _sendAndPackageEvent( - PracticeActivityModel model, - PangeaMessageEvent pangeaMessageEvent, - ) async { - final Event? activityEvent = await pangeaMessageEvent.room.sendPangeaEvent( - content: model.toJson(), - parentEventId: pangeaMessageEvent.eventId, - type: PangeaEventTypes.pangeaActivity, - ); - - if (activityEvent == null) { - return null; - } - - return PracticeActivityEvent( - event: activityEvent, - timeline: pangeaMessageEvent.timeline, - ); - } - - Future _fetchFromServer({ + static Future _fetch({ required String accessToken, required MessageActivityRequest requestModel, }) async { @@ -109,96 +102,80 @@ class PracticeRepo { body: requestModel.toJson(), ); - if (res.statusCode == 200) { - final Map json = jsonDecode(utf8.decode(res.bodyBytes)); - - final response = MessageActivityResponse.fromJson(json); - - return response; - } else { - debugger(when: kDebugMode); - throw Exception('Failed to create activity'); + if (res.statusCode != 200) { + throw Exception('Failed to fetch activity'); } + + final Map json = jsonDecode(utf8.decode(res.bodyBytes)); + return MessageActivityResponse.fromJson(json); } - Future _routePracticeActivity({ + static Future _routePracticeActivity({ required String accessToken, required MessageActivityRequest req, - required BuildContext context, + required Map messageInfo, }) async { // some activities we'll get from the server and others we'll generate locally switch (req.targetType) { case ActivityTypeEnum.emoji: - return _emoji.get(req); + return EmojiActivityGenerator.get(req, messageInfo: messageInfo); case ActivityTypeEnum.lemmaId: - return _lemma.get(req, context); + return LemmaActivityGenerator.get(req); + case ActivityTypeEnum.lemmaMeaning: + return VocabMeaningActivityGenerator.get(req); + case ActivityTypeEnum.lemmaAudio: + return VocabAudioActivityGenerator.get(req); case ActivityTypeEnum.morphId: - return _morph.get(req); + return MorphActivityGenerator.get(req); case ActivityTypeEnum.wordMeaning: debugger(when: kDebugMode); - return _wordMeaning.get(req); + return LemmaMeaningActivityGenerator.get(req, messageInfo: messageInfo); case ActivityTypeEnum.messageMeaning: case ActivityTypeEnum.wordFocusListening: - return _wordFocusListening.get(req); + return WordFocusListeningGenerator.get(req); case ActivityTypeEnum.hiddenWordListening: - return _fetchFromServer( + return _fetch( accessToken: accessToken, requestModel: req, ); } } - /// [event] is optional and used for saving the activity event to Matrix - Future getPracticeActivity( + static PracticeActivityModel? _getCached( MessageActivityRequest req, - PangeaMessageEvent? event, - BuildContext context, - ) async { - final int cacheKey = req.hashCode; - - if (_cache.containsKey(cacheKey)) { - return _cache[cacheKey]!.practiceActivity; + ) { + final keys = List.from(_storage.getKeys()); + for (final k in keys) { + try { + final item = _RequestCacheItem.fromJson(_storage.read(k)); + if (item.isExpired) { + _storage.remove(k); + } + } catch (e) { + _storage.remove(k); + } } - final MessageActivityResponse res = await _routePracticeActivity( - accessToken: _pangeaController.userController.accessToken, - req: req, - context: context, - ); - - // this improves the UI by generally packing wrapped choices more tightly - res.activity.multipleChoiceContent?.choices - .sort((a, b) => a.length.compareTo(b.length)); - - // TODO resolve some wierdness here whereby the activity can be null but then... it's not - final eventCompleter = Completer(); - - if (event != null) { - _sendAndPackageEvent(res.activity, event).then((event) { - eventCompleter.complete(event); - }); + try { + final entry = _RequestCacheItem.fromJson( + _storage.read(req.hashCode.toString()), + ); + return entry.practiceActivity; + } catch (e) { + _storage.remove(req.hashCode.toString()); } - - final responseModel = PracticeActivityModelResponse( - activity: res.activity, - eventCompleter: eventCompleter, - ); - - _cache[cacheKey] = _RequestCacheItem( - req: req, - practiceActivity: responseModel, - ); - - return responseModel; + return null; } -} -class PracticeActivityModelResponse { - final PracticeActivityModel? activity; - final Completer eventCompleter; - - PracticeActivityModelResponse({ - required this.activity, - required this.eventCompleter, - }); + static Future _setCached( + MessageActivityRequest req, + MessageActivityResponse res, + ) => + _storage.write( + req.hashCode.toString(), + _RequestCacheItem( + practiceActivity: res.activity, + timestamp: DateTime.now(), + ).toJson(), + ); } diff --git a/lib/pangea/practice_activities/practice_match.dart b/lib/pangea/practice_activities/practice_match.dart index e65efb164..e621f6978 100644 --- a/lib/pangea/practice_activities/practice_match.dart +++ b/lib/pangea/practice_activities/practice_match.dart @@ -54,10 +54,6 @@ class PracticeMatchActivity { ); } - bool isCorrect(ConstructForm form, String value) { - return matchInfo[form]!.contains(value); - } - factory PracticeMatchActivity.fromJson(Map json) { final Map> matchInfo = {}; for (final constructJson in json['match_info']) { diff --git a/lib/pangea/practice_activities/practice_record.dart b/lib/pangea/practice_activities/practice_record.dart index 8d7c5dda4..61e8e2d55 100644 --- a/lib/pangea/practice_activities/practice_record.dart +++ b/lib/pangea/practice_activities/practice_record.dart @@ -7,25 +7,19 @@ import 'dart:developer'; import 'package:flutter/foundation.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/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_record_repo.dart'; import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; class PracticeRecord { - late DateTime createdAt; late List responses; PracticeRecord({ List? responses, DateTime? timestamp, }) { - createdAt = timestamp ?? DateTime.now(); if (responses == null) { this.responses = List.empty(growable: true); } else { @@ -51,7 +45,6 @@ class PracticeRecord { Map toJson() { return { 'responses': responses.map((e) => e.toJson()).toList(), - 'createdAt': createdAt.toIso8601String(), }; } @@ -68,87 +61,42 @@ class PracticeRecord { return responses[responses.length - 1]; } - bool hasTextResponse(String text) { - return responses.any((element) => element.text == text); - } - bool alreadyHasMatchResponse( ConstructIdentifier cId, String text, - ) { - return responses.any( - (element) => element.cId == cId && element.text == text, - ); - } + ) => + responses.any( + (element) => element.cId == cId && element.text == text, + ); /// [target] needed for saving the record, little funky /// [cId] identifies the construct in the case of match activities which have multiple /// [text] is the user's response - /// [audioBytes] is the user's audio response - /// [imageBytes] is the user's image response /// [score] > 0 means correct, otherwise is incorrect void addResponse({ required ConstructIdentifier cId, required PracticeTarget target, - String? text, - Uint8List? audioBytes, - Uint8List? imageBytes, + required String text, required double score, }) { - try { - if (text == null && audioBytes == null && imageBytes == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "No response data provided", - data: { - 'cId': cId.toJson(), - 'text': text, - 'audioBytes': audioBytes, - 'imageBytes': imageBytes, - 'score': score, - }, - ); - return; - } - responses.add( - ActivityRecordResponse( - cId: cId, - text: text, - audioBytes: audioBytes, - imageBytes: imageBytes, - timestamp: DateTime.now(), - score: score, - ), - ); - debugPrint("responses: ${responses.map((r) => r.toJson())}"); + responses.add( + ActivityRecordResponse( + cId: cId, + text: text, + audioBytes: null, + imageBytes: null, + timestamp: DateTime.now(), + score: score, + ), + ); - PracticeRecordRepo.save(target, this); + try { + PracticeRecordRepo.set(target, this); } catch (e) { debugger(when: kDebugMode); } } - void clearResponses() { - responses.clear(); - } - - /// Returns a list of [OneConstructUse] objects representing the uses of the practice activity. - /// - /// The [practiceActivity] parameter is the parent event, representing the activity itself. - /// The [metadata] parameter is the metadata for the construct use, used if the record event isn't available. - /// - /// The method iterates over the [responses] to get [OneConstructUse] objects for each - List usesForAllResponses( - PracticeActivityModel practiceActivity, - ConstructUseMetaData metadata, - ) => - responses - .toSet() - .expand( - (response) => response.toUses(practiceActivity, metadata), - ) - .toList(); - @override bool operator ==(Object other) { if (identical(this, other)) return true; @@ -193,110 +141,6 @@ class ActivityRecordResponse { ConstructUseTypeEnum useType(ActivityTypeEnum aType) => isCorrect ? aType.correctUse : aType.incorrectUse; - // for each target construct create a OneConstructUse object - List toUses( - PracticeActivityModel practiceActivity, - ConstructUseMetaData metadata, - ) { - // if the emoji is already set, don't give points - // IMPORTANT: This assumes that scoring is happening before saving of the user's emoji choice. - if (practiceActivity.activityType == ActivityTypeEnum.emoji && - practiceActivity.targetTokens.first.getEmoji().isNotEmpty) { - return []; - } - - if (practiceActivity.targetTokens.isEmpty) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "null targetTokens in practice activity", - data: practiceActivity.toJson(), - ); - return []; - } - - switch (practiceActivity.activityType) { - case ActivityTypeEnum.emoji: - case ActivityTypeEnum.wordMeaning: - case ActivityTypeEnum.wordFocusListening: - case ActivityTypeEnum.lemmaId: - final token = practiceActivity.targetTokens.first; - final constructUseType = useType(practiceActivity.activityType); - return [ - OneConstructUse( - lemma: token.lemma.text, - form: token.text.content, - constructType: ConstructTypeEnum.vocab, - useType: constructUseType, - metadata: metadata, - category: token.pos, - xp: constructUseType.pointValue, - ), - ]; - case ActivityTypeEnum.messageMeaning: - final constructUseType = useType(practiceActivity.activityType); - return practiceActivity.targetTokens - .expand( - (t) => t.allUses( - constructUseType, - metadata, - constructUseType.pointValue, - ), - ) - .toList(); - case ActivityTypeEnum.hiddenWordListening: - final constructUseType = useType(practiceActivity.activityType); - return practiceActivity.targetTokens - .map( - (token) => OneConstructUse( - lemma: token.lemma.text, - form: token.text.content, - constructType: ConstructTypeEnum.vocab, - useType: constructUseType, - metadata: metadata, - category: token.pos, - xp: constructUseType.pointValue, - ), - ) - .toList(); - case ActivityTypeEnum.morphId: - if (practiceActivity.morphFeature == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "null morphFeature in morph activity", - data: practiceActivity.toJson(), - ); - return []; - } - return practiceActivity.targetTokens - .map( - (t) { - final tag = t.getMorphTag(practiceActivity.morphFeature!); - if (tag == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - m: "null tag in morph activity", - data: practiceActivity.toJson(), - ); - return null; - } - final constructUseType = useType(practiceActivity.activityType); - return OneConstructUse( - lemma: tag, - form: practiceActivity.targetTokens.first.text.content, - constructType: ConstructTypeEnum.morph, - useType: constructUseType, - metadata: metadata, - category: practiceActivity.morphFeature!, - xp: constructUseType.pointValue, - ); - }, - ) - .where((c) => c != null) - .cast() - .toList(); - } - } - factory ActivityRecordResponse.fromJson(Map json) { return ActivityRecordResponse( cId: ConstructIdentifier.fromJson(json['cId'] as Map), diff --git a/lib/pangea/practice_activities/practice_record_repo.dart b/lib/pangea/practice_activities/practice_record_repo.dart index b6a84e342..431ceda4f 100644 --- a/lib/pangea/practice_activities/practice_record_repo.dart +++ b/lib/pangea/practice_activities/practice_record_repo.dart @@ -1,78 +1,61 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:get_storage/get_storage.dart'; - import 'package:fluffychat/pangea/practice_activities/practice_record.dart'; import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; +class _PracticeRecordCacheEntry { + final PracticeRecord record; + final DateTime timestamp; + + _PracticeRecordCacheEntry({ + required this.record, + required this.timestamp, + }); + + bool get isExpired => DateTime.now().difference(timestamp).inMinutes > 15; +} + /// Controller for handling activity completions. class PracticeRecordRepo { - static final GetStorage _storage = GetStorage('practice_record_cache'); - static final Map _memoryCache = {}; - static const int _maxMemoryCacheSize = 50; - - void dispose() { - _storage.erase(); - _memoryCache.clear(); - } - - static void save( - PracticeTarget selection, - PracticeRecord entry, - ) { - _storage.write(selection.storageKey, entry.toJson()); - _memoryCache[selection.storageKey] = entry; - } - - static void clean() { - final keys = _storage.getKeys(); - if (keys.length > 300) { - final entries = keys - .map((key) { - final entry = PracticeRecord.fromJson(_storage.read(key)); - return MapEntry(key, entry); - }) - .cast>() - .toList() - ..sort((a, b) => a.value.createdAt.compareTo(b.value.createdAt)); - for (var i = 0; i < 5; i++) { - _storage.remove(entries[i].key); - } - } - if (_memoryCache.length > _maxMemoryCacheSize) { - _memoryCache.remove(_memoryCache.keys.first); - } - } + static final Map _cache = {}; static PracticeRecord get( PracticeTarget target, ) { - final String key = target.storageKey; - if (_memoryCache.containsKey(key)) { - return _memoryCache[key]!; - } + final cached = _getCached(target); + if (cached != null) return cached; - final entryJson = _storage.read(key); - if (entryJson != null) { - final entry = PracticeRecord.fromJson(entryJson); - if (DateTime.now().difference(entry.createdAt).inDays > 1) { - debugPrint('removing old entry ${entry.createdAt}'); - _storage.remove(key); - } else { - _memoryCache[key] = entry; - return entry; + final entry = PracticeRecord(); + _setCached(target, entry); + + return entry; + } + + static void set( + PracticeTarget selection, + PracticeRecord entry, + ) => + _setCached(selection, entry); + + static PracticeRecord? _getCached( + PracticeTarget target, + ) { + final keys = List.from(_cache.keys); + for (final k in keys) { + final item = _cache[k]!; + if (item.isExpired) { + _cache.remove(k); } } - debugPrint('creating new practice record for $key'); - final newEntry = PracticeRecord(); + return _cache[target.storageKey]?.record; + } - _storage.write(key, newEntry.toJson()); - _memoryCache[key] = newEntry; - - clean(); - - return newEntry; + static void _setCached( + PracticeTarget target, + PracticeRecord entry, + ) { + _cache[target.storageKey] = _PracticeRecordCacheEntry( + record: entry, + timestamp: DateTime.now(), + ); } } diff --git a/lib/pangea/practice_activities/practice_selection.dart b/lib/pangea/practice_activities/practice_selection.dart index facd6ea4d..39a28c782 100644 --- a/lib/pangea/practice_activities/practice_selection.dart +++ b/lib/pangea/practice_activities/practice_selection.dart @@ -1,53 +1,31 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_selection_repo.dart'; import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; -import 'package:fluffychat/widgets/matrix.dart'; class PracticeSelection { - late String _userL2; - final DateTime createdAt = DateTime.now(); + final Map> _activityQueue; + static const int maxQueueLength = 5; - late final List _tokens; + PracticeSelection(this._activityQueue); - final String langCode; + List activities(ActivityTypeEnum a) => + _activityQueue[a] ?? []; - final Map> _activityQueue = {}; + PracticeTarget? getTarget(ActivityTypeEnum type) => + activities(type).firstOrNull; - final int _maxQueueLength = 5; - - PracticeSelection({ - required List tokens, - required this.langCode, - String? userL1, - String? userL2, - }) { - _userL2 = userL2 ?? - MatrixState.pangeaController.languageController.userL2?.langCode ?? - LanguageKeys.defaultLanguage; - _tokens = tokens; - initialize(); - } - - List get tokens => _tokens; - - bool get eligibleForPractice => - _tokens.any((t) => t.lemma.saveVocab) && - langCode.split("-")[0] == _userL2.split("-")[0]; + PracticeTarget? getMorphTarget( + PangeaToken t, + MorphFeaturesEnum morph, + ) => + activities(ActivityTypeEnum.morphId).firstWhereOrNull( + (entry) => entry.tokens.contains(t) && entry.morphFeature == morph, + ); Map toJson() => { - 'createdAt': createdAt.toIso8601String(), - 'lang_code': langCode, - 'tokens': _tokens.map((t) => t.toJson()).toList(), 'activityQueue': _activityQueue.map( (key, value) => MapEntry( key.toString(), @@ -58,279 +36,12 @@ class PracticeSelection { static PracticeSelection fromJson(Map json) { return PracticeSelection( - langCode: json['lang_code'] as String, - tokens: - (json['tokens'] as List).map((t) => PangeaToken.fromJson(t)).toList(), - ).._activityQueue.addAll( - (json['activityQueue'] as Map).map( - (key, value) => MapEntry( - ActivityTypeEnum.values.firstWhere((e) => e.toString() == key), - (value as List).map((e) => PracticeTarget.fromJson(e)).toList(), - ), + (json['activityQueue'] as Map).map( + (key, value) => MapEntry( + ActivityTypeEnum.values.firstWhere((e) => e.toString() == key), + (value as List).map((e) => PracticeTarget.fromJson(e)).toList(), ), - ); - } - - void _pushQueue(PracticeTarget entry) { - if (_activityQueue.containsKey(entry.activityType)) { - _activityQueue[entry.activityType]!.insert(0, entry); - } else { - _activityQueue[entry.activityType] = [entry]; - } - - // just in case we make a mistake and the queue gets too long - if (_activityQueue[entry.activityType]!.length > _maxQueueLength) { - debugger(when: kDebugMode); - _activityQueue[entry.activityType]!.removeRange( - _maxQueueLength, - _activityQueue.length, - ); - } - } - - PracticeTarget? nextActivity(ActivityTypeEnum a) => - MatrixState.pangeaController.languageController.userL2?.langCode == - _userL2 - ? _activityQueue[a]?.firstOrNull - : null; - - bool get hasHiddenWordActivity => - activities(ActivityTypeEnum.hiddenWordListening).isNotEmpty; - - bool get hasMessageMeaningActivity => - activities(ActivityTypeEnum.messageMeaning).isNotEmpty; - - int get numActivities => _activityQueue.length; - - List activities(ActivityTypeEnum a) => - _activityQueue[a] ?? []; - - // /// If there are more than 4 tokens that can be heard, we don't want to do word focus listening - // /// Otherwise, we don't have enough distractors - // bool get canDoWordFocusListening => - // _tokens.where((t) => t.canBeHeard).length > 4; - - bool tokenIsIncludedInActivityOfAnyType( - PangeaToken t, - ) { - return _activityQueue.entries.any( - (perActivityQueue) => perActivityQueue.value.any( - (entry) => entry.tokens.contains(t), ), ); } - - List buildActivity(ActivityTypeEnum activityType) { - if (!eligibleForPractice) { - return []; - } - - final List basicallyEligible = - _tokens.where((t) => t.lemma.saveVocab).toList(); - - // list of tokens with unique lemmas and surface forms - final List tokens = []; - for (final t in basicallyEligible) { - if (!tokens.any( - (token) => - token.lemma == t.lemma && token.text.content == t.text.content, - )) { - tokens.add(t); - } - } - - tokens.sort( - (a, b) { - final bScore = b.activityPriorityScore(activityType, null) * - (tokenIsIncludedInActivityOfAnyType(b) ? 1.1 : 1); - - final aScore = a.activityPriorityScore(activityType, null) * - (tokenIsIncludedInActivityOfAnyType(a) ? 1.1 : 1); - - return bScore.compareTo(aScore); - }, - ); - - if (tokens.isEmpty) { - return []; - } - - if (tokens.length < activityType.minTokensForMatchActivity) { - // if we only have one token, we don't need to do an emoji activity - return []; - } - - final List activityTokens = []; - tokens.shuffle(); - for (final t in tokens) { - if (activityTokens.length >= _maxQueueLength) { - break; - } - if (!activityTokens.any( - (token) => - token.text.content.toLowerCase() == t.text.content.toLowerCase(), - )) { - activityTokens.add(t); - } - } - - return [ - PracticeTarget( - activityType: activityType, - tokens: activityTokens, - userL2: _userL2, - ), - ]; - } - - List buildMorphActivity() { - final eligibleTokens = _tokens.where((t) => t.lemma.saveVocab); - if (!eligibleForPractice) { - return []; - } - final List candidates = eligibleTokens.expand( - (t) { - return t.morphsBasicallyEligibleForPracticeByPriority.map( - (m) => PracticeTarget( - tokens: [t], - activityType: ActivityTypeEnum.morphId, - morphFeature: MorphFeaturesEnumExtension.fromString(m.category), - userL2: _userL2, - ), - ); - }, - ).sorted( - (a, b) { - final bScore = b.tokens.first.activityPriorityScore( - ActivityTypeEnum.morphId, - b.morphFeature!, - ) * - (tokenIsIncludedInActivityOfAnyType(b.tokens.first) ? 1.1 : 1); - - final aScore = a.tokens.first.activityPriorityScore( - ActivityTypeEnum.morphId, - a.morphFeature!, - ) * - (tokenIsIncludedInActivityOfAnyType(a.tokens.first) ? 1.1 : 1); - - return bScore.compareTo(aScore); - }, - ); - //pick from the top 5, only including one per token - final List finalSelection = []; - for (final candidate in candidates) { - if (finalSelection.length >= _maxQueueLength) { - break; - } - if (finalSelection.any( - (entry) => entry.tokens.contains(candidate.tokens.first), - ) == - false) { - finalSelection.add(candidate); - } - } - return finalSelection; - } - - /// On initialization, we pick which tokens to do activities on and what types of activities to do - void initialize() { - // EMOJI - // sort the tokens by the preference of them for an emoji activity - // order from least to most recent - // words that have never been used are counted as 1000 days - // we preference content words over function words by multiplying the days since last use by 2 - // NOTE: for now, we put it at the end if it has no uses and basically just give them the answer - // later on, we may introduce an emoji activity that is easier than the current matching one - // i.e. we show them 3 good emojis and 1 bad one and ask them to pick the bad one - _activityQueue[ActivityTypeEnum.emoji] = - buildActivity(ActivityTypeEnum.emoji); - - // WORD MEANING - // make word meaning activities - // same as emojis for now - _activityQueue[ActivityTypeEnum.wordMeaning] = - buildActivity(ActivityTypeEnum.wordMeaning); - - // WORD FOCUS LISTENING - // make word focus listening activities - // same as emojis for now - _activityQueue[ActivityTypeEnum.wordFocusListening] = - buildActivity(ActivityTypeEnum.wordFocusListening); - - // GRAMMAR - // build a list of TargetTokensAndActivityType for all tokens and all features in the message - // limits to _maxQueueLength activities and only one per token - _activityQueue[ActivityTypeEnum.morphId] = buildMorphActivity(); - - PracticeSelectionRepo.save(this); - } - - PracticeTarget? getSelection( - ActivityTypeEnum a, [ - PangeaToken? t, - MorphFeaturesEnum? morph, - ]) { - if (a == ActivityTypeEnum.morphId && (t == null || morph == null)) { - return null; - } - return activities(a).firstWhereOrNull( - (entry) => - (t == null || entry.tokens.contains(t)) && - (morph == null || entry.morphFeature == morph), - ); - } - - bool hasActiveActivityByToken( - ActivityTypeEnum a, - PangeaToken t, [ - MorphFeaturesEnum? morph, - ]) => - getSelection(a, t, morph)?.isCompleteByToken(t, morph) == false; - - /// Add a message meaning activity to the front of the queue - /// And limits to _maxQueueLength activities - void addMessageMeaningActivity() { - final entry = PracticeTarget( - tokens: _tokens, - activityType: ActivityTypeEnum.messageMeaning, - userL2: _userL2, - ); - _pushQueue(entry); - } - - void exitPracticeFlow() { - _activityQueue.clear(); - PracticeSelectionRepo.save(this); - } - - void revealAllTokens() { - _activityQueue[ActivityTypeEnum.hiddenWordListening]?.clear(); - PracticeSelectionRepo.save(this); - } - - bool isTokenInHiddenWordActivity(PangeaToken token) => - _activityQueue[ActivityTypeEnum.hiddenWordListening]?.isNotEmpty ?? false; - - Future> getLemmaInfoForActivityTokens() async { - // make a list of unique tokens in emoji and wordMeaning activities - final List uniqueTokens = []; - for (final t in _activityQueue[ActivityTypeEnum.emoji] ?? []) { - if (!uniqueTokens.contains(t.tokens.first)) { - uniqueTokens.add(t.tokens.first); - } - } - for (final t in _activityQueue[ActivityTypeEnum.wordMeaning] ?? []) { - if (!uniqueTokens.contains(t.tokens.first)) { - uniqueTokens.add(t.tokens.first); - } - } - - // get the lemma info for each token - final List> lemmaInfoFutures = []; - for (final t in uniqueTokens) { - lemmaInfoFutures.add(t.vocabConstructID.getLemmaInfo()); - } - - return Future.wait(lemmaInfoFutures); - } } diff --git a/lib/pangea/practice_activities/practice_selection_repo.dart b/lib/pangea/practice_activities/practice_selection_repo.dart index fc97ed381..31afe6a76 100644 --- a/lib/pangea/practice_activities/practice_selection_repo.dart +++ b/lib/pangea/practice_activities/practice_selection_repo.dart @@ -1,112 +1,255 @@ -import 'package:flutter/material.dart'; - import 'package:get_storage/get_storage.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/practice_selection.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; import 'package:fluffychat/widgets/matrix.dart'; +class _PracticeSelectionCacheEntry { + final PracticeSelection selection; + final DateTime timestamp; + + _PracticeSelectionCacheEntry({ + required this.selection, + required this.timestamp, + }); + + bool get isExpired => DateTime.now().difference(timestamp).inDays > 1; + + Map toJson() => { + 'selection': selection.toJson(), + 'timestamp': timestamp.toIso8601String(), + }; + + factory _PracticeSelectionCacheEntry.fromJson(Map json) { + return _PracticeSelectionCacheEntry( + selection: PracticeSelection.fromJson(json['selection']), + timestamp: DateTime.parse(json['timestamp']), + ); + } +} + class PracticeSelectionRepo { static final GetStorage _storage = GetStorage('practice_selection_cache'); - static final Map _memoryCache = {}; - static const int _maxMemoryCacheSize = 50; - void dispose() { - _storage.erase(); - _memoryCache.clear(); - } - - static void save(PracticeSelection entry) { - final key = _key(entry.tokens); - _storage.write(key, entry.toJson()); - _memoryCache[key] = entry; - } - - static MapEntry? _parsePracticeSelection( - String key, - ) { - if (!_storage.hasData(key)) { - return null; - } - try { - final entry = PracticeSelection.fromJson(_storage.read(key)); - return MapEntry(key, entry); - } catch (e, s) { - ErrorHandler.logError( - m: 'Failed to parse PracticeSelection from JSON', - e: e, - s: s, - data: { - 'key': key, - 'json': _storage.read(key), - }, - ); - _storage.remove(key); - return null; - } - } - - static void clean() { - final keys = _storage.getKeys(); - if (keys.length > 300) { - final entries = keys - .map((key) => _parsePracticeSelection(key)) - .where((entry) => entry != null) - .cast>() - .toList() - ..sort((a, b) => a.value.createdAt.compareTo(b.value.createdAt)); - for (var i = 0; i < 5 && i < entries.length; i++) { - _storage.remove(entries[i].key); - } - } - if (_memoryCache.length > _maxMemoryCacheSize) { - _memoryCache.remove(_memoryCache.keys.first); - } - } - - static String _key(List tokens) => - tokens.map((t) => t.text.content).join(' '); - - static PracticeSelection? get( + static Future get( + String eventId, String messageLanguage, List tokens, - ) { - final userL2 = MatrixState.pangeaController.languageController.userL2; - final String key = _key(tokens); - if (_memoryCache.containsKey(key)) { - final entry = _memoryCache[key]; - return entry?.langCode.split("-").first == userL2?.langCodeShort - ? entry - : null; + ) async { + final userL2 = MatrixState.pangeaController.userController.userL2; + if (userL2?.langCodeShort != messageLanguage.split("-").first) { + return null; } - final stored = _parsePracticeSelection(key); - if (stored != null) { - final entry = stored.value; - if (DateTime.now().difference(entry.createdAt).inDays > 1) { - debugPrint('removing old entry ${entry.createdAt}'); - _storage.remove(key); - } else { - _memoryCache[key] = entry; - return entry.langCode.split("-").first == userL2?.langCodeShort - ? entry - : null; - } - } + final cached = _getCached(eventId); + if (cached != null) return cached; - final newEntry = PracticeSelection( - langCode: messageLanguage, + final newEntry = await _fetch( tokens: tokens, + langCode: messageLanguage, ); - _storage.write(key, newEntry.toJson()); - _memoryCache[key] = newEntry; + _setCached(eventId, newEntry); + return newEntry; + } - clean(); + static Future _fetch({ + required List tokens, + required String langCode, + }) async { + if (langCode.split("-")[0] != + MatrixState.pangeaController.userController.userL2?.langCodeShort) { + return PracticeSelection({}); + } - return newEntry.langCode.split("-").first == userL2?.langCodeShort - ? newEntry - : null; + final eligibleTokens = tokens.where((t) => t.lemma.saveVocab).toList(); + if (eligibleTokens.isEmpty) { + return PracticeSelection({}); + } + final queue = await _fillActivityQueue(eligibleTokens); + final selection = PracticeSelection(queue); + return selection; + } + + static PracticeSelection? _getCached( + String eventId, + ) { + try { + final keys = List.from(_storage.getKeys()); + for (final String key in keys) { + final cacheEntry = _PracticeSelectionCacheEntry.fromJson( + _storage.read(key), + ); + if (cacheEntry.isExpired) { + _storage.remove(key); + } + } + } catch (e) { + _storage.erase(); + return null; + } + + final entry = _storage.read(eventId); + if (entry == null) return null; + + try { + return _PracticeSelectionCacheEntry.fromJson( + _storage.read(eventId), + ).selection; + } catch (e) { + _storage.remove(eventId); + return null; + } + } + + static void _setCached( + String eventId, + PracticeSelection entry, + ) { + final cachedEntry = _PracticeSelectionCacheEntry( + selection: entry, + timestamp: DateTime.now(), + ); + _storage.write(eventId, cachedEntry.toJson()); + } + + static Future>> _fillActivityQueue( + List tokens, + ) async { + final queue = >{}; + for (final type in ActivityTypeEnum.practiceTypes) { + queue[type] = await _buildActivity(type, tokens); + } + return queue; + } + + static int _sortTokens( + PangeaToken a, + PangeaToken b, + int aScore, + int bScore, + ) => + bScore.compareTo(aScore); + + static int _sortMorphTargets( + PracticeTarget a, + PracticeTarget b, + int aScore, + int bScore, + ) => + bScore.compareTo(aScore); + + static List _tokenToMorphTargets(PangeaToken t) { + return t.morphsBasicallyEligibleForPracticeByPriority + .map( + (m) => PracticeTarget( + tokens: [t], + activityType: ActivityTypeEnum.morphId, + morphFeature: MorphFeaturesEnumExtension.fromString(m.category), + ), + ) + .toList(); + } + + static Future> _buildActivity( + ActivityTypeEnum activityType, + List tokens, + ) async { + if (activityType == ActivityTypeEnum.morphId) { + return _buildMorphActivity(tokens); + } + + List practiceTokens = List.from(tokens); + final seenTexts = {}; + final seenLemmas = {}; + practiceTokens.retainWhere( + (token) => + token.eligibleForPractice(activityType) && + seenTexts.add(token.text.content.toLowerCase()) && + seenLemmas.add(token.lemma.text.toLowerCase()), + ); + + if (practiceTokens.length < activityType.minTokensForMatchActivity) { + return []; + } + + final scores = await _fetchPriorityScores( + practiceTokens, + activityType, + ); + + practiceTokens.sort((a, b) => _sortTokens(a, b, scores[a]!, scores[b]!)); + practiceTokens = practiceTokens.take(8).toList(); + practiceTokens.shuffle(); + + return [ + PracticeTarget( + activityType: activityType, + tokens: practiceTokens.take(PracticeSelection.maxQueueLength).toList(), + ), + ]; + } + + static Future> _buildMorphActivity( + List tokens, + ) async { + final List practiceTokens = List.from(tokens); + final candidates = practiceTokens.expand(_tokenToMorphTargets).toList(); + final scores = await _fetchPriorityScores( + practiceTokens, + ActivityTypeEnum.morphId, + ); + candidates.sort( + (a, b) => _sortMorphTargets( + a, + b, + scores[a.tokens.first]!, + scores[b.tokens.first]!, + ), + ); + + final seenTexts = {}; + final seenLemmas = {}; + candidates.retainWhere( + (target) => + seenTexts.add(target.tokens.first.text.content.toLowerCase()) && + seenLemmas.add(target.tokens.first.lemma.text.toLowerCase()), + ); + return candidates.take(PracticeSelection.maxQueueLength).toList(); + } + + static Future> _fetchPriorityScores( + List tokens, + ActivityTypeEnum activityType, + ) async { + final scores = {}; + for (final token in tokens) { + scores[token] = 0; + } + + final ids = tokens.map((t) => t.vocabConstructID).toList(); + final idMap = { + for (final token in tokens) token: token.vocabConstructID, + }; + + final constructs = await MatrixState + .pangeaController.matrixState.analyticsDataService + .getConstructUses(ids); + + for (final token in tokens) { + final construct = constructs[idMap[token]]; + final lastUsed = + construct?.lastUseByTypes(activityType.associatedUseTypes); + + final daysSinceLastUsed = + lastUsed == null ? 20 : DateTime.now().difference(lastUsed).inDays; + + scores[token] = + daysSinceLastUsed * (token.vocabConstructID.isContentWord ? 10 : 9); + } + return scores; } } diff --git a/lib/pangea/practice_activities/practice_target.dart b/lib/pangea/practice_activities/practice_target.dart index fbb711f2a..00bfcd671 100644 --- a/lib/pangea/practice_activities/practice_target.dart +++ b/lib/pangea/practice_activities/practice_target.dart @@ -30,12 +30,9 @@ class PracticeTarget { /// this is only defined for morphId activities final MorphFeaturesEnum? morphFeature; - final String userL2; - PracticeTarget({ required this.tokens, required this.activityType, - required this.userL2, this.morphFeature, }) { if (ActivityTypeEnum.morphId == activityType && morphFeature == null) { @@ -50,16 +47,12 @@ class PracticeTarget { return other is PracticeTarget && listEquals(other.tokens, tokens) && other.activityType == activityType && - other.morphFeature == morphFeature && - other.userL2 == userL2; + other.morphFeature == morphFeature; } @override int get hashCode => - tokens.hashCode ^ - activityType.hashCode ^ - morphFeature.hashCode ^ - userL2.hashCode; + tokens.hashCode ^ activityType.hashCode ^ morphFeature.hashCode; static PracticeTarget fromJson(Map json) { final type = ActivityTypeEnum.values.firstWhereOrNull( @@ -78,7 +71,6 @@ class PracticeTarget { morphFeature: json['morphFeature'] == null ? null : MorphFeaturesEnumExtension.fromString(json['morphFeature']), - userL2: json['userL2'], ); } @@ -87,7 +79,6 @@ class PracticeTarget { 'tokens': tokens.map((e) => e.toJson()).toList(), 'activityType': activityType.name, 'morphFeature': morphFeature?.name, - 'userL2': userL2, }; } @@ -162,4 +153,15 @@ class PracticeTarget { } return null; } + + bool get hasAnyResponses => record.responses.isNotEmpty; + + bool get hasAnyCorrectChoices { + for (final response in record.responses) { + if (response.isCorrect) { + return true; + } + } + return false; + } } diff --git a/lib/pangea/practice_activities/relevant_span_display_details.dart b/lib/pangea/practice_activities/relevant_span_display_details.dart deleted file mode 100644 index 7d2a4d2cc..000000000 --- a/lib/pangea/practice_activities/relevant_span_display_details.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:collection/collection.dart'; - -import 'package:fluffychat/pangea/practice_activities/activity_display_instructions_enum.dart'; - -/// For those activities with a relevant span, this class will hold the details -/// of the span and how it should be displayed -/// e.g. hide the span for conjugation activities -class RelevantSpanDisplayDetails { - final int offset; - final int length; - final ActivityDisplayInstructionsEnum displayInstructions; - - RelevantSpanDisplayDetails({ - required this.offset, - required this.length, - required this.displayInstructions, - }); - - factory RelevantSpanDisplayDetails.fromJson(Map json) { - final ActivityDisplayInstructionsEnum? display = - ActivityDisplayInstructionsEnum.values.firstWhereOrNull( - (e) => e.string == json['display_instructions'], - ); - if (display == null) { - debugger(when: kDebugMode); - } - return RelevantSpanDisplayDetails( - offset: json['offset'] as int, - length: json['length'] as int, - displayInstructions: display ?? ActivityDisplayInstructionsEnum.nothing, - ); - } - - Map toJson() { - return { - 'offset': offset, - 'length': length, - 'display_instructions': displayInstructions.string, - }; - } - - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - - return other is RelevantSpanDisplayDetails && - other.offset == offset && - other.length == length && - other.displayInstructions == displayInstructions; - } - - @override - int get hashCode { - return offset.hashCode ^ length.hashCode ^ displayInstructions.hashCode; - } -} diff --git a/lib/pangea/practice_activities/word_focus_listening_generator.dart b/lib/pangea/practice_activities/word_focus_listening_generator.dart index 2b76f32aa..3d03a37ba 100644 --- a/lib/pangea/practice_activities/word_focus_listening_generator.dart +++ b/lib/pangea/practice_activities/word_focus_listening_generator.dart @@ -1,30 +1,19 @@ -import 'package:flutter/foundation.dart'; - -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/constructs/construct_form.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_match.dart'; -import 'package:fluffychat/widgets/matrix.dart'; class WordFocusListeningGenerator { - Future get( + static MessageActivityResponse get( MessageActivityRequest req, - ) async { + ) { if (req.targetTokens.length <= 1) { throw Exception( "Word focus listening activity requires at least 2 tokens", ); } - return _matchActivity(req); - } - - Future _matchActivity( - MessageActivityRequest req, - ) async { return MessageActivityResponse( activity: PracticeActivityModel( activityType: ActivityTypeEnum.wordFocusListening, @@ -46,76 +35,4 @@ class WordFocusListeningGenerator { ), ); } - - Future> lemmaActivityDistractors(PangeaToken token) async { - final List lemmas = MatrixState - .pangeaController.getAnalytics.constructListModel - .constructList(type: ConstructTypeEnum.vocab) - .map((c) => c.lemma) - .toSet() - .toList(); - - // Offload computation to an isolate - final Map distances = - await compute(_computeDistancesInIsolate, { - 'lemmas': lemmas, - 'target': token.lemma.text, - }); - - // Sort lemmas by distance - final sortedLemmas = distances.keys.toList() - ..sort((a, b) => distances[a]!.compareTo(distances[b]!)); - - // Take the shortest 4 - final choices = sortedLemmas.take(4).toList(); - if (choices.isEmpty) { - return [token.lemma.text]; - } - - if (!choices.contains(token.lemma.text)) { - choices.add(token.lemma.text); - choices.shuffle(); - } - return choices; - } - - // isolate helper function - Map _computeDistancesInIsolate(Map params) { - final List lemmas = params['lemmas']; - final String target = params['target']; - - // Calculate Levenshtein distances - final Map distances = {}; - for (final lemma in lemmas) { - distances[lemma] = levenshteinDistanceSync(target, lemma); - } - return distances; - } - - int levenshteinDistanceSync(String s, String t) { - final int m = s.length; - final int n = t.length; - final List> dp = List.generate( - m + 1, - (_) => List.generate(n + 1, (_) => 0), - ); - - for (int i = 0; i <= m; i++) { - for (int j = 0; j <= n; j++) { - if (i == 0) { - dp[i][j] = j; - } else if (j == 0) { - dp[i][j] = i; - } else if (s[i - 1] == t[j - 1]) { - dp[i][j] = dp[i - 1][j - 1]; - } else { - dp[i][j] = 1 + - [dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]] - .reduce((a, b) => a < b ? a : b); - } - } - } - - return dp[m][n]; - } } diff --git a/lib/pangea/space_analytics/analytics_request_indicator.dart b/lib/pangea/space_analytics/analytics_request_indicator.dart index 4a63dd23f..060403cdd 100644 --- a/lib/pangea/space_analytics/analytics_request_indicator.dart +++ b/lib/pangea/space_analytics/analytics_request_indicator.dart @@ -70,10 +70,14 @@ class AnalyticsRequestIndicatorState extends State { } Future _onTap(BuildContext context) async { + final requestingUsers = _knockingAdmins.keys.toList(); final resp = await showDialog( context: context, builder: (context) { - return SpaceAnalyticsRequestedDialog(room: widget.room); + return SpaceAnalyticsRequestedDialog( + room: widget.room, + requestingUsers: requestingUsers, + ); }, ); diff --git a/lib/pangea/space_analytics/analytics_requests_repo.dart b/lib/pangea/space_analytics/analytics_requests_repo.dart index afc0ed385..ef6bfe1a5 100644 --- a/lib/pangea/space_analytics/analytics_requests_repo.dart +++ b/lib/pangea/space_analytics/analytics_requests_repo.dart @@ -1,6 +1,6 @@ import 'package:get_storage/get_storage.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_download_enum.dart'; class _AnalyticsRequestEntry { diff --git a/lib/pangea/spaces/widgets/download_space_analytics_dialog.dart b/lib/pangea/space_analytics/download_space_analytics_dialog.dart similarity index 91% rename from lib/pangea/spaces/widgets/download_space_analytics_dialog.dart rename to lib/pangea/space_analytics/download_space_analytics_dialog.dart index 850354921..cb89a6241 100644 --- a/lib/pangea/spaces/widgets/download_space_analytics_dialog.dart +++ b/lib/pangea/space_analytics/download_space_analytics_dialog.dart @@ -9,9 +9,9 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_downloads/space_analytics_summary_enum.dart'; import 'package:fluffychat/pangea/analytics_downloads/space_analytics_summary_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_list_model.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/saved_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics_settings/analytics_settings_extension.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; import 'package:fluffychat/pangea/download/download_file_util.dart'; @@ -88,7 +88,7 @@ class DownloadAnalyticsDialogState extends State { } String? get userL2 => - MatrixState.pangeaController.languageController.userL2?.langCode; + MatrixState.pangeaController.userController.userL2?.langCode; Future _runDownload() async { try { @@ -170,19 +170,11 @@ class DownloadAnalyticsDialogState extends State { if (mounted) setState(() => _downloadStatuses[userID] = -1); return SpaceAnalyticsSummaryModel.emptyModel(userID); } - - final List uses = []; - for (final event in constructEvents) { - uses.addAll(event.content.uses); - } - - final constructs = ConstructListModel(uses: uses); - summary = SpaceAnalyticsSummaryModel.fromConstructListModel( + summary = SpaceAnalyticsSummaryModel.fromEvents( userID, - constructs, - 0, - getCopy, - context, + constructEvents, + analyticsRoom.blockedConstructs, + analyticsRoom.archivedActivitiesCount, ); if (mounted) setState(() => _downloadStatuses[userID] = 2); } catch (e, s) { @@ -386,23 +378,24 @@ class DownloadAnalyticsDialogState extends State { ), ), ), - Padding( - padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), - child: OutlinedButton( - onPressed: _loading || !_initialized ? null : _runDownload, - child: _initialized && !_loading - ? Text( - _loading - ? L10n.of(context).downloading - : L10n.of(context).download, - ) - : const SizedBox( - height: 10, - width: 100, - child: LinearProgressIndicator(), - ), + if (!_downloaded) + Padding( + padding: const EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + child: OutlinedButton( + onPressed: _loading || !_initialized ? null : _runDownload, + child: _initialized && !_loading + ? Text( + _loading + ? L10n.of(context).downloading + : L10n.of(context).download, + ) + : const SizedBox( + height: 10, + width: 100, + child: LinearProgressIndicator(), + ), + ), ), - ), AnimatedSize( duration: FluffyThemes.animationDuration, child: _statusText != null diff --git a/lib/pangea/space_analytics/space_analytics.dart b/lib/pangea/space_analytics/space_analytics.dart index 491ef7203..0bf8832ae 100644 --- a/lib/pangea/space_analytics/space_analytics.dart +++ b/lib/pangea/space_analytics/space_analytics.dart @@ -6,105 +6,22 @@ import 'package:intl/intl.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/analytics_downloads/space_analytics_summary_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_list_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/saved_analytics_extension.dart'; +import 'package:fluffychat/pangea/analytics_settings/analytics_settings_extension.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/pangea/space_analytics/analytics_download_model.dart'; import 'package:fluffychat/pangea/space_analytics/analytics_requests_repo.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_download_enum.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_inactive_dialog.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_request_dialog.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_view.dart'; -import 'package:fluffychat/pangea/user/models/analytics_profile_model.dart'; +import 'package:fluffychat/pangea/user/analytics_profile_model.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -// enum DownloadStatus { -// loading, -// available, -// unavailable, -// notFound; -// } - -// enum RequestStatus { -// available, -// unrequested, -// requested, -// notFound; - -// static RequestStatus? fromString(String value) { -// switch (value) { -// case 'available': -// return RequestStatus.available; -// case 'unrequested': -// return RequestStatus.unrequested; -// case 'requested': -// return RequestStatus.requested; -// case 'notFound': -// return RequestStatus.notFound; -// default: -// return null; -// } -// } - -// IconData get icon { -// switch (this) { -// case RequestStatus.available: -// return Icons.check_circle; -// case RequestStatus.unrequested: -// return Symbols.approval_delegation; -// case RequestStatus.requested: -// return Icons.mark_email_read_outlined; -// case RequestStatus.notFound: -// return Symbols.approval_delegation; -// } -// } - -// String label(BuildContext context) { -// final l10n = L10n.of(context); -// switch (this) { -// case RequestStatus.available: -// return l10n.available; -// case RequestStatus.unrequested: -// return l10n.request; -// case RequestStatus.requested: -// return l10n.pending; -// case RequestStatus.notFound: -// return l10n.inactive; -// } -// } - -// Color backgroundColor(BuildContext context) { -// final theme = Theme.of(context); -// switch (this) { -// case RequestStatus.available: -// case RequestStatus.unrequested: -// return theme.colorScheme.primaryContainer; -// case RequestStatus.notFound: -// case RequestStatus.requested: -// return theme.disabledColor; -// } -// } - -// bool get showButton => this != RequestStatus.available; - -// bool get enabled => this == RequestStatus.unrequested; -// } - -// class AnalyticsDownload { -// DownloadStatus status; -// SpaceAnalyticsSummaryModel? summary; - -// AnalyticsDownload({ -// required this.status, -// this.summary, -// }); -// } - class SpaceAnalytics extends StatefulWidget { final String roomId; const SpaceAnalytics({super.key, required this.roomId}); @@ -125,7 +42,7 @@ class SpaceAnalyticsState extends State { Room? get room => Matrix.of(context).client.getRoomById(widget.roomId); LanguageModel? get _userL2 { - final l2 = MatrixState.pangeaController.languageController.userL2; + final l2 = MatrixState.pangeaController.userController.userL2; if (l2 == null) return null; // Attempt to find the language model by its short code, since analytics @@ -154,8 +71,7 @@ class SpaceAnalyticsState extends State { List get availableLanguages => _langsToUsers.keys.toList() ..sort( - (a, b) => (a.getDisplayName(context) ?? a.displayName) - .compareTo(b.getDisplayName(context) ?? b.displayName), + (a, b) => a.getDisplayName(context).compareTo(b.getDisplayName(context)), ); int get completedDownloads => @@ -215,6 +131,20 @@ class SpaceAnalyticsState extends State { _initialize(); } + @override + void didUpdateWidget(covariant SpaceAnalytics oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.roomId != widget.roomId) { + initialized = false; + selectedLanguage = null; + downloads = {}; + _lastUpdated = null; + _profiles.clear(); + _langsToUsers.clear(); + _initialize(); + } + } + Future _initialize() async { await room?.requestParticipants( [Membership.join, Membership.invite, Membership.knock], @@ -332,24 +262,11 @@ class SpaceAnalyticsState extends State { summary: SpaceAnalyticsSummaryModel.emptyModel(userID), ); } else { - final List uses = []; - for (final event in constructEvents) { - uses.addAll(event.content.uses); - } - - final constructs = ConstructListModel(uses: uses); - summary = SpaceAnalyticsSummaryModel.fromConstructListModel( + summary = SpaceAnalyticsSummaryModel.fromEvents( userID, - constructs, - analyticsRoom.activityRoomIds.length, - (use) => - getGrammarCopy( - category: use.category, - lemma: use.lemma, - context: context, - ) ?? - use.lemma, - context, + constructEvents, + analyticsRoom.blockedConstructs, + analyticsRoom.archivedActivitiesCount, ); downloads[user] = AnalyticsDownload( @@ -372,7 +289,14 @@ class SpaceAnalyticsState extends State { try { final roomId = _analyticsRoomIdOfUser(user); if (roomId == null) return; - await Matrix.of(context).client.knockRoom(roomId); + await Matrix.of(context).client.knockRoom( + roomId, + via: room?.spaceChildren + .firstWhereOrNull( + (child) => child.roomId == roomId, + ) + ?.via, + ); status = RequestStatus.requested; } catch (e) { status = RequestStatus.unavailable; diff --git a/lib/pangea/space_analytics/space_analytics_request_dialog.dart b/lib/pangea/space_analytics/space_analytics_request_dialog.dart index 45867d81a..f47a59217 100644 --- a/lib/pangea/space_analytics/space_analytics_request_dialog.dart +++ b/lib/pangea/space_analytics/space_analytics_request_dialog.dart @@ -61,13 +61,19 @@ class SpaceAnalyticsRequestDialog extends StatelessWidget { ), padding: const EdgeInsets.all(16.0), child: Row( - spacing: 20.0, + spacing: 12.0, children: [ Expanded( child: ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 16, + ), + ), onPressed: () => Navigator.of(context).pop(), child: Row( - spacing: 10.0, + spacing: 12.0, mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.close), @@ -78,13 +84,19 @@ class SpaceAnalyticsRequestDialog extends StatelessWidget { ), Expanded( child: ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 16, + ), + ), onPressed: () => Navigator.of(context).pop(true), child: Row( - spacing: 10.0, + spacing: 12.0, mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Symbols.approval_delegation), - Text(L10n.of(context).requestAll), + Text(L10n.of(context).request), ], ), ), diff --git a/lib/pangea/space_analytics/space_analytics_requested_dialog.dart b/lib/pangea/space_analytics/space_analytics_requested_dialog.dart index 399f5f294..76fbe3dc9 100644 --- a/lib/pangea/space_analytics/space_analytics_requested_dialog.dart +++ b/lib/pangea/space_analytics/space_analytics_requested_dialog.dart @@ -12,9 +12,11 @@ import 'package:fluffychat/pangea/common/widgets/full_width_dialog.dart'; class SpaceAnalyticsRequestedDialog extends StatelessWidget { final Room room; + final List requestingUsers; const SpaceAnalyticsRequestedDialog({ super.key, required this.room, + required this.requestingUsers, }); @override @@ -39,6 +41,9 @@ class SpaceAnalyticsRequestedDialog extends StatelessWidget { ), Text( L10n.of(context).accessRequestedDesc( + requestingUsers + .map((u) => u.calcDisplayname()) + .join(", "), room.getLocalizedDisplayname(), ), style: TextStyle(fontSize: isColumnMode ? 16.0 : 14.0), @@ -66,30 +71,42 @@ class SpaceAnalyticsRequestedDialog extends StatelessWidget { ), padding: const EdgeInsets.all(16.0), child: Row( - spacing: 16.0, + spacing: 12.0, children: [ Expanded( child: ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 16, + ), + ), onPressed: () => Navigator.of(context).pop(true), child: Row( - spacing: 10.0, + spacing: 12.0, mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Symbols.approval_delegation), - Text(L10n.of(context).allowAccess), + Text(L10n.of(context).allow), ], ), ), ), Expanded( child: ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 16, + ), + ), onPressed: () => Navigator.of(context).pop(false), child: Row( - spacing: 10.0, + spacing: 12.0, mainAxisAlignment: MainAxisAlignment.center, children: [ const Icon(Icons.visibility_off), - Text(L10n.of(context).denyAccess), + Text(L10n.of(context).deny), ], ), ), diff --git a/lib/pangea/space_analytics/space_analytics_view.dart b/lib/pangea/space_analytics/space_analytics_view.dart index 147d44970..23e9fe7e5 100644 --- a/lib/pangea/space_analytics/space_analytics_view.dart +++ b/lib/pangea/space_analytics/space_analytics_view.dart @@ -7,10 +7,10 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/widgets/dropdown_text_button.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/space_analytics/download_space_analytics_dialog.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics.dart'; import 'package:fluffychat/pangea/space_analytics/space_analytics_download_enum.dart'; -import 'package:fluffychat/pangea/spaces/widgets/download_space_analytics_dialog.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; @@ -45,6 +45,8 @@ class SpaceAnalyticsView extends StatelessWidget { onPressed: controller.requestAllAnalytics, mini: mini, hideLabel: false, + //disable if only one person (self) in course + enabled: controller.sortedDownloads.length > 1, ), if (kIsWeb && controller.room != null && @@ -107,9 +109,7 @@ class SpaceAnalyticsView extends StatelessWidget { ? controller.selectedLanguage!.langCode .toUpperCase() : controller.selectedLanguage! - .getDisplayName(context) ?? - controller - .selectedLanguage!.displayName, + .getDisplayName(context), style: TextStyle( color: theme.colorScheme.onPrimaryContainer, @@ -130,8 +130,7 @@ class SpaceAnalyticsView extends StatelessWidget { (item) => DropdownMenuItem( value: item, child: DropdownTextButton( - text: item.getDisplayName(context) ?? - item.displayName, + text: item.getDisplayName(context), isSelected: false, ), ), @@ -302,6 +301,7 @@ class _MenuButton extends StatelessWidget { final String text; final IconData icon; final VoidCallback onPressed; + final bool enabled; final bool mini; final bool? hideLabel; @@ -311,6 +311,7 @@ class _MenuButton extends StatelessWidget { required this.icon, required this.onPressed, this.mini = false, + this.enabled = true, this.hideLabel, }); @@ -320,43 +321,54 @@ class _MenuButton extends StatelessWidget { final height = !mini ? 36.0 : 26.0; - return InkWell( - borderRadius: BorderRadius.circular(40), - onTap: onPressed, - child: Container( - height: height, - width: hideLabel ?? mini ? height : null, - decoration: BoxDecoration( - color: theme.colorScheme.primaryContainer, - borderRadius: BorderRadius.circular(40), - ), - padding: EdgeInsets.symmetric( - horizontal: !mini ? 8.0 : 4.0, - vertical: 4.0, - ), - child: hideLabel ?? mini - ? Icon( - icon, - color: theme.colorScheme.onPrimaryContainer, - size: !mini ? 24.0 : 14.0, - ) - : Row( - spacing: 4.0, - children: [ - Icon( - icon, - color: theme.colorScheme.onPrimaryContainer, - size: !mini ? 24.0 : 14.0, - ), - Text( - text, - style: TextStyle( - color: theme.colorScheme.onPrimaryContainer, - fontSize: !mini ? 16.0 : 12.0, - ), - ), - ], + return Opacity( + opacity: enabled ? 1 : 0.3, + child: MouseRegion( + cursor: enabled ? SystemMouseCursors.click : MouseCursor.defer, + child: Material( + type: MaterialType.transparency, + child: InkWell( + borderRadius: BorderRadius.circular(40), + onTap: enabled ? onPressed : null, + child: Container( + height: height, + width: hideLabel ?? mini ? height : null, + decoration: BoxDecoration( + color: enabled + ? theme.colorScheme.primaryContainer + : theme.disabledColor, + borderRadius: BorderRadius.circular(40), ), + padding: EdgeInsets.symmetric( + horizontal: !mini ? 8.0 : 4.0, + vertical: 4.0, + ), + child: hideLabel ?? mini + ? Icon( + icon, + color: theme.colorScheme.onPrimaryContainer, + size: !mini ? 24.0 : 14.0, + ) + : Row( + spacing: 4.0, + children: [ + Icon( + icon, + color: theme.colorScheme.onPrimaryContainer, + size: !mini ? 24.0 : 14.0, + ), + Text( + text, + style: TextStyle( + color: theme.colorScheme.onPrimaryContainer, + fontSize: !mini ? 16.0 : 12.0, + ), + ), + ], + ), + ), + ), + ), ), ); } @@ -375,22 +387,30 @@ class _TableHeaderCell extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric( - vertical: 6.0, - horizontal: 8.0, - ), - child: Column( - spacing: 10.0, - children: [ - Icon(icon, size: 22.0), - Text( - text, - style: TextStyle( - fontSize: !mini ? 12.0 : 8.0, - ), + return TooltipVisibility( + visible: mini, + child: Tooltip( + message: text, + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 6.0, + horizontal: 8.0, ), - ], + child: Column( + spacing: 10.0, + children: [ + Icon(icon, size: 22.0), + mini + ? const SizedBox.shrink() + : Text( + text, + style: const TextStyle( + fontSize: 12.0, + ), + ), + ], + ), + ), ), ); } @@ -493,24 +513,31 @@ class _RequestButton extends StatelessWidget { child: Opacity( opacity: status.enabled ? 0.9 : 0.3, child: Container( - padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), + padding: EdgeInsets.symmetric( + horizontal: mini ? 4.0 : 8.0, + vertical: 4.0, + ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(40), color: status.backgroundColor(context), ), - child: Row( - spacing: 8.0, - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - status.icon, - size: !mini ? 12.0 : 8.0, - ), - Text( - status.label(context), - style: TextStyle(fontSize: !mini ? 12.0 : 8.0), - ), - ], + child: FittedBox( + fit: BoxFit.fitWidth, + child: Row( + spacing: mini ? 2.0 : 8.0, + mainAxisSize: MainAxisSize.min, + children: [ + if (status.icon != null) + Icon( + status.icon, + size: !mini ? 12.0 : 8.0, + ), + Text( + status.label(context), + style: TextStyle(fontSize: !mini ? 12.0 : 8.0), + ), + ], + ), ), ), ), diff --git a/lib/pangea/spaces/utils/client_spaces_extension.dart b/lib/pangea/spaces/client_spaces_extension.dart similarity index 100% rename from lib/pangea/spaces/utils/client_spaces_extension.dart rename to lib/pangea/spaces/client_spaces_extension.dart diff --git a/lib/pangea/spaces/widgets/knocking_users_indicator.dart b/lib/pangea/spaces/knocking_users_indicator.dart similarity index 100% rename from lib/pangea/spaces/widgets/knocking_users_indicator.dart rename to lib/pangea/spaces/knocking_users_indicator.dart diff --git a/lib/pangea/spaces/utils/load_participants_util.dart b/lib/pangea/spaces/load_participants_builder.dart similarity index 95% rename from lib/pangea/spaces/utils/load_participants_util.dart rename to lib/pangea/spaces/load_participants_builder.dart index b5c0fe96c..1ba9ee35a 100644 --- a/lib/pangea/spaces/utils/load_participants_util.dart +++ b/lib/pangea/spaces/load_participants_builder.dart @@ -5,7 +5,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/user/models/analytics_profile_model.dart'; +import 'package:fluffychat/pangea/user/analytics_profile_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LoadParticipantsBuilder extends StatefulWidget { @@ -51,6 +51,10 @@ class LoadParticipantsBuilderState extends State { } Future _loadParticipants() async { + if (widget.room == null || widget.room!.participantListComplete) { + return; + } + try { setState(() { loading = true; diff --git a/lib/pangea/spaces/models/space_model.dart b/lib/pangea/spaces/models/space_model.dart deleted file mode 100644 index 19551e7ca..000000000 --- a/lib/pangea/spaces/models/space_model.dart +++ /dev/null @@ -1,297 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; -import '../../events/constants/pangea_event_types.dart'; -import '../../learning_settings/constants/language_constants.dart'; -import '../../learning_settings/models/language_model.dart'; - -class LanguageSettingsModel { - String? city; - String? country; - String? schoolName; - String dominantLanguage; - String targetLanguage; - - LanguageSettingsModel({ - this.dominantLanguage = SpaceConstants.defaultDominantLanguage, - this.targetLanguage = SpaceConstants.defaultTargetLanguage, - this.city, - this.country, - this.schoolName, - }); - - factory LanguageSettingsModel.fromJson(Map json) { - return LanguageSettingsModel( - city: json['city'], - country: json['country'], - dominantLanguage: LanguageModel.codeFromNameOrCode( - json['dominant_language'] ?? LanguageKeys.unknownLanguage, - ), - targetLanguage: LanguageModel.codeFromNameOrCode( - json['target_language'] ?? LanguageKeys.unknownLanguage, - ), - schoolName: json['school_name'], - ); - } - - Map toJson() { - final data = {}; - try { - data['city'] = city; - data['country'] = country; - //check for and do "english" => en and "spanish" => es - data['dominant_language'] = dominantLanguage; - //check for and do "english" => en and "spanish" => es - data['target_language'] = targetLanguage; - data['school_name'] = schoolName; - return data; - } catch (e, s) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: e, - s: s, - data: data, - ); - return data; - } - } - - StateEvent get toStateEvent => StateEvent( - content: toJson(), - type: PangeaEventTypes.languageSettings, - ); -} - -class PangeaRoomRules { - // int? pangeaClassID; // this is id our database - bool isPublic; - bool isOpenEnrollment; - bool oneToOneChatClass; - bool isCreateRooms; - bool isShareVideo; - bool isSharePhoto; - bool isShareFiles; - bool isShareLocation; - bool isCreateStories; - bool isVoiceNotes; - bool isInviteOnlyStudents; - // 0 = forbidden, 1 = allow individual to choose, 2 = require - int interactiveTranslator; - int interactiveGrammar; - int immersionMode; - int definitions; - int translations; - int autoIGC; - - PangeaRoomRules({ - this.isPublic = false, - this.isOpenEnrollment = false, - this.oneToOneChatClass = true, - this.isCreateRooms = true, - this.isShareVideo = true, - this.isSharePhoto = true, - this.isShareFiles = true, - this.isShareLocation = false, - this.isCreateStories = false, - this.isVoiceNotes = true, - this.isInviteOnlyStudents = true, - this.interactiveTranslator = SpaceConstants.languageToolPermissions, - this.interactiveGrammar = SpaceConstants.languageToolPermissions, - this.immersionMode = SpaceConstants.languageToolPermissions, - this.definitions = SpaceConstants.languageToolPermissions, - this.translations = SpaceConstants.languageToolPermissions, - this.autoIGC = SpaceConstants.languageToolPermissions, - }); - - setLanguageToolSetting(ToolSetting setting, int value) { - switch (setting) { - case ToolSetting.interactiveTranslator: - interactiveTranslator = value; - break; - case ToolSetting.interactiveGrammar: - interactiveGrammar = value; - break; - case ToolSetting.immersionMode: - immersionMode = value; - break; - case ToolSetting.definitions: - definitions = value; - break; - // case ToolSetting.translations: - // translations = value; - // break; - case ToolSetting.autoIGC: - autoIGC = value; - break; - default: - throw Exception('Invalid key for setting permissions - $setting'); - } - } - - StateEvent get toStateEvent => StateEvent( - content: toJson(), - type: PangeaEventTypes.rules, - ); - - factory PangeaRoomRules.fromJson(Map json) => - PangeaRoomRules( - // pangeaClassID: json['pangea_class']; - isPublic: json['is_public'], - isOpenEnrollment: json['is_open_enrollment'], - oneToOneChatClass: json['one_to_one_chat_class'], - isCreateRooms: json['is_create_rooms'], - isShareVideo: json['is_share_video'], - isSharePhoto: json['is_share_photo'], - isShareFiles: json['is_share_files'], - isShareLocation: json['is_share_location'], - isCreateStories: json['is_create_stories'], - isVoiceNotes: json['is_voice_notes'], - isInviteOnlyStudents: json['is_invite_only_students'] ?? true, - interactiveTranslator: json['interactive_translator'] ?? - SpaceConstants.languageToolPermissions, - interactiveGrammar: json['interactive_grammar'] ?? - SpaceConstants.languageToolPermissions, - immersionMode: - json['immersion_mode'] ?? SpaceConstants.languageToolPermissions, - definitions: - json['definitions'] ?? SpaceConstants.languageToolPermissions, - translations: - json['translations'] ?? SpaceConstants.languageToolPermissions, - autoIGC: json['auto_igc'] ?? SpaceConstants.languageToolPermissions, - ); - - Map toJson() { - final data = {}; - // data['pangea_class'] = pangeaClassID; - data['is_public'] = isPublic; - data['is_open_enrollment'] = isOpenEnrollment; - data['one_to_one_chat_class'] = oneToOneChatClass; - data['is_create_rooms'] = isCreateRooms; - data['is_share_video'] = isShareVideo; - data['is_share_photo'] = isSharePhoto; - data['is_share_files'] = isShareFiles; - data['is_share_location'] = isShareLocation; - data['is_create_stories'] = isCreateStories; - data['is_voice_notes'] = isVoiceNotes; - data['is_invite_only_students'] = isInviteOnlyStudents; - data['interactive_translator'] = interactiveTranslator; - data['interactive_grammar'] = interactiveGrammar; - data['immersion_mode'] = immersionMode; - data['definitions'] = definitions; - data['translations'] = translations; - data['auto_igc'] = autoIGC; - return data; - } - - int getToolSettings(ToolSetting setting) { - switch (setting) { - case ToolSetting.interactiveTranslator: - return interactiveTranslator; - case ToolSetting.interactiveGrammar: - return interactiveGrammar; - case ToolSetting.immersionMode: - return immersionMode; - case ToolSetting.definitions: - return definitions; - // case ToolSetting.translations: - // return translations; - case ToolSetting.autoIGC: - return autoIGC; - default: - throw Exception('Invalid key for setting permissions - $setting'); - } - } - - String languageToolPermissionsText( - BuildContext context, - ToolSetting setting, - ) { - switch (getToolSettings(setting)) { - case 0: - return L10n.of(context).interactiveTranslatorNotAllowed; - case 1: - return L10n.of(context).interactiveTranslatorAllowed; - case 2: - return L10n.of(context).interactiveTranslatorRequired; - default: - return L10n.of(context).notYetSet; - } - } -} - -enum ToolSetting { - interactiveTranslator, - interactiveGrammar, - immersionMode, - definitions, - // translations, - autoIGC, - enableTTS, - enableAutocorrect, -} - -extension SettingCopy on ToolSetting { - String toolName(BuildContext context) { - switch (this) { - case ToolSetting.interactiveTranslator: - return L10n.of(context).interactiveTranslatorSliderHeader; - case ToolSetting.interactiveGrammar: - return L10n.of(context).interactiveGrammarSliderHeader; - case ToolSetting.immersionMode: - return L10n.of(context).toggleImmersionMode; - case ToolSetting.definitions: - return L10n.of(context).definitionsToolName; - // case ToolSetting.translations: - // return L10n.of(context).messageTranslationsToolName; - case ToolSetting.autoIGC: - return L10n.of(context).autoIGCToolName; - case ToolSetting.enableTTS: - return L10n.of(context).enableTTSToolName; - case ToolSetting.enableAutocorrect: - return L10n.of(context).enableAutocorrectToolName; - } - } - - //use l10n to get tool name - String toolDescription(BuildContext context) { - switch (this) { - case ToolSetting.interactiveTranslator: - return L10n.of(context).itToggleDescription; - case ToolSetting.interactiveGrammar: - return L10n.of(context).igcToggleDescription; - case ToolSetting.immersionMode: - return L10n.of(context).toggleImmersionModeDesc; - case ToolSetting.definitions: - return L10n.of(context).definitionsToolDescription; - // case ToolSetting.translations: - // return L10n.of(context).translationsToolDescrption; - case ToolSetting.autoIGC: - return L10n.of(context).autoIGCToolDescription; - case ToolSetting.enableTTS: - return L10n.of(context).enableTTSToolDescription; - case ToolSetting.enableAutocorrect: - return L10n.of(context).enableAutocorrectDescription; - } - } - - bool get isAvailableSetting { - switch (this) { - case ToolSetting.interactiveTranslator: - case ToolSetting.interactiveGrammar: - case ToolSetting.definitions: - case ToolSetting.immersionMode: - return false; - case ToolSetting.autoIGC: - case ToolSetting.enableTTS: - case ToolSetting.enableAutocorrect: - return true; - } - } -} diff --git a/lib/pangea/spaces/utils/public_course_extension.dart b/lib/pangea/spaces/public_course_extension.dart similarity index 100% rename from lib/pangea/spaces/utils/public_course_extension.dart rename to lib/pangea/spaces/public_course_extension.dart diff --git a/lib/pangea/spaces/constants/space_constants.dart b/lib/pangea/spaces/space_constants.dart similarity index 88% rename from lib/pangea/spaces/constants/space_constants.dart rename to lib/pangea/spaces/space_constants.dart index acbd9501d..f6315356f 100644 --- a/lib/pangea/spaces/constants/space_constants.dart +++ b/lib/pangea/spaces/space_constants.dart @@ -2,9 +2,6 @@ import 'package:fluffychat/config/app_config.dart'; class SpaceConstants { static const powerLevelOfAdmin = 100; - static const languageToolPermissions = 1; - static const defaultDominantLanguage = "en"; - static const defaultTargetLanguage = "es"; static const String classCode = 'classcode'; static const String introductionChatAlias = 'introductionChat'; static const String announcementsChatAlias = 'announcementsChat'; @@ -29,4 +26,6 @@ class SpaceConstants { '${AppConfig.assetsBaseURL}/Space+template+5.png', '${AppConfig.assetsBaseURL}/Space+template+6.png', ]; + + static const String sideBearFileName = "Bear_Find_your_people.png"; } diff --git a/lib/pangea/spaces/space_navigation_column.dart b/lib/pangea/spaces/space_navigation_column.dart new file mode 100644 index 000000000..cc6891cdf --- /dev/null +++ b/lib/pangea/spaces/space_navigation_column.dart @@ -0,0 +1,200 @@ +import 'dart:async'; + +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/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/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/hover_builder.dart'; +import 'package:fluffychat/widgets/navigation_rail.dart'; + +class SpaceNavigationColumn extends StatefulWidget { + final GoRouterState state; + final bool showNavRail; + const SpaceNavigationColumn({ + required this.state, + required this.showNavRail, + super.key, + }); + + @override + State createState() => SpaceNavigationColumnState(); +} + +class SpaceNavigationColumnState extends State { + bool _expanded = false; + Timer? _debounceTimer; + + @override + void dispose() { + _debounceTimer?.cancel(); + _debounceTimer = null; + super.dispose(); + } + + void _expand() { + if (_debounceTimer?.isActive == true) return; + if (!_expanded) { + setState(() => _expanded = true); + } + } + + void _collapse() { + if (_expanded) { + setState(() { + _expanded = false; + _debounce(); + }); + } + } + + void _debounce() { + _debounceTimer?.cancel(); + _debounceTimer = Timer(const Duration(milliseconds: 300), () { + _debounceTimer?.cancel(); + _debounceTimer = null; + }); + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final isColumnMode = FluffyThemes.isColumnMode(context); + + final navRailWidth = isColumnMode + ? FluffyThemes.navRailWidth + : FluffyThemes.navRailWidth - 8.0; + + final double navRailExtraWidth = widget.showNavRail ? 250.0 : 0.0; + final double columnWidth = + isColumnMode ? FluffyThemes.columnWidth + 1.0 : 0; + + final double railWidth = widget.showNavRail ? navRailWidth + 1.0 : 0; + final double baseWidth = columnWidth + railWidth; + final double expandedWidth = baseWidth < navRailExtraWidth + ? navRailExtraWidth + railWidth + : baseWidth; + + return AnimatedContainer( + duration: FluffyThemes.animationDuration, + width: _expanded ? expandedWidth : baseWidth, + child: Stack( + children: [ + if (isColumnMode) + Positioned( + left: navRailWidth + 1.0, + child: SizedBox( + height: MediaQuery.heightOf(context), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + clipBehavior: Clip.antiAlias, + decoration: const BoxDecoration(), + width: FluffyThemes.columnWidth, + child: _MainView(state: widget.state), + ), + Container( + width: 1.0, + color: theme.dividerColor, + ), + ], + ), + ), + ), + if (widget.showNavRail) + HoverBuilder( + builder: (context, hovered) { + WidgetsBinding.instance.addPostFrameCallback((_) { + hovered ? _expand() : _collapse(); + }); + + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + SpacesNavigationRail( + activeSpaceId: widget.state.pathParameters['spaceid'], + path: widget.state.fullPath, + railWidth: _expanded + ? navRailWidth + navRailExtraWidth + : navRailWidth, + expanded: _expanded, + collapse: _collapse, + ), + Container( + width: 1, + color: Theme.of(context).dividerColor, + ), + ], + ); + }, + ), + ], + ), + ); + } +} + +class _MainView extends StatelessWidget { + final GoRouterState state; + + const _MainView({ + required this.state, + }); + + @override + Widget build(BuildContext context) { + final path = state.fullPath; + if (path == null) { + return ChatList( + activeChat: state.pathParameters['roomid'], + activeSpaceId: state.pathParameters['spaceid'], + ); + } + + if (path.contains("analytics")) { + if (path.contains("analytics/level")) { + return const LevelAnalyticsDetailsContent(); + } else if (path.contains("analytics/activities")) { + return const ActivityArchive(); + } else if (path.contains("analytics/${ConstructTypeEnum.morph.string}")) { + return const ConstructAnalyticsView(view: ConstructTypeEnum.morph); + } + return const ConstructAnalyticsView(view: ConstructTypeEnum.vocab); + } + + if (path.contains("settings")) { + return Settings(key: state.pageKey); + } + + if (path.contains('course')) { + return Center( + child: SizedBox( + width: 250.0, + child: CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${SpaceConstants.sideBearFileName}", + errorWidget: (context, url, error) => const SizedBox(), + placeholder: (context, url) => const Center( + child: CircularProgressIndicator.adaptive(), + ), + ), + ), + ); + } + + return ChatList( + activeChat: state.pathParameters['roomid'], + activeSpaceId: state.pathParameters['spaceid'], + ); + } +} diff --git a/lib/pangea/spaces/utils/space_code.dart b/lib/pangea/spaces/utils/space_code.dart deleted file mode 100644 index c15835aec..000000000 --- a/lib/pangea/spaces/utils/space_code.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'dart:convert'; - -import 'package:matrix/matrix.dart'; - -class SpaceCodeUtil { - static Future generateSpaceCode(Client client) async { - final response = await client.httpClient.get( - Uri.parse( - '${client.homeserver}/_synapse/client/pangea/v1/request_room_code', - ), - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer ${client.accessToken}', - }, - ); - if (response.statusCode != 200) { - throw Exception('Failed to generate room code: $response'); - } - final roomCodeResult = jsonDecode(response.body); - if (roomCodeResult['access_code'] is String) { - return roomCodeResult['access_code'] as String; - } else { - throw Exception('Invalid response, access_code not found $response'); - } - } -} diff --git a/lib/pangea/spaces/widgets/leaderboard_participant_list.dart b/lib/pangea/spaces/widgets/leaderboard_participant_list.dart deleted file mode 100644 index 89c951279..000000000 --- a/lib/pangea/spaces/widgets/leaderboard_participant_list.dart +++ /dev/null @@ -1,153 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pages/chat_list/status_msg_list.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; -import 'package:fluffychat/pangea/spaces/utils/load_participants_util.dart'; -import 'package:fluffychat/utils/stream_extension.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; -import 'package:fluffychat/widgets/presence_builder.dart'; - -class LeaderboardParticipantList extends StatefulWidget { - final Room space; - - const LeaderboardParticipantList({ - required this.space, - super.key, - }); - - static const double height = 116; - - @override - State createState() => - LeaderboardParticipantListState(); -} - -class LeaderboardParticipantListState - extends State { - final _scrollController = ScrollController(); - - @override - void dispose() { - _scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final client = Matrix.of(context).client; - final theme = Theme.of(context); - - return StreamBuilder( - stream: client.onSync.stream.rateLimit(const Duration(seconds: 3)), - builder: (context, snapshot) { - return LoadParticipantsBuilder( - room: widget.space, - loadProfiles: true, - builder: (context, participantsLoader) { - final participants = participantsLoader.sortedParticipants - .where((p) => p.membership == Membership.join) - .toList(); - - return AnimatedSize( - duration: FluffyThemes.animationDuration, - curve: Curves.easeInOut, - child: SizedBox( - height: 130.0, - child: Scrollbar( - controller: _scrollController, - child: ListView.builder( - controller: _scrollController, - padding: const EdgeInsets.fromLTRB( - 8.0, - 8.0, - 8.0, - 16.0, - ), - scrollDirection: Axis.horizontal, - itemCount: participants.length, - itemBuilder: (context, i) { - final user = participants[i]; - final publicProfile = - participantsLoader.getAnalyticsProfile( - user.id, - ); - - LinearGradient? gradient = i.leaderboardGradient; - - if (user.id == BotName.byEnvironment || - publicProfile == null || - publicProfile.level == null) { - gradient = null; - } - - return PresenceBuilder( - userId: user.id, - builder: (context, presence) { - Color? dotColor; - if (presence != null) { - dotColor = presence.presence.isOnline - ? Colors.green - : presence.presence.isUnavailable - ? Colors.orange - : Colors.grey; - } - - return PresenceAvatar( - presence: presence ?? - CachedPresence( - PresenceType.unavailable, - null, - null, - null, - user.id, - ), - height: StatusMessageList.height, - onTap: (profile) => UserDialog.show( - context: context, - profile: profile, - ), - gradient: gradient, - showPresence: false, - floatingIndicator: Positioned( - bottom: 0, - right: 0, - child: Container( - width: 16, - height: 16, - decoration: BoxDecoration( - color: theme.colorScheme.surface, - borderRadius: BorderRadius.circular(32), - ), - alignment: Alignment.center, - child: Container( - width: 10, - height: 10, - decoration: BoxDecoration( - color: dotColor, - borderRadius: BorderRadius.circular(16), - border: Border.all( - width: 1, - color: theme.colorScheme.surface, - ), - ), - ), - ), - ), - ); - }, - ); - }, - ), - ), - ), - ); - }, - ); - }, - ); - } -} diff --git a/lib/pangea/toolbar/enums/audio_encoding_enum.dart b/lib/pangea/speech_to_text/audio_encoding_enum.dart similarity index 89% rename from lib/pangea/toolbar/enums/audio_encoding_enum.dart rename to lib/pangea/speech_to_text/audio_encoding_enum.dart index 812648327..ee9236ffa 100644 --- a/lib/pangea/toolbar/enums/audio_encoding_enum.dart +++ b/lib/pangea/speech_to_text/audio_encoding_enum.dart @@ -26,11 +26,8 @@ enum AudioEncodingEnum { speexWithHeaderByte, mp3, mp4, - webmOpus, -} + webmOpus; -// Utility extension to map enum values to their corresponding string value as used by the API -extension AudioEncodingExtension on AudioEncodingEnum { String get value { switch (this) { case AudioEncodingEnum.linear16: diff --git a/lib/pangea/speech_to_text/speech_to_text_repo.dart b/lib/pangea/speech_to_text/speech_to_text_repo.dart new file mode 100644 index 000000000..730db58b9 --- /dev/null +++ b/lib/pangea/speech_to_text/speech_to_text_repo.dart @@ -0,0 +1,105 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_request_model.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_response_model.dart'; + +class _SpeechToTextCacheItem { + final Future data; + final DateTime timestamp; + + const _SpeechToTextCacheItem({ + required this.data, + required this.timestamp, + }); +} + +class SpeechToTextRepo { + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String accessToken, + SpeechToTextRequestModel request, + ) { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch(accessToken, request); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String accessToken, + SpeechToTextRequestModel request, + ) async { + final Requests req = Requests( + choreoApiKey: Environment.choreoApiKey, + accessToken: accessToken, + ); + + final Response res = await req.post( + url: PApiUrls.speechToText, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to translate text: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + return SpeechToTextResponseModel.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); + } + + static Future> _getResult( + SpeechToTextRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + SpeechToTextRequestModel request, + ) { + final cacheKeys = [..._cache.keys]; + for (final key in cacheKeys) { + if (DateTime.now().difference(_cache[key]!.timestamp) >= _cacheDuration) { + _cache.remove(key); + } + } + + return _cache[request.hashCode.toString()]?.data; + } + + static void _setCached( + SpeechToTextRequestModel request, + Future response, + ) => + _cache[request.hashCode.toString()] = _SpeechToTextCacheItem( + data: response, + timestamp: DateTime.now(), + ); +} diff --git a/lib/pangea/speech_to_text/speech_to_text_request_model.dart b/lib/pangea/speech_to_text/speech_to_text_request_model.dart new file mode 100644 index 000000000..a0a736ff6 --- /dev/null +++ b/lib/pangea/speech_to_text/speech_to_text_request_model.dart @@ -0,0 +1,70 @@ +import 'dart:convert'; + +import 'package:flutter/foundation.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/speech_to_text/audio_encoding_enum.dart'; + +class SpeechToTextRequestModel { + final Uint8List audioContent; + final SpeechToTextAudioConfigModel config; + final Event? audioEvent; + + SpeechToTextRequestModel({ + required this.audioContent, + required this.config, + this.audioEvent, + }); + + Map toJson() => { + "audio_content": base64Encode(audioContent), + "config": config.toJson(), + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (other is! SpeechToTextRequestModel) return false; + + return listEquals(audioContent, other.audioContent) && + config == other.config; + } + + @override + int get hashCode { + final bytesSample = + audioContent.length > 10 ? audioContent.sublist(0, 10) : audioContent; + return Object.hashAll([ + Object.hashAll(bytesSample), + config.hashCode, + ]); + } +} + +class SpeechToTextAudioConfigModel { + final AudioEncodingEnum encoding; + final int sampleRateHertz; + final bool enableWordConfidence; + final bool enableAutomaticPunctuation; + final String userL1; + final String userL2; + + SpeechToTextAudioConfigModel({ + required this.encoding, + required this.userL1, + required this.userL2, + this.sampleRateHertz = 16000, + this.enableWordConfidence = true, + this.enableAutomaticPunctuation = true, + }); + + Map toJson() => { + "encoding": encoding.value, + "sample_rate_hertz": sampleRateHertz, + "user_l1": userL1, + "user_l2": userL2, + "enable_word_confidence": enableWordConfidence, + "enable_automatic_punctuation": enableAutomaticPunctuation, + }; +} diff --git a/lib/pangea/toolbar/models/speech_to_text_models.dart b/lib/pangea/speech_to_text/speech_to_text_response_model.dart similarity index 63% rename from lib/pangea/toolbar/models/speech_to_text_models.dart rename to lib/pangea/speech_to_text/speech_to_text_response_model.dart index 4b00929a0..e042be077 100644 --- a/lib/pangea/toolbar/models/speech_to_text_models.dart +++ b/lib/pangea/speech_to_text/speech_to_text_response_model.dart @@ -1,79 +1,118 @@ -import 'dart:convert'; - -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/config/app_config.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/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/toolbar/enums/audio_encoding_enum.dart'; -const int thresholdForGreen = 80; +class SpeechToTextResponseModel { + final List results; -class SpeechToTextAudioConfigModel { - final AudioEncodingEnum encoding; - final int sampleRateHertz; - final bool enableWordConfidence; - final bool enableAutomaticPunctuation; - final String userL1; - final String userL2; - - SpeechToTextAudioConfigModel({ - required this.encoding, - required this.userL1, - required this.userL2, - this.sampleRateHertz = 16000, - this.enableWordConfidence = true, - this.enableAutomaticPunctuation = true, + SpeechToTextResponseModel({ + required this.results, }); + Transcript get transcript => results.first.transcripts.first; + + String get langCode => results.first.transcripts.first.langCode; + + factory SpeechToTextResponseModel.fromJson(Map json) { + final results = json['results'] as List; + if (results.isEmpty) { + throw Exception('SpeechToTextModel.fromJson: results is empty'); + } + return SpeechToTextResponseModel( + results: (json['results'] as List) + .map((e) => SpeechToTextResult.fromJson(e)) + .toList(), + ); + } + Map toJson() => { - "encoding": encoding.value, - "sample_rate_hertz": sampleRateHertz, - "user_l1": userL1, - "user_l2": userL2, - "enable_word_confidence": enableWordConfidence, - "enable_automatic_punctuation": enableAutomaticPunctuation, + "results": results.map((e) => e.toJson()).toList(), + }; + + List constructs( + String roomId, + String eventId, + ) { + final List constructs = []; + final metadata = ConstructUseMetaData( + roomId: roomId, + eventId: eventId, + timeStamp: DateTime.now(), + ); + for (final sstToken in transcript.sttTokens) { + final token = sstToken.token; + if (!token.lemma.saveVocab) continue; + constructs.addAll( + token.allUses( + ConstructUseTypeEnum.pvm, + metadata, + ConstructUseTypeEnum.pvm.pointValue, + ), + ); + } + return constructs; + } +} + +class SpeechToTextResult { + final List transcripts; + + SpeechToTextResult({required this.transcripts}); + + factory SpeechToTextResult.fromJson(Map json) => + SpeechToTextResult( + transcripts: (json['transcripts'] as List) + .map((e) => Transcript.fromJson(e)) + .toList(), + ); + + Map toJson() => { + "transcripts": transcripts.map((e) => e.toJson()).toList(), }; } -class SpeechToTextRequestModel { - final Uint8List audioContent; - final SpeechToTextAudioConfigModel config; - final Event? audioEvent; +class Transcript { + final String text; + final int confidence; + final List sttTokens; + final String langCode; + final int? wordsPerHr; - SpeechToTextRequestModel({ - required this.audioContent, - required this.config, - this.audioEvent, + Transcript({ + required this.text, + required this.confidence, + required this.sttTokens, + required this.langCode, + required this.wordsPerHr, }); + /// Returns the number of words per minute rounded to one decimal place. + double? get wordsPerMinute => wordsPerHr != null ? wordsPerHr! / 60 : null; + + factory Transcript.fromJson(Map json) => Transcript( + text: json['transcript'], + confidence: json['confidence'] <= 100 + ? json['confidence'] + : json['confidence'] / 100, + sttTokens: (json['stt_tokens'] as List) + .map((e) => STTToken.fromJson(e)) + .toList(), + langCode: json['lang_code'], + wordsPerHr: json['words_per_hr'], + ); + Map toJson() => { - "audio_content": base64Encode(audioContent), - "config": config.toJson(), + "transcript": text, + "confidence": confidence, + "stt_tokens": sttTokens.map((e) => e.toJson()).toList(), + "lang_code": langCode, + "words_per_hr": wordsPerHr, }; - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - if (other is! SpeechToTextRequestModel) return false; - - return listEquals(audioContent, other.audioContent) && - config == other.config; - } - - @override - int get hashCode { - final bytesSample = - audioContent.length > 10 ? audioContent.sublist(0, 10) : audioContent; - return Object.hashAll([ - Object.hashAll(bytesSample), - config.hashCode, - ]); - } + Color get color => confidence > 80 ? AppConfig.success : AppConfig.warning; } class STTToken { @@ -94,15 +133,7 @@ class STTToken { int get length => token.text.length; Color color(BuildContext context) { - // turning off the color coding for now - // whisper doesn't include word-level confidence - // if (confidence == null) { return Theme.of(context).colorScheme.onSurface; - // } - // if (confidence! > thresholdForGreen) { - // return AppConfig.success; - // } - // return AppConfig.warning; } factory STTToken.fromJson(Map json) { @@ -147,113 +178,3 @@ class STTToken { ]); } } - -class Transcript { - final String text; - final int confidence; - final List sttTokens; - final String langCode; - final int? wordsPerHr; - - Transcript({ - required this.text, - required this.confidence, - required this.sttTokens, - required this.langCode, - required this.wordsPerHr, - }); - - /// Returns the number of words per minute rounded to one decimal place. - double? get wordsPerMinute => wordsPerHr != null ? wordsPerHr! / 60 : null; - - factory Transcript.fromJson(Map json) => Transcript( - text: json['transcript'], - confidence: json['confidence'] <= 100 - ? json['confidence'] - : json['confidence'] / 100, - sttTokens: (json['stt_tokens'] as List) - .map((e) => STTToken.fromJson(e)) - .toList(), - langCode: json['lang_code'], - wordsPerHr: json['words_per_hr'], - ); - - Map toJson() => { - "transcript": text, - "confidence": confidence, - "stt_tokens": sttTokens.map((e) => e.toJson()).toList(), - "lang_code": langCode, - "words_per_hr": wordsPerHr, - }; - - Color color(BuildContext context) { - if (confidence > thresholdForGreen) { - return AppConfig.success; - } - return AppConfig.warning; - } -} - -class SpeechToTextResult { - final List transcripts; - - SpeechToTextResult({required this.transcripts}); - - factory SpeechToTextResult.fromJson(Map json) => - SpeechToTextResult( - transcripts: (json['transcripts'] as List) - .map((e) => Transcript.fromJson(e)) - .toList(), - ); - - Map toJson() => { - "transcripts": transcripts.map((e) => e.toJson()).toList(), - }; -} - -class SpeechToTextModel { - final List results; - - SpeechToTextModel({ - required this.results, - }); - - Transcript get transcript => results.first.transcripts.first; - - String get langCode => results.first.transcripts.first.langCode; - - factory SpeechToTextModel.fromJson(Map json) => - SpeechToTextModel( - results: (json['results'] as List) - .map((e) => SpeechToTextResult.fromJson(e)) - .toList(), - ); - - Map toJson() => { - "results": results.map((e) => e.toJson()).toList(), - }; - - List constructs( - String roomId, - String eventId, - ) { - final List constructs = []; - final metadata = ConstructUseMetaData( - roomId: roomId, - eventId: eventId, - timeStamp: DateTime.now(), - ); - for (final sstToken in transcript.sttTokens) { - final token = sstToken.token; - if (!token.lemma.saveVocab) continue; - constructs.addAll( - token.allUses( - ConstructUseTypeEnum.pvm, - metadata, - ConstructUseTypeEnum.pvm.pointValue, - ), - ); - } - return constructs; - } -} diff --git a/lib/pangea/subscription/controllers/subscription_controller.dart b/lib/pangea/subscription/controllers/subscription_controller.dart index 395a1c07f..69d9c5276 100644 --- a/lib/pangea/subscription/controllers/subscription_controller.dart +++ b/lib/pangea/subscription/controllers/subscription_controller.dart @@ -5,7 +5,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; -import 'package:get_storage/get_storage.dart'; import 'package:http/http.dart'; import 'package:purchases_flutter/purchases_flutter.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -13,8 +12,6 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/constants/local.key.dart'; -import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/network/requests.dart'; import 'package:fluffychat/pangea/common/network/urls.dart'; @@ -23,11 +20,13 @@ import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/subscription/models/base_subscription_info.dart'; import 'package:fluffychat/pangea/subscription/models/mobile_subscriptions.dart'; import 'package:fluffychat/pangea/subscription/models/web_subscriptions.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_management_repo.dart'; import 'package:fluffychat/pangea/subscription/repo/subscription_repo.dart'; import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; import 'package:fluffychat/pangea/subscription/widgets/subscription_paywall.dart'; -import 'package:fluffychat/pangea/user/controllers/user_controller.dart'; +import 'package:fluffychat/pangea/user/user_controller.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/matrix.dart'; enum SubscriptionStatus { loading, @@ -36,14 +35,13 @@ enum SubscriptionStatus { shouldShowPaywall, } -class SubscriptionController extends BaseController { - static final GetStorage subscriptionBox = GetStorage("subscription_storage"); +class SubscriptionController with ChangeNotifier { late PangeaController _pangeaController; CurrentSubscriptionInfo? currentSubscriptionInfo; AvailableSubscriptionsInfo? availableSubscriptionInfo; - final StreamController subscriptionStream = StreamController.broadcast(); + final ValueNotifier subscriptionNotifier = ValueNotifier(false); SubscriptionController(PangeaController pangeaController) : super() { _pangeaController = pangeaController; @@ -121,26 +119,20 @@ class SubscriptionController extends BaseController { (CustomerInfo info) async { final bool? wasSubscribed = isSubscribed; await updateCustomerInfo(); - if (wasSubscribed != null && - !wasSubscribed && - (isSubscribed != null && isSubscribed!)) { - subscriptionStream.add(true); + if (wasSubscribed == false && isSubscribed == true) { + subscriptionNotifier.value = true; } }, ); } else { - final bool? beganWebPayment = - subscriptionBox.read(PLocalKey.beganWebPayment); - if (beganWebPayment ?? false) { - await subscriptionBox.remove( - PLocalKey.beganWebPayment, - ); - if (isSubscribed != null && isSubscribed!) { - subscriptionStream.add(true); + if (SubscriptionManagementRepo.getBeganWebPayment()) { + await SubscriptionManagementRepo.removeBeganWebPayment(); + if (isSubscribed == true) { + subscriptionNotifier.value = true; } } } - setState(null); + notifyListeners(); } catch (e, s) { debugPrint("Failed to initialize subscription controller"); ErrorHandler.logError( @@ -202,11 +194,7 @@ class SubscriptionController extends BaseController { selectedSubscription.duration!, isPromo: isPromo, ); - await subscriptionBox.write( - PLocalKey.beganWebPayment, - true, - ); - setState(null); + await SubscriptionManagementRepo.setBeganWebPayment(); launchUrlString( paymentLink, webOnlyWindowName: "_self", @@ -243,7 +231,7 @@ class SubscriptionController extends BaseController { Future updateCustomerInfo() async { await currentSubscriptionInfo?.setCurrentSubscription(); - setState(null); + notifyListeners(); } /// if the user is subscribed, returns subscribed @@ -255,54 +243,16 @@ class SubscriptionController extends BaseController { return isSubscribed! ? SubscriptionStatus.subscribed - : _shouldShowPaywall + : shouldShowPaywall ? SubscriptionStatus.shouldShowPaywall : SubscriptionStatus.dimissedPaywall; } - DateTime? get _lastDismissedPaywall { - final lastDismissed = subscriptionBox.read( - PLocalKey.dismissedPaywall, - ); - if (lastDismissed == null) return null; - return DateTime.tryParse(lastDismissed); - } - - int? get _paywallBackoff { - final backoff = subscriptionBox.read( - PLocalKey.paywallBackoff, - ); - if (backoff == null) return null; - return backoff; - } - /// whether or not the paywall should be shown - bool get _shouldShowPaywall { + bool get shouldShowPaywall { return initCompleter.isCompleted && - isSubscribed != null && - !isSubscribed! && - (_lastDismissedPaywall == null || - DateTime.now().difference(_lastDismissedPaywall!).inHours > - (1 * (_paywallBackoff ?? 1))); - } - - void dismissPaywall() async { - await subscriptionBox.write( - PLocalKey.dismissedPaywall, - DateTime.now().toString(), - ); - - if (_paywallBackoff == null) { - await subscriptionBox.write( - PLocalKey.paywallBackoff, - 1, - ); - } else { - await subscriptionBox.write( - PLocalKey.paywallBackoff, - _paywallBackoff! + 1, - ); - } + isSubscribed == false && + !SubscriptionManagementRepo.getDismissedPaywall(); } Future showPaywall(BuildContext context) async { @@ -314,6 +264,8 @@ class SubscriptionController extends BaseController { return; } if (isSubscribed == null || isSubscribed!) return; + + MatrixState.pAnyState.closeAllOverlays(); await showModalBottomSheet( isScrollControlled: true, useRootNavigator: !PlatformInfos.isMobile, @@ -330,7 +282,7 @@ class SubscriptionController extends BaseController { ); }, ); - dismissPaywall(); + await SubscriptionManagementRepo.setDismissedPaywall(); } catch (e, s) { ErrorHandler.logError( e: e, @@ -369,37 +321,6 @@ class SubscriptionController extends BaseController { String? get defaultManagementURL => currentSubscriptionInfo?.currentSubscription ?.defaultManagementURL(availableSubscriptionInfo?.appIds); - - Future setCachedSubscriptionInfo( - AvailableSubscriptionsInfo info, - ) => - subscriptionBox.write( - PLocalKey.availableSubscriptionInfo, - info.toJson(), - ); - - Future getCachedSubscriptionInfo() async { - final entry = subscriptionBox.read( - PLocalKey.availableSubscriptionInfo, - ); - if (entry is! Map) { - return null; - } - - try { - final resp = AvailableSubscriptionsInfo.fromJson(entry); - return resp.lastUpdated == null ? null : resp; - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "entry": entry, - }, - ); - return null; - } - } } enum SubscriptionDuration { diff --git a/lib/pangea/subscription/models/base_subscription_info.dart b/lib/pangea/subscription/models/base_subscription_info.dart index 208df6339..61f6cae0f 100644 --- a/lib/pangea/subscription/models/base_subscription_info.dart +++ b/lib/pangea/subscription/models/base_subscription_info.dart @@ -1,10 +1,9 @@ import 'package:collection/collection.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_management_repo.dart'; import 'package:fluffychat/pangea/subscription/repo/subscription_repo.dart'; import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; -import 'package:fluffychat/widgets/matrix.dart'; /// Contains information about the users's current subscription class CurrentSubscriptionInfo { @@ -12,6 +11,7 @@ class CurrentSubscriptionInfo { final AvailableSubscriptionsInfo availableSubscriptionInfo; DateTime? expirationDate; + DateTime? unsubscribeDetectedAt; String? currentSubscriptionId; CurrentSubscriptionInfo({ @@ -60,6 +60,9 @@ class CurrentSubscriptionInfo { (currentSubscription?.appId == availableSubscriptionInfo.appIds?.currentAppId); + DateTime? get subscriptionEndDate => + unsubscribeDetectedAt == null ? null : expirationDate; + void resetSubscription() => currentSubscriptionId = null; Future setCurrentSubscription() async {} } @@ -78,13 +81,16 @@ class AvailableSubscriptionsInfo { }); Future setAvailableSubscriptions() async { - final cachedInfo = await MatrixState.pangeaController.subscriptionController - .getCachedSubscriptionInfo(); + final cachedInfo = + SubscriptionManagementRepo.getAvailableSubscriptionsInfo(); + appIds ??= cachedInfo?.appIds ?? await SubscriptionRepo.getAppIds(); allProducts ??= cachedInfo?.allProducts ?? await SubscriptionRepo.getAllProducts(); - if (cachedInfo == null) await _cacheSubscriptionInfo(); + if (cachedInfo == null) { + await SubscriptionManagementRepo.setAvailableSubscriptionsInfo(this); + } availableSubscriptions = (allProducts ?? []) .where( @@ -95,22 +101,6 @@ class AvailableSubscriptionsInfo { .toList(); } - Future _cacheSubscriptionInfo() async { - try { - MatrixState.pangeaController.subscriptionController - .setCachedSubscriptionInfo(this); - } catch (e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "appIds": appIds, - "allProducts": allProducts, - }, - ); - } - } - factory AvailableSubscriptionsInfo.fromJson(Map json) { if (!json.containsKey('app_ids') || !json.containsKey('all_products')) { throw "Cached subscription info is missing required fields"; diff --git a/lib/pangea/subscription/models/mobile_subscriptions.dart b/lib/pangea/subscription/models/mobile_subscriptions.dart index 8d45469ae..23a73de64 100644 --- a/lib/pangea/subscription/models/mobile_subscriptions.dart +++ b/lib/pangea/subscription/models/mobile_subscriptions.dart @@ -104,10 +104,10 @@ class MobileSubscriptionInfo extends CurrentSubscriptionInfo { expirationDate = activeEntitlement.expirationDate != null ? DateTime.parse(activeEntitlement.expirationDate!) : null; + unsubscribeDetectedAt = activeEntitlement.unsubscribeDetectedAt != null + ? DateTime.parse(activeEntitlement.unsubscribeDetectedAt!) + : null; - if (activeEntitlement.periodType == PeriodType.trial) { - // We dont use actual trials as it would require adding a CC on devices - } if (currentSubscriptionId != null && currentSubscription == null) { Sentry.addBreadcrumb( Breadcrumb(message: "mismatch of productIds and currentSubscriptionID"), diff --git a/lib/pangea/subscription/models/web_subscriptions.dart b/lib/pangea/subscription/models/web_subscriptions.dart index 6f25f3513..2ceb36d11 100644 --- a/lib/pangea/subscription/models/web_subscriptions.dart +++ b/lib/pangea/subscription/models/web_subscriptions.dart @@ -21,7 +21,16 @@ class WebSubscriptionInfo extends CurrentSubscriptionInfo { ); currentSubscriptionId = rcResponse.currentSubscriptionId; - expirationDate = rcResponse.expirationDate; + final currentSubscription = + rcResponse.allSubscriptions?[currentSubscriptionId]; + + if (currentSubscription != null) { + expirationDate = DateTime.tryParse(currentSubscription.expiresDate); + unsubscribeDetectedAt = + currentSubscription.unsubscribeDetectedAt != null + ? DateTime.parse(currentSubscription.unsubscribeDetectedAt!) + : null; + } } catch (err) { currentSubscriptionId = AppConfig.errorSubscriptionId; } diff --git a/lib/pangea/subscription/pages/change_subscription.dart b/lib/pangea/subscription/pages/change_subscription.dart index 1f9bfb8fb..d7a291c95 100644 --- a/lib/pangea/subscription/pages/change_subscription.dart +++ b/lib/pangea/subscription/pages/change_subscription.dart @@ -171,21 +171,20 @@ class ChangeSubscription extends StatelessWidget { ElevatedButton( onPressed: () => controller .submitChange(subscription), - child: Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - controller.loading - ? const CircularProgressIndicator - .adaptive() - : Text( + child: controller.loading + ? const LinearProgressIndicator() + : Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Text( subscription.isTrial ? L10n.of(context) .activateTrial : L10n.of(context).pay, ), - ], - ), + ], + ), ), ], ), @@ -199,17 +198,20 @@ class ChangeSubscription extends StatelessWidget { ], ), if (kIsWeb) - Row( - spacing: 8.0, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Icon(Icons.info_outlined), - Flexible( - child: Text( - L10n.of(context).promoCodeInfo, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Row( + spacing: 8.0, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Icon(Icons.info_outlined), + Flexible( + child: Text( + L10n.of(context).promoCodeInfo, + ), ), - ), - ], + ], + ), ), const SizedBox(height: 20.0), ], diff --git a/lib/pangea/subscription/pages/settings_subscription.dart b/lib/pangea/subscription/pages/settings_subscription.dart index 8def4f50d..a1f54d8ca 100644 --- a/lib/pangea/subscription/pages/settings_subscription.dart +++ b/lib/pangea/subscription/pages/settings_subscription.dart @@ -2,16 +2,16 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/subscription/pages/settings_subscription_view.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_management_repo.dart'; import 'package:fluffychat/pangea/subscription/utils/subscription_app_id.dart'; import 'package:fluffychat/pangea/subscription/widgets/subscription_snackbar.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; class SubscriptionManagement extends StatefulWidget { @@ -27,37 +27,25 @@ class SubscriptionManagementController extends State { MatrixState.pangeaController.subscriptionController; SubscriptionDetails? selectedSubscription; - StreamSubscription? _subscriptionStatusStream; bool loading = false; - late StreamSubscription _settingsSubscription; - @override void initState() { if (!subscriptionController.initCompleter.isCompleted) { subscriptionController.initialize().then((_) => setState(() {})); } - _settingsSubscription = subscriptionController.stateStream.listen((event) { - debugPrint("stateStream event in subscription settings"); - setState(() {}); - }); - - _subscriptionStatusStream ??= - subscriptionController.subscriptionStream.stream.listen((_) { - showSubscribedSnackbar(context); - context.go('/rooms'); - }); - + subscriptionController.addListener(_onSubscriptionUpdate); + subscriptionController.subscriptionNotifier.addListener(_onSubscribe); subscriptionController.updateCustomerInfo(); super.initState(); } @override void dispose() { + subscriptionController.subscriptionNotifier.removeListener(_onSubscribe); + subscriptionController.removeListener(_onSubscriptionUpdate); super.dispose(); - _settingsSubscription.cancel(); - _subscriptionStatusStream?.cancel(); } bool get subscriptionsAvailable => @@ -106,29 +94,46 @@ class SubscriptionManagementController extends State { .currentSubscriptionInfo!.currentPlatformMatchesPurchasePlatform; } + DateTime? get expirationDate => + subscriptionController.currentSubscriptionInfo?.expirationDate; + + DateTime? get subscriptionEndDate => + subscriptionController.currentSubscriptionInfo?.subscriptionEndDate; + + void _onSubscriptionUpdate() => setState(() {}); + void _onSubscribe() => showSubscribedSnackbar(context); + Future submitChange( SubscriptionDetails subscription, { bool isPromo = false, }) async { setState(() => loading = true); - await showFutureLoadingDialog( - context: context, - future: () async => subscriptionController.submitSubscriptionChange( + try { + await subscriptionController.submitSubscriptionChange( subscription, context, isPromo: isPromo, - ), - onError: (error, s) { - setState(() => loading = false); - return null; - }, - ); - - if (mounted && loading) { - setState(() => loading = false); + ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + "subscription_id": subscription.id, + "is_promo": isPromo, + }, + ); + } finally { + if (mounted) setState(() => loading = false); } } + Future onClickCancelSubscription() async { + await SubscriptionManagementRepo.setClickedCancelSubscription(); + await launchMangementUrl(ManagementOption.cancel); + if (mounted) setState(() {}); + } + Future launchMangementUrl(ManagementOption option) async { String managementUrl = Environment.stripeManagementUrl; final String? email = diff --git a/lib/pangea/subscription/pages/settings_subscription_view.dart b/lib/pangea/subscription/pages/settings_subscription_view.dart index a7cb9e412..c5b3bb506 100644 --- a/lib/pangea/subscription/pages/settings_subscription_view.dart +++ b/lib/pangea/subscription/pages/settings_subscription_view.dart @@ -7,6 +7,7 @@ import 'package:intl/intl.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/subscription/pages/change_subscription.dart'; import 'package:fluffychat/pangea/subscription/pages/settings_subscription.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_management_repo.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; class SettingsSubscriptionView extends StatelessWidget { @@ -25,12 +26,18 @@ class SettingsSubscriptionView extends StatelessWidget { Column( children: [ ListTile( - title: Text(L10n.of(context).cancelSubscription), - enabled: controller.showManagementOptions, - onTap: () => controller.launchMangementUrl( - ManagementOption.cancel, + title: Text( + controller.subscriptionEndDate == null + ? L10n.of(context).cancelSubscription + : L10n.of(context).enabledRenewal, + ), + enabled: controller.showManagementOptions, + onTap: controller.onClickCancelSubscription, + trailing: Icon( + controller.subscriptionEndDate == null + ? Icons.cancel_outlined + : Icons.refresh_outlined, ), - trailing: const Icon(Icons.cancel_outlined), ), const Divider(height: 1), ListTile( @@ -49,6 +56,42 @@ class SettingsSubscriptionView extends StatelessWidget { ), enabled: controller.showManagementOptions, ), + if (controller.expirationDate != null) ...[ + const Divider(height: 1), + ListTile( + title: Text( + controller.subscriptionEndDate != null + ? L10n.of(context).subscriptionEndsOn + : L10n.of(context).subscriptionRenewsOn, + ), + subtitle: Text( + DateFormat.yMMMMd().format( + controller.expirationDate!.toLocal(), + ), + ), + ), + if (SubscriptionManagementRepo.getClickedCancelSubscription()) + Padding( + padding: const EdgeInsets.all(16.0), + child: Row( + spacing: 8.0, + mainAxisSize: MainAxisSize.min, + children: [ + const Icon( + Icons.info_outline, + size: 20, + ), + Flexible( + child: Text( + L10n.of(context).waitForSubscriptionChanges, + textAlign: TextAlign.center, + style: const TextStyle(fontStyle: FontStyle.italic), + ), + ), + ], + ), + ), + ], ], ), ]; @@ -68,16 +111,15 @@ class SettingsSubscriptionView extends StatelessWidget { child: Column( children: [ if (isSubscribed == null) - const Center(child: CircularProgressIndicator.adaptive()), - if (isSubscribed != null && - isSubscribed && - !controller.showManagementOptions) + const Center(child: CircularProgressIndicator.adaptive()) + else if (isSubscribed && !controller.showManagementOptions) ManagementNotAvailableWarning( controller: controller, - ), - if (isSubscribed != null && !isSubscribed) + ) + else if (isSubscribed && controller.showManagementOptions) + ...managementButtons + else ChangeSubscription(controller: controller), - if (controller.showManagementOptions) ...managementButtons, ], ), ), diff --git a/lib/pangea/subscription/repo/subscription_management_repo.dart b/lib/pangea/subscription/repo/subscription_management_repo.dart new file mode 100644 index 000000000..f0b96a678 --- /dev/null +++ b/lib/pangea/subscription/repo/subscription_management_repo.dart @@ -0,0 +1,90 @@ +import 'package:get_storage/get_storage.dart'; + +import 'package:fluffychat/pangea/common/constants/local.key.dart'; +import 'package:fluffychat/pangea/subscription/models/base_subscription_info.dart'; + +class SubscriptionManagementRepo { + static final GetStorage _cache = GetStorage("subscription_storage"); + + static AvailableSubscriptionsInfo? getAvailableSubscriptionsInfo() { + final entry = _cache.read(PLocalKey.availableSubscriptionInfo); + if (entry == null) return null; + try { + return AvailableSubscriptionsInfo.fromJson(entry); + } catch (e) { + _cache.remove(PLocalKey.availableSubscriptionInfo); + return null; + } + } + + static Future setAvailableSubscriptionsInfo( + AvailableSubscriptionsInfo info, + ) async { + await _cache.write( + PLocalKey.availableSubscriptionInfo, + info.toJson(), + ); + } + + static bool getBeganWebPayment() { + return _cache.read(PLocalKey.beganWebPayment) ?? false; + } + + static Future setBeganWebPayment() async { + await _cache.write(PLocalKey.beganWebPayment, true); + } + + static Future removeBeganWebPayment() async { + await _cache.remove(PLocalKey.beganWebPayment); + } + + static bool getDismissedPaywall() { + final entry = _cache.read(PLocalKey.dismissedPaywall); + if (entry == null) return false; + try { + final dismissed = DateTime.parse(entry); + final nextValidShowtime = dismissed.add( + Duration(hours: 1 * _getPaywallBackoff()), + ); + return DateTime.now().isBefore(nextValidShowtime); + } catch (e) { + _cache.remove(PLocalKey.dismissedPaywall); + return false; + } + } + + static Future setDismissedPaywall() async { + await _cache.write( + PLocalKey.dismissedPaywall, + DateTime.now().toIso8601String(), + ); + await _incrementPaywallBackoff(); + } + + static int _getPaywallBackoff() { + return _cache.read(PLocalKey.paywallBackoff) ?? 0; + } + + static Future _incrementPaywallBackoff() async { + final int backoff = _getPaywallBackoff() + 1; + await _cache.write(PLocalKey.paywallBackoff, backoff); + } + + static Future setClickedCancelSubscription() async { + await _cache.write( + PLocalKey.clickedCancelSubscription, + DateTime.now().toIso8601String(), + ); + } + + static bool getClickedCancelSubscription() { + final entry = _cache.read(PLocalKey.clickedCancelSubscription); + if (entry == null) return false; + final val = DateTime.tryParse(entry); + return val != null && DateTime.now().difference(val).inSeconds < 60; + } + + static Future removeClickedCancelSubscription() async { + await _cache.remove(PLocalKey.clickedCancelSubscription); + } +} diff --git a/lib/pangea/subscription/repo/subscription_repo.dart b/lib/pangea/subscription/repo/subscription_repo.dart index 24ecfed98..f844a20b5 100644 --- a/lib/pangea/subscription/repo/subscription_repo.dart +++ b/lib/pangea/subscription/repo/subscription_repo.dart @@ -151,7 +151,6 @@ class RCProductsResponseModel { class RCSubscriptionResponseModel { String? currentSubscriptionId; SubscriptionDetails? currentSubscription; - DateTime? expirationDate; List? allEntitlements; Map? allSubscriptions; @@ -159,7 +158,6 @@ class RCSubscriptionResponseModel { this.currentSubscriptionId, this.currentSubscription, this.allEntitlements, - this.expirationDate, this.allSubscriptions, }); @@ -188,14 +186,6 @@ class RCSubscriptionResponseModel { } final String currentSubscriptionId = activeEntitlements[0]; - - final Map currentSubscriptionMetadata = - json['subscriptions'][currentSubscriptionId]; - - final DateTime expirationDate = DateTime.parse( - currentSubscriptionMetadata['expires_date'], - ); - final SubscriptionDetails? currentSubscription = allProducts?.firstWhereOrNull( (SubscriptionDetails sub) => @@ -206,7 +196,6 @@ class RCSubscriptionResponseModel { return RCSubscriptionResponseModel( currentSubscription: currentSubscription, currentSubscriptionId: currentSubscriptionId, - expirationDate: expirationDate, allEntitlements: activeEntitlements, allSubscriptions: history, ); diff --git a/lib/pangea/subscription/widgets/paywall_card.dart b/lib/pangea/subscription/widgets/paywall_card.dart new file mode 100644 index 000000000..6263dd162 --- /dev/null +++ b/lib/pangea/subscription/widgets/paywall_card.dart @@ -0,0 +1,65 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/common/widgets/card_header.dart'; +import 'package:fluffychat/pangea/subscription/repo/subscription_management_repo.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class PaywallCard extends StatelessWidget { + const PaywallCard({super.key}); + + static Future show( + BuildContext context, + String targetId, + ) async { + if (!MatrixState + .pangeaController.subscriptionController.shouldShowPaywall) { + return; + } + + await SubscriptionManagementRepo.setDismissedPaywall(); + OverlayUtil.showPositionedCard( + context: context, + cardToShow: const PaywallCard(), + maxHeight: 325, + maxWidth: 325, + transformTargetId: targetId, + ); + } + + @override + Widget build(BuildContext context) { + return Column( + spacing: 12.0, + children: [ + CardHeader(L10n.of(context).clickMessageTitle), + Column( + spacing: 12.0, + children: [ + Text( + L10n.of(context).subscribedToUnlockTools, + style: BotStyle.text(context), + textAlign: TextAlign.center, + ), + SizedBox( + width: double.infinity, + child: TextButton( + onPressed: () { + MatrixState.pangeaController.subscriptionController + .showPaywall(context); + }, + style: TextButton.styleFrom( + backgroundColor: + Theme.of(context).colorScheme.primary.withAlpha(25), + ), + child: Text(L10n.of(context).getAccess), + ), + ), + ], + ), + ], + ); + } +} diff --git a/lib/pangea/subscription/widgets/subscription_paywall.dart b/lib/pangea/subscription/widgets/subscription_paywall.dart index b76712f3d..ee4e0b344 100644 --- a/lib/pangea/subscription/widgets/subscription_paywall.dart +++ b/lib/pangea/subscription/widgets/subscription_paywall.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/subscription/widgets/subscription_options.dart'; +import 'package:fluffychat/widgets/matrix.dart'; class SubscriptionPaywall extends StatelessWidget { final PangeaController pangeaController; @@ -30,7 +31,7 @@ class SubscriptionPaywall extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - if (pangeaController.matrixState.client.rooms.length > 1) ...[ + if (Matrix.of(context).client.rooms.length > 1) ...[ Text( L10n.of(context).welcomeBack, textAlign: TextAlign.center, diff --git a/lib/pangea/text_to_speech/text_to_speech_repo.dart b/lib/pangea/text_to_speech/text_to_speech_repo.dart new file mode 100644 index 000000000..3b68486e6 --- /dev/null +++ b/lib/pangea/text_to_speech/text_to_speech_repo.dart @@ -0,0 +1,105 @@ +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/config/environment.dart'; +import 'package:fluffychat/pangea/common/network/requests.dart'; +import 'package:fluffychat/pangea/common/network/urls.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_request_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; + +class _TextToSpeechCacheItem { + final Future data; + final DateTime timestamp; + + const _TextToSpeechCacheItem({ + required this.data, + required this.timestamp, + }); +} + +class TextToSpeechRepo { + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String accessToken, + TextToSpeechRequestModel request, + ) { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch(accessToken, request); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String accessToken, + TextToSpeechRequestModel request, + ) async { + final Requests req = Requests( + choreoApiKey: Environment.choreoApiKey, + accessToken: accessToken, + ); + + final Response res = await req.post( + url: PApiUrls.textToSpeech, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to convert text to speech: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + return TextToSpeechResponseModel.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ); + } + + static Future> _getResult( + TextToSpeechRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + TextToSpeechRequestModel request, + ) { + final cacheKeys = [..._cache.keys]; + for (final key in cacheKeys) { + if (DateTime.now().difference(_cache[key]!.timestamp) >= _cacheDuration) { + _cache.remove(key); + } + } + + return _cache[request.hashCode.toString()]?.data; + } + + static void _setCached( + TextToSpeechRequestModel request, + Future response, + ) => + _cache[request.hashCode.toString()] = _TextToSpeechCacheItem( + data: response, + timestamp: DateTime.now(), + ); +} diff --git a/lib/pangea/text_to_speech/text_to_speech_request_model.dart b/lib/pangea/text_to_speech/text_to_speech_request_model.dart new file mode 100644 index 000000000..c8a13a0fe --- /dev/null +++ b/lib/pangea/text_to_speech/text_to_speech_request_model.dart @@ -0,0 +1,42 @@ +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; + +class TextToSpeechRequestModel { + String text; + String langCode; + String userL1; + String userL2; + List tokens; + String? voice; + + TextToSpeechRequestModel({ + required this.text, + required this.langCode, + required this.userL1, + required this.userL2, + required this.tokens, + this.voice, + }); + + Map toJson() => { + ModelKey.text: text, + ModelKey.langCode: langCode, + ModelKey.userL1: userL1, + ModelKey.userL2: userL2, + ModelKey.tokens: tokens.map((token) => token.toJson()).toList(), + 'voice': voice, + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is TextToSpeechRequestModel && + other.text == text && + other.langCode == langCode && + other.voice == voice; + } + + @override + int get hashCode => text.hashCode ^ langCode.hashCode ^ voice.hashCode; +} diff --git a/lib/pangea/text_to_speech/text_to_speech_response_model.dart b/lib/pangea/text_to_speech/text_to_speech_response_model.dart new file mode 100644 index 000000000..24cc71e1a --- /dev/null +++ b/lib/pangea/text_to_speech/text_to_speech_response_model.dart @@ -0,0 +1,117 @@ +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; + +class TextToSpeechResponseModel { + String audioContent; + String mimeType; + int durationMillis; + List waveform; + String fileExtension; + List ttsTokens; + + TextToSpeechResponseModel({ + required this.audioContent, + required this.mimeType, + required this.durationMillis, + required this.waveform, + required this.fileExtension, + required this.ttsTokens, + }); + + factory TextToSpeechResponseModel.fromJson( + Map json, + ) => + TextToSpeechResponseModel( + audioContent: json["audio_content"], + mimeType: json["mime_type"], + durationMillis: json["duration_millis"], + waveform: List.from(json["wave_form"]), + fileExtension: json["file_extension"], + ttsTokens: List.from( + json["tts_tokens"].map((x) => TTSToken.fromJson(x)), + ), + ); + + Map toJson() => { + "audio_content": audioContent, + "mime_type": mimeType, + "duration_millis": durationMillis, + "wave_form": List.from(waveform.map((x) => x)), + "file_extension": fileExtension, + "tts_tokens": List.from(ttsTokens.map((x) => x.toJson())), + }; + + PangeaAudioEventData toPangeaAudioEventData(String text, String langCode) { + return PangeaAudioEventData( + text: text, + langCode: langCode, + tokens: ttsTokens, + ); + } +} + +class TTSToken { + final int startMS; + final int endMS; + final PangeaTokenText text; + + TTSToken({ + required this.startMS, + required this.endMS, + required this.text, + }); + + factory TTSToken.fromJson(Map json) => TTSToken( + startMS: json["start_ms"], + endMS: json["end_ms"], + text: PangeaTokenText.fromJson(json["text"]), + ); + + Map toJson() => { + "start_ms": startMS, + "end_ms": endMS, + "text": text.toJson(), + }; + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is TTSToken && + other.startMS == startMS && + other.endMS == endMS && + other.text == text; + } + + @override + int get hashCode => startMS.hashCode ^ endMS.hashCode ^ text.hashCode; +} + +class PangeaAudioEventData { + final String text; + final String langCode; + final List tokens; + + PangeaAudioEventData({ + required this.text, + required this.langCode, + required this.tokens, + }); + + factory PangeaAudioEventData.fromJson(dynamic json) => PangeaAudioEventData( + text: json[ModelKey.text] as String, + langCode: json[ModelKey.langCode] as String, + tokens: List.from( + (json[ModelKey.tokens] as Iterable) + .map((x) => TTSToken.fromJson(x)) + .toList(), + ), + ); + + Map toJson() => { + ModelKey.text: text, + ModelKey.langCode: langCode, + ModelKey.tokens: + List>.from(tokens.map((x) => x.toJson())), + }; +} diff --git a/lib/pangea/toolbar/controllers/tts_controller.dart b/lib/pangea/text_to_speech/tts_controller.dart similarity index 80% rename from lib/pangea/toolbar/controllers/tts_controller.dart rename to lib/pangea/text_to_speech/tts_controller.dart index 1550dc5bc..a67865316 100644 --- a/lib/pangea/toolbar/controllers/tts_controller.dart +++ b/lib/pangea/text_to_speech/tts_controller.dart @@ -11,13 +11,19 @@ import 'package:just_audio/just_audio.dart'; import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/audio_player.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_style.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/common/widgets/card_header.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_show_popup.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_repo.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_request_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart' @@ -260,35 +266,24 @@ class TtsController { String langCode, List tokens, ) async { - TextToSpeechResponse? ttsRes; - try { - loadingChoreoStream.add(true); - ttsRes = await MatrixState.pangeaController.textToSpeech.get( - TextToSpeechRequest( - text: text, - langCode: langCode, - tokens: tokens, - userL1: - MatrixState.pangeaController.languageController.activeL1Code() ?? - LanguageKeys.unknownLanguage, - userL2: - MatrixState.pangeaController.languageController.activeL2Code() ?? - LanguageKeys.unknownLanguage, - ), - ); - } catch (e, s) { - error_handler.ErrorHandler.logError( - e: e, - s: s, - data: { - 'text': text, - }, - ); - } finally { - loadingChoreoStream.add(false); - } + TextToSpeechResponseModel? ttsRes; - if (ttsRes == null) return; + loadingChoreoStream.add(true); + final result = await TextToSpeechRepo.get( + MatrixState.pangeaController.userController.accessToken, + TextToSpeechRequestModel( + text: text, + langCode: langCode, + tokens: tokens, + userL1: MatrixState.pangeaController.userController.userL1Code ?? + LanguageKeys.unknownLanguage, + userL2: MatrixState.pangeaController.userController.userL2Code ?? + LanguageKeys.unknownLanguage, + ), + ); + loadingChoreoStream.add(false); + if (result.isError) return; + ttsRes = result.result!; try { Logs().i('Speaking from choreo: $text, langCode: $langCode'); @@ -334,11 +329,27 @@ class TtsController { BuildContext context, String targetID, ) async => - instructionsShowPopup( - context, - InstructionsEnum.ttsDisabled, - targetID, - showToggle: false, - forceShow: true, + OverlayUtil.showPositionedCard( + context: context, + backDropToDismiss: false, + cardToShow: Column( + spacing: 12.0, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + CardHeader(InstructionsEnum.ttsDisabled.title(L10n.of(context))), + Padding( + padding: const EdgeInsets.all(6.0), + child: Text( + InstructionsEnum.ttsDisabled.body(L10n.of(context)), + style: BotStyle.text(context), + ), + ), + ], + ), + maxHeight: 300, + maxWidth: 300, + transformTargetId: targetID, + closePrevOverlay: false, + overlayKey: InstructionsEnum.ttsDisabled.toString(), ); } diff --git a/lib/pangea/token_info_feedback/show_token_feedback_dialog.dart b/lib/pangea/token_info_feedback/show_token_feedback_dialog.dart new file mode 100644 index 000000000..7d60c9181 --- /dev/null +++ b/lib/pangea/token_info_feedback/show_token_feedback_dialog.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/widgets/feedback_response_dialog.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_dialog.dart'; +import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.dart'; + +class TokenFeedbackUtil { + static Future showTokenFeedbackDialog( + BuildContext context, { + required TokenInfoFeedbackRequestData requestData, + required String langCode, + PangeaMessageEvent? event, + }) async { + final resp = await showDialog( + context: context, + builder: (context) => TokenInfoFeedbackDialog( + requestData: requestData, + langCode: langCode, + event: event, + ), + ); + + if (resp == null) return; + await showDialog( + context: context, + builder: (context) { + return FeedbackResponseDialog( + title: L10n.of(context).tokenInfoFeedbackDialogTitle, + feedback: resp, + ); + }, + ); + } +} diff --git a/lib/pangea/token_info_feedback/token_info_feedback_dialog.dart b/lib/pangea/token_info_feedback/token_info_feedback_dialog.dart index bc242d64d..856d89495 100644 --- a/lib/pangea/token_info_feedback/token_info_feedback_dialog.dart +++ b/lib/pangea/token_info_feedback/token_info_feedback_dialog.dart @@ -1,65 +1,49 @@ -import 'dart:ui'; - import 'package:flutter/material.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; +import 'package:fluffychat/pangea/common/widgets/feedback_dialog.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/language_detection_model.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/languages/language_arc_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_info_repo.dart'; import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; -import 'package:fluffychat/pangea/lemmas/user_set_lemma_info.dart'; import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_repo.dart'; import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_request.dart'; import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_response.dart'; import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_repo.dart'; import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.dart'; import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_response.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/word_zoom_widget.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; -class TokenInfoFeedbackDialog extends StatefulWidget { +class TokenInfoFeedbackDialog extends StatelessWidget { final TokenInfoFeedbackRequestData requestData; final String langCode; - final PangeaMessageEvent event; - final VoidCallback onUpdate; + final PangeaMessageEvent? event; const TokenInfoFeedbackDialog({ super.key, required this.requestData, required this.langCode, - required this.event, - required this.onUpdate, + this.event, }); - @override - State createState() => - _TokenInfoFeedbackDialogState(); -} - -class _TokenInfoFeedbackDialogState extends State { - final TextEditingController _feedbackController = TextEditingController(); - - @override - void dispose() { - _feedbackController.dispose(); - super.dispose(); - } - - Future _submitFeedback() async { + Future _submitFeedback(String feedback) async { final request = TokenInfoFeedbackRequest( - userFeedback: _feedbackController.text, - data: widget.requestData, + userFeedback: feedback, + data: requestData, ); final TokenInfoFeedbackResponse response = await TokenInfoFeedbackRepo.submitFeedback(request); - final originalToken = - widget.requestData.tokens[widget.requestData.selectedToken]; + final originalToken = requestData.tokens[requestData.selectedToken]; final token = response.updatedToken ?? originalToken; // first, update lemma info if changed @@ -77,7 +61,7 @@ class _TokenInfoFeedbackDialogState extends State { ); } - final originalSent = widget.event.originalSent; + final originalSent = event?.originalSent; // if no other changes, just return the message final hasTokenUpdate = response.updatedToken != null; @@ -86,45 +70,53 @@ class _TokenInfoFeedbackDialogState extends State { response.updatedLanguage != originalSent.langCode; if (!hasTokenUpdate && !hasLangUpdate) { - widget.onUpdate(); return response.userFriendlyMessage; } // update the tokens to be sent in the message edit - final tokens = List.from(widget.requestData.tokens); + final tokens = List.from(requestData.tokens); if (hasTokenUpdate) { - tokens[widget.requestData.selectedToken] = response.updatedToken!; + tokens[requestData.selectedToken] = response.updatedToken!; } - if (hasLangUpdate) { - originalSent.content.langCode = response.updatedLanguage!; - } + final updatedLanguage = + response.updatedLanguage ?? event?.originalSent?.langCode; - await widget.event.room.pangeaSendTextEvent( - widget.requestData.fullText, - editEventId: widget.event.eventId, - originalSent: originalSent?.content, - originalWritten: widget.event.originalWritten?.content, - tokensSent: PangeaMessageTokens( - tokens: tokens, - ), - tokensWritten: widget.event.originalWritten?.tokens != null - ? PangeaMessageTokens( - tokens: widget.event.originalWritten!.tokens!, - detections: widget.event.originalWritten?.detections, - ) - : null, - choreo: originalSent?.choreo, + final tokensSent = PangeaMessageTokens( + tokens: tokens, + detections: [ + if (updatedLanguage != null) + LanguageDetectionModel( + langCode: updatedLanguage, + confidence: 1, + ), + ], ); - widget.onUpdate(); + if (requestData.fullText != null && event != null) { + await event!.room.pangeaSendTextEvent( + requestData.fullText!, + editEventId: event!.eventId, + originalWritten: event!.originalWritten?.content, + tokensSent: tokensSent, + tokensWritten: event!.originalWritten?.tokens != null + ? PangeaMessageTokens( + tokens: event!.originalWritten!.tokens!, + detections: event!.originalWritten?.detections, + ) + : null, + choreo: originalSent?.choreo, + messageTag: ModelKey.tokenFeedbackEdit, + ); + } + return response.userFriendlyMessage; } - Future _submit() async { + Future _submit(String feedback, BuildContext context) async { final resp = await showFutureLoadingDialog( context: context, - future: () => _submitFeedback(), + future: () => _submitFeedback(feedback), ); if (!resp.isError) { @@ -135,29 +127,23 @@ class _TokenInfoFeedbackDialogState extends State { Future _updateLemmaInfo( PangeaToken token, LemmaInfoResponse response, - ) async { - final construct = token.vocabConstructID; - - final currentLemmaInfo = construct.userLemmaInfo; - final updatedLemmaInfo = UserSetLemmaInfo( - meaning: response.meaning, - emojis: response.emoji, - ); - - if (currentLemmaInfo != updatedLemmaInfo) { - await construct.setUserLemmaInfo(updatedLemmaInfo); - } - } + ) => + LemmaInfoRepo.set( + token.vocabConstructID.lemmaInfoRequest( + event?.event.content ?? {}, + ), + response, + ); Future _updatePhoneticTranscription( PhoneticTranscriptionResponse response, ) async { final req = PhoneticTranscriptionRequest( arc: LanguageArc( - l1: PLanguageStore.byLangCode(widget.requestData.wordCardL1) ?? - MatrixState.pangeaController.languageController.userL1!, - l2: PLanguageStore.byLangCode(widget.langCode) ?? - MatrixState.pangeaController.languageController.userL2!, + l1: PLanguageStore.byLangCode(requestData.wordCardL1) ?? + MatrixState.pangeaController.userController.userL1!, + l2: PLanguageStore.byLangCode(langCode) ?? + MatrixState.pangeaController.userController.userL2!, ), content: response.content, ); @@ -166,109 +152,15 @@ class _TokenInfoFeedbackDialogState extends State { @override Widget build(BuildContext context) { - final selectedToken = - widget.requestData.tokens[widget.requestData.selectedToken]; - return BackdropFilter( - filter: ImageFilter.blur(sigmaX: 2.5, sigmaY: 2.5), - child: Dialog( - backgroundColor: Theme.of(context).colorScheme.surfaceContainerHigh, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20.0), - ), - child: Container( - width: 325.0, - constraints: const BoxConstraints( - maxHeight: 600.0, - ), - padding: const EdgeInsets.all(12.0), - child: Column( - spacing: 20.0, - mainAxisSize: MainAxisSize.min, - children: [ - // Header with title and close button - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - IconButton( - icon: const Icon(Icons.close), - onPressed: () => Navigator.of(context).pop(), - ), - Expanded( - child: Text( - L10n.of(context).tokenInfoFeedbackDialogTitle, - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w600, - ), - textAlign: TextAlign.center, - ), - ), - const SizedBox( - width: 40.0, - height: 40.0, - child: Center( - child: Icon(Icons.flag_outlined), - ), - ), - ], - ), - - // Content - Expanded( - child: SingleChildScrollView( - child: Column( - spacing: 20.0, - mainAxisSize: MainAxisSize.min, - children: [ - // Placeholder for word card - Center( - child: WordZoomWidget( - token: selectedToken.text, - construct: selectedToken.vocabConstructID, - langCode: widget.langCode, - ), - ), - // Description text - Text( - L10n.of(context).tokenInfoFeedbackDialogDesc, - textAlign: TextAlign.center, - ), - // Feedback text field - TextFormField( - controller: _feedbackController, - decoration: InputDecoration( - hintText: L10n.of(context).feedbackHint, - ), - keyboardType: TextInputType.multiline, - minLines: 1, - maxLines: 5, - onFieldSubmitted: _feedbackController.text.isNotEmpty - ? (_) => _submit() - : null, - ), - ], - ), - ), - ), - - ValueListenableBuilder( - valueListenable: _feedbackController, - builder: (context, value, _) { - final isNotEmpty = value.text.isNotEmpty; - return ElevatedButton( - onPressed: isNotEmpty ? _submit : null, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(L10n.of(context).feedbackButton), - ], - ), - ); - }, - ), - ], - ), - ), + final selectedToken = requestData.tokens[requestData.selectedToken]; + return FeedbackDialog( + title: L10n.of(context).tokenInfoFeedbackDialogTitle, + onSubmit: (feedback) => _submit(feedback, context), + extraContent: WordZoomWidget( + token: selectedToken.text, + construct: selectedToken.vocabConstructID, + langCode: langCode, + enableEmojiSelection: false, ), ); } diff --git a/lib/pangea/token_info_feedback/token_info_feedback_button.dart b/lib/pangea/token_info_feedback/token_info_feedback_notification.dart similarity index 56% rename from lib/pangea/token_info_feedback/token_info_feedback_button.dart rename to lib/pangea/token_info_feedback/token_info_feedback_notification.dart index 89c6289ae..cc52fbf12 100644 --- a/lib/pangea/token_info_feedback/token_info_feedback_button.dart +++ b/lib/pangea/token_info_feedback/token_info_feedback_notification.dart @@ -3,82 +3,22 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/bot/widgets/bot_face_svg.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_dialog.dart'; -import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.dart'; import 'package:fluffychat/widgets/matrix.dart'; -class TokenInfoFeedbackButton extends StatelessWidget { - final TokenInfoFeedbackRequestData requestData; - final String langCode; - final PangeaMessageEvent event; - final VoidCallback onUpdate; - - const TokenInfoFeedbackButton({ - super.key, - required this.requestData, - required this.langCode, - required this.event, - required this.onUpdate, - }); - - Future _submitFeedback(BuildContext context) async { - final resp = await showDialog( - context: context, - builder: (context) => TokenInfoFeedbackDialog( - requestData: requestData, - langCode: langCode, - event: event, - onUpdate: onUpdate, - ), - ); - - if (resp != null && resp is String) { - _showSuccessSnackBar(resp, context); - } - } - - void _showSuccessSnackBar(String message, BuildContext context) { - OverlayUtil.showOverlay( - overlayKey: "token_feedback_snackbar", - context: context, - child: _TokenFeedbackNotification(message: message), - transformTargetId: '', - position: OverlayPositionEnum.top, - backDropToDismiss: false, - closePrevOverlay: false, - canPop: false, - ); - - Future.delayed(const Duration(seconds: 10), () { - MatrixState.pAnyState.closeOverlay("token_feedback_snackbar"); - }); - } - - @override - Widget build(BuildContext context) { - return IconButton( - icon: const Icon(Icons.flag_outlined), - onPressed: () => _submitFeedback(context), - tooltip: L10n.of(context).reportWordIssueTooltip, - ); - } -} - -class _TokenFeedbackNotification extends StatefulWidget { +class TokenFeedbackNotification extends StatefulWidget { final String message; - const _TokenFeedbackNotification({ + const TokenFeedbackNotification({ + super.key, required this.message, }); @override - State<_TokenFeedbackNotification> createState() => + State createState() => _TokenFeedbackNotificationState(); } -class _TokenFeedbackNotificationState extends State<_TokenFeedbackNotification> +class _TokenFeedbackNotificationState extends State with SingleTickerProviderStateMixin { late AnimationController _slideController; late Animation _slideAnimation; diff --git a/lib/pangea/token_info_feedback/token_info_feedback_request.dart b/lib/pangea/token_info_feedback/token_info_feedback_request.dart index 9caf6c4ea..c7f7636a8 100644 --- a/lib/pangea/token_info_feedback/token_info_feedback_request.dart +++ b/lib/pangea/token_info_feedback/token_info_feedback_request.dart @@ -3,25 +3,25 @@ import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; class TokenInfoFeedbackRequestData { final String userId; - final String roomId; - final String fullText; + final String? roomId; + final String? fullText; final String detectedLanguage; final List tokens; final int selectedToken; - final LemmaInfoResponse? lemmaInfo; - final String? phonetics; + final LemmaInfoResponse lemmaInfo; + final String phonetics; final String wordCardL1; TokenInfoFeedbackRequestData({ required this.userId, - required this.roomId, - required this.fullText, required this.detectedLanguage, required this.tokens, required this.selectedToken, - this.lemmaInfo, - this.phonetics, + required this.lemmaInfo, + required this.phonetics, required this.wordCardL1, + this.roomId, + this.fullText, }); @override @@ -67,7 +67,7 @@ class TokenInfoFeedbackRequest { 'detected_language': data.detectedLanguage, 'tokens': data.tokens.map((token) => token.toJson()).toList(), 'selected_token': data.selectedToken, - 'lemma_info': data.lemmaInfo?.toJson(), + 'lemma_info': data.lemmaInfo.toJson(), 'phonetics': data.phonetics, 'user_feedback': userFeedback, 'word_card_l1': data.wordCardL1, diff --git a/lib/pangea/toolbar/controllers/speech_to_text_controller.dart b/lib/pangea/toolbar/controllers/speech_to_text_controller.dart deleted file mode 100644 index 0de0a7b3d..000000000 --- a/lib/pangea/toolbar/controllers/speech_to_text_controller.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; - -import 'package:flutter/foundation.dart'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; -import '../../common/config/environment.dart'; -import '../../common/network/requests.dart'; -import '../../common/network/urls.dart'; - -// Assuming SpeechToTextRequestModel, SpeechToTextModel and related models are already defined as in your provided code. - -class _SpeechToTextCacheItem { - Future data; - - _SpeechToTextCacheItem({required this.data}); -} - -class SpeechToTextController { - static final Map _cache = {}; - late final PangeaController _pangeaController; - Timer? _cacheClearTimer; - - SpeechToTextController(this._pangeaController) { - _initializeCacheClearing(); - } - - void _initializeCacheClearing() { - const duration = Duration(minutes: 2); - _cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache()); - } - - void _clearCache() { - _cache.clear(); - } - - void dispose() { - _cacheClearTimer?.cancel(); - } - - Future get( - SpeechToTextRequestModel requestModel, - ) async { - final int cacheKey = requestModel.hashCode; - - if (_cache.containsKey(cacheKey)) { - return _cache[cacheKey]!.data; - } else { - final Future response = _fetchResponse( - accessToken: _pangeaController.userController.accessToken, - requestModel: requestModel, - ); - _cache[cacheKey] = _SpeechToTextCacheItem(data: response); - - return response; - } - } - - Future saveSpeechToTextAsRepresentationEvent( - SpeechToTextModel response, - SpeechToTextRequestModel requestModel, - ) { - if (requestModel.audioEvent == null) { - debugPrint( - 'Audio event is null, case of giving speech to text before message sent, currently not implemented', - ); - return Future.value(null); - } - debugPrint('Saving transcript as matrix event'); - - requestModel.audioEvent?.room - .sendPangeaEvent( - content: PangeaRepresentation( - langCode: response.langCode, - text: response.transcript.text, - originalSent: false, - originalWritten: false, - speechToText: response, - ).toJson(), - parentEventId: requestModel.audioEvent!.eventId, - type: PangeaEventTypes.representation, - ) - .then( - (_) => debugPrint('Transcript saved as matrix event'), - ); - - return Future.value(null); - } - - Future _fetchResponse({ - required String accessToken, - required SpeechToTextRequestModel requestModel, - }) async { - final Requests request = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final Response res = await request.post( - url: PApiUrls.speechToText, - body: requestModel.toJson(), - ); - - if (res.statusCode == 200) { - final Map json = jsonDecode(utf8.decode(res.bodyBytes)); - - final response = SpeechToTextModel.fromJson(json); - - saveSpeechToTextAsRepresentationEvent(response, requestModel).onError( - (error, stackTrace) => ErrorHandler.logError( - e: error, - s: stackTrace, - data: { - "response": response.toJson(), - "requestModel": requestModel.toJson(), - }, - ), - ); - - return response; - } else { - debugPrint('Error converting speech to text: ${res.body}'); - throw Exception('Failed to convert speech to text'); - } - } -} diff --git a/lib/pangea/toolbar/controllers/text_to_speech_controller.dart b/lib/pangea/toolbar/controllers/text_to_speech_controller.dart deleted file mode 100644 index 54a9768ca..000000000 --- a/lib/pangea/toolbar/controllers/text_to_speech_controller.dart +++ /dev/null @@ -1,243 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; -import 'dart:typed_data'; - -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/network/urls.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; - -class PangeaAudioEventData { - final String text; - final String langCode; - final List tokens; - - PangeaAudioEventData({ - required this.text, - required this.langCode, - required this.tokens, - }); - - factory PangeaAudioEventData.fromJson(dynamic json) => PangeaAudioEventData( - text: json[ModelKey.text] as String, - langCode: json[ModelKey.langCode] as String, - tokens: List.from( - (json[ModelKey.tokens] as Iterable) - .map((x) => TTSToken.fromJson(x)) - .toList(), - ), - ); - - Map toJson() => { - ModelKey.text: text, - ModelKey.langCode: langCode, - ModelKey.tokens: - List>.from(tokens.map((x) => x.toJson())), - }; -} - -class TTSToken { - final int startMS; - final int endMS; - final PangeaTokenText text; - - TTSToken({ - required this.startMS, - required this.endMS, - required this.text, - }); - - factory TTSToken.fromJson(Map json) => TTSToken( - startMS: json["start_ms"], - endMS: json["end_ms"], - text: PangeaTokenText.fromJson(json["text"]), - ); - - Map toJson() => { - "start_ms": startMS, - "end_ms": endMS, - "text": text.toJson(), - }; - - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - - return other is TTSToken && - other.startMS == startMS && - other.endMS == endMS && - other.text == text; - } - - @override - int get hashCode => startMS.hashCode ^ endMS.hashCode ^ text.hashCode; -} - -class TextToSpeechRequest { - String text; - String langCode; - String userL1; - String userL2; - List tokens; - - TextToSpeechRequest({ - required this.text, - required this.langCode, - required this.userL1, - required this.userL2, - required this.tokens, - }); - - Map toJson() => { - ModelKey.text: text, - ModelKey.langCode: langCode, - ModelKey.userL1: userL1, - ModelKey.userL2: userL2, - ModelKey.tokens: tokens.map((token) => token.toJson()).toList(), - }; - - @override - bool operator ==(Object other) { - if (identical(this, other)) return true; - - return other is TextToSpeechRequest && - other.text == text && - other.langCode == langCode; - } - - @override - int get hashCode => text.hashCode ^ langCode.hashCode; -} - -class TextToSpeechResponse { - String audioContent; - String mimeType; - int durationMillis; - List waveform; - String fileExtension; - List ttsTokens; - - TextToSpeechResponse({ - required this.audioContent, - required this.mimeType, - required this.durationMillis, - required this.waveform, - required this.fileExtension, - required this.ttsTokens, - }); - - factory TextToSpeechResponse.fromJson( - Map json, - ) => - TextToSpeechResponse( - audioContent: json["audio_content"], - mimeType: json["mime_type"], - durationMillis: json["duration_millis"], - waveform: List.from(json["wave_form"]), - fileExtension: json["file_extension"], - ttsTokens: List.from( - json["tts_tokens"].map((x) => TTSToken.fromJson(x)), - ), - ); - - Map toJson() => { - "audio_content": audioContent, - "mime_type": mimeType, - "duration_millis": durationMillis, - "wave_form": List.from(waveform.map((x) => x)), - "file_extension": fileExtension, - "tts_tokens": List.from(ttsTokens.map((x) => x.toJson())), - }; - - PangeaAudioEventData toPangeaAudioEventData(String text, String langCode) { - return PangeaAudioEventData( - text: text, - langCode: langCode, - tokens: ttsTokens, - ); - } -} - -class _TextToSpeechCacheItem { - Future data; - - _TextToSpeechCacheItem({ - required this.data, - }); -} - -class TextToSpeechController { - static final Map _cache = {}; - late final PangeaController _pangeaController; - - Timer? _cacheClearTimer; - - TextToSpeechController(PangeaController pangeaController) { - _pangeaController = pangeaController; - _initializeCacheClearing(); - } - - void _initializeCacheClearing() { - const duration = Duration(minutes: 15); // Adjust the duration as needed - _cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache()); - } - - void _clearCache() { - _cache.clear(); - } - - void dispose() { - _cacheClearTimer?.cancel(); - } - - Future get( - TextToSpeechRequest params, - ) async { - if (_cache.containsKey(params)) { - return _cache[params]!.data; - } else { - final Future response = _fetchResponse( - _pangeaController.userController.accessToken, - params, - ); - _cache[params] = _TextToSpeechCacheItem(data: response); - return response; - } - } - - static Future _fetchResponse( - String accessToken, - TextToSpeechRequest params, - ) async { - final Requests request = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: accessToken, - ); - - final Response res = await request.post( - url: PApiUrls.textToSpeech, - body: params.toJson(), - ); - - final Map json = jsonDecode(res.body); - - return TextToSpeechResponse.fromJson(json); - } - - static bool isOggFile(Uint8List bytes) { - // Check if the file has enough bytes for the header - if (bytes.length < 4) { - return false; - } - - // Check the magic number for OGG file - return bytes[0] == 0x4F && - bytes[1] == 0x67 && - bytes[2] == 0x67 && - bytes[3] == 0x53; - } -} diff --git a/lib/pangea/toolbar/enums/message_mode_enum.dart b/lib/pangea/toolbar/enums/message_mode_enum.dart deleted file mode 100644 index b2d1d8f2a..000000000 --- a/lib/pangea/toolbar/enums/message_mode_enum.dart +++ /dev/null @@ -1,385 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:collection/collection.dart'; -import 'package:material_symbols_icons/symbols.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; - -enum MessageMode { - practiceActivity, - - wordZoom, - wordEmoji, - wordMeaning, - wordMorph, - // wordZoomTextToSpeech, - // wordZoomSpeechToText, - - messageMeaning, - listening, - messageSpeechToText, - messageTranslation, - - // message not selected - noneSelected, -} - -extension MessageModeExtension on MessageMode { - IconData get icon { - switch (this) { - case MessageMode.messageTranslation: - return Icons.translate; - case MessageMode.listening: - return Icons.volume_up; - case MessageMode.messageSpeechToText: - return Symbols.speech_to_text; - case MessageMode.practiceActivity: - return Symbols.fitness_center; - case MessageMode.wordZoom: - case MessageMode.wordMeaning: - return Symbols.dictionary; - case MessageMode.noneSelected: - return Icons.error; - case MessageMode.messageMeaning: - return Icons.star; - case MessageMode.wordEmoji: - return Symbols.imagesmode; - case MessageMode.wordMorph: - return Symbols.toys_and_games; - } - } - - String title(BuildContext context) { - switch (this) { - case MessageMode.messageTranslation: - return L10n.of(context).translations; - case MessageMode.listening: - return L10n.of(context).messageAudio; - case MessageMode.messageSpeechToText: - return L10n.of(context).speechToTextTooltip; - case MessageMode.practiceActivity: - return L10n.of(context).practice; - case MessageMode.wordZoom: - return L10n.of(context).vocab; - case MessageMode.noneSelected: - return ''; - case MessageMode.messageMeaning: - return L10n.of(context).meaning; - case MessageMode.wordEmoji: - return L10n.of(context).image; - case MessageMode.wordMorph: - return L10n.of(context).grammar; - case MessageMode.wordMeaning: - return L10n.of(context).meaning; - } - } - - String tooltip(BuildContext context) { - switch (this) { - case MessageMode.messageTranslation: - return L10n.of(context).translationTooltip; - case MessageMode.listening: - return L10n.of(context).listen; - case MessageMode.messageSpeechToText: - return L10n.of(context).speechToTextTooltip; - case MessageMode.practiceActivity: - return L10n.of(context).practice; - case MessageMode.wordZoom: - return L10n.of(context).vocab; - case MessageMode.noneSelected: - return ''; - case MessageMode.messageMeaning: - return L10n.of(context).meaning; - //TODO: add L10n - case MessageMode.wordEmoji: - return L10n.of(context).image; - case MessageMode.wordMorph: - return L10n.of(context).grammar; - case MessageMode.wordMeaning: - return L10n.of(context).meaning; - } - } - - InstructionsEnum? get instructionsEnum { - switch (this) { - case MessageMode.wordMorph: - return InstructionsEnum.chooseMorphs; - case MessageMode.messageSpeechToText: - return InstructionsEnum.speechToText; - case MessageMode.wordMeaning: - return InstructionsEnum.chooseLemmaMeaning; - case MessageMode.listening: - return InstructionsEnum.chooseWordAudio; - case MessageMode.wordEmoji: - return InstructionsEnum.chooseEmoji; - case MessageMode.noneSelected: - return InstructionsEnum.readingAssistanceOverview; - case MessageMode.messageTranslation: - return InstructionsEnum.completeActivitiesToUnlock; - case MessageMode.messageMeaning: - case MessageMode.wordZoom: - case MessageMode.practiceActivity: - return null; - } - } - - double get pointOnBar { - switch (this) { - // case MessageMode.stats: - // return 1; - case MessageMode.noneSelected: - return 1; - case MessageMode.wordMorph: - return 0.7; - case MessageMode.wordMeaning: - return 0.5; - case MessageMode.listening: - return 0.3; - case MessageMode.messageTranslation: - case MessageMode.messageSpeechToText: - case MessageMode.wordZoom: - case MessageMode.wordEmoji: - case MessageMode.messageMeaning: - case MessageMode.practiceActivity: - return 0; - } - } - - bool isUnlocked( - MessageOverlayController overlayController, - ) { - switch (this) { - case MessageMode.messageTranslation: - return overlayController.isTranslationUnlocked; - case MessageMode.practiceActivity: - case MessageMode.listening: - case MessageMode.messageSpeechToText: - case MessageMode.messageMeaning: - case MessageMode.wordZoom: - case MessageMode.wordEmoji: - case MessageMode.wordMorph: - case MessageMode.wordMeaning: - case MessageMode.noneSelected: - return true; - } - } - - bool get showButton => this != MessageMode.practiceActivity; - - bool isModeDone(MessageOverlayController overlayController) { - switch (this) { - case MessageMode.messageTranslation: - return overlayController.isTotallyDone; - case MessageMode.listening: - return overlayController.isListeningDone; - case MessageMode.wordEmoji: - return overlayController.isEmojiDone; - case MessageMode.wordMorph: - return overlayController.isMorphDone; - case MessageMode.wordMeaning: - return overlayController.isMeaningDone; - default: - return false; - } - } - - Color iconButtonColor( - BuildContext context, - MessageOverlayController overlayController, - ) { - if (overlayController.isTotallyDone) { - return AppConfig.gold; - } - - //locked - if (!isUnlocked(overlayController)) { - return barAndLockedButtonColor(context); - } - - //unlocked - return isModeDone(overlayController) - ? AppConfig.gold - : Theme.of(context).colorScheme.primaryContainer; - } - - static Color barAndLockedButtonColor(BuildContext context) { - return Theme.of(context).brightness == Brightness.dark - ? Colors.grey[800]! - : Colors.grey[200]!; - } - - ActivityTypeEnum? get associatedActivityType { - switch (this) { - case MessageMode.wordMeaning: - return ActivityTypeEnum.wordMeaning; - case MessageMode.listening: - return ActivityTypeEnum.wordFocusListening; - - case MessageMode.wordEmoji: - return ActivityTypeEnum.emoji; - - case MessageMode.wordMorph: - return ActivityTypeEnum.morphId; - - case MessageMode.noneSelected: - case MessageMode.messageMeaning: - case MessageMode.messageTranslation: - case MessageMode.wordZoom: - case MessageMode.messageSpeechToText: - case MessageMode.practiceActivity: - return null; - } - } - - /// returns a nullable string of the current level of the message - /// if string is null, then user has completed all levels - /// should be resolvable into a part of speech or morph feature using fromString - /// of the respective enum, PartOfSpeechEnum or MorphFeatureEnum - String? currentChoiceMode( - MessageOverlayController overlayController, - PangeaMessageEvent pangeaMessage, - ) { - switch (this) { - case MessageMode.wordMeaning: - case MessageMode.listening: - case MessageMode.wordEmoji: - // get the pos with some tokens left to practice, from most to least important for learning - return pangeaMessage.messageDisplayRepresentation! - .posSetToPractice(associatedActivityType!) - .firstWhereOrNull( - (pos) => pangeaMessage.messageDisplayRepresentation!.tokens!.any( - (t) => t.vocabConstructID.isActivityProbablyLevelAppropriate( - associatedActivityType!, - t.text.content, - ), - ), - ) - ?.name; - - case MessageMode.wordMorph: - // get the morph feature with some tokens left to practice, from most to least important for learning - return pangeaMessage - .messageDisplayRepresentation!.morphFeatureSetToPractice - .firstWhereOrNull( - (feature) => - pangeaMessage.messageDisplayRepresentation!.tokens!.any((t) { - final String? morphTag = t.getMorphTag(feature); - - if (morphTag == null) { - return false; - } - - return ConstructIdentifier( - lemma: morphTag, - type: ConstructTypeEnum.morph, - category: feature.name, - ).isActivityProbablyLevelAppropriate( - associatedActivityType!, - t.text.content, - ); - }), - ) - ?.name; - - case MessageMode.noneSelected: - case MessageMode.messageMeaning: - case MessageMode.messageTranslation: - case MessageMode.wordZoom: - case MessageMode.messageSpeechToText: - case MessageMode.practiceActivity: - return null; - } - - // final feature = MorphFeaturesEnumExtension.fromString(overlayController); - - // if (feature != null) { - // for (int i; i < pangeaMessage.messageDisplayRepresentation!.morphFeatureSetToPractice.length; i++) { - // if (pangeaMessage.messageDisplayRepresentation?.tagsByFeature(feature).isNotEmpty ?? false) { - // return i; - // } - // } - - // for (final feature in pangeaMessage.messageDisplayRepresentation?.tagsByFeature(feature)) ?? []) { - // if (pangeaMessage.messageDisplayRepresentation?.tagsByFeature(feature).isNotEmpty ?? false) { - // return feature.index; - // } - // } - // } - } - - // List messageModeChoiceLevel( - // MessageOverlayController overlayController, - // PangeaMessageEvent pangeaMessage, - // ) { - // switch (this) { - // case MessageMode.wordMorph: - // final morphFeatureSet = pangeaMessage - // .messageDisplayRepresentation?.morphFeatureSetToPractice; - - // if (morphFeatureSet == null) { - // debugger(when: kDebugMode); - // return []; - // } - - // // sort by the list of priority of parts of speech, defined by their order in the enum - // morphFeatureSet.toList().sort((a, b) => a.index.compareTo(b.index)); - - // debugPrint( - // "morphFeatureSet: ${morphFeatureSet.map((e) => e.name).toList()}", - // ); - // return morphFeatureSet - // .map( - // (feature) => MessageModeChoiceLevelWidget( - // overlayController: overlayController, - // pangeaMessageEvent: pangeaMessage, - // morphFeature: feature, - // ), - // ) - // .toList(); - // case MessageMode.noneSelected: - // case MessageMode.messageMeaning: - // case MessageMode.messageTranslation: - // case MessageMode.messageTextToSpeech: - // case MessageMode.messageSpeechToText: - // case MessageMode.practiceActivity: - // case MessageMode.wordZoom: - // case MessageMode.wordMeaning: - // case MessageMode.wordEmoji: - // if (associatedActivityType == null) { - // debugger(when: kDebugMode); - // return []; - // } - // final posSet = pangeaMessage.messageDisplayRepresentation - // ?.posSetToPractice(associatedActivityType!); - - // if (posSet == null) { - // debugger(when: kDebugMode); - // return []; - // } - - // // sort by the list of priority of parts of speech, defined by their order in the enum - // posSet.toList().sort((a, b) => a.index.compareTo(b.index)); - - // debugPrint("posSet: ${posSet.map((e) => e.name).toList()}"); - - // final widgets = posSet - // .map( - // (pos) => MessageModeChoiceLevelWidget( - // partOfSpeech: pos, - // overlayController: overlayController, - // pangeaMessageEvent: pangeaMessage, - // ), - // ) - // .toList(); - - // return widgets; - // } - // } -} diff --git a/lib/pangea/toolbar/event_wrappers/practice_activity_event.dart b/lib/pangea/toolbar/event_wrappers/practice_activity_event.dart deleted file mode 100644 index f962e1c1f..000000000 --- a/lib/pangea/toolbar/event_wrappers/practice_activity_event.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; -import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_record_event.dart'; -import '../../events/constants/pangea_event_types.dart'; - -class PracticeActivityEvent { - Event event; - Timeline? timeline; - PracticeActivityModel? _content; - - PracticeActivityEvent({ - required this.event, - required this.timeline, - content, - }) { - if (content != null) { - if (!kDebugMode) { - throw Exception( - "content should not be set on product, just a dev placeholder", - ); - } else { - _content = content; - } - } - if (event.type != PangeaEventTypes.pangeaActivity) { - throw Exception( - "${event.type} should not be used to make a PracticeActivityEvent", - ); - } - } - - PracticeActivityModel get practiceActivity { - _content ??= event.getPangeaContent(); - return _content!; - } - - /// All completion records assosiated with this activity - List get allRecords { - if (timeline == null) { - debugger(when: kDebugMode); - return []; - } - final List records = event - .aggregatedEvents(timeline!, PangeaEventTypes.activityRecord) - .toList(); - - return records - .map((event) => PracticeActivityRecordEvent(event: event)) - .toList(); - } - - /// Completion record assosiated with this activity - /// for the logged in user, null if there is none - // List get allUserRecords => allRecords - // .where( - // (recordEvent) => - // recordEvent.event.senderId == recordEvent.event.room.client.userID, - // ) - // .toList(); - - /// Get the most recent user record for this activity - // PracticeActivityRecordEvent? get latestUserRecord { - // final List userRecords = allUserRecords; - // if (userRecords.isEmpty) return null; - // return userRecords.reduce( - // (a, b) => a.event.originServerTs.isAfter(b.event.originServerTs) ? a : b, - // ); - // } - - // DateTime? get lastCompletedAt => latestUserRecord?.event.originServerTs; - - String get parentMessageId => event.relationshipEventId!; -} diff --git a/lib/pangea/toolbar/event_wrappers/practice_activity_record_event.dart b/lib/pangea/toolbar/event_wrappers/practice_activity_record_event.dart deleted file mode 100644 index b165f7932..000000000 --- a/lib/pangea/toolbar/event_wrappers/practice_activity_record_event.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_record.dart'; -import '../../events/constants/pangea_event_types.dart'; - -class PracticeActivityRecordEvent { - Event event; - - PracticeRecord? _content; - - PracticeActivityRecordEvent({required this.event}) { - if (event.type != PangeaEventTypes.activityRecord) { - throw Exception( - "${event.type} should not be used to make a PracticeActivityRecordEvent", - ); - } - } - - PracticeRecord get record { - _content ??= event.getPangeaContent(); - return _content!; - } -} diff --git a/lib/pangea/toolbar/widgets/measure_render_box.dart b/lib/pangea/toolbar/layout/measure_render_box.dart similarity index 100% rename from lib/pangea/toolbar/widgets/measure_render_box.dart rename to lib/pangea/toolbar/layout/measure_render_box.dart diff --git a/lib/pangea/toolbar/widgets/message_selection_positioner.dart b/lib/pangea/toolbar/layout/message_selection_positioner.dart similarity index 55% rename from lib/pangea/toolbar/widgets/message_selection_positioner.dart rename to lib/pangea/toolbar/layout/message_selection_positioner.dart index b22450b96..a905a1fa1 100644 --- a/lib/pangea/toolbar/widgets/message_selection_positioner.dart +++ b/lib/pangea/toolbar/layout/message_selection_positioner.dart @@ -3,24 +3,26 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:emoji_picker_flutter/emoji_picker_flutter.dart'; import 'package:matrix/matrix.dart'; +import 'package:provider/provider.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pages/chat/events/reaction_listener.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/reading_assistance_input_bar.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/over_message_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_mode_transition_animation.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_card_switcher.dart'; -import 'package:fluffychat/utils/adaptive_bottom_sheet.dart'; +import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/languages/locale_provider.dart'; +import 'package:fluffychat/pangea/toolbar/layout/over_message_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/layout/practice_mode_transition_animation.dart'; +import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/reading_assistance_input_bar.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/word_card_switcher.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -50,13 +52,10 @@ class MessageSelectionPositioner extends StatefulWidget { class MessageSelectionPositionerState extends State with TickerProviderStateMixin { - StreamSubscription? _reactionSubscription; - StreamSubscription? _contentChangedSubscription; - ScrollController? scrollController; - bool finishedTransition = false; - bool _startedTransition = false; + ValueNotifier finishedTransition = ValueNotifier(false); + final ValueNotifier _startedTransition = ValueNotifier(false); ReadingAssistanceMode readingAssistanceMode = ReadingAssistanceMode.selectMode; @@ -64,6 +63,9 @@ class MessageSelectionPositionerState extends State PangeaMessageEvent get pangeaMessageEvent => widget.overlayController.pangeaMessageEvent; + ReactionListener? _reactionListener; + final ValueNotifier reactionNotifier = ValueNotifier(null); + @override void initState() { super.initState(); @@ -79,39 +81,25 @@ class MessageSelectionPositionerState extends State }, ); - _reactionSubscription = - widget.chatController.room.client.onSync.stream.where( - (update) { - // check if this sync update has a reaction event or a - // redaction (of a reaction event). If so, rebuild the overlay - final room = widget.chatController.room; - final timelineEvents = update.rooms?.join?[room.id]?.timeline?.events; - if (timelineEvents == null) return false; - - final eventID = widget.event.eventId; - return timelineEvents.any( - (e) => - e.type == EventTypes.Redaction || - (e.type == EventTypes.Reaction && - Event.fromMatrixEvent(e, room).relationshipEventId == - eventID), - ); + reactionNotifier.value = _reactionsWidth; + _reactionListener = ReactionListener( + event: widget.event, + onUpdate: (update) { + if (mounted) { + final newWidth = _reactionsWidth; + if (newWidth != reactionNotifier.value) { + reactionNotifier.value = newWidth; + } + } }, - ).listen((_) => setState(() {})); - - _contentChangedSubscription = widget - .overlayController.contentChangedStream.stream - .listen(_onContentSizeChanged); + ); } @override void dispose() { - _reactionSubscription?.cancel(); - _contentChangedSubscription?.cancel(); + reactionNotifier.dispose(); + _reactionListener?.dispose(); scrollController?.dispose(); - MatrixState.pangeaController.matrixState.audioPlayer - ?..stop() - ..dispose(); super.dispose(); } @@ -158,6 +146,13 @@ class MessageSelectionPositionerState extends State return hasReactions ? 28.0 : 0.0; } + double? get _reactionsWidth { + if (_reactionsRenderBox != null) { + return _reactionsRenderBox!.size.width; + } + return null; + } + bool get ownMessage => widget.event.senderId == widget.event.room.client.userID; @@ -261,19 +256,53 @@ class MessageSelectionPositionerState extends State ); } + bool get isRtl { + final locale = Provider.of(context, listen: false) + .locale + ?.languageCode; + return locale != null && + LanguageConstants.rtlLanguageCodes.contains(locale); + } + double? get messageLeftOffset { + if (ownMessage) return null; + + if (isRtl) { + return _originalMessageOffset.dx - + (showDetails ? FluffyThemes.columnWidth : 0); + } + if (ownMessage) return null; return max(_originalMessageOffset.dx - columnWidth, 0); } double? get messageRightOffset { if (mediaQuery == null || !ownMessage) return null; + + if (isRtl) { + return mediaQuery!.size.width - + columnWidth - + _originalMessageOffset.dx - + originalMessageSize.width; + } + return mediaQuery!.size.width - _originalMessageOffset.dx - originalMessageSize.width - (showDetails ? FluffyThemes.columnWidth : 0); } + Alignment get messageAlignment { + return ownMessage ? Alignment.bottomRight : Alignment.bottomLeft; + } + + CrossAxisAlignment get messageColumnAlignment { + if (isRtl) { + return ownMessage ? CrossAxisAlignment.start : CrossAxisAlignment.end; + } + return ownMessage ? CrossAxisAlignment.end : CrossAxisAlignment.start; + } + double get _contentHeight { final messageHeight = _overlayMessageSize?.height ?? originalMessageSize.height; @@ -321,7 +350,8 @@ class MessageSelectionPositionerState extends State AppConfig.toolbarMenuHeight + 4.0; - return bottomOffset > _screenHeight!; + return bottomOffset > + (_screenHeight! + MediaQuery.paddingOf(context).bottom); } double get spaceBelowContent { @@ -348,29 +378,20 @@ class MessageSelectionPositionerState extends State return boxHeight; } - void _onContentSizeChanged(_) { - Future.delayed(FluffyThemes.animationDuration, () { - if (mounted) setState(() {}); - }); - } - void onStartedTransition() { - if (mounted) { - setState(() { - _startedTransition = true; - }); - } + if (mounted) _startedTransition.value = true; } void onFinishedTransition() { - if (mounted) { - setState(() { - finishedTransition = true; - }); - } + if (mounted) finishedTransition.value = true; } - void setReadingAssistanceMode(ReadingAssistanceMode mode) { + void launchPractice(ReadingAssistanceMode mode) { + if (MatrixState.pangeaController.subscriptionController.isSubscribed == + false) { + return; + } + if (mounted) { setState(() => readingAssistanceMode = mode); } @@ -397,21 +418,30 @@ class MessageSelectionPositionerState extends State alignment: ownMessage ? Alignment.centerRight : Alignment.centerLeft, children: [ - if (!_startedTransition) ...[ - OverMessageOverlay(controller: this), - if (shouldScroll) - Positioned( - top: 0, - left: _wordCardLeftOffset, - right: messageRightOffset, - child: WordCardSwitcher(controller: this), - ), - ], + ValueListenableBuilder( + valueListenable: _startedTransition, + builder: (context, started, __) { + return !started + ? OverMessageOverlay(controller: this) + : const SizedBox(); + }, + ), + ValueListenableBuilder( + valueListenable: _startedTransition, + builder: (context, started, __) { + return !started && shouldScroll + ? Positioned( + top: 0, + left: _wordCardLeftOffset, + right: messageRightOffset, + child: WordCardSwitcher(controller: this), + ) + : const SizedBox(); + }, + ), if (readingAssistanceMode == ReadingAssistanceMode.practiceMode) ...[ CenteredMessage( - targetId: - "overlay_center_message_${widget.event.eventId}", controller: this, ), PracticeModeTransitionAnimation( @@ -424,7 +454,50 @@ class MessageSelectionPositionerState extends State right: 0, bottom: 20, child: ReadingAssistanceInputBar( - widget.overlayController, + widget.overlayController.practiceController, + maxWidth: widget.overlayController.maxWidth, + selectedToken: widget.overlayController.selectedToken, + ), + ), + Positioned( + top: FluffyThemes.isColumnMode(context) + ? switch (MediaQuery.heightOf(context)) { + < 700 => 0, + > 900 => 160, + _ => 80, + } + : 0, + left: 0, + right: 0, + child: ListenableBuilder( + listenable: + widget.overlayController.practiceController, + builder: (context, _) { + final practice = + widget.overlayController.practiceController; + + final instruction = + practice.practiceMode.instruction; + + final type = + practice.practiceMode.associatedActivityType; + final complete = type != null && + practice.isPracticeActivityDone(type); + + if (instruction != null && !complete) { + return InstructionsInlineTooltip( + instructionsEnum: widget + .overlayController + .practiceController + .practiceMode + .instruction!, + padding: const EdgeInsets.all(16.0), + animate: false, + ); + } + + return const SizedBox(); + }, ), ), ], @@ -452,31 +525,29 @@ class MessageReactionPicker extends StatelessWidget { @override Widget build(BuildContext context) { - if (chatController.selectedEvents.length != 1) { - return const SizedBox.shrink(); - } - final theme = Theme.of(context); final sentReactions = {}; - final event = chatController.selectedEvents.first; - sentReactions.addAll( - event - .aggregatedEvents( - chatController.timeline!, - RelationshipTypes.reaction, - ) - .where( - (event) => - event.senderId == event.room.client.userID && - event.type == 'm.reaction', - ) - .map( - (event) => event.content - .tryGetMap('m.relates_to') - ?.tryGet('key'), - ) - .whereType(), - ); + final event = chatController.selectedEvents.firstOrNull; + if (event != null) { + sentReactions.addAll( + event + .aggregatedEvents( + chatController.timeline!, + RelationshipTypes.reaction, + ) + .where( + (event) => + event.senderId == event.room.client.userID && + event.type == 'm.reaction', + ) + .map( + (event) => event.content + .tryGetMap('m.relates_to') + ?.tryGet('key'), + ) + .whereType(), + ); + } return Material( elevation: 4, @@ -512,83 +583,83 @@ class MessageReactionPicker extends StatelessWidget { ), onPressed: sentReactions.contains(emoji) ? null - : () => event.room.sendReaction( + : () => event?.room.sendReaction( event.eventId, emoji, ), ), ), - IconButton( - icon: const Icon( - Icons.add_reaction_outlined, - ), - tooltip: L10n.of(context).customReaction, - onPressed: () async { - final emoji = await showAdaptiveBottomSheet( - context: context, - builder: (context) => Scaffold( - appBar: AppBar( - title: Text( - L10n.of(context).customReaction, - ), - leading: CloseButton( - onPressed: () => Navigator.of( - context, - ).pop( - null, - ), - ), - ), - body: SizedBox( - height: double.infinity, - child: EmojiPicker( - onEmojiSelected: ( - _, - emoji, - ) => - Navigator.of( - context, - ).pop( - emoji.emoji, - ), - config: Config( - emojiViewConfig: const EmojiViewConfig( - backgroundColor: Colors.transparent, - ), - bottomActionBarConfig: const BottomActionBarConfig( - enabled: false, - ), - categoryViewConfig: CategoryViewConfig( - initCategory: Category.SMILEYS, - backspaceColor: theme.colorScheme.primary, - iconColor: theme.colorScheme.primary.withAlpha( - 128, - ), - iconColorSelected: theme.colorScheme.primary, - indicatorColor: theme.colorScheme.primary, - backgroundColor: theme.colorScheme.surface, - ), - skinToneConfig: SkinToneConfig( - dialogBackgroundColor: Color.lerp( - theme.colorScheme.surface, - theme.colorScheme.primaryContainer, - 0.75, - )!, - indicatorColor: theme.colorScheme.onSurface, - ), - ), - ), - ), - ), - ); - if (emoji == null) return; - if (sentReactions.contains(emoji)) return; - await event.room.sendReaction( - event.eventId, - emoji, - ); - }, - ), + // IconButton( + // icon: const Icon( + // Icons.add_reaction_outlined, + // ), + // tooltip: L10n.of(context).customReaction, + // onPressed: () async { + // final emoji = await showAdaptiveBottomSheet( + // context: context, + // builder: (context) => Scaffold( + // appBar: AppBar( + // title: Text( + // L10n.of(context).customReaction, + // ), + // leading: CloseButton( + // onPressed: () => Navigator.of( + // context, + // ).pop( + // null, + // ), + // ), + // ), + // body: SizedBox( + // height: double.infinity, + // child: EmojiPicker( + // onEmojiSelected: ( + // _, + // emoji, + // ) => + // Navigator.of( + // context, + // ).pop( + // emoji.emoji, + // ), + // config: Config( + // emojiViewConfig: const EmojiViewConfig( + // backgroundColor: Colors.transparent, + // ), + // bottomActionBarConfig: const BottomActionBarConfig( + // enabled: false, + // ), + // categoryViewConfig: CategoryViewConfig( + // initCategory: Category.SMILEYS, + // backspaceColor: theme.colorScheme.primary, + // iconColor: theme.colorScheme.primary.withAlpha( + // 128, + // ), + // iconColorSelected: theme.colorScheme.primary, + // indicatorColor: theme.colorScheme.primary, + // backgroundColor: theme.colorScheme.surface, + // ), + // skinToneConfig: SkinToneConfig( + // dialogBackgroundColor: Color.lerp( + // theme.colorScheme.surface, + // theme.colorScheme.primaryContainer, + // 0.75, + // )!, + // indicatorColor: theme.colorScheme.onSurface, + // ), + // ), + // ), + // ), + // ), + // ); + // if (emoji == null) return; + // if (sentReactions.contains(emoji)) return; + // await event?.room.sendReaction( + // event.eventId, + // emoji, + // ); + // }, + // ), ], ), ), diff --git a/lib/pangea/toolbar/widgets/over_message_overlay.dart b/lib/pangea/toolbar/layout/over_message_overlay.dart similarity index 59% rename from lib/pangea/toolbar/widgets/over_message_overlay.dart rename to lib/pangea/toolbar/layout/over_message_overlay.dart index cd4705ce9..fd378b002 100644 --- a/lib/pangea/toolbar/widgets/over_message_overlay.dart +++ b/lib/pangea/toolbar/layout/over_message_overlay.dart @@ -3,11 +3,11 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_positioner.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/overlay_center_content.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/select_mode_buttons.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_card_switcher.dart'; +import 'package:fluffychat/pangea/toolbar/layout/message_selection_positioner.dart'; +import 'package:fluffychat/pangea/toolbar/layout/overlay_center_content.dart'; +import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/word_card_switcher.dart'; import 'package:fluffychat/widgets/matrix.dart'; class OverMessageOverlay extends StatelessWidget { @@ -17,8 +17,7 @@ class OverMessageOverlay extends StatelessWidget { @override Widget build(BuildContext context) { return Align( - alignment: - controller.ownMessage ? Alignment.bottomRight : Alignment.bottomLeft, + alignment: controller.messageAlignment, child: Padding( padding: EdgeInsets.only( left: controller.messageLeftOffset ?? 0.0, @@ -29,9 +28,7 @@ class OverMessageOverlay extends StatelessWidget { child: SingleChildScrollView( controller: controller.scrollController, child: Column( - crossAxisAlignment: controller.ownMessage - ? CrossAxisAlignment.end - : CrossAxisAlignment.start, + crossAxisAlignment: controller.messageColumnAlignment, mainAxisSize: MainAxisSize.min, children: [ if (!controller.shouldScroll) ...[ @@ -48,36 +45,38 @@ class OverMessageOverlay extends StatelessWidget { 'overlay_message_${controller.widget.event.eventId}', ) .link, - child: OverlayCenterContent( - event: controller.widget.event, - messageHeight: - controller.widget.overlayController.selectedMode != - SelectMode.emoji + child: ValueListenableBuilder( + valueListenable: + controller.widget.overlayController.selectedMode, + builder: (context, mode, __) { + return OverlayCenterContent( + event: controller.widget.event, + messageHeight: mode != SelectMode.emoji ? controller.originalMessageSize.height : null, - messageWidth: - controller.widget.overlayController.showingExtraContent + messageWidth: controller.widget.overlayController + .selectModeController.isShowingExtraContent ? max(controller.originalMessageSize.width, 150) : controller.originalMessageSize.width, - overlayController: controller.widget.overlayController, - chatController: controller.widget.chatController, - nextEvent: controller.widget.nextEvent, - prevEvent: controller.widget.prevEvent, - hasReactions: controller.hasReactions, - isTransitionAnimation: true, - readingAssistanceMode: controller.readingAssistanceMode, - overlayKey: MatrixState.pAnyState - .layerLinkAndKey( - 'overlay_message_${controller.widget.event.eventId}', - ) - .key, + overlayController: controller.widget.overlayController, + chatController: controller.widget.chatController, + nextEvent: controller.widget.nextEvent, + prevEvent: controller.widget.prevEvent, + hasReactions: controller.hasReactions, + isTransitionAnimation: true, + readingAssistanceMode: controller.readingAssistanceMode, + overlayKey: + 'overlay_message_${controller.widget.event.eventId}', + reactionsWidth: controller.reactionNotifier, + ); + }, ), ), const SizedBox(height: 4.0), SelectModeButtons( controller: controller.widget.chatController, overlayController: controller.widget.overlayController, - lauchPractice: () => controller.setReadingAssistanceMode( + launchPractice: () => controller.launchPractice( ReadingAssistanceMode.practiceMode, ), ), diff --git a/lib/pangea/toolbar/widgets/overlay_center_content.dart b/lib/pangea/toolbar/layout/overlay_center_content.dart similarity index 72% rename from lib/pangea/toolbar/widgets/overlay_center_content.dart rename to lib/pangea/toolbar/layout/overlay_center_content.dart index 954c4702f..d2af9e89a 100644 --- a/lib/pangea/toolbar/widgets/overlay_center_content.dart +++ b/lib/pangea/toolbar/layout/overlay_center_content.dart @@ -5,10 +5,10 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/pangea_message_reactions.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/measure_render_box.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/overlay_message.dart'; +import 'package:fluffychat/pangea/toolbar/layout/measure_render_box.dart'; +import 'package:fluffychat/pangea/toolbar/layout/overlay_message.dart'; +import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; class OverlayCenterContent extends StatelessWidget { final Event event; @@ -25,14 +25,16 @@ class OverlayCenterContent extends StatelessWidget { final double? messageWidth; final bool hasReactions; + final ValueNotifier reactionsWidth; final bool isTransitionAnimation; final ReadingAssistanceMode? readingAssistanceMode; - final LabeledGlobalKey? overlayKey; + final String overlayKey; const OverlayCenterContent({ required this.event, + required this.overlayKey, this.messageHeight, this.messageWidth, required this.overlayController, @@ -40,11 +42,11 @@ class OverlayCenterContent extends StatelessWidget { required this.nextEvent, required this.prevEvent, required this.hasReactions, + required this.reactionsWidth, this.onChangeMessageSize, this.sizeAnimation, this.isTransitionAnimation = false, this.readingAssistanceMode, - this.overlayKey, super.key, }); @@ -69,7 +71,7 @@ class OverlayCenterContent extends StatelessWidget { MeasureRenderBox( onChange: onChangeMessageSize, child: OverlayMessage( - key: overlayKey, + overlayKey: overlayKey, event, controller: chatController, overlayController: overlayController, @@ -83,18 +85,25 @@ class OverlayCenterContent extends StatelessWidget { messageHeight: messageHeight, isTransitionAnimation: isTransitionAnimation, readingAssistanceMode: readingAssistanceMode, + canRefresh: + (event.eventId == chatController.refreshEventID) && + (readingAssistanceMode != + ReadingAssistanceMode.practiceMode), ), ), Padding( padding: EdgeInsets.only( top: 4.0, - left: 4.0, - right: ownMessage ? 0 : 12.0, + left: ownMessage ? 0.0 : 4.0, ), - child: PangeaMessageReactions( - event, - chatController.timeline!, - chatController, + child: ValueListenableBuilder( + valueListenable: reactionsWidth, + builder: (context, width, __) => PangeaMessageReactions( + event, + chatController.timeline!, + chatController, + width: width != null && width > 0 ? width : null, + ), ), ), ], diff --git a/lib/pangea/toolbar/widgets/overlay_message.dart b/lib/pangea/toolbar/layout/overlay_message.dart similarity index 52% rename from lib/pangea/toolbar/widgets/overlay_message.dart rename to lib/pangea/toolbar/layout/overlay_message.dart index 976d38933..ad575ca0e 100644 --- a/lib/pangea/toolbar/widgets/overlay_message.dart +++ b/lib/pangea/toolbar/layout/overlay_message.dart @@ -10,20 +10,24 @@ import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/events/message_content.dart'; import 'package:fluffychat/pages/chat/events/reply_content.dart'; -import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/chat/widgets/request_regeneration_button.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_widget.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/stt_transcript_tokens.dart'; +import 'package:fluffychat/pangea/toolbar/layout/reading_assistance_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_controller.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/stt_transcript_tokens.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/utils/file_description.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/matrix.dart'; -// @ggurdin be great to explain the need/function of a widget like this class OverlayMessage extends StatelessWidget { final Event event; final MessageOverlayController overlayController; @@ -38,6 +42,8 @@ class OverlayMessage extends StatelessWidget { final bool isTransitionAnimation; final ReadingAssistanceMode? readingAssistanceMode; + final String overlayKey; + final bool canRefresh; const OverlayMessage( this.event, { @@ -46,11 +52,13 @@ class OverlayMessage extends StatelessWidget { required this.timeline, required this.messageWidth, required this.messageHeight, + required this.overlayKey, this.nextEvent, this.previousEvent, this.sizeAnimation, this.isTransitionAnimation = false, this.readingAssistanceMode, + this.canRefresh = false, super.key, }); @@ -105,8 +113,7 @@ class OverlayMessage extends StatelessWidget { ownMessage && previousEventSameSender ? hardCorner : roundedCorner, ); - // ignore: deprecated_member_use - var color = theme.colorScheme.surfaceContainerHigh; + var color = theme.colorScheme.surfaceContainerHighest; if (ownMessage) { color = displayEvent.status.isError ? Colors.redAccent @@ -138,144 +145,7 @@ class OverlayMessage extends StatelessWidget { final isSubscribed = MatrixState.pangeaController.subscriptionController.isSubscribed; - final showTranslation = overlayController.showTranslation && - overlayController.translation != null && - isSubscribed != false; - - final showTranscription = - overlayController.pangeaMessageEvent.isAudioMessage == true && - isSubscribed != false; - - final showSpeechTranslation = overlayController.showSpeechTranslation && - overlayController.speechTranslation != null && - isSubscribed != false; - - final transcription = showTranscription - ? Container( - constraints: BoxConstraints( - maxWidth: min( - FluffyThemes.columnWidth * 1.5, - MediaQuery.of(context).size.width - - (ownMessage ? 0 : Avatar.defaultSize) - - 32.0 - - (FluffyThemes.isColumnMode(context) - ? FluffyThemes.columnWidth + FluffyThemes.navRailWidth - : 0.0), - ), - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: overlayController.transcriptionError != null - ? Row( - mainAxisSize: MainAxisSize.min, - children: [ - Icon( - Icons.error_outline, - color: Theme.of(context).colorScheme.error, - ), - const SizedBox(width: 8), - Text( - L10n.of(context).transcriptionFailed, - textScaler: TextScaler.noScaling, - style: AppConfig.messageTextStyle( - event, - textColor, - ).copyWith(fontStyle: FontStyle.italic), - ), - ], - ) - : overlayController.transcription != null - ? SingleChildScrollView( - child: Column( - spacing: 8.0, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - SttTranscriptTokens( - model: overlayController.transcription!, - style: AppConfig.messageTextStyle( - event, - textColor, - ).copyWith( - fontStyle: FontStyle.italic, - ), - onClick: overlayController - .onClickOverlayMessageToken, - isSelected: overlayController.isTokenSelected, - ), - if (MatrixState.pangeaController - .languageController.showTranscription) - PhoneticTranscriptionWidget( - text: overlayController - .transcription!.transcript.text, - textLanguage: PLanguageStore.byLangCode( - overlayController - .transcription!.langCode, - ) ?? - LanguageModel.unknown, - style: AppConfig.messageTextStyle( - event, - textColor, - ), - iconColor: textColor, - enabled: - event.senderId != BotName.byEnvironment, - onTranscriptionFetched: () => - overlayController.contentChangedStream - .add(true), - ), - ], - ), - ) - : Row( - mainAxisSize: MainAxisSize.min, - children: [ - CircularProgressIndicator.adaptive( - backgroundColor: textColor, - ), - ], - ), - ), - ) - : const SizedBox(); - - final translation = showTranslation || showSpeechTranslation - ? Container( - constraints: BoxConstraints( - maxWidth: min( - FluffyThemes.columnWidth * 1.5, - MediaQuery.of(context).size.width - - (ownMessage ? 0 : Avatar.defaultSize) - - 32.0 - - (FluffyThemes.isColumnMode(context) - ? FluffyThemes.columnWidth + FluffyThemes.navRailWidth - : 0.0), - ), - ), - child: Padding( - padding: const EdgeInsets.fromLTRB( - 12.0, - 20.0, - 12.0, - 12.0, - ), - child: SingleChildScrollView( - child: Text( - showTranslation - ? overlayController.translation! - : overlayController.speechTranslation!, - textScaler: TextScaler.noScaling, - style: AppConfig.messageTextStyle( - event, - textColor, - ).copyWith( - fontStyle: FontStyle.italic, - ), - ), - ), - ), - ) - : const SizedBox(); + final selectModeController = overlayController.selectModeController; final content = Container( decoration: BoxDecoration( @@ -388,12 +258,33 @@ class OverlayMessage extends StatelessWidget { ), ], ), + ) + else if (canRefresh) + RequestRegenerationButton( + textColor: textColor, + onPressed: () => controller.requestRegeneration(event.eventId), ), ], ), ); + final maxWidth = min( + FluffyThemes.columnWidth * 1.5, + MediaQuery.of(context).size.width - + (ownMessage ? 0 : Avatar.defaultSize) - + 32.0 - + (FluffyThemes.isColumnMode(context) + ? FluffyThemes.columnWidth + FluffyThemes.navRailWidth + : 0.0), + ); + + final style = AppConfig.messageTextStyle( + event, + textColor, + ); + return Material( + key: MatrixState.pAnyState.layerLinkAndKey(overlayKey).key, type: MaterialType.transparency, child: Container( clipBehavior: Clip.antiAlias, @@ -409,7 +300,17 @@ class OverlayMessage extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - transcription, + _MessageBubbleTranscription( + controller: selectModeController, + enabled: event.messageType == MessageTypes.Audio && + !event.redacted && + isSubscribed != false, + maxWidth: maxWidth, + style: style, + eventId: event.eventId, + onTokenSelected: overlayController.onClickOverlayMessageToken, + isTokenSelected: overlayController.isTokenSelected, + ), sizeAnimation != null ? AnimatedBuilder( animation: sizeAnimation!, @@ -422,7 +323,11 @@ class OverlayMessage extends StatelessWidget { }, ) : content, - translation, + _MessageSelectModeContent( + controller: selectModeController, + style: style, + maxWidth: maxWidth, + ), ], ), ), @@ -430,3 +335,199 @@ class OverlayMessage extends StatelessWidget { ); } } + +class _MessageSelectModeContent extends StatelessWidget { + final SelectModeController controller; + final TextStyle style; + final double maxWidth; + + const _MessageSelectModeContent({ + required this.controller, + required this.style, + required this.maxWidth, + }); + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: Listenable.merge( + [ + controller.selectedMode, + controller.currentModeStateNotifier, + ], + ), + builder: (context, _) { + final mode = controller.selectedMode.value; + if (mode == null) { + return const SizedBox(); + } + + final sub = MatrixState.pangeaController.subscriptionController; + if (sub.isSubscribed == false) { + return Padding( + padding: const EdgeInsets.all(12.0), + child: ErrorIndicator( + message: L10n.of(context).subscribeReadingAssistance, + onTap: () => sub.showPaywall(context), + style: style, + ), + ); + } + + if (![ + SelectMode.translate, + SelectMode.speechTranslation, + ].contains(mode)) { + return const SizedBox(); + } + + final AsyncState state = mode == SelectMode.translate + ? controller.translationState.value + : controller.speechTranslationState.value; + + return Padding( + padding: const EdgeInsets.all(12.0), + child: switch (state) { + AsyncLoading() => Row( + mainAxisSize: MainAxisSize.min, + children: [ + CircularProgressIndicator.adaptive( + backgroundColor: style.color, + ), + ], + ), + AsyncError(error: final _) => Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.error_outline, + color: Theme.of(context).colorScheme.error, + ), + const SizedBox(width: 8), + Text( + L10n.of(context).translationError, + textScaler: TextScaler.noScaling, + style: style.copyWith(fontStyle: FontStyle.italic), + ), + ], + ), + AsyncLoaded(value: final value) => Container( + constraints: BoxConstraints( + maxWidth: maxWidth, + ), + child: SingleChildScrollView( + child: Text( + value, + textScaler: TextScaler.noScaling, + style: style.copyWith( + fontStyle: FontStyle.italic, + ), + ), + ), + ), + _ => const SizedBox(), + }, + ); + }, + ); + } +} + +class _MessageBubbleTranscription extends StatelessWidget { + final SelectModeController controller; + final bool enabled; + final double maxWidth; + final TextStyle style; + final String eventId; + + final Function(PangeaToken) onTokenSelected; + final bool Function(PangeaToken) isTokenSelected; + + const _MessageBubbleTranscription({ + required this.controller, + required this.enabled, + required this.maxWidth, + required this.style, + required this.eventId, + required this.onTokenSelected, + required this.isTokenSelected, + }); + + @override + Widget build(BuildContext context) { + if (!enabled) { + return const SizedBox(); + } + + return Container( + constraints: BoxConstraints(maxWidth: maxWidth), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: ValueListenableBuilder( + valueListenable: controller.transcriptionState, + builder: (context, transcriptionState, _) { + switch (transcriptionState) { + case AsyncLoading(): + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + CircularProgressIndicator.adaptive( + backgroundColor: style.color, + ), + ], + ); + case AsyncError(error: final _): + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.error_outline, + color: Theme.of(context).colorScheme.error, + ), + const SizedBox(width: 8), + Text( + L10n.of(context).transcriptionFailed, + textScaler: TextScaler.noScaling, + style: style.copyWith(fontStyle: FontStyle.italic), + ), + ], + ); + case AsyncLoaded(value: final transcription): + return SingleChildScrollView( + child: Column( + spacing: 8.0, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + SttTranscriptTokens( + eventId: eventId, + model: transcription, + style: style.copyWith(fontStyle: FontStyle.italic), + onClick: onTokenSelected, + isSelected: isTokenSelected, + ), + if (MatrixState + .pangeaController.userController.showTranscription) + PhoneticTranscriptionWidget( + text: transcription.transcript.text, + textLanguage: PLanguageStore.byLangCode( + transcription.langCode, + ) ?? + LanguageModel.unknown, + style: style, + iconColor: style.color, + onTranscriptionFetched: () => + controller.contentChangedStream.add(true), + ), + ], + ), + ); + default: + return const SizedBox(); + } + }, + ), + ), + ); + } +} diff --git a/lib/pangea/toolbar/layout/practice_mode_transition_animation.dart b/lib/pangea/toolbar/layout/practice_mode_transition_animation.dart new file mode 100644 index 000000000..7c8a06f5d --- /dev/null +++ b/lib/pangea/toolbar/layout/practice_mode_transition_animation.dart @@ -0,0 +1,212 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/toolbar/layout/message_selection_positioner.dart'; +import 'package:fluffychat/pangea/toolbar/layout/overlay_center_content.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class PracticeModeTransitionAnimation extends StatefulWidget { + final String targetId; + final MessageSelectionPositionerState controller; + const PracticeModeTransitionAnimation({ + super.key, + required this.targetId, + required this.controller, + }); + + @override + State createState() => + PracticeModeTransitionAnimationState(); +} + +class PracticeModeTransitionAnimationState + extends State + with SingleTickerProviderStateMixin { + AnimationController? _animationController; + Animation? _offsetAnimation; + Animation? _sizeAnimation; + + RenderBox? get _centerMessageRenderBox { + try { + return MatrixState.pAnyState.getRenderBox(widget.targetId); + } catch (e) { + return null; + } + } + + Offset? get _centerMessageOffset { + final renderBox = _centerMessageRenderBox; + if (renderBox == null) { + return null; + } + return renderBox.localToGlobal(Offset.zero); + } + + Size? get _centerMessageSize { + final renderBox = _centerMessageRenderBox; + if (renderBox == null) { + return null; + } + return renderBox.size; + } + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback((_) { + final isRtl = widget.controller.isRtl; + final columnWidth = isRtl ? 0 : widget.controller.columnWidth; + + final startOffset = Offset( + widget.controller.ownMessage + ? widget.controller.messageRightOffset! + : widget.controller.messageLeftOffset!, + widget.controller.overlayMessageOffset!.dy, + ); + + final endOffset = Offset( + _centerMessageOffset!.dx - columnWidth, + _centerMessageOffset!.dy, + ); + + _animationController = AnimationController( + vsync: this, + duration: widget.controller.transitionAnimationDuration, + ); + + _offsetAnimation = Tween( + begin: startOffset, + end: endOffset, + ).animate( + CurvedAnimation( + parent: _animationController!, + curve: FluffyThemes.animationCurve, + ), + ); + + final startSize = Size( + widget.controller.originalMessageSize.width, + widget.controller.originalMessageSize.height, + ); + + _sizeAnimation = Tween( + begin: startSize, + end: _centerMessageSize!, + ).animate( + CurvedAnimation( + parent: _animationController!, + curve: FluffyThemes.animationCurve, + ), + ); + + widget.controller.onStartedTransition(); + setState(() {}); + + _animationController!.forward().then((_) { + widget.controller.onFinishedTransition(); + }); + }); + } + + @override + void dispose() { + _animationController?.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: widget.controller.finishedTransition, + child: _offsetAnimation == null + ? const SizedBox() + : AnimatedBuilder( + animation: _offsetAnimation!, + builder: (context, child) { + return Positioned( + top: _offsetAnimation!.value.dy, + left: widget.controller.ownMessage + ? null + : _offsetAnimation!.value.dx, + right: widget.controller.ownMessage + ? _offsetAnimation!.value.dx + : null, + child: OverlayCenterContent( + event: widget.controller.widget.event, + overlayController: + widget.controller.widget.overlayController, + chatController: widget.controller.widget.chatController, + nextEvent: widget.controller.widget.nextEvent, + prevEvent: widget.controller.widget.prevEvent, + hasReactions: widget.controller.hasReactions, + sizeAnimation: _sizeAnimation, + readingAssistanceMode: + widget.controller.readingAssistanceMode, + overlayKey: + "overlay_transition_message_${widget.controller.widget.event.eventId}", + reactionsWidth: widget.controller.reactionNotifier, + ), + ); + }, + ), + builder: (context, finished, child) { + if (finished || _offsetAnimation == null) { + return const SizedBox(); + } + return child!; + }, + ); + } +} + +class CenteredMessage extends StatelessWidget { + final MessageSelectionPositionerState controller; + + const CenteredMessage({ + super.key, + required this.controller, + }); + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: controller.finishedTransition, + builder: (context, finished, __) { + return Opacity( + opacity: finished ? 1.0 : 0.0, + child: GestureDetector( + onTap: controller.widget.chatController.clearSelectedEvents, + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: controller.mediaQuery!.size.width - + controller.columnWidth, + height: 20.0, + ), + OverlayCenterContent( + event: controller.widget.event, + overlayController: controller.widget.overlayController, + chatController: controller.widget.chatController, + nextEvent: controller.widget.nextEvent, + prevEvent: controller.widget.prevEvent, + hasReactions: controller.hasReactions, + overlayKey: + "overlay_center_message_${controller.widget.event.eventId}", + readingAssistanceMode: controller.readingAssistanceMode, + reactionsWidth: controller.reactionNotifier, + ), + const SizedBox( + height: AppConfig.readingAssistanceInputBarHeight + 60.0, + ), + ], + ), + ), + ), + ); + }, + ); + } +} diff --git a/lib/pangea/toolbar/enums/reading_assistance_mode_enum.dart b/lib/pangea/toolbar/layout/reading_assistance_mode_enum.dart similarity index 100% rename from lib/pangea/toolbar/enums/reading_assistance_mode_enum.dart rename to lib/pangea/toolbar/layout/reading_assistance_mode_enum.dart diff --git a/lib/pangea/message_token_text/dotted_border_painter.dart b/lib/pangea/toolbar/message_practice/dotted_border_painter.dart similarity index 100% rename from lib/pangea/message_token_text/dotted_border_painter.dart rename to lib/pangea/toolbar/message_practice/dotted_border_painter.dart diff --git a/lib/pangea/toolbar/widgets/message_audio_card.dart b/lib/pangea/toolbar/message_practice/message_audio_card.dart similarity index 51% rename from lib/pangea/toolbar/widgets/message_audio_card.dart rename to lib/pangea/toolbar/message_practice/message_audio_card.dart index da904cbab..bf57035aa 100644 --- a/lib/pangea/toolbar/widgets/message_audio_card.dart +++ b/lib/pangea/toolbar/message_practice/message_audio_card.dart @@ -8,19 +8,18 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/events/audio_player.dart'; import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; class MessageAudioCard extends StatefulWidget { - final MessageOverlayController overlayController; + final PangeaMessageEvent messageEvent; final VoidCallback? onError; const MessageAudioCard({ super.key, - required this.overlayController, + required this.messageEvent, this.onError, }); @@ -38,27 +37,15 @@ class MessageAudioCardState extends State { fetchAudio(); } - PangeaMessageEvent get messageEvent => - widget.overlayController.pangeaMessageEvent; - Future fetchAudio() async { if (!mounted) return; setState(() => _isLoading = true); try { - final String langCode = messageEvent.messageDisplayLangCode; - final Event? localEvent = messageEvent.getTextToSpeechLocal( - langCode, - messageEvent.messageDisplayText, + audioFile = await widget.messageEvent.requestTextToSpeech( + widget.messageEvent.messageDisplayLangCode, + widget.messageEvent.room.botOptions?.targetVoice, ); - - if (localEvent != null) { - audioFile = await localEvent.getPangeaAudioFile(); - } else { - audioFile = await messageEvent.getMatrixAudioFile( - langCode, - ); - } debugPrint("audio file is now: $audioFile. setting starts and ends..."); if (mounted) setState(() => _isLoading = false); } catch (e, s) { @@ -70,7 +57,7 @@ class MessageAudioCardState extends State { m: 'something wrong getting audio in MessageAudioCardState', data: { 'widget.messageEvent.messageDisplayLangCode': - messageEvent.messageDisplayLangCode, + widget.messageEvent.messageDisplayLangCode, }, ); if (mounted) setState(() => _isLoading = false); @@ -79,24 +66,27 @@ class MessageAudioCardState extends State { @override Widget build(BuildContext context) { - return _isLoading - ? const TextLoadingShimmer(width: 200) - : audioFile != null - ? AudioPlayerWidget( - null, - eventId: "${messageEvent.eventId}_practice", - roomId: messageEvent.room.id, - senderId: messageEvent.senderId, - matrixFile: audioFile, - color: Theme.of(context).colorScheme.onPrimaryContainer, - fontSize: AppConfig.messageFontSize * AppConfig.fontSizeFactor, - chatController: widget.overlayController.widget.chatController, - overlayController: widget.overlayController, - linkColor: Theme.of(context).brightness == Brightness.light - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary, - ) - : const SizedBox(); + return Container( + height: 60.0, + alignment: Alignment.center, + child: _isLoading + ? const TextLoadingShimmer(width: 200) + : audioFile != null + ? AudioPlayerWidget( + null, + eventId: "${widget.messageEvent.eventId}_practice", + roomId: widget.messageEvent.room.id, + senderId: widget.messageEvent.senderId, + matrixFile: audioFile, + color: Theme.of(context).colorScheme.onPrimaryContainer, + fontSize: + AppConfig.messageFontSize * AppConfig.fontSizeFactor, + linkColor: Theme.of(context).brightness == Brightness.light + ? Theme.of(context).colorScheme.primary + : Theme.of(context).colorScheme.onPrimary, + ) + : const SizedBox(), + ); } } diff --git a/lib/pangea/toolbar/reading_assistance_input_row/message_morph_choice.dart b/lib/pangea/toolbar/message_practice/message_morph_choice.dart similarity index 82% rename from lib/pangea/toolbar/reading_assistance_input_row/message_morph_choice.dart rename to lib/pangea/toolbar/message_practice/message_morph_choice.dart index 9f2a51e9c..99d025a4e 100644 --- a/lib/pangea/toolbar/reading_assistance_input_row/message_morph_choice.dart +++ b/lib/pangea/toolbar/message_practice/message_morph_choice.dart @@ -5,7 +5,7 @@ import 'package:collection/collection.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_details_popup/morph_meaning_widget.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/choice_animation.dart'; +import 'package:fluffychat/pangea/common/widgets/choice_animation.dart'; import 'package:fluffychat/pangea/constructs/construct_form.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; @@ -13,8 +13,8 @@ import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; import 'package:fluffychat/pangea/morphs/morph_icon.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/message_morph_choice_item.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_morph_choice_item.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; // this widget will handle the content of the input bar when mode == MessageMode.wordMorph @@ -29,13 +29,17 @@ import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart const int numberOfMorphDistractors = 3; class MessageMorphInputBarContent extends StatefulWidget { - final MessageOverlayController overlayController; + final PracticeController controller; final PracticeActivityModel activity; + final PangeaToken? selectedToken; + final double maxWidth; const MessageMorphInputBarContent({ super.key, - required this.overlayController, + required this.controller, required this.activity, + required this.selectedToken, + required this.maxWidth, }); @override @@ -47,25 +51,19 @@ class MessageMorphInputBarContentState extends State { String? selectedTag; - MessageOverlayController get overlay => widget.overlayController; PangeaToken get token => widget.activity.targetTokens.first; MorphFeaturesEnum get morph => widget.activity.morphFeature!; - @override - void initState() { - super.initState(); - } - @override void didUpdateWidget(covariant MessageMorphInputBarContent oldWidget) { - if (morph != oldWidget.overlayController.selectedMorph?.morph || - token != oldWidget.overlayController.selectedToken) { + final selected = widget.controller.selectedMorph?.morph; + if (morph != selected || token != oldWidget.selectedToken) { setState(() {}); } super.didUpdateWidget(oldWidget); } - TextStyle? textStyle(BuildContext context) => overlay.maxWidth > 600 + TextStyle? textStyle(BuildContext context) => widget.maxWidth > 600 ? Theme.of(context).textTheme.bodyLarge?.copyWith( fontWeight: FontWeight.bold, ) @@ -75,14 +73,14 @@ class MessageMorphInputBarContentState @override Widget build(BuildContext context) { - final iconSize = overlay.maxWidth > 600 + final iconSize = widget.maxWidth > 600 ? 28.0 - : overlay.maxWidth > 600 + : widget.maxWidth > 600 ? 24.0 : 16.0; - final spacing = overlay.maxWidth > 600 + final spacing = widget.maxWidth > 600 ? 16.0 - : overlay.maxWidth > 600 + : widget.maxWidth > 600 ? 8.0 : 4.0; @@ -132,8 +130,7 @@ class MessageMorphInputBarContentState ), onTap: () { setState(() => selectedTag = choice); - - widget.activity.onMultipleChoiceSelect( + widget.controller.onMatch( token, PracticeChoice( choiceContent: choice, @@ -145,12 +142,11 @@ class MessageMorphInputBarContentState form: token.text.content, ), ), - widget.overlayController.pangeaMessageEvent, - () => overlay.setState(() {}), ); }, isSelected: selectedTag == choice, isGold: wasCorrect, + shimmer: widget.controller.showChoiceShimmer, ), ); }, @@ -159,13 +155,13 @@ class MessageMorphInputBarContentState if (selectedTag != null) Container( constraints: BoxConstraints( - minHeight: overlay.maxWidth > 600 ? 20 : 34, + minHeight: widget.maxWidth > 600 ? 20 : 34, ), alignment: Alignment.center, child: MorphMeaningWidget( feature: morph, tag: selectedTag!, - style: overlay.maxWidth > 600 + style: widget.maxWidth > 600 ? Theme.of(context).textTheme.bodyLarge : Theme.of(context).textTheme.bodySmall, ), diff --git a/lib/pangea/toolbar/reading_assistance_input_row/message_morph_choice_item.dart b/lib/pangea/toolbar/message_practice/message_morph_choice_item.dart similarity index 57% rename from lib/pangea/toolbar/reading_assistance_input_row/message_morph_choice_item.dart rename to lib/pangea/toolbar/message_practice/message_morph_choice_item.dart index 555b56b4f..7aa99a354 100644 --- a/lib/pangea/toolbar/reading_assistance_input_row/message_morph_choice_item.dart +++ b/lib/pangea/toolbar/message_practice/message_morph_choice_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/common/widgets/shimmer_background.dart'; import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; @@ -14,12 +15,14 @@ class MessageMorphChoiceItem extends StatefulWidget { required this.isSelected, required this.isGold, required this.cId, + this.shimmer = false, }); final ConstructIdentifier cId; final void Function() onTap; final bool isSelected; final bool? isGold; + final bool shimmer; @override MessageMorphChoiceItemState createState() => MessageMorphChoiceItemState(); @@ -69,50 +72,53 @@ class MessageMorphChoiceItemState extends State { onHover: (isHovered) => setState(() => _isHovered = isHovered), borderRadius: BorderRadius.circular(AppConfig.borderRadius), onTap: onTap, - child: IntrinsicWidth( - child: Container( - alignment: Alignment.center, - decoration: BoxDecoration( - color: color, - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - border: Border.all( - color: widget.isSelected || _isHovered - ? color.withAlpha(255) - : Colors.transparent, - width: 2.0, + child: ShimmerBackground( + enabled: widget.shimmer, + child: IntrinsicWidth( + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + border: Border.all( + color: widget.isSelected || _isHovered + ? color.withAlpha(255) + : Colors.transparent, + width: 2.0, + ), ), - ), - padding: const EdgeInsets.symmetric( - vertical: 8.0, - horizontal: 12.0, - ), - child: Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - spacing: 8.0, - children: [ - SizedBox( - width: iconSize, - height: iconSize, - child: MorphIcon( - morphFeature: MorphFeaturesEnumExtension.fromString( - widget.cId.category, + padding: const EdgeInsets.symmetric( + vertical: 8.0, + horizontal: 12.0, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + spacing: 8.0, + children: [ + SizedBox( + width: iconSize, + height: iconSize, + child: MorphIcon( + morphFeature: MorphFeaturesEnumExtension.fromString( + widget.cId.category, + ), + morphTag: widget.cId.lemma, + size: Size(iconSize, iconSize), + showTooltip: false, ), - morphTag: widget.cId.lemma, - size: Size(iconSize, iconSize), - showTooltip: false, ), - ), - Text( - getGrammarCopy( - category: widget.cId.category, - lemma: widget.cId.lemma, - context: context, - ) ?? - widget.cId.lemma, - style: style, - ), - ], + Text( + getGrammarCopy( + category: widget.cId.category, + lemma: widget.cId.lemma, + context: context, + ) ?? + widget.cId.lemma, + style: style, + ), + ], + ), ), ), ), diff --git a/lib/pangea/toolbar/message_practice/message_practice_mode_enum.dart b/lib/pangea/toolbar/message_practice/message_practice_mode_enum.dart new file mode 100644 index 000000000..e8d851186 --- /dev/null +++ b/lib/pangea/toolbar/message_practice/message_practice_mode_enum.dart @@ -0,0 +1,89 @@ +import 'package:flutter/material.dart'; + +import 'package:material_symbols_icons/symbols.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; + +enum MessagePracticeMode { + wordEmoji, + wordMeaning, + wordMorph, + listening, + noneSelected; + + IconData get icon { + switch (this) { + case MessagePracticeMode.listening: + return Icons.volume_up; + case MessagePracticeMode.wordMeaning: + return Symbols.dictionary; + case MessagePracticeMode.noneSelected: + return Icons.error; + case MessagePracticeMode.wordEmoji: + return Symbols.imagesmode; + case MessagePracticeMode.wordMorph: + return Symbols.toys_and_games; + } + } + + String tooltip(BuildContext context) { + switch (this) { + case MessagePracticeMode.listening: + return L10n.of(context).listen; + case MessagePracticeMode.noneSelected: + return ''; + case MessagePracticeMode.wordEmoji: + return L10n.of(context).image; + case MessagePracticeMode.wordMorph: + return L10n.of(context).grammar; + case MessagePracticeMode.wordMeaning: + return L10n.of(context).meaning; + } + } + + Color iconButtonColor( + BuildContext context, + bool done, + ) => + done ? AppConfig.gold : Theme.of(context).colorScheme.primaryContainer; + + ActivityTypeEnum? get associatedActivityType { + switch (this) { + case MessagePracticeMode.wordMeaning: + return ActivityTypeEnum.wordMeaning; + case MessagePracticeMode.listening: + return ActivityTypeEnum.wordFocusListening; + case MessagePracticeMode.wordEmoji: + return ActivityTypeEnum.emoji; + case MessagePracticeMode.wordMorph: + return ActivityTypeEnum.morphId; + case MessagePracticeMode.noneSelected: + return null; + } + } + + static List get practiceModes => [ + MessagePracticeMode.listening, + MessagePracticeMode.wordMorph, + MessagePracticeMode.wordMeaning, + MessagePracticeMode.wordEmoji, + ]; + + InstructionsEnum? get instruction { + switch (this) { + case MessagePracticeMode.listening: + return InstructionsEnum.chooseWordAudio; + case MessagePracticeMode.wordMeaning: + return InstructionsEnum.chooseLemmaMeaning; + case MessagePracticeMode.wordEmoji: + return InstructionsEnum.chooseEmoji; + case MessagePracticeMode.wordMorph: + return InstructionsEnum.chooseMorphs; + default: + return null; + } + } +} diff --git a/lib/pangea/toolbar/reading_assistance_input_row/morph_selection.dart b/lib/pangea/toolbar/message_practice/morph_selection.dart similarity index 100% rename from lib/pangea/toolbar/reading_assistance_input_row/morph_selection.dart rename to lib/pangea/toolbar/message_practice/morph_selection.dart diff --git a/lib/pangea/toolbar/message_practice/practice_activity_card.dart b/lib/pangea/toolbar/message_practice/practice_activity_card.dart new file mode 100644 index 000000000..4a6eb7ff0 --- /dev/null +++ b/lib/pangea/toolbar/message_practice/practice_activity_card.dart @@ -0,0 +1,119 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/common/widgets/card_error_widget.dart'; +import 'package:fluffychat/pangea/common/widgets/content_loading_indicator.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_morph_choice.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_match_card.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +/// The wrapper for practice activity content. +/// Handles the activities associated with a message, +/// their navigation, and the management of completion records +class PracticeActivityCard extends StatefulWidget { + final PracticeTarget targetTokensAndActivityType; + final PracticeController controller; + final PangeaToken? selectedToken; + final double maxWidth; + + const PracticeActivityCard({ + super.key, + required this.targetTokensAndActivityType, + required this.controller, + required this.selectedToken, + required this.maxWidth, + }); + + @override + PracticeActivityCardState createState() => PracticeActivityCardState(); +} + +class PracticeActivityCardState extends State { + final ValueNotifier> _activityState = + ValueNotifier(const AsyncState.loading()); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance.addPostFrameCallback( + (_) => _fetchActivity(), + ); + } + + @override + void didUpdateWidget(PracticeActivityCard oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.targetTokensAndActivityType != + widget.targetTokensAndActivityType) { + _fetchActivity(); + } + } + + @override + void dispose() { + _activityState.dispose(); + super.dispose(); + } + + Future _fetchActivity() async { + _activityState.value = const AsyncState.loading(); + if (!MatrixState.pangeaController.userController.languagesSet) { + _activityState.value = const AsyncState.error("Error fetching activity"); + return; + } + + final result = await widget.controller.fetchActivityModel( + widget.targetTokensAndActivityType, + ); + + if (result.isValue) { + _activityState.value = AsyncState.loaded(result.result!); + } else { + _activityState.value = AsyncState.error( + "Error fetching activity: ${result.asError}", + ); + } + } + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: _activityState, + builder: (context, state, __) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + switch (state) { + AsyncLoading() => const ContentLoadingIndicator( + height: 40, + ), + AsyncError() => CardErrorWidget( + L10n.of(context).errorFetchingActivity, + ), + AsyncLoaded() => state.value.multipleChoiceContent != null + ? MessageMorphInputBarContent( + controller: widget.controller, + activity: state.value, + selectedToken: widget.selectedToken, + maxWidth: widget.maxWidth, + ) + : MatchActivityCard( + currentActivity: state.value, + controller: widget.controller, + ), + _ => const SizedBox.shrink(), + }, + ], + ); + }, + ); + } +} diff --git a/lib/pangea/toolbar/message_practice/practice_controller.dart b/lib/pangea/toolbar/message_practice/practice_controller.dart new file mode 100644 index 000000000..d672f415b --- /dev/null +++ b/lib/pangea/toolbar/message_practice/practice_controller.dart @@ -0,0 +1,212 @@ +import 'package:flutter/material.dart'; + +import 'package:async/async.dart'; +import 'package:collection/collection.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/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_generation_repo.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_selection.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_selection_repo.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/morph_selection.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class PracticeController with ChangeNotifier { + final PangeaMessageEvent pangeaMessageEvent; + + PracticeController(this.pangeaMessageEvent) { + _fetchPracticeSelection(); + } + + PracticeActivityModel? _activity; + + MessagePracticeMode practiceMode = MessagePracticeMode.noneSelected; + + MorphSelection? selectedMorph; + PracticeChoice? selectedChoice; + + PracticeActivityModel? get activity => _activity; + + PracticeSelection? practiceSelection; + + bool get isTotallyDone => + isPracticeActivityDone(ActivityTypeEnum.emoji) && + isPracticeActivityDone(ActivityTypeEnum.wordMeaning) && + isPracticeActivityDone(ActivityTypeEnum.wordFocusListening) && + isPracticeActivityDone(ActivityTypeEnum.morphId); + + bool isPracticeActivityDone(ActivityTypeEnum activityType) => + practiceSelection?.activities(activityType).every((a) => a.isComplete) == + true; + + bool isPracticeButtonEmpty(PangeaToken token) { + final target = practiceTargetForToken(token); + + if (MessagePracticeMode.wordEmoji == practiceMode) { + if (token.vocabConstructID.userSetEmoji != null) { + return false; + } + // Keep open even when completed to show emoji + return target == null; + } + + if (MessagePracticeMode.wordMorph == practiceMode) { + // Keep open even when completed to show morph icon + return target == null; + } + + return target == null || + target.isCompleteByToken( + token, + _activity?.morphFeature, + ) == + true; + } + + bool get showChoiceShimmer { + if (_activity == null) return false; + + if (_activity!.activityType == ActivityTypeEnum.morphId) { + return selectedMorph != null && + !_activity!.practiceTarget.hasAnyResponses; + } + + return selectedChoice == null && + !_activity!.practiceTarget.hasAnyCorrectChoices; + } + + Future _fetchPracticeSelection() async { + if (pangeaMessageEvent.messageDisplayRepresentation?.tokens == null) return; + practiceSelection = await PracticeSelectionRepo.get( + pangeaMessageEvent.eventId, + pangeaMessageEvent.messageDisplayLangCode, + pangeaMessageEvent.messageDisplayRepresentation!.tokens!, + ); + } + + Future> fetchActivityModel( + PracticeTarget target, + ) async { + final req = MessageActivityRequest( + userL1: MatrixState.pangeaController.userController.userL1!.langCode, + userL2: MatrixState.pangeaController.userController.userL2!.langCode, + activityQualityFeedback: null, + targetTokens: target.tokens, + targetType: target.activityType, + targetMorphFeature: target.morphFeature, + ); + + final result = await PracticeRepo.getPracticeActivity( + req, + messageInfo: pangeaMessageEvent.event.content, + ); + if (result.isValue) { + _activity = result.result; + } + + return result; + } + + PracticeTarget? practiceTargetForToken(PangeaToken token) { + if (practiceMode.associatedActivityType == null) return null; + return practiceSelection + ?.activities(practiceMode.associatedActivityType!) + .firstWhereOrNull((a) => a.tokens.contains(token)); + } + + void updateToolbarMode(MessagePracticeMode mode) { + selectedChoice = null; + practiceMode = mode; + if (practiceMode != MessagePracticeMode.wordMorph) { + selectedMorph = null; + } + notifyListeners(); + } + + void onChoiceSelect(PracticeChoice? choice, [bool force = false]) { + if (_activity == null) return; + if (selectedChoice == choice && !force) { + selectedChoice = null; + } else { + selectedChoice = choice; + } + notifyListeners(); + } + + void onSelectMorph(MorphSelection newMorph) { + practiceMode = MessagePracticeMode.wordMorph; + selectedMorph = newMorph; + notifyListeners(); + } + + void onMatch(PangeaToken token, PracticeChoice choice) { + if (_activity == null) return; + + final isCorrect = _activity!.activityType == ActivityTypeEnum.morphId + ? _activity! + .onMultipleChoiceSelect(choice.form.cId, choice.choiceContent) + : _activity!.onMatch(token, choice); + + final targetId = + "message-token-${token.text.uniqueKey}-${pangeaMessageEvent.eventId}"; + + final updateService = MatrixState + .pangeaController.matrixState.analyticsDataService.updateService; + + // we don't take off points for incorrect emoji matches + if (_activity!.activityType != ActivityTypeEnum.emoji || isCorrect) { + final constructUseType = _activity!.practiceTarget.record.responses.last + .useType(_activity!.activityType); + + final constructs = [ + OneConstructUse( + useType: constructUseType, + lemma: token.lemma.text, + constructType: ConstructTypeEnum.vocab, + metadata: ConstructUseMetaData( + roomId: pangeaMessageEvent.room.id, + timeStamp: DateTime.now(), + eventId: pangeaMessageEvent.eventId, + ), + category: token.pos, + // in the case of a wrong answer, the cId doesn't match the token + form: token.text.content, + xp: constructUseType.pointValue, + ), + ]; + + updateService.addAnalytics( + targetId, + constructs, + ); + } + + if (isCorrect) { + if (_activity!.activityType == ActivityTypeEnum.emoji) { + updateService.setLemmaInfo( + choice.form.cId, + emoji: choice.choiceContent, + ); + } + + if (_activity!.activityType == ActivityTypeEnum.wordMeaning) { + updateService.setLemmaInfo( + choice.form.cId, + meaning: choice.choiceContent, + ); + } + } + + notifyListeners(); + } +} diff --git a/lib/pangea/toolbar/reading_assistance_input_row/practice_match_card.dart b/lib/pangea/toolbar/message_practice/practice_match_card.dart similarity index 63% rename from lib/pangea/toolbar/reading_assistance_input_row/practice_match_card.dart rename to lib/pangea/toolbar/message_practice/practice_match_card.dart index 260047e8a..317be572a 100644 --- a/lib/pangea/toolbar/reading_assistance_input_row/practice_match_card.dart +++ b/lib/pangea/toolbar/message_practice/practice_match_card.dart @@ -6,23 +6,23 @@ import 'package:flutter/material.dart'; import 'package:collection/collection.dart'; import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/choice_animation.dart'; +import 'package:fluffychat/pangea/common/widgets/choice_animation.dart'; import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/practice_match_item.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_audio_card.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_match_item.dart'; class MatchActivityCard extends StatelessWidget { final PracticeActivityModel currentActivity; - final MessageOverlayController overlayController; + final PracticeController controller; const MatchActivityCard({ super.key, required this.currentActivity, - required this.overlayController, + required this.controller, }); PracticeActivityModel get activity => currentActivity; @@ -30,21 +30,28 @@ class MatchActivityCard extends StatelessWidget { ActivityTypeEnum get activityType => currentActivity.activityType; Widget choiceDisplayContent( + BuildContext context, String choice, double? fontSize, ) { switch (activityType) { case ActivityTypeEnum.emoji: case ActivityTypeEnum.wordMeaning: - return Text( - choice, - style: TextStyle(fontSize: fontSize), - textAlign: TextAlign.center, + return Padding( + padding: const EdgeInsets.all(8), + child: Text( + choice, + style: TextStyle(fontSize: fontSize), + textAlign: TextAlign.center, + ), ); case ActivityTypeEnum.wordFocusListening: - return Icon( - Icons.volume_up, - size: fontSize, + return Padding( + padding: const EdgeInsets.all(8), + child: Icon( + Icons.volume_up, + size: fontSize, + ), ); default: debugger(when: kDebugMode); @@ -59,8 +66,9 @@ class MatchActivityCard extends StatelessWidget { : Theme.of(context).textTheme.titleMedium?.fontSize) ?? 26; - if (overlayController.toolbarMode == MessageMode.listening || - overlayController.toolbarMode == MessageMode.wordEmoji) { + final mode = controller.practiceMode; + if (mode == MessagePracticeMode.listening || + mode == MessagePracticeMode.wordEmoji) { fontSize = fontSize * 1.5; } @@ -69,10 +77,8 @@ class MatchActivityCard extends StatelessWidget { mainAxisSize: MainAxisSize.max, spacing: 4.0, children: [ - if (overlayController.toolbarMode == MessageMode.listening) - MessageAudioCard( - overlayController: overlayController, - ), + if (mode == MessagePracticeMode.listening) + MessageAudioCard(messageEvent: controller.pangeaMessageEvent), Wrap( alignment: WrapAlignment.center, spacing: 4.0, @@ -82,21 +88,23 @@ class MatchActivityCard extends StatelessWidget { final bool? wasCorrect = currentActivity.practiceTarget.wasCorrectMatch(cf); return ChoiceAnimationWidget( - isSelected: overlayController.selectedChoice == cf, + isSelected: controller.selectedChoice == cf, isCorrect: wasCorrect, child: PracticeMatchItem( token: currentActivity.practiceTarget.tokens.firstWhereOrNull( (t) => t.vocabConstructID == cf.form.cId, ), - isSelected: overlayController.selectedChoice == cf, + isSelected: controller.selectedChoice == cf, isCorrect: wasCorrect, constructForm: cf, - content: choiceDisplayContent(cf.choiceContent, fontSize), + content: + choiceDisplayContent(context, cf.choiceContent, fontSize), audioContent: activityType == ActivityTypeEnum.wordFocusListening ? cf.choiceContent : null, - overlayController: overlayController, + controller: controller, + shimmer: controller.showChoiceShimmer, ), ); }, diff --git a/lib/pangea/toolbar/reading_assistance_input_row/practice_match_item.dart b/lib/pangea/toolbar/message_practice/practice_match_item.dart similarity index 84% rename from lib/pangea/toolbar/reading_assistance_input_row/practice_match_item.dart rename to lib/pangea/toolbar/message_practice/practice_match_item.dart index dd06e779a..055250ed9 100644 --- a/lib/pangea/toolbar/reading_assistance_input_row/practice_match_item.dart +++ b/lib/pangea/toolbar/message_practice/practice_match_item.dart @@ -5,13 +5,23 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/widgets/shimmer_background.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; import 'package:fluffychat/widgets/matrix.dart'; class PracticeMatchItem extends StatefulWidget { + final Widget content; + final PangeaToken? token; + final PracticeChoice constructForm; + final String? audioContent; + final PracticeController controller; + final bool? isCorrect; + final bool isSelected; + final bool shimmer; + const PracticeMatchItem({ super.key, required this.content, @@ -20,17 +30,10 @@ class PracticeMatchItem extends StatefulWidget { required this.isCorrect, required this.isSelected, this.audioContent, - required this.overlayController, + required this.controller, + this.shimmer = false, }); - final Widget content; - final PangeaToken? token; - final PracticeChoice constructForm; - final String? audioContent; - final MessageOverlayController overlayController; - final bool? isCorrect; - final bool isSelected; - @override PracticeMatchItemState createState() => PracticeMatchItemState(); } @@ -58,8 +61,7 @@ class PracticeMatchItemState extends State { setState(() => _isPlaying = true); } try { - final l2 = - MatrixState.pangeaController.languageController.activeL2Code(); + final l2 = MatrixState.pangeaController.userController.userL2Code; if (l2 != null) { await TtsController.tryToSpeak( widget.audioContent!, @@ -110,9 +112,9 @@ class PracticeMatchItemState extends State { void onTap() { play(); - isCorrect == null || !isCorrect! || widget.token == null - ? widget.overlayController.onChoiceSelect(widget.constructForm) - : widget.overlayController.updateSelectedSpan(widget.token!.text); + if (isCorrect == null || !isCorrect! || widget.token == null) { + widget.controller.onChoiceSelect(widget.constructForm); + } } @override @@ -122,7 +124,6 @@ class PracticeMatchItemState extends State { children: [ Flexible( child: Container( - padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: color(context).withAlpha((0.4 * 255).toInt()), borderRadius: BorderRadius.circular(AppConfig.borderRadius), @@ -142,19 +143,21 @@ class PracticeMatchItemState extends State { ], ); - return LongPressDraggable( + return Draggable( data: widget.constructForm, feedback: Material( type: MaterialType.transparency, child: content, ), - delay: const Duration(milliseconds: 50), onDragStarted: onTap, child: InkWell( onHover: (isHovered) => setState(() => _isHovered = isHovered), borderRadius: BorderRadius.circular(AppConfig.borderRadius), onTap: onTap, - child: content, + child: ShimmerBackground( + enabled: widget.shimmer, + child: content, + ), ), ); } diff --git a/lib/pangea/toolbar/message_practice/reading_assistance_input_bar.dart b/lib/pangea/toolbar/message_practice/reading_assistance_input_bar.dart new file mode 100644 index 000000000..6cbcb249c --- /dev/null +++ b/lib/pangea/toolbar/message_practice/reading_assistance_input_bar.dart @@ -0,0 +1,226 @@ +import 'package:flutter/material.dart'; + +import 'package:material_symbols_icons/symbols.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_activity_card.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/toolbar_button.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +const double minContentHeight = 120; + +class ReadingAssistanceInputBar extends StatefulWidget { + final PracticeController controller; + final PangeaToken? selectedToken; + final double maxWidth; + + const ReadingAssistanceInputBar( + this.controller, { + required this.maxWidth, + required this.selectedToken, + super.key, + }); + + @override + ReadingAssistanceInputBarState createState() => + ReadingAssistanceInputBarState(); +} + +class ReadingAssistanceInputBarState extends State { + final ScrollController _scrollController = ScrollController(); + + @override + void dispose() { + _scrollController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: widget.controller, + builder: (context, _) { + return Column( + spacing: 4.0, + children: [ + Row( + spacing: 4.0, + mainAxisSize: MainAxisSize.min, + children: [ + ...MessagePracticeMode.practiceModes.map( + (m) { + final complete = widget.controller.isPracticeActivityDone( + m.associatedActivityType!, + ); + return ToolbarButton( + mode: m, + setMode: () => widget.controller.updateToolbarMode(m), + isComplete: complete, + isSelected: widget.controller.practiceMode == m, + shimmer: widget.controller.practiceMode == + MessagePracticeMode.noneSelected && + !complete, + ); + }, + ), + ], + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: Material( + borderRadius: BorderRadius.circular(AppConfig.borderRadius), + child: Container( + padding: const EdgeInsets.all(8.0), + alignment: Alignment.center, + constraints: const BoxConstraints( + minHeight: minContentHeight, + maxHeight: AppConfig.readingAssistanceInputBarHeight, + ), + child: Scrollbar( + thumbVisibility: true, + controller: _scrollController, + child: SingleChildScrollView( + controller: _scrollController, + child: SizedBox( + width: widget.maxWidth, + child: _ReadingAssistanceBarContent( + controller: widget.controller, + selectedToken: widget.selectedToken, + maxWidth: widget.maxWidth, + ), + ), + ), + ), + ), + ), + ), + ], + ); + }, + ); + } +} + +class _ReadingAssistanceBarContent extends StatelessWidget { + final PracticeController controller; + final PangeaToken? selectedToken; + final double maxWidth; + + const _ReadingAssistanceBarContent({ + required this.controller, + required this.selectedToken, + required this.maxWidth, + }); + + @override + Widget build(BuildContext context) { + final mode = controller.practiceMode; + if (controller.pangeaMessageEvent.isAudioMessage == true) { + return const SizedBox(); + } + final activityType = mode.associatedActivityType; + final activityCompleted = + activityType != null && controller.isPracticeActivityDone(activityType); + + switch (mode) { + case MessagePracticeMode.noneSelected: + return controller.isTotallyDone + ? const _AllDoneWidget() + : const Icon( + Symbols.fitness_center, + size: 60.0, + ); + + case MessagePracticeMode.wordEmoji: + case MessagePracticeMode.wordMeaning: + case MessagePracticeMode.listening: + if (controller.isTotallyDone) { + return const _AllDoneWidget(); + } + + final target = controller.practiceSelection?.getTarget(activityType!); + if (target == null || activityCompleted) { + return const Icon( + Symbols.fitness_center, + size: 60.0, + color: AppConfig.goldLight, + ); + } + + return PracticeActivityCard( + targetTokensAndActivityType: target, + controller: controller, + selectedToken: selectedToken, + maxWidth: maxWidth, + ); + case MessagePracticeMode.wordMorph: + if (controller.isTotallyDone) { + return const _AllDoneWidget(); + } + if (activityCompleted) { + return const Icon( + Symbols.fitness_center, + size: 60.0, + color: AppConfig.goldLight, + ); + } + + PracticeTarget? target; + if (controller.practiceSelection != null && + controller.selectedMorph != null) { + target = controller.practiceSelection!.getMorphTarget( + controller.selectedMorph!.token, + controller.selectedMorph!.morph, + ); + } + + if (target == null) { + return const Center( + child: Icon( + Symbols.fitness_center, + size: 60.0, + ), + ); + } + + return PracticeActivityCard( + targetTokensAndActivityType: target, + controller: controller, + selectedToken: selectedToken, + maxWidth: maxWidth, + ); + } + } +} + +class _AllDoneWidget extends StatelessWidget { + const _AllDoneWidget(); + + @override + Widget build(BuildContext context) { + return Column( + spacing: 8, + children: [ + Text( + L10n.of(context).allDone, + style: Theme.of(context).textTheme.bodyLarge?.copyWith( + fontWeight: FontWeight.bold, + letterSpacing: 0.5, + ), + textAlign: TextAlign.center, + ), + ElevatedButton( + child: Text(L10n.of(context).continueText), + onPressed: () { + MatrixState.pAnyState.closeOverlay(); + }, + ), + ], + ); + } +} diff --git a/lib/pangea/toolbar/message_practice/token_practice_button.dart b/lib/pangea/toolbar/message_practice/token_practice_button.dart new file mode 100644 index 000000000..5ec21afa3 --- /dev/null +++ b/lib/pangea/toolbar/message_practice/token_practice_button.dart @@ -0,0 +1,308 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; +import 'package:material_symbols_icons/symbols.dart'; +import 'package:shimmer/shimmer.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/common/widgets/shimmer_background.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; +import 'package:fluffychat/pangea/morphs/morph_features_enum.dart'; +import 'package:fluffychat/pangea/morphs/morph_icon.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/dotted_border_painter.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/morph_selection.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; + +const double tokenButtonHeight = 40.0; +const double tokenButtonDefaultFontSize = 10; +const int maxEmojisPerLemma = 1; + +class TokenPracticeButton extends StatelessWidget { + final PracticeController controller; + final PangeaToken token; + final TextStyle textStyle; + final double width; + final Color textColor; + + const TokenPracticeButton({ + super.key, + required this.controller, + required this.token, + required this.textStyle, + required this.width, + required this.textColor, + }); + + TextStyle get _emojiStyle => TextStyle( + fontSize: (textStyle.fontSize ?? tokenButtonDefaultFontSize) + 4, + ); + + PracticeTarget? get _activity => controller.practiceTargetForToken(token); + + bool get isActivityCompleteOrNullForToken { + return _activity?.isCompleteByToken( + token, + _activity!.morphFeature, + ) == + true; + } + + bool get _isEmpty => controller.isPracticeButtonEmpty(token); + + bool get _isSelected => + controller.selectedMorph?.token == token && + controller.selectedMorph?.morph == _activity?.morphFeature; + + void _onMatch(PracticeChoice form) { + controller.onChoiceSelect(null); + controller.onMatch(token, form); + } + + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: controller, + builder: (context, _) { + final practiceMode = controller.practiceMode; + + Widget child; + if (isActivityCompleteOrNullForToken || _activity == null) { + child = _NoActivityContentButton( + practiceMode: practiceMode, + token: token, + target: _activity, + emojiStyle: _emojiStyle, + width: tokenButtonHeight, + ); + } else if (practiceMode == MessagePracticeMode.wordMorph) { + child = _MorphMatchButton( + active: _isSelected, + textColor: textColor, + width: tokenButtonHeight, + onTap: () => controller.onSelectMorph( + MorphSelection( + token, + _activity!.morphFeature!, + ), + ), + shimmer: controller.selectedMorph == null && + _activity?.hasAnyCorrectChoices == false, + ); + } else { + child = _StandardMatchButton( + selectedChoice: controller.selectedChoice, + width: width, + borderColor: textColor, + onMatch: (choice) => _onMatch(choice), + ); + } + + return AnimatedSize( + duration: const Duration( + milliseconds: AppConfig.overlayAnimationDuration, + ), + curve: Curves.easeOut, + alignment: Alignment.bottomCenter, + child: _isEmpty + ? const SizedBox() + : Column( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox(height: 4.0), + SizedBox(height: tokenButtonHeight, child: child), + ], + ), + ); + }, + ); + } +} + +class _StandardMatchButton extends StatelessWidget { + final PracticeChoice? selectedChoice; + final double width; + final Color borderColor; + final Function(PracticeChoice choice) onMatch; + + const _StandardMatchButton({ + required this.selectedChoice, + required this.width, + required this.borderColor, + required this.onMatch, + }); + + @override + Widget build(BuildContext context) { + return DragTarget( + builder: (BuildContext context, accepted, rejected) { + final double colorAlpha = 0.3 + + (selectedChoice != null ? 0.4 : 0.0) + + (accepted.isNotEmpty ? 0.3 : 0.0); + + final theme = Theme.of(context); + final borderRadius = BorderRadius.circular(AppConfig.borderRadius - 4); + + return Material( + type: MaterialType.transparency, + child: InkWell( + onTap: + selectedChoice != null ? () => onMatch(selectedChoice!) : null, + borderRadius: borderRadius, + child: CustomPaint( + painter: DottedBorderPainter( + color: borderColor.withAlpha((colorAlpha * 255).toInt()), + borderRadius: borderRadius, + ), + child: Shimmer.fromColors( + enabled: selectedChoice != null, + baseColor: selectedChoice != null + ? AppConfig.gold.withAlpha(20) + : Colors.transparent, + highlightColor: selectedChoice != null + ? AppConfig.gold.withAlpha(50) + : Colors.transparent, + child: Container( + padding: const EdgeInsets.only(top: 10.0), + width: max(width, 24.0), + alignment: Alignment.center, + decoration: BoxDecoration( + color: theme.colorScheme.surface, + borderRadius: borderRadius, + ), + ), + ), + ), + ), + ); + }, + onAcceptWithDetails: (details) => onMatch(details.data), + ); + } +} + +class _MorphMatchButton extends StatelessWidget { + final Function()? onTap; + final bool active; + final Color textColor; + final bool shimmer; + final double width; + + const _MorphMatchButton({ + required this.active, + required this.textColor, + required this.width, + this.shimmer = false, + this.onTap, + }); + + @override + Widget build(BuildContext context) { + return Material( + type: MaterialType.transparency, + child: HoverBuilder( + builder: (context, hovered) { + return InkWell( + onTap: onTap, + borderRadius: BorderRadius.circular(AppConfig.borderRadius - 4), + child: ShimmerBackground( + enabled: shimmer, + child: SizedBox( + width: width, + child: Center( + child: Opacity( + opacity: active ? 1.0 : 0.6, + child: AnimatedScale( + scale: hovered || active ? 1.25 : 1.0, + duration: FluffyThemes.animationDuration, + curve: FluffyThemes.animationCurve, + child: Icon( + Symbols.toys_and_games, + color: textColor, + size: 24.0, + ), + ), + ), + ), + ), + ), + ); + }, + ), + ); + } +} + +class _NoActivityContentButton extends StatelessWidget { + final MessagePracticeMode practiceMode; + final PangeaToken token; + final PracticeTarget? target; + final TextStyle emojiStyle; + final double width; + + const _NoActivityContentButton({ + required this.practiceMode, + required this.token, + required this.target, + required this.emojiStyle, + required this.width, + }); + + @override + Widget build(BuildContext context) { + if (practiceMode == MessagePracticeMode.wordEmoji) { + final displayEmoji = target?.record.responses + .firstWhereOrNull( + (res) => res.cId == token.vocabConstructID && res.isCorrect, + ) + ?.text ?? + token.vocabConstructID.userSetEmoji ?? + ''; + return Text( + displayEmoji, + style: emojiStyle, + ); + } + if (practiceMode == MessagePracticeMode.wordMorph && target != null) { + final morphFeature = target!.morphFeature!; + final morphTag = token.morphIdByFeature(morphFeature); + if (morphTag != null) { + return Tooltip( + message: getGrammarCopy( + category: morphFeature.toShortString(), + lemma: morphTag.lemma, + context: context, + ), + child: SizedBox( + width: width, + child: Center( + child: CircleAvatar( + radius: width / 2, + backgroundColor: + Theme.of(context).brightness != Brightness.light + ? Theme.of(context).colorScheme.surface.withAlpha(100) + : null, + child: Padding( + padding: const EdgeInsets.all(4.0), + child: MorphIcon( + morphFeature: morphFeature, + morphTag: morphTag.lemma, + size: Size.fromWidth(width - 8.0), + ), + ), + ), + ), + ), + ); + } + } + return const SizedBox(); + } +} diff --git a/lib/pangea/toolbar/message_practice/toolbar_button.dart b/lib/pangea/toolbar/message_practice/toolbar_button.dart new file mode 100644 index 000000000..c4981c87e --- /dev/null +++ b/lib/pangea/toolbar/message_practice/toolbar_button.dart @@ -0,0 +1,79 @@ +import 'package:flutter/material.dart'; + +import 'package:shimmer/shimmer.dart'; + +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_practice_mode_enum.dart'; + +class ToolbarButton extends StatelessWidget { + final MessagePracticeMode mode; + final VoidCallback setMode; + + final bool isComplete; + final bool isSelected; + final bool shimmer; + + const ToolbarButton({ + required this.mode, + required this.setMode, + required this.isComplete, + required this.isSelected, + this.shimmer = false, + super.key, + }); + + @override + Widget build(BuildContext context) { + final color = mode.iconButtonColor(context, isComplete); + return Container( + width: 44.0, + height: 44.0, + alignment: Alignment.center, + child: Tooltip( + message: mode.tooltip(context), + child: PressableButton( + borderRadius: BorderRadius.circular(20), + depressed: isSelected, + color: color, + onPressed: setMode, + playSound: true, + colorFactor: + Theme.of(context).brightness == Brightness.light ? 0.55 : 0.3, + builder: (context, depressed, shadowColor) => Stack( + alignment: Alignment.center, + children: [ + Container( + height: 40.0, + width: 40.0, + decoration: BoxDecoration( + color: depressed ? shadowColor : color, + shape: BoxShape.circle, + ), + ), + if (shimmer) + Shimmer.fromColors( + baseColor: Colors.transparent, + highlightColor: Theme.of(context) + .colorScheme + .primaryContainer + .withAlpha(0xAA), + child: Container( + height: 40.0, + width: 40.0, + decoration: BoxDecoration( + color: depressed ? shadowColor : color, + shape: BoxShape.circle, + ), + ), + ), + Icon( + mode.icon, + size: 20, + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/pangea/toolbar/message_selection_overlay.dart b/lib/pangea/toolbar/message_selection_overlay.dart new file mode 100644 index 000000000..ed66f5c79 --- /dev/null +++ b/lib/pangea/toolbar/message_selection_overlay.dart @@ -0,0 +1,327 @@ +import 'dart:async'; +import 'dart:developer'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/scheduler.dart'; + +import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart' hide Result; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_updater_mixin.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/text_to_speech_response_model.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/layout/message_selection_positioner.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/practice_controller.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_controller.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; +import 'package:fluffychat/pangea/toolbar/token_rendering_mixin.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +/// Controls data at the top level of the toolbar (mainly token / toolbar mode selection) +class MessageSelectionOverlay extends StatefulWidget { + final ChatController chatController; + final Event _event; + final Event? _nextEvent; + final Event? _prevEvent; + final PangeaToken? _initialSelectedToken; + final Timeline _timeline; + + const MessageSelectionOverlay({ + required this.chatController, + required Event event, + required PangeaToken? initialSelectedToken, + required Event? nextEvent, + required Event? prevEvent, + required Timeline timeline, + super.key, + }) : _initialSelectedToken = initialSelectedToken, + _nextEvent = nextEvent, + _prevEvent = prevEvent, + _event = event, + _timeline = timeline; + + @override + MessageOverlayController createState() => MessageOverlayController(); +} + +class MessageOverlayController extends State + with SingleTickerProviderStateMixin, AnalyticsUpdater, TokenRenderingMixin { + Event get event => widget._event; + + PangeaTokenText? _selectedSpan; + ValueNotifier selectedTokenNotifier = ValueNotifier(null); + + List? _highlightedTokens; + + double maxWidth = AppConfig.toolbarMinWidth; + + late SelectModeController selectModeController; + ValueNotifier get selectedMode => + selectModeController.selectedMode; + + late PracticeController practiceController; + double? screenWidth; + + ///////////////////////////////////// + /// Lifecycle + ///////////////////////////////////// + + @override + void initState() { + super.initState(); + selectModeController = SelectModeController(pangeaMessageEvent); + practiceController = PracticeController(pangeaMessageEvent); + _initializeTokensAndMode(); + WidgetsBinding.instance.addPostFrameCallback( + (_) => widget.chatController.setSelectedEvent(event), + ); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + final newWidth = MediaQuery.widthOf(context); + if (screenWidth != null && screenWidth != newWidth) { + widget.chatController.clearSelectedEvents(); + return; + } + screenWidth = newWidth; + } + + @override + void dispose() { + WidgetsBinding.instance.addPostFrameCallback( + (_) => widget.chatController.clearSelectedEvents(), + ); + selectModeController.dispose(); + practiceController.dispose(); + selectedTokenNotifier.dispose(); + super.dispose(); + } + + Future _initializeTokensAndMode() async { + try { + if (pangeaMessageEvent.event.messageType != MessageTypes.Text) { + return; + } + + RepresentationEvent? repEvent = + pangeaMessageEvent.messageDisplayRepresentation; + + if (repEvent == null || + (repEvent.event == null && repEvent.tokens == null)) { + repEvent = await _fetchNewRepEvent(); + } + + if (repEvent?.event != null) { + await repEvent!.requestTokens(); + } + } catch (e, s) { + debugger(when: kDebugMode); + ErrorHandler.logError( + e: e, + s: s, + data: { + "eventID": pangeaMessageEvent.eventId, + }, + ); + } finally { + _initializeSelectedToken(); + if (mounted) setState(() {}); + } + } + + void _initializeSelectedToken() => widget._initialSelectedToken != null + ? updateSelectedSpan(widget._initialSelectedToken!.text) + : null; + + ///////////////////////////////////// + /// State setting + ///////////////////////////////////// + + /// We need to check if the setState call is safe to call immediately + /// Kept getting the error: setState() or markNeedsBuild() called during build. + /// This is a workaround to prevent that error + @override + void setState(VoidCallback fn) { + // if (pangeaMessageEvent != null) { + // debugger(when: kDebugMode); + // modeLevel = toolbarMode.currentChoiceMode(this, pangeaMessageEvent!); + // } else { + // debugger(when: kDebugMode); + // } + + final phase = SchedulerBinding.instance.schedulerPhase; + if (mounted && + (phase == SchedulerPhase.idle || + phase == SchedulerPhase.postFrameCallbacks)) { + // It's safe to call setState immediately + try { + super.setState(fn); + } catch (e, s) { + ErrorHandler.logError( + e: "Error calling setState in MessageSelectionOverlay: $e", + s: s, + data: {}, + ); + } + } else { + // Defer the setState call to after the current frame + WidgetsBinding.instance.addPostFrameCallback((_) { + try { + if (mounted) super.setState(fn); + } catch (e, s) { + ErrorHandler.logError( + e: "Error calling setState in MessageSelectionOverlay after postframeCallback: $e", + s: s, + data: {}, + ); + } + }); + } + } + + /// Update [selectedSpan] + void updateSelectedSpan(PangeaTokenText? selectedSpan) { + if (MatrixState.pangeaController.subscriptionController.isSubscribed == + false) { + return; + } + + if (selectedSpan == _selectedSpan) { + selectModeController.setPlayingToken(selectedToken?.text); + return; + } + + _selectedSpan = selectedSpan; + selectedTokenNotifier.value = selectedToken; + selectModeController.setPlayingToken(selectedToken?.text); + + if (selectedToken != null && + selectModeController.selectedMode.value != SelectMode.audio) { + TtsController.tryToSpeak( + selectedToken!.text.content, + langCode: pangeaMessageEvent.messageDisplayLangCode, + ); + } + + if (!mounted) return; + if (selectedToken != null && isNewToken(selectedToken!)) { + final token = selectedToken!; + collectNewToken( + event.eventId, + "word-zoom-card-${token.text.uniqueKey}", + token, + Matrix.of(context).analyticsDataService, + ).then((_) { + if (mounted) setState(() {}); + }); + return; + } + + setState(() {}); + } + + PangeaMessageEvent get pangeaMessageEvent => PangeaMessageEvent( + event: widget._event, + timeline: widget._timeline, + ownMessage: widget._event.room.client.userID == widget._event.senderId, + ); + + PangeaToken? get selectedToken { + if (pangeaMessageEvent.isAudioMessage == true) { + final stt = pangeaMessageEvent.getSpeechToTextLocal(); + if (stt == null || stt.transcript.sttTokens.isEmpty) return null; + return stt.transcript.sttTokens + .firstWhereOrNull((t) => isTokenSelected(t.token)) + ?.token; + } + + return pangeaMessageEvent.messageDisplayRepresentation?.tokens + ?.firstWhereOrNull(isTokenSelected); + } + + /// If sentence TTS is playing a word, highlight that word in message overlay + void highlightCurrentText(int currentPosition, List ttsTokens) { + final List textToSelect = []; + // Check if current time is between start and end times of tokens + for (final TTSToken token in ttsTokens) { + if (token.endMS > currentPosition) { + if (token.startMS < currentPosition) { + textToSelect.add(token); + } else { + break; + } + } + } + + if (const ListEquality().equals(textToSelect, _highlightedTokens)) return; + _highlightedTokens = + textToSelect.isEmpty ? null : textToSelect.map((t) => t.text).toList(); + setState(() {}); + } + + Future _fetchNewRepEvent() async { + final RepresentationEvent? repEvent = + pangeaMessageEvent.messageDisplayRepresentation; + + if (repEvent != null) return repEvent; + final eventID = + await pangeaMessageEvent.requestRepresentationByDetectedLanguage(); + + if (eventID == null) return null; + final event = await widget._event.room.getEventById(eventID); + if (event == null) return null; + return RepresentationEvent( + timeline: pangeaMessageEvent.timeline, + parentMessageEvent: pangeaMessageEvent.event, + event: event, + ); + } + + void onClickOverlayMessageToken( + PangeaToken token, + ) => + updateSelectedSpan(token.text); + + /// Whether the given token is currently selected or highlighted + bool isTokenSelected(PangeaToken token) { + final isSelected = _selectedSpan?.offset == token.text.offset && + _selectedSpan?.length == token.text.length; + return isSelected; + } + + bool isNewToken(PangeaToken token) => + TokensUtil.isNewTokenByEvent(token, pangeaMessageEvent); + + bool isTokenHighlighted(PangeaToken token) { + if (_highlightedTokens == null) return false; + return _highlightedTokens!.any( + (t) => t.offset == token.text.offset && t.length == token.text.length, + ); + } + + String tokenEmojiPopupKey(PangeaToken token) => + "${token.uniqueId}_${event.eventId}_emoji_button"; + + @override + Widget build(BuildContext context) { + return MessageSelectionPositioner( + overlayController: this, + chatController: widget.chatController, + event: widget._event, + nextEvent: widget._nextEvent, + prevEvent: widget._prevEvent, + initialSelectedToken: widget._initialSelectedToken, + ); + } +} diff --git a/lib/pangea/toolbar/reading_assistance_input_row/lemma_emoji_choice_item.dart b/lib/pangea/toolbar/reading_assistance/lemma_emoji_choice_item.dart similarity index 100% rename from lib/pangea/toolbar/reading_assistance_input_row/lemma_emoji_choice_item.dart rename to lib/pangea/toolbar/reading_assistance/lemma_emoji_choice_item.dart diff --git a/lib/pangea/lemmas/lemma_emoji_picker.dart b/lib/pangea/toolbar/reading_assistance/lemma_emoji_picker.dart similarity index 80% rename from lib/pangea/lemmas/lemma_emoji_picker.dart rename to lib/pangea/toolbar/reading_assistance/lemma_emoji_picker.dart index d3c20b2fa..965787745 100644 --- a/lib/pangea/lemmas/lemma_emoji_picker.dart +++ b/lib/pangea/toolbar/reading_assistance/lemma_emoji_picker.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/lemma_emoji_choice_item.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/lemma_emoji_choice_item.dart'; class LemmaEmojiPicker extends StatelessWidget { final List emojis; - final Function(String) onSelect; + final Function(String)? onSelect; final bool loading; final Function(String)? disabled; @@ -36,7 +36,9 @@ class LemmaEmojiPicker extends StatelessWidget { opacity: isDisabled ? 0.33 : 1, child: LemmaEmojiChoiceItem( content: emoji, - onTap: isDisabled ? null : () => onSelect(emoji), + onTap: isDisabled || onSelect == null + ? null + : () => onSelect!(emoji), ), ); }).toList(), diff --git a/lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart b/lib/pangea/toolbar/reading_assistance/new_word_overlay.dart similarity index 97% rename from lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart rename to lib/pangea/toolbar/reading_assistance/new_word_overlay.dart index ed0180347..1bbef81fe 100644 --- a/lib/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart +++ b/lib/pangea/toolbar/reading_assistance/new_word_overlay.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; import 'package:fluffychat/widgets/matrix.dart'; class NewWordOverlay extends StatefulWidget { @@ -74,7 +74,7 @@ class _NewWordOverlayState extends State WidgetsBinding.instance.addPostFrameCallback((_) { _showFlyingWidget(); _controller?.forward().then((_) { - TokensUtil.clearNewTokenCache(); + TokensUtil.clearRecentlyCollected(); widget.onDismiss?.call(); }); }); diff --git a/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart b/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart new file mode 100644 index 000000000..116fd451d --- /dev/null +++ b/lib/pangea/toolbar/reading_assistance/select_mode_buttons.dart @@ -0,0 +1,642 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; +import 'package:just_audio/just_audio.dart'; +import 'package:material_symbols_icons/symbols.dart'; +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pages/chat/chat.dart'; +import 'package:fluffychat/pages/chat/events/audio_player.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; +import 'package:fluffychat/pangea/events/utils/report_message.dart'; +import 'package:fluffychat/pangea/text_to_speech/tts_controller.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_audio_card.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_controller.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +enum SelectMode { + audio(Icons.volume_up), + translate(Icons.translate), + practice(Symbols.fitness_center), + emoji(Icons.add_reaction_outlined), + speechTranslation(Icons.translate); + + final IconData icon; + const SelectMode(this.icon); + + String tooltip(BuildContext context) { + final l10n = L10n.of(context); + switch (this) { + case SelectMode.audio: + return l10n.playAudio; + case SelectMode.translate: + case SelectMode.speechTranslation: + return l10n.translationTooltip; + case SelectMode.practice: + return l10n.practice; + case SelectMode.emoji: + return l10n.emojiView; + } + } +} + +enum MessageActions { + reply, + forward, + edit, + delete, + copy, + download, + pin, + unpin, + report, + info, + deleteOnError, + sendAgain; + + IconData get icon { + switch (this) { + case MessageActions.reply: + return Icons.reply_all; + case MessageActions.forward: + return Symbols.forward; + case MessageActions.edit: + return Symbols.edit; + case MessageActions.delete: + return Symbols.delete; + case MessageActions.copy: + return Icons.copy_outlined; + case MessageActions.download: + return Symbols.download; + case MessageActions.pin: + return Icons.push_pin; + case MessageActions.unpin: + return Icons.push_pin_outlined; + case MessageActions.report: + return Icons.shield_outlined; + case MessageActions.info: + return Icons.info_outlined; + case MessageActions.deleteOnError: + return Icons.delete; + case MessageActions.sendAgain: + return Icons.send_outlined; + } + } + + String tooltip(BuildContext context) { + final l10n = L10n.of(context); + switch (this) { + case MessageActions.reply: + return l10n.reply; + case MessageActions.forward: + return l10n.forward; + case MessageActions.edit: + return l10n.edit; + case MessageActions.delete: + return l10n.redactMessage; + case MessageActions.copy: + return l10n.copy; + case MessageActions.download: + return l10n.download; + case MessageActions.pin: + return l10n.pinMessage; + case MessageActions.unpin: + return l10n.unpin; + case MessageActions.report: + return l10n.reportMessage; + case MessageActions.info: + return l10n.messageInfo; + case MessageActions.deleteOnError: + return l10n.delete; + case MessageActions.sendAgain: + return l10n.tryToSendAgain; + } + } +} + +class SelectModeButtons extends StatefulWidget { + final VoidCallback launchPractice; + final MessageOverlayController overlayController; + final ChatController controller; + + const SelectModeButtons({ + required this.launchPractice, + required this.overlayController, + required this.controller, + super.key, + }); + + @override + State createState() => SelectModeButtonsState(); +} + +class SelectModeButtonsState extends State { + static const double iconWidth = 36.0; + static const double buttonSize = 40.0; + + StreamSubscription? _playerStateSub; + final ValueNotifier _isPlayingNotifier = ValueNotifier(false); + StreamSubscription? _audioSub; + + MatrixState? matrix; + + @override + void initState() { + super.initState(); + + matrix = Matrix.of(context); + if (messageEvent.isAudioMessage == true) { + controller.fetchTranscription(); + } + + controller.playTokenNotifier.addListener(_playToken); + } + + @override + void dispose() { + matrix?.audioPlayer?.dispose(); + matrix?.audioPlayer = null; + matrix?.voiceMessageEventId.value = null; + _audioSub?.cancel(); + _playerStateSub?.cancel(); + _isPlayingNotifier.dispose(); + controller.playTokenNotifier.removeListener(_playToken); + super.dispose(); + } + + PangeaMessageEvent get messageEvent => + widget.overlayController.pangeaMessageEvent; + + SelectModeController get controller => + widget.overlayController.selectModeController; + + Future updateMode(SelectMode? mode) async { + if (mode == null) { + matrix?.audioPlayer?.stop(); + matrix?.audioPlayer?.seek(null); + controller.setSelectMode(mode); + return; + } + + final updatedMode = + controller.selectedMode.value == mode && mode != SelectMode.audio + ? null + : mode; + controller.setSelectMode(updatedMode); + + if (updatedMode == SelectMode.audio) { + playAudio(); + return; + } else { + matrix?.audioPlayer?.stop(); + matrix?.audioPlayer?.seek(null); + } + + if (updatedMode == SelectMode.practice) { + widget.launchPractice(); + return; + } + + if (updatedMode == SelectMode.translate) { + await controller.fetchTranslation(); + } + + if (updatedMode == SelectMode.speechTranslation) { + await controller.fetchSpeechTranslation(); + } + } + + Future modeDisabled() async { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(L10n.of(context).modeDisabled), + ), + ); + } + + Future playAudio() async { + final playerID = "${messageEvent.eventId}_button"; + final isPlaying = matrix?.audioPlayer != null && + matrix?.voiceMessageEventId.value == playerID && + matrix!.audioPlayer!.playerState.processingState != + ProcessingState.completed; + + if (isPlaying) { + matrix!.audioPlayer!.playerState.playing + ? await matrix!.audioPlayer!.pause() + : await matrix!.audioPlayer!.play(); + return; + } + + _reloadAudio(); + } + + Future _reloadAudio({Duration? seek}) async { + matrix?.audioPlayer?.dispose(); + matrix?.audioPlayer = AudioPlayer(); + matrix?.voiceMessageEventId.value = "${messageEvent.eventId}_button"; + + _playerStateSub?.cancel(); + _playerStateSub = + matrix?.audioPlayer?.playerStateStream.listen(_onUpdatePlayerState); + + _audioSub?.cancel(); + _audioSub = matrix?.audioPlayer?.positionStream.listen(_onPlayAudio); + + try { + if (controller.audioFile == null) { + await controller.fetchAudio(); + } + + if (controller.audioFile == null) return; + + final (PangeaAudioFile pangeaAudioFile, File? audioFile) = + controller.audioFile!; + + if (audioFile != null) { + await matrix?.audioPlayer?.setFilePath(audioFile.path); + } else { + await matrix?.audioPlayer?.setAudioSource( + BytesAudioSource( + pangeaAudioFile.bytes, + pangeaAudioFile.mimeType, + ), + ); + } + + TtsController.stop(); + + if (seek != null) { + matrix!.audioPlayer!.seek(seek); + } + + await matrix?.audioPlayer?.play(); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + m: 'something wrong playing message audio', + data: { + 'event': messageEvent.event.toJson(), + }, + ); + } + } + + void _onPlayAudio(Duration duration) { + if (controller.audioFile?.$1.tokens != null) { + widget.overlayController.highlightCurrentText( + duration.inMilliseconds, + controller.audioFile!.$1.tokens!, + ); + } + } + + void _onUpdatePlayerState(PlayerState state) { + final current = _isPlayingNotifier.value; + if (!current && + state.processingState == ProcessingState.ready && + state.playing) { + _isPlayingNotifier.value = true; + } else if (current && + (!state.playing || + state.processingState == ProcessingState.completed)) { + _isPlayingNotifier.value = false; + } + } + + void _playToken() { + final token = controller.playTokenNotifier.value.$1; + + if (token == null || + controller.audioFile?.$1.tokens == null || + controller.selectedMode.value != SelectMode.audio) { + return; + } + + final ttsToken = controller.audioFile!.$1.tokens!.firstWhereOrNull( + (t) => t.text == token, + ); + + if (ttsToken == null) return; + + final isPlaying = matrix?.audioPlayer != null && + matrix!.audioPlayer!.playerState.processingState != + ProcessingState.completed; + + final start = Duration(milliseconds: ttsToken.startMS); + if (isPlaying) { + matrix!.audioPlayer!.seek(start); + matrix!.audioPlayer!.play(); + } else { + _reloadAudio(seek: start); + } + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final modes = controller.readingAssistanceModes; + final allModes = controller.allModes; + return Material( + type: MaterialType.transparency, + child: SizedBox( + height: AppConfig.toolbarMenuHeight, + child: Row( + mainAxisSize: MainAxisSize.min, + children: List.generate(allModes.length + 1, (index) { + if (index < allModes.length) { + final mode = allModes[index]; + final enabled = modes.contains(mode); + return Container( + width: 45.0, + alignment: Alignment.center, + child: Tooltip( + message: mode.tooltip(context), + child: ListenableBuilder( + listenable: Listenable.merge( + [ + controller.selectedMode, + controller.modeStateNotifier(mode), + ], + ), + builder: (context, _) { + final selectedMode = controller.selectedMode.value; + return Opacity( + opacity: enabled ? 1.0 : 0.5, + child: PressableButton( + borderRadius: BorderRadius.circular(20), + depressed: mode == selectedMode || !enabled, + color: enabled + ? theme.colorScheme.primaryContainer + : theme.disabledColor, + onPressed: + enabled ? () => updateMode(mode) : modeDisabled, + playSound: enabled && mode != SelectMode.audio, + colorFactor: + theme.brightness == Brightness.light ? 0.55 : 0.3, + builder: (context, depressed, shadowColor) => + AnimatedContainer( + duration: FluffyThemes.animationDuration, + height: buttonSize, + width: buttonSize, + decoration: BoxDecoration( + color: depressed + ? shadowColor + : theme.colorScheme.primaryContainer, + shape: BoxShape.circle, + ), + child: ValueListenableBuilder( + valueListenable: _isPlayingNotifier, + builder: (context, playing, __) => + _SelectModeButtonIcon( + mode: mode, + loading: controller.isLoading && + mode == selectedMode, + playing: mode == SelectMode.audio && playing, + ), + ), + ), + ), + ); + }, + ), + ), + ); + } else { + return Container( + width: 45.0, + alignment: Alignment.center, + child: _MoreButton( + controller: widget.controller, + messageEvent: messageEvent, + ), + ); + } + }), + ), + ), + ); + } +} + +class _SelectModeButtonIcon extends StatelessWidget { + final SelectMode mode; + final bool loading; + final bool playing; + + const _SelectModeButtonIcon({ + required this.mode, + this.loading = false, + this.playing = false, + }); + + @override + Widget build(BuildContext context) { + if (loading) { + return const Center( + child: SizedBox( + height: 20.0, + width: 20.0, + child: CircularProgressIndicator.adaptive(), + ), + ); + } + + if (mode == SelectMode.audio) { + return Icon( + playing ? Icons.pause_outlined : Icons.volume_up, + size: 20, + ); + } + + return Icon(mode.icon, size: 20); + } +} + +class _MoreButton extends StatelessWidget { + final ChatController controller; + final PangeaMessageEvent? messageEvent; + + const _MoreButton({ + required this.controller, + this.messageEvent, + }); + + bool _messageActionEnabled(MessageActions action) { + if (messageEvent == null) return false; + if (controller.selectedEvents.isEmpty) return false; + final events = controller.selectedEvents; + + if (events.any((e) => !e.status.isSent)) { + if (action == MessageActions.sendAgain) { + return true; + } + + if (events.every((e) => e.status.isError) && + action == MessageActions.deleteOnError) { + return true; + } + + return false; + } + + final isPinned = events.length == 1 && + controller.room.pinnedEventIds.contains(events.first.eventId); + + switch (action) { + case MessageActions.reply: + return events.length == 1 && controller.room.canSendDefaultMessages; + case MessageActions.edit: + return controller.canEditSelectedEvents && + !events.first.isActivityMessage && + events.single.messageType == MessageTypes.Text; + case MessageActions.delete: + return controller.canRedactSelectedEvents; + case MessageActions.copy: + return events.length == 1 && + events.single.messageType == MessageTypes.Text; + case MessageActions.download: + return controller.canSaveSelectedEvent; + case MessageActions.pin: + return controller.canPinSelectedEvents && !isPinned; + case MessageActions.unpin: + return controller.canPinSelectedEvents && isPinned; + case MessageActions.forward: + case MessageActions.report: + case MessageActions.info: + return events.length == 1; + case MessageActions.deleteOnError: + case MessageActions.sendAgain: + return false; + } + } + + Future _showMenu(BuildContext context) async { + final RenderBox button = context.findRenderObject() as RenderBox; + final RenderBox overlay = Overlay.of(context, rootOverlay: true) + .context + .findRenderObject() as RenderBox; + + final Offset offset = button.localToGlobal(Offset.zero, ancestor: overlay); + + final RelativeRect position = RelativeRect.fromRect( + Rect.fromPoints( + offset, + offset + button.size.bottomRight(Offset.zero), + ), + Offset.zero & overlay.size, + ); + + final action = await showMenu( + useRootNavigator: true, + context: context, + position: position, + items: MessageActions.values + .where(_messageActionEnabled) + .map( + (action) => PopupMenuItem( + value: action, + child: Row( + children: [ + Icon(action.icon), + const SizedBox(width: 8.0), + Text(action.tooltip(context)), + ], + ), + ), + ) + .toList(), + ); + + if (action == null) return; + _onActionPressed(action, context); + } + + void _onActionPressed( + MessageActions action, + BuildContext context, + ) { + switch (action) { + case MessageActions.reply: + controller.replyAction(); + break; + case MessageActions.forward: + controller.forwardEventsAction(); + break; + case MessageActions.edit: + controller.editSelectedEventAction(); + break; + case MessageActions.delete: + controller.redactEventsAction(); + break; + case MessageActions.copy: + controller.copyEventsAction(); + break; + case MessageActions.download: + controller.saveSelectedEvent(context); + break; + case MessageActions.pin: + case MessageActions.unpin: + controller.pinEvent(); + break; + case MessageActions.report: + final event = controller.selectedEvents.first; + controller.clearSelectedEvents(); + reportEvent( + event, + controller, + controller.context, + ); + break; + case MessageActions.info: + controller.showEventInfo(); + break; + case MessageActions.deleteOnError: + controller.deleteErrorEventsAction(); + break; + case MessageActions.sendAgain: + controller.sendAgainAction(); + break; + } + } + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + return Tooltip( + message: L10n.of(context).more, + child: PressableButton( + borderRadius: BorderRadius.circular(20), + color: theme.colorScheme.primaryContainer, + onPressed: () => _showMenu(context), + playSound: true, + colorFactor: theme.brightness == Brightness.light ? 0.55 : 0.3, + builder: (context, depressed, shadowColor) => AnimatedContainer( + duration: FluffyThemes.animationDuration, + height: 40.0, + width: 40.0, + decoration: BoxDecoration( + color: depressed ? shadowColor : theme.colorScheme.primaryContainer, + shape: BoxShape.circle, + ), + child: const Icon( + Icons.more_horiz, + size: 20, + ), + ), + ), + ); + } +} diff --git a/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart b/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart new file mode 100644 index 000000000..eee6bdcbc --- /dev/null +++ b/lib/pangea/toolbar/reading_assistance/select_mode_controller.dart @@ -0,0 +1,206 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/foundation.dart'; + +import 'package:matrix/matrix.dart'; +import 'package:path_provider/path_provider.dart'; + +import 'package:fluffychat/pangea/analytics_misc/lemma_emoji_setter_mixin.dart'; +import 'package:fluffychat/pangea/bot/utils/bot_room_extension.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_response_model.dart'; +import 'package:fluffychat/pangea/toolbar/message_practice/message_audio_card.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class _TranscriptionLoader extends AsyncLoader { + final PangeaMessageEvent messageEvent; + _TranscriptionLoader(this.messageEvent) : super(); + + @override + Future fetch() => messageEvent.requestSpeechToText( + MatrixState.pangeaController.userController.userL1!.langCodeShort, + MatrixState.pangeaController.userController.userL2!.langCodeShort, + ); +} + +class _STTTranslationLoader extends AsyncLoader { + final PangeaMessageEvent messageEvent; + _STTTranslationLoader(this.messageEvent) : super(); + + @override + Future fetch() => messageEvent.requestSttTranslation( + langCode: + MatrixState.pangeaController.userController.userL1!.langCodeShort, + l1Code: + MatrixState.pangeaController.userController.userL1!.langCodeShort, + l2Code: + MatrixState.pangeaController.userController.userL2!.langCodeShort, + ); +} + +class _TranslationLoader extends AsyncLoader { + final PangeaMessageEvent messageEvent; + _TranslationLoader(this.messageEvent) : super(); + + @override + Future fetch() => messageEvent.requestRespresentationByL1(); +} + +class _AudioLoader extends AsyncLoader<(PangeaAudioFile, File?)> { + final PangeaMessageEvent messageEvent; + _AudioLoader(this.messageEvent) : super(); + + @override + Future<(PangeaAudioFile, File?)> fetch() async { + final audioBytes = await messageEvent.requestTextToSpeech( + messageEvent.messageDisplayLangCode, + messageEvent.room.botOptions?.targetVoice, + ); + + File? audioFile; + if (!kIsWeb) { + final tempDir = await getTemporaryDirectory(); + + File? file; + file = File('${tempDir.path}/${audioBytes.name}'); + await file.writeAsBytes(audioBytes.bytes); + audioFile = file; + } + + return (audioBytes, audioFile); + } +} + +class SelectModeController with LemmaEmojiSetter { + final PangeaMessageEvent messageEvent; + final _TranscriptionLoader _transcriptLoader; + final _TranslationLoader _translationLoader; + final _AudioLoader _audioLoader; + final _STTTranslationLoader _sttTranslationLoader; + + SelectModeController( + this.messageEvent, + ) : _transcriptLoader = _TranscriptionLoader(messageEvent), + _translationLoader = _TranslationLoader(messageEvent), + _audioLoader = _AudioLoader(messageEvent), + _sttTranslationLoader = _STTTranslationLoader(messageEvent); + + ValueNotifier selectedMode = ValueNotifier(null); + + final StreamController contentChangedStream = StreamController.broadcast(); + + // Sometimes the same token is clicked twice. Setting it to the same value + // won't trigger the notifier, so use the bool for force it to trigger. + ValueNotifier<(PangeaTokenText?, bool)> playTokenNotifier = + ValueNotifier<(PangeaTokenText?, bool)>((null, false)); + + void dispose() { + selectedMode.dispose(); + playTokenNotifier.dispose(); + _transcriptLoader.dispose(); + _translationLoader.dispose(); + _sttTranslationLoader.dispose(); + _audioLoader.dispose(); + contentChangedStream.close(); + } + + static List get _textModes => [ + SelectMode.audio, + SelectMode.translate, + SelectMode.practice, + SelectMode.emoji, + ]; + + static List get _audioModes => [ + SelectMode.speechTranslation, + ]; + + ValueNotifier> get translationState => + _translationLoader.state; + + ValueNotifier> get transcriptionState => + _transcriptLoader.state; + + ValueNotifier> get speechTranslationState => + _sttTranslationLoader.state; + + (PangeaAudioFile, File?)? get audioFile => _audioLoader.value; + + List get allModes { + final validTypes = {MessageTypes.Text, MessageTypes.Audio}; + if (!messageEvent.event.status.isSent || + messageEvent.event.type != EventTypes.Message || + !validTypes.contains(messageEvent.event.messageType)) { + return []; + } + + return messageEvent.event.messageType == MessageTypes.Text + ? _textModes + : _audioModes; + } + + List get readingAssistanceModes { + final validTypes = {MessageTypes.Text, MessageTypes.Audio}; + if (!messageEvent.event.status.isSent || + messageEvent.event.type != EventTypes.Message || + !validTypes.contains(messageEvent.event.messageType)) { + return []; + } + + if (messageEvent.event.messageType == MessageTypes.Text) { + final lang = messageEvent.messageDisplayLangCode.split("-").first; + + final matchesL2 = lang == + MatrixState.pangeaController.userController.userL2!.langCodeShort; + + final matchesL1 = lang == + MatrixState.pangeaController.userController.userL1!.langCodeShort; + + return matchesL2 + ? _textModes + : matchesL1 + ? [] + : [SelectMode.translate]; + } + + return _audioModes; + } + + bool get isLoading => currentModeStateNotifier?.value is AsyncLoading; + + bool get isShowingExtraContent => + (selectedMode.value == SelectMode.translate && + _translationLoader.isLoaded) || + (selectedMode.value == SelectMode.speechTranslation && + _sttTranslationLoader.isLoaded) || + _transcriptLoader.isLoaded || + _transcriptLoader.isError; + + ValueNotifier? get currentModeStateNotifier => + modeStateNotifier(selectedMode.value); + + ValueNotifier? modeStateNotifier(SelectMode? mode) => + switch (mode) { + SelectMode.audio => _audioLoader.state, + SelectMode.translate => _translationLoader.state, + SelectMode.speechTranslation => _sttTranslationLoader.state, + _ => null, + }; + + void setSelectMode(SelectMode? mode) { + if (selectedMode.value == mode) return; + selectedMode.value = mode; + } + + void setPlayingToken(PangeaTokenText? token) => + playTokenNotifier.value = (token, !playTokenNotifier.value.$2); + + Future fetchAudio() => _audioLoader.load(); + Future fetchTranslation() => _translationLoader.load(); + Future fetchTranscription() => _transcriptLoader.load(); + Future fetchSpeechTranslation() => _sttTranslationLoader.load(); +} diff --git a/lib/pangea/toolbar/widgets/stt_transcript_tokens.dart b/lib/pangea/toolbar/reading_assistance/stt_transcript_tokens.dart similarity index 53% rename from lib/pangea/toolbar/widgets/stt_transcript_tokens.dart rename to lib/pangea/toolbar/reading_assistance/stt_transcript_tokens.dart index 03247a35f..36be582af 100644 --- a/lib/pangea/toolbar/widgets/stt_transcript_tokens.dart +++ b/lib/pangea/toolbar/reading_assistance/stt_transcript_tokens.dart @@ -1,11 +1,14 @@ import 'package:flutter/material.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; -import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; +import 'package:fluffychat/pangea/speech_to_text/speech_to_text_response_model.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/token_rendering_util.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; +import 'package:fluffychat/widgets/hover_builder.dart'; class SttTranscriptTokens extends StatelessWidget { - final SpeechToTextModel model; + final String eventId; + final SpeechToTextResponseModel model; final TextStyle? style; final void Function(PangeaToken)? onClick; @@ -13,6 +16,7 @@ class SttTranscriptTokens extends StatelessWidget { const SttTranscriptTokens({ super.key, + required this.eventId, required this.model, this.onClick, this.isSelected, @@ -24,6 +28,7 @@ class SttTranscriptTokens extends StatelessWidget { @override Widget build(BuildContext context) { + debugPrint("Tokens: ${tokens.map((t) => t.toJson())}"); if (model.transcript.sttTokens.isEmpty) { return Text( model.transcript.text, @@ -33,6 +38,16 @@ class SttTranscriptTokens extends StatelessWidget { } final messageCharacters = model.transcript.text.characters; + final renderer = TokenRenderingUtil( + existingStyle: (style ?? DefaultTextStyle.of(context).style), + ); + + final newTokens = TokensUtil.getNewTokens( + eventId, + tokens, + model.langCode, + ); + return RichText( textScaler: TextScaler.noScaling, text: TextSpan( @@ -55,21 +70,24 @@ class SttTranscriptTokens extends StatelessWidget { final selected = isSelected?.call(token) ?? false; return WidgetSpan( - child: MouseRegion( - cursor: SystemMouseCursors.click, - child: GestureDetector( - behavior: HitTestBehavior.translucent, - onTap: onClick != null ? () => onClick?.call(token) : null, - child: RichText( - text: TextSpan( - text: text, - style: - (style ?? DefaultTextStyle.of(context).style).copyWith( - decoration: TextDecoration.underline, - decorationThickness: 4, - decorationColor: selected - ? Theme.of(context).colorScheme.primary - : Colors.white.withAlpha(0), + child: HoverBuilder( + builder: (context, hovered) => MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: onClick != null ? () => onClick?.call(token) : null, + child: RichText( + text: TextSpan( + text: text, + style: renderer.style( + underlineColor: Theme.of(context) + .colorScheme + .primary + .withAlpha(200), + hovered: hovered, + selected: selected, + isNew: newTokens.any((t) => t == token.text), + ), ), ), ), diff --git a/lib/pangea/toolbar/reading_assistance/token_emoji_button.dart b/lib/pangea/toolbar/reading_assistance/token_emoji_button.dart new file mode 100644 index 000000000..f5f5cbc74 --- /dev/null +++ b/lib/pangea/toolbar/reading_assistance/token_emoji_button.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/analytics_misc/lemma_emoji_setter_mixin.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class TokenEmojiButton extends StatelessWidget with LemmaEmojiSetter { + static const double _buttonSize = 24.0; + + final ValueNotifier selectModeNotifier; + final VoidCallback onTap; + final PangeaToken? token; + final String? targetId; + final bool enabled; + final Color textColor; + + const TokenEmojiButton({ + super.key, + required this.selectModeNotifier, + required this.onTap, + required this.textColor, + this.token, + this.targetId, + this.enabled = true, + }); + + bool get _canShow => + MatrixState.pangeaController.subscriptionController.isSubscribed != false; + + @override + Widget build(BuildContext context) { + if (!_canShow) return const SizedBox.shrink(); + + Widget content = ValueListenableBuilder( + valueListenable: selectModeNotifier, + builder: (context, mode, _) { + final visible = mode == SelectMode.emoji; + + return AnimatedSize( + duration: FluffyThemes.animationDuration, + curve: Curves.easeOut, + alignment: Alignment.center, + child: visible + ? InkWell( + onTap: enabled ? onTap : null, + borderRadius: BorderRadius.circular(99), + child: SizedBox( + width: _buttonSize, + height: _buttonSize, + child: Center( + child: _EmojiText( + token: token, + enabled: enabled, + textColor: textColor, + fontSize: _buttonSize - 8, + ), + ), + ), + ) + : const SizedBox.shrink(), + ); + }, + ); + + if (targetId != null) { + final layer = MatrixState.pAnyState.layerLinkAndKey(targetId!); + content = CompositedTransformTarget( + link: layer.link, + child: KeyedSubtree( + key: layer.key, + child: content, + ), + ); + } + + return content; + } +} + +class _EmojiText extends StatelessWidget { + final PangeaToken? token; + final bool enabled; + final Color textColor; + final double fontSize; + + const _EmojiText({ + required this.token, + required this.enabled, + required this.textColor, + required this.fontSize, + }); + + @override + Widget build(BuildContext context) { + if (!enabled || token == null) return const SizedBox.shrink(); + + return StreamBuilder( + stream: Matrix.of(context) + .analyticsDataService + .updateDispatcher + .lemmaUpdateStream(token!.vocabConstructID), + builder: (context, snapshot) { + final emoji = snapshot.data?.emojis?.firstOrNull ?? + token!.vocabConstructID.userSetEmoji; + + return Text( + emoji ?? "-", + style: TextStyle( + fontSize: fontSize, + color: textColor, + ), + textScaler: TextScaler.noScaling, + ); + }, + ); + } +} diff --git a/lib/pangea/toolbar/reading_assistance/token_rendering_util.dart b/lib/pangea/toolbar/reading_assistance/token_rendering_util.dart new file mode 100644 index 000000000..2b51b0ff6 --- /dev/null +++ b/lib/pangea/toolbar/reading_assistance/token_rendering_util.dart @@ -0,0 +1,80 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; + +class TokenRenderingUtil { + final TextStyle existingStyle; + + TokenRenderingUtil({ + required this.existingStyle, + }); + + static final Map _tokensWidthCache = {}; + + TextStyle style({ + required Color underlineColor, + double? fontSize, + bool selected = false, + bool highlighted = false, + bool isNew = false, + bool practiceMode = false, + bool hovered = false, + }) => + existingStyle.copyWith( + fontSize: fontSize, + decoration: TextDecoration.underline, + decorationThickness: 4, + decorationColor: _underlineColor( + underlineColor, + selected: selected, + highlighted: highlighted, + isNew: isNew, + practiceMode: practiceMode, + hovered: hovered, + ), + ); + + double tokenTextWidthForContainer( + String text, + Color underlineColor, { + double? fontSize, + }) { + final tokenSizeKey = "$text-$fontSize"; + if (_tokensWidthCache.containsKey(tokenSizeKey)) { + return _tokensWidthCache[tokenSizeKey]!; + } + + final textPainter = TextPainter( + text: TextSpan( + text: text, + style: style( + underlineColor: underlineColor, + fontSize: fontSize, + ), + ), + maxLines: 1, + textDirection: TextDirection.ltr, + )..layout(); + final width = textPainter.width; + textPainter.dispose(); + + _tokensWidthCache[tokenSizeKey] = width; + return width; + } + + Color _underlineColor( + Color underlineColor, { + bool selected = false, + bool highlighted = false, + bool isNew = false, + bool practiceMode = false, + bool hovered = false, + }) { + if (practiceMode) return Colors.white.withAlpha(0); + if (highlighted) return underlineColor; + if (isNew) return AppConfig.success.withAlpha(200); + if (selected) return underlineColor; + if (hovered) return underlineColor.withAlpha(100); + return Colors.white.withAlpha(0); + } +} diff --git a/lib/pangea/message_token_text/tokens_util.dart b/lib/pangea/toolbar/reading_assistance/tokens_util.dart similarity index 72% rename from lib/pangea/message_token_text/tokens_util.dart rename to lib/pangea/toolbar/reading_assistance/tokens_util.dart index b49c1f464..3f69baa4e 100644 --- a/lib/pangea/message_token_text/tokens_util.dart +++ b/lib/pangea/toolbar/reading_assistance/tokens_util.dart @@ -47,14 +47,15 @@ class TokensUtil { /// A cache of calculated adjacent token positions static final Map _tokenPositionCache = {}; static final Map _newTokenCache = {}; + static PangeaTokenText? _lastCollected; static const Duration _cacheDuration = Duration(minutes: 1); - static List? _getCachedNewTokens(String eventID) { - final cacheItem = _newTokenCache[eventID]; + static List? _getCachedNewTokens(String cacheKey) { + final cacheItem = _newTokenCache[cacheKey]; if (cacheItem == null) return null; if (cacheItem.timestamp.isBefore(DateTime.now().subtract(_cacheDuration))) { - _newTokenCache.remove(eventID); + _newTokenCache.remove(cacheKey); return null; } @@ -62,24 +63,76 @@ class TokensUtil { } static void _setCachedNewTokens( - String eventID, + String cacheKey, List tokens, ) { - _newTokenCache[eventID] = _NewTokenCacheItem( + _newTokenCache[cacheKey] = _NewTokenCacheItem( tokens, DateTime.now(), ); } static List getNewTokens( + String cacheKey, + List tokens, + String tokensLangCode, { + int? maxTokens, + }) { + if (MatrixState + .pangeaController.matrixState.analyticsDataService.isInitializing) { + return []; + } + + final messageInUserL2 = tokensLangCode.split('-').first == + MatrixState.pangeaController.userController.userL2?.langCodeShort; + + final cached = _getCachedNewTokens(cacheKey); + if (cached != null) { + if (!messageInUserL2) { + _newTokenCache.remove(cacheKey); + return []; + } + return cached; + } + + if (!messageInUserL2) return []; + + final List newTokens = []; + final analyticsService = + MatrixState.pangeaController.matrixState.analyticsDataService; + + for (final token in tokens) { + if (!token.lemma.saveVocab || !token.vocabConstructID.isContentWord) { + continue; + } + + if (analyticsService.hasUsedConstruct(token.vocabConstructID)) { + continue; + } + + if (newTokens.any((t) => t == token.text)) continue; + + newTokens.add(token.text); + if (maxTokens != null && newTokens.length >= maxTokens) break; + } + + _setCachedNewTokens(cacheKey, newTokens); + return newTokens; + } + + static List getNewTokensByEvent( PangeaMessageEvent event, ) { - if (!event.eventId.isValidMatrixId) { + if (!event.eventId.isValidMatrixId || + (MatrixState.pangeaController.subscriptionController.isSubscribed == + false) || + MatrixState + .pangeaController.matrixState.analyticsDataService.isInitializing) { return []; } final messageInUserL2 = event.messageDisplayLangCode.split("-")[0] == - MatrixState.pangeaController.languageController.userL2?.langCodeShort; + MatrixState.pangeaController.userController.userL2?.langCodeShort; final cached = _getCachedNewTokens(event.eventId); if (cached != null) { @@ -95,34 +148,38 @@ class TokensUtil { return []; } - final List newTokens = []; - for (final token in tokens) { - if (!token.lemma.saveVocab || !token.isContentWord) continue; - if (token.vocabConstruct.uses.isNotEmpty) continue; - if (newTokens.any((t) => t == token.text)) continue; - - newTokens.add(token.text); - if (newTokens.length >= 3) break; - } - - _setCachedNewTokens(event.eventId, newTokens); - return newTokens; + return getNewTokens( + event.eventId, + tokens, + event.messageDisplayLangCode, + maxTokens: 3, + ); } - static bool isNewToken(PangeaToken token, PangeaMessageEvent event) { - final newTokens = getNewTokens(event); + static bool isNewTokenByEvent(PangeaToken token, PangeaMessageEvent event) { + final newTokens = getNewTokensByEvent(event); return newTokens.any((t) => t == token.text); } - static clearNewTokenCache() { + static void clearNewTokenCache() { _newTokenCache.clear(); } - static List? _getCachedTokenPositions(String eventID) { - final cacheItem = _tokenPositionCache[eventID]; + static void collectToken(String cachedKey, PangeaTokenText token) { + _newTokenCache[cachedKey]?.tokens.remove(token); + _lastCollected = token; + } + + static bool isRecentlyCollected(PangeaTokenText token) => + _lastCollected == token; + + static void clearRecentlyCollected() => _lastCollected = null; + + static List? _getCachedTokenPositions(String cacheKey) { + final cacheItem = _tokenPositionCache[cacheKey]; if (cacheItem == null) return null; if (cacheItem.timestamp.isBefore(DateTime.now().subtract(_cacheDuration))) { - _tokenPositionCache.remove(eventID); + _tokenPositionCache.remove(cacheKey); return null; } @@ -130,10 +187,10 @@ class TokensUtil { } static void _setCachedTokenPositions( - String eventID, + String cacheKey, List positions, ) { - _tokenPositionCache[eventID] = _TokenPositionCacheItem( + _tokenPositionCache[cacheKey] = _TokenPositionCacheItem( positions, DateTime.now(), ); diff --git a/lib/pangea/toolbar/reading_assistance_input_row/reading_assistance_input_bar.dart b/lib/pangea/toolbar/reading_assistance_input_row/reading_assistance_input_bar.dart deleted file mode 100644 index a7e83de6e..000000000 --- a/lib/pangea/toolbar/reading_assistance_input_row/reading_assistance_input_bar.dart +++ /dev/null @@ -1,162 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_mode_locked_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_translation_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_mode_buttons.dart'; - -const double minContentHeight = 120; - -class ReadingAssistanceInputBar extends StatefulWidget { - final MessageOverlayController overlayController; - - const ReadingAssistanceInputBar( - this.overlayController, { - super.key, - }); - - @override - ReadingAssistanceInputBarState createState() => - ReadingAssistanceInputBarState(); -} - -class ReadingAssistanceInputBarState extends State { - final ScrollController _scrollController = ScrollController(); - MessageOverlayController get overlayController => widget.overlayController; - - @override - void dispose() { - _scrollController.dispose(); - super.dispose(); - } - - Widget barContent(BuildContext context) { - Widget? content; - final target = overlayController.toolbarMode.associatedActivityType != null - ? overlayController.practiceSelection?.getSelection( - overlayController.toolbarMode.associatedActivityType!, - overlayController.selectedMorph?.token, - overlayController.selectedMorph?.morph, - ) - : null; - - if (overlayController.pangeaMessageEvent.isAudioMessage == true) { - return const SizedBox(); - // return ReactionsPicker(controller); - } else { - final activityType = overlayController.toolbarMode.associatedActivityType; - final activityCompleted = activityType != null && - overlayController.isPracticeActivityDone(activityType); - - switch (overlayController.toolbarMode) { - case MessageMode.messageSpeechToText: - case MessageMode.practiceActivity: - case MessageMode.wordZoom: - case MessageMode.noneSelected: - case MessageMode.messageMeaning: - content = overlayController.isTotallyDone - ? Text( - L10n.of(context).allDone, - style: Theme.of(context).textTheme.bodyLarge, - textAlign: TextAlign.center, - ) - : Text( - L10n.of(context).choosePracticeMode, - style: Theme.of(context) - .textTheme - .bodyLarge - ?.copyWith(fontStyle: FontStyle.italic), - textAlign: TextAlign.center, - ); - - case MessageMode.messageTranslation: - if (overlayController.isTranslationUnlocked) { - content = MessageTranslationCard( - messageEvent: overlayController.pangeaMessageEvent, - ); - } else { - content = MessageModeLockedCard(controller: overlayController); - } - - case MessageMode.wordEmoji: - case MessageMode.wordMeaning: - case MessageMode.listening: - if (target == null || activityCompleted) { - content = Text( - L10n.of(context).allDone, - style: Theme.of(context).textTheme.bodyLarge, - textAlign: TextAlign.center, - ); - } else { - content = PracticeActivityCard( - targetTokensAndActivityType: target, - overlayController: overlayController, - ); - } - case MessageMode.wordMorph: - if (activityCompleted) { - content = Text( - L10n.of(context).allDone, - style: Theme.of(context).textTheme.bodyLarge, - textAlign: TextAlign.center, - ); - } else if (target != null) { - content = PracticeActivityCard( - targetTokensAndActivityType: target, - overlayController: overlayController, - ); - } else { - content = Center( - child: Text( - L10n.of(context).selectForGrammar, - style: Theme.of(context).textTheme.bodyLarge, - textAlign: TextAlign.center, - ), - ); - } - } - } - - return content; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - PracticeModeButtons( - overlayController: overlayController, - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Material( - borderRadius: BorderRadius.circular(AppConfig.borderRadius), - child: Container( - padding: const EdgeInsets.all(8.0), - alignment: Alignment.center, - constraints: const BoxConstraints( - minHeight: minContentHeight, - maxHeight: AppConfig.readingAssistanceInputBarHeight, - ), - child: Scrollbar( - thumbVisibility: true, - controller: _scrollController, - child: SingleChildScrollView( - controller: _scrollController, - child: SizedBox( - width: overlayController.maxWidth, - child: barContent(context), - ), - ), - ), - ), - ), - ), - ], - ); - } -} diff --git a/lib/pangea/toolbar/reading_assistance_input_row/word_emoji_choice.dart b/lib/pangea/toolbar/reading_assistance_input_row/word_emoji_choice.dart deleted file mode 100644 index 1e10e9af4..000000000 --- a/lib/pangea/toolbar/reading_assistance_input_row/word_emoji_choice.dart +++ /dev/null @@ -1,132 +0,0 @@ -// import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -// import 'package:fluffychat/pangea/analytics_misc/construct_use_type_enum.dart'; -// import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -// import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; -// import 'package:fluffychat/pangea/choreographer/widgets/choice_array.dart'; -// import 'package:fluffychat/pangea/choreographer/widgets/it_shimmer.dart'; -// import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -// import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -// import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -// import 'package:fluffychat/widgets/matrix.dart'; -// import 'package:flutter/material.dart'; -// import 'package:fluffychat/l10n/l10n.dart'; - -// class WordEmojiChoice extends StatefulWidget { -// const WordEmojiChoice({ -// super.key, -// required this.constructID, -// required this.onEmojiChosen, -// required this.form, -// this.roomId, -// this.eventId, -// }); - -// final ConstructIdentifier constructID; -// final String form; -// final String? roomId; -// final String? eventId; -// final void Function() onEmojiChosen; - -// @override -// WordEmojiChoiceState createState() => WordEmojiChoiceState(); -// } - -// class WordEmojiChoiceState extends State { -// String? localSelected; - -// @override -// void initState() { -// super.initState(); -// localSelected = widget.constructID.userSetEmoji.single; -// } - -// Future onChoice(BuildContext context, emoji) async { -// setState(() => localSelected = emoji); - -// MatrixState.pangeaController.putAnalytics.setState( -// AnalyticsStream( -// eventId: widget.eventId, -// roomId: widget.roomId, -// constructs: [ -// OneConstructUse( -// useType: ConstructUseTypeEnum.em, -// lemma: widget.constructID.lemma, -// constructType: ConstructTypeEnum.vocab, -// metadata: ConstructUseMetaData( -// roomId: widget.roomId, -// timeStamp: DateTime.now(), -// eventId: widget.eventId, -// ), -// category: widget.constructID.category, -// form: widget.form, -// ), -// ], -// origin: AnalyticsUpdateOrigin.wordZoom, -// ), -// ); - -// await widget.constructID.setEmoji(emoji); - -// await Future.delayed( -// const Duration(milliseconds: choiceArrayAnimationDuration), -// ); - -// widget.onEmojiChosen(); - -// setState(() => {}); -// } - -// @override -// Widget build(BuildContext context) { -// return SingleChildScrollView( -// child: Column( -// mainAxisAlignment: MainAxisAlignment.center, -// mainAxisSize: MainAxisSize.max, -// children: [ -// FutureBuilder( -// future: widget.constructID.getEmojiChoices(), -// builder: (context, snapshot) { -// if (snapshot.hasError) { -// return Text(L10n.of(context).oopsSomethingWentWrong); -// } - -// if (snapshot.connectionState == ConnectionState.waiting || -// snapshot.data == null) { -// return const ItShimmer(originalSpan: "😀", fontSize: 26); -// } - -// return ChoicesArray( -// isLoading: snapshot.connectionState == ConnectionState.waiting, -// choices: snapshot.data! -// .map( -// (emoji) => Choice( -// color: localSelected == emoji -// ? Theme.of(context).colorScheme.primary -// : Colors.transparent, -// text: emoji, -// isGold: localSelected == emoji, -// ), -// ) -// .toList(), -// onPressed: (emoji, index) => onChoice(context, emoji), -// originalSpan: "😀", -// uniqueKeyForLayerLink: (int index) => "emojiChoice$index", -// selectedChoiceIndex: snapshot.data!.indexWhere( -// (element) => element == widget.constructID.userSetEmoji, -// ), -// tts: null, -// fontSize: 26, -// enableMultiSelect: true, -// isActive: true, -// overflowMode: OverflowMode.horizontalScroll, -// ); -// }, -// ), -// const InstructionsInlineTooltip( -// instructionsEnum: InstructionsEnum.chooseEmoji, -// ), -// ], -// ), -// ); -// } -// } diff --git a/lib/pangea/toolbar/token_rendering_mixin.dart b/lib/pangea/toolbar/token_rendering_mixin.dart new file mode 100644 index 000000000..082a4e8f8 --- /dev/null +++ b/lib/pangea/toolbar/token_rendering_mixin.dart @@ -0,0 +1,40 @@ +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.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/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; + +mixin TokenRenderingMixin { + Future collectNewToken( + String cacheKey, + String targetId, + PangeaToken token, + AnalyticsDataService analyticsService, { + String? roomId, + String? eventId, + }) async { + TokensUtil.collectToken(cacheKey, token.text); + final constructs = [ + OneConstructUse( + useType: ConstructUseTypeEnum.click, + lemma: token.lemma.text, + constructType: ConstructTypeEnum.vocab, + metadata: ConstructUseMetaData( + roomId: roomId, + timeStamp: DateTime.now(), + eventId: eventId, + ), + category: token.pos, + form: token.text.content, + xp: ConstructUseTypeEnum.click.pointValue, + ), + ]; + + await analyticsService.updateService.addAnalytics( + targetId, + constructs, + ); + TokensUtil.clearNewTokenCache(); + } +} diff --git a/lib/pangea/toolbar/utils/token_rendering_util.dart b/lib/pangea/toolbar/utils/token_rendering_util.dart deleted file mode 100644 index abb7a15bf..000000000 --- a/lib/pangea/toolbar/utils/token_rendering_util.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; - -class TokenRenderingUtil { - final PangeaMessageEvent? pangeaMessageEvent; - final ReadingAssistanceMode? readingAssistanceMode; - final MessageOverlayController? overlayController; - final bool isTransitionAnimation; - final TextStyle existingStyle; - - static final Map _tokensWidthCache = {}; - - TokenRenderingUtil({ - required this.pangeaMessageEvent, - required this.readingAssistanceMode, - required this.existingStyle, - this.overlayController, - this.isTransitionAnimation = false, - }); - - bool get showCenterStyling { - if (overlayController == null) return false; - if (!isTransitionAnimation) return true; - return readingAssistanceMode == ReadingAssistanceMode.practiceMode; - } - - double? fontSize(BuildContext context) => showCenterStyling - ? overlayController != null && overlayController!.maxWidth > 600 - ? Theme.of(context).textTheme.titleLarge?.fontSize - : Theme.of(context).textTheme.bodyLarge?.fontSize - : null; - - TextStyle style( - BuildContext context, { - Color? color, - }) => - existingStyle.copyWith( - fontSize: fontSize(context), - decoration: TextDecoration.underline, - decorationThickness: 4, - decorationColor: color ?? Colors.white.withAlpha(0), - ); - - double tokenTextWidthForContainer(BuildContext context, String text) { - final tokenSizeKey = "$text-${fontSize(context)}"; - if (_tokensWidthCache.containsKey(tokenSizeKey)) { - return _tokensWidthCache[tokenSizeKey]!; - } - - final textPainter = TextPainter( - text: TextSpan( - text: text, - style: style(context), - ), - maxLines: 1, - textDirection: TextDirection.ltr, - )..layout(); - final width = textPainter.width; - textPainter.dispose(); - - _tokensWidthCache[tokenSizeKey] = width; - return width; - } - - // Only one token on the screen can have the token's unique key at a time. - // When readingAssistanceMode is not null, there are two messages - the centered message and the transition message. - // When in word mode, the key goes to the transition message. - // If actively transitioning, neither gets the keys. - // If in message mode, the key goes to the centered message (isTransitionAnimation == false). - bool get assignTokenKey { - if (readingAssistanceMode == null) { - return false; - } - - switch (readingAssistanceMode!) { - case ReadingAssistanceMode.selectMode: - return isTransitionAnimation; - case ReadingAssistanceMode.transitionMode: - return false; - case ReadingAssistanceMode.practiceMode: - return !isTransitionAnimation; - } - } - - Color backgroundColor( - BuildContext context, - bool selected, - bool highlighted, - bool isNew, - bool practiceMode, - ) { - if (practiceMode) return Colors.white.withAlpha(0); - if (highlighted) { - return Theme.of(context).colorScheme.primary.withAlpha(200); - } - if (isNew) return AppConfig.success.withAlpha(200); - return selected - ? Theme.of(context).colorScheme.primary.withAlpha(200) - : Colors.white.withAlpha(0); - } -} diff --git a/lib/pangea/toolbar/utils/update_version_dialog.dart b/lib/pangea/toolbar/utils/update_version_dialog.dart deleted file mode 100644 index 88961f3f5..000000000 --- a/lib/pangea/toolbar/utils/update_version_dialog.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; - -Future showUpdateVersionDialog({ - required Future Function() future, - required BuildContext context, -}) async { - try { - await future(); - return true; - } catch (err, s) { - ErrorHandler.logError( - e: err, - s: s, - data: {}, - ); - await showOkAlertDialog( - context: context, - title: L10n.of(context).oopsSomethingWentWrong, - message: L10n.of(context).updatePhoneOS, - okLabel: L10n.of(context).close, - ); - return false; - } -} diff --git a/lib/pangea/toolbar/widgets/message_meaning_button.dart b/lib/pangea/toolbar/widgets/message_meaning_button.dart deleted file mode 100644 index 044d913a8..000000000 --- a/lib/pangea/toolbar/widgets/message_meaning_button.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/toolbar_button.dart'; - -class MessageMeaningButton extends StatelessWidget { - final MessageOverlayController overlayController; - final double buttonSize; - - const MessageMeaningButton({ - super.key, - required this.overlayController, - required this.buttonSize, - }); - - @override - Widget build(BuildContext context) { - return AnimatedCrossFade( - crossFadeState: overlayController.isPracticeComplete - ? CrossFadeState.showSecond - : CrossFadeState.showFirst, - duration: FluffyThemes.animationDuration, - firstChild: ToolbarButton( - mode: MessageMode.messageMeaning, - overlayController: overlayController, - buttonSize: buttonSize, - ), - secondChild: Container( - width: buttonSize, - height: buttonSize, - alignment: Alignment.center, - child: Icon( - MessageMode.messageMeaning.icon, - color: AppConfig.gold, - size: buttonSize, - ), - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/message_meaning_card.dart b/lib/pangea/toolbar/widgets/message_meaning_card.dart deleted file mode 100644 index 10e954a01..000000000 --- a/lib/pangea/toolbar/widgets/message_meaning_card.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; - -class MessageMeaningCard extends StatelessWidget { - final MessageOverlayController controller; - - const MessageMeaningCard({super.key, required this.controller}); - - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: AppConfig.toolbarMinWidth, - maxHeight: AppConfig.toolbarMaxHeight, - ), - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.fromLTRB(16, 20, 16, 16), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.sports_martial_arts, - color: Theme.of(context).colorScheme.primary, - ), - const SizedBox(width: 8), - Flexible( - child: TextButton( - onPressed: () => controller.onRequestForMeaningChallenge(), - child: Text( - L10n.of(context).clickForMeaningActivity, - textAlign: TextAlign.center, - ), - ), - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/message_mode_locked_card.dart b/lib/pangea/toolbar/widgets/message_mode_locked_card.dart deleted file mode 100644 index 1ca6f1519..000000000 --- a/lib/pangea/toolbar/widgets/message_mode_locked_card.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; - -class MessageModeLockedCard extends StatelessWidget { - final MessageOverlayController controller; - - const MessageModeLockedCard({super.key, required this.controller}); - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - Icon( - Icons.lock_outline, - size: 40, - color: Theme.of(context).colorScheme.primary, - ), - // if (!InstructionsEnum.completeActivitiesToUnlock.isToggledOff) ...[ - // const SizedBox(height: 8), - // const InstructionsInlineTooltip( - // instructionsEnum: InstructionsEnum.completeActivitiesToUnlock, - // bold: true, - // ), - // ], - ], - ); - } -} diff --git a/lib/pangea/toolbar/widgets/message_selection_overlay.dart b/lib/pangea/toolbar/widgets/message_selection_overlay.dart deleted file mode 100644 index fe928f2a9..000000000 --- a/lib/pangea/toolbar/widgets/message_selection_overlay.dart +++ /dev/null @@ -1,684 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; - -import 'package:collection/collection.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pages/chat/chat.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/analytics_misc/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/utils/overlay.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_representation_event.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/lemmas/lemma_emoji_picker.dart'; -import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_choice.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_selection.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_selection_repo.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/text_to_speech_controller.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/enums/reading_assistance_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/morph_selection.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_positioner.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/select_mode_buttons.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -/// Controls data at the top level of the toolbar (mainly token / toolbar mode selection) -class MessageSelectionOverlay extends StatefulWidget { - final ChatController chatController; - final Event _event; - final Event? _nextEvent; - final Event? _prevEvent; - final PangeaToken? _initialSelectedToken; - final Timeline _timeline; - - const MessageSelectionOverlay({ - required this.chatController, - required Event event, - required PangeaToken? initialSelectedToken, - required Event? nextEvent, - required Event? prevEvent, - required Timeline timeline, - super.key, - }) : _initialSelectedToken = initialSelectedToken, - _nextEvent = nextEvent, - _prevEvent = prevEvent, - _event = event, - _timeline = timeline; - - @override - MessageOverlayController createState() => MessageOverlayController(); -} - -class MessageOverlayController extends State - with SingleTickerProviderStateMixin { - Event get event => widget._event; - ///////////////////////////////////// - /// Variables - ///////////////////////////////////// - MessageMode toolbarMode = MessageMode.noneSelected; - - /// set and cleared by the PracticeActivityCard - /// has to be at this level so drag targets can access it - PracticeActivityModel? activity; - - /// selectedMorph is used for morph activities - MorphSelection? selectedMorph; - - /// tracks selected choice - PracticeChoice? selectedChoice; - - PangeaTokenText? _selectedSpan; - - List? _highlightedTokens; - bool initialized = false; - - ReadingAssistanceMode? readingAssistanceMode; // default mode - - SpeechToTextModel? transcription; - String? transcriptionError; - - bool showTranslation = false; - String? translation; - - bool showSpeechTranslation = false; - String? speechTranslation; - - final StreamController contentChangedStream = StreamController.broadcast(); - - double maxWidth = AppConfig.toolbarMinWidth; - - SelectMode? selectedMode; - - ///////////////////////////////////// - /// Lifecycle - ///////////////////////////////////// - - @override - void initState() { - super.initState(); - initializeTokensAndMode(); - WidgetsBinding.instance.addPostFrameCallback( - (_) => widget.chatController.setSelectedEvent(event), - ); - } - - @override - void dispose() { - WidgetsBinding.instance.addPostFrameCallback( - (_) => widget.chatController.clearSelectedEvents(), - ); - contentChangedStream.close(); - super.dispose(); - } - - Future initializeTokensAndMode() async { - try { - if (pangeaMessageEvent.event.messageType != MessageTypes.Text) { - return; - } - - RepresentationEvent? repEvent = - pangeaMessageEvent.messageDisplayRepresentation; - - if (repEvent == null || - (repEvent.event == null && repEvent.tokens == null)) { - repEvent = await _fetchNewRepEvent(); - } - - if (repEvent?.event != null) { - await repEvent!.sendTokensEvent( - repEvent.event!.eventId, - widget._event.room, - MatrixState.pangeaController.languageController.userL1!.langCode, - MatrixState.pangeaController.languageController.userL2!.langCode, - ); - } - } catch (e, s) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: e, - s: s, - data: { - "eventID": pangeaMessageEvent.eventId, - }, - ); - } finally { - _initializeSelectedToken(); - _setInitialToolbarMode(); - initialized = true; - if (mounted) setState(() {}); - } - } - - Future _setInitialToolbarMode() async { - // 1) if we have a hidden word activity, then we should start with that - if (practiceSelection?.hasHiddenWordActivity ?? false) { - updateToolbarMode(MessageMode.practiceActivity); - return; - } - } - - /// Decides whether an _initialSelectedToken should be used - /// for a first practice activity on the word meaning - Future _initializeSelectedToken() async { - // if there is no initial selected token, then we don't need to do anything - if (widget._initialSelectedToken == null || practiceSelection == null) { - return; - } - - // should not already be involved in a hidden word activity - // final isInHiddenWordActivity = - // messageAnalyticsEntry!.isTokenInHiddenWordActivity( - // widget._initialSelectedToken!, - // ); - - // // whether the activity should generally be involved in an activity - if (practiceSelection?.hasHiddenWordActivity == true) { - return; - } - - updateSelectedSpan(widget._initialSelectedToken!.text); - - // int retries = 0; - // while (retries < 5 && - // selectedToken != null && - // !MatrixState.pAnyState.isOverlayOpen( - // selectedToken!.text.uniqueKey, - // )) { - // await Future.delayed(const Duration(milliseconds: 100)); - // _showReadingAssistanceContent(); - // retries++; - // } - } - - ///////////////////////////////////// - /// State setting - ///////////////////////////////////// - - /// We need to check if the setState call is safe to call immediately - /// Kept getting the error: setState() or markNeedsBuild() called during build. - /// This is a workaround to prevent that error - @override - void setState(VoidCallback fn) { - // if (pangeaMessageEvent != null) { - // debugger(when: kDebugMode); - // modeLevel = toolbarMode.currentChoiceMode(this, pangeaMessageEvent!); - // } else { - // debugger(when: kDebugMode); - // } - - final phase = SchedulerBinding.instance.schedulerPhase; - if (mounted && - (phase == SchedulerPhase.idle || - phase == SchedulerPhase.postFrameCallbacks)) { - // It's safe to call setState immediately - try { - super.setState(fn); - } catch (e, s) { - ErrorHandler.logError( - e: "Error calling setState in MessageSelectionOverlay: $e", - s: s, - data: {}, - ); - } - } else { - // Defer the setState call to after the current frame - WidgetsBinding.instance.addPostFrameCallback((_) { - try { - if (mounted) super.setState(fn); - } catch (e, s) { - ErrorHandler.logError( - e: "Error calling setState in MessageSelectionOverlay after postframeCallback: $e", - s: s, - data: {}, - ); - } - }); - } - } - - /// Update [selectedSpan] - void updateSelectedSpan(PangeaTokenText? selectedSpan) { - if (selectedSpan == _selectedSpan) return; - if (selectedMorph != null) { - selectedMorph = null; - } - - _selectedSpan = selectedSpan; - if (selectedMode == SelectMode.emoji && selectedToken != null) { - showTokenEmojiPopup(selectedToken!); - } - if (mounted) { - setState(() {}); - if (selectedToken != null) onSelectNewToken(selectedToken!); - } - } - - void updateToolbarMode(MessageMode mode) => setState(() { - selectedChoice = null; - - // close overlay of any selected token - if (_selectedSpan != null) { - updateSelectedSpan(_selectedSpan!); - } - - toolbarMode = mode; - if (toolbarMode != MessageMode.wordMorph) { - selectedMorph = null; - } - }); - - /////////////////////////////////// - /// User action handlers - ///////////////////////////////////// - void onRequestForMeaningChallenge() { - if (practiceSelection == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: "MessageAnalyticsEntry is null in onRequestForMeaningChallenge", - data: {}, - ); - return; - } - practiceSelection!.addMessageMeaningActivity(); - - if (mounted) { - setState(() {}); - } - } - - void onChoiceSelect(PracticeChoice? choice, [bool force = false]) { - if (selectedChoice == choice && !force) { - selectedChoice = null; - } else { - selectedChoice = choice; - } - - setState(() {}); - } - - void onMorphActivitySelect(MorphSelection newMorph) { - toolbarMode = MessageMode.wordMorph; - // // close overlay of previous token - if (_selectedSpan != null && _selectedSpan != newMorph.token.text) { - updateSelectedSpan(_selectedSpan!); - } - selectedMorph = newMorph; - setState(() {}); - } - - ///////////////////////////////////// - /// Getters - //////////////////////////////////// - PangeaMessageEvent get pangeaMessageEvent => PangeaMessageEvent( - event: widget._event, - timeline: widget._timeline, - ownMessage: widget._event.room.client.userID == widget._event.senderId, - ); - - bool get hideWordCardContent => - readingAssistanceMode == ReadingAssistanceMode.practiceMode; - - bool get isPracticeComplete => isTranslationUnlocked; - - bool isPracticeActivityDone(ActivityTypeEnum activityType) => - practiceSelection?.activities(activityType).every((a) => a.isComplete) == - true; - - bool get isEmojiDone => isPracticeActivityDone(ActivityTypeEnum.emoji); - - bool get isMeaningDone => - isPracticeActivityDone(ActivityTypeEnum.wordMeaning); - - bool get isListeningDone => - isPracticeActivityDone(ActivityTypeEnum.wordFocusListening); - - bool get isMorphDone => isPracticeActivityDone(ActivityTypeEnum.morphId); - - /// you have to complete one of the mode mini-games to unlock translation - bool get isTranslationUnlocked => - pangeaMessageEvent.ownMessage == true || - !messageInUserL2 || - isEmojiDone || - isMeaningDone || - isListeningDone || - isMorphDone; - - bool get isTotallyDone => - isEmojiDone && isMeaningDone && isListeningDone && isMorphDone; - - PracticeSelection? get practiceSelection => - pangeaMessageEvent.messageDisplayRepresentation?.tokens != null - ? PracticeSelectionRepo.get( - pangeaMessageEvent.messageDisplayLangCode, - pangeaMessageEvent.messageDisplayRepresentation!.tokens!, - ) - : null; - - bool get messageInUserL2 => - pangeaMessageEvent.messageDisplayLangCode.split("-")[0] == - MatrixState.pangeaController.languageController.userL2?.langCodeShort; - - PangeaToken? get selectedToken { - if (pangeaMessageEvent.isAudioMessage == true) { - final stt = pangeaMessageEvent.getSpeechToTextLocal(); - if (stt == null || stt.transcript.sttTokens.isEmpty) return null; - return stt.transcript.sttTokens - .firstWhereOrNull((t) => isTokenSelected(t.token)) - ?.token; - } - - return pangeaMessageEvent.messageDisplayRepresentation?.tokens - ?.firstWhereOrNull(isTokenSelected); - } - - bool get showingExtraContent => - (showTranslation && translation != null) || - (showSpeechTranslation && speechTranslation != null) || - transcription != null || - transcriptionError != null; - - bool get showLanguageAssistance { - if (!event.status.isSent || event.type != EventTypes.Message) { - return false; - } - - if (event.messageType == MessageTypes.Text) { - return pangeaMessageEvent.messageDisplayLangCode.split("-").first == - MatrixState.pangeaController.languageController.userL2!.langCodeShort; - } - - return event.messageType == MessageTypes.Audio; - } - - /////////////////////////////////// - /// Functions - ///////////////////////////////////// - - /// If sentence TTS is playing a word, highlight that word in message overlay - void highlightCurrentText(int currentPosition, List ttsTokens) { - final List textToSelect = []; - // Check if current time is between start and end times of tokens - for (final TTSToken token in ttsTokens) { - if (token.endMS > currentPosition) { - if (token.startMS < currentPosition) { - textToSelect.add(token); - } else { - break; - } - } - } - - if (const ListEquality().equals(textToSelect, _highlightedTokens)) return; - _highlightedTokens = - textToSelect.isEmpty ? null : textToSelect.map((t) => t.text).toList(); - setState(() {}); - } - - Future _fetchNewRepEvent() async { - final RepresentationEvent? repEvent = - pangeaMessageEvent.messageDisplayRepresentation; - - if (repEvent != null) return repEvent; - final eventID = await pangeaMessageEvent.representationByDetectedLanguage(); - - if (eventID == null) return null; - final event = await widget._event.room.getEventById(eventID); - if (event == null) return null; - return RepresentationEvent( - timeline: pangeaMessageEvent.timeline, - parentMessageEvent: pangeaMessageEvent.event, - event: event, - ); - } - - /// When an activity is completed, we need to update the state - /// and check if the toolbar should be unlocked - void onActivityFinish(ActivityTypeEnum activityType, PangeaToken? token) { - // if (selectedToken == null) { - // updateToolbarMode(MessageMode.noneSelected); - // } - - if (!mounted) return; - setState(() {}); - } - - /// In some cases, we need to exit the practice flow and let the user - /// interact with the toolbar without completing activities - void exitPracticeFlow() { - practiceSelection?.exitPracticeFlow(); - setState(() {}); - } - - PracticeTarget? practiceTargetForToken(PangeaToken token) { - if (toolbarMode.associatedActivityType == null) return null; - return practiceSelection - ?.activities(toolbarMode.associatedActivityType!) - .firstWhereOrNull((a) => a.tokens.contains(token)); - } - - void onClickOverlayMessageToken( - PangeaToken token, - ) { - if (practiceSelection?.hasHiddenWordActivity == true || - readingAssistanceMode == ReadingAssistanceMode.practiceMode) { - return; - } - - /// we don't want to associate the audio with the text in this mode - if (practiceSelection?.hasActiveActivityByToken( - ActivityTypeEnum.wordFocusListening, - token, - ) == - false || - !hideWordCardContent) { - TtsController.tryToSpeak( - token.text.content, - targetID: null, - langCode: pangeaMessageEvent.messageDisplayLangCode, - ); - } - - updateSelectedSpan(token.text); - } - - void onSelectNewToken(PangeaToken token) { - if (!isNewToken(token)) return; - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - eventId: event.eventId, - roomId: event.room.id, - constructs: [ - OneConstructUse( - useType: ConstructUseTypeEnum.click, - lemma: token.lemma.text, - constructType: ConstructTypeEnum.vocab, - metadata: ConstructUseMetaData( - roomId: event.room.id, - timeStamp: DateTime.now(), - eventId: event.eventId, - ), - category: token.pos, - form: token.text.content, - xp: ConstructUseTypeEnum.click.pointValue, - ), - ], - targetID: "word-zoom-card-${token.text.uniqueKey}", - ), - ); - } - - /// Whether the given token is currently selected or highlighted - bool isTokenSelected(PangeaToken token) { - final isSelected = _selectedSpan?.offset == token.text.offset && - _selectedSpan?.length == token.text.length; - return isSelected; - } - - bool isNewToken(PangeaToken token) => - TokensUtil.isNewToken(token, pangeaMessageEvent); - - bool isTokenHighlighted(PangeaToken token) { - if (_highlightedTokens == null) return false; - return _highlightedTokens!.any( - (t) => t.offset == token.text.offset && t.length == token.text.length, - ); - } - - void setSelectMode(SelectMode? mode) { - if (!mounted) return; - if (selectedMode == mode) return; - setState(() => selectedMode = mode); - } - - void setTranslation(String value) { - if (mounted) { - setState(() { - translation = value; - contentChangedStream.add(true); - }); - } - } - - void setShowTranslation(bool show) { - if (!mounted) return; - if (translation == null) { - setState(() => showTranslation = false); - } - - if (showTranslation == show) return; - setState(() { - showTranslation = show; - contentChangedStream.add(true); - }); - } - - void setSpeechTranslation(String value) { - if (mounted) { - setState(() { - speechTranslation = value; - contentChangedStream.add(true); - }); - } - } - - void setShowSpeechTranslation(bool show) { - if (!mounted) return; - if (speechTranslation == null) { - setState(() => showSpeechTranslation = false); - } - - if (showSpeechTranslation == show) return; - setState(() { - showSpeechTranslation = show; - contentChangedStream.add(true); - }); - } - - void setTranscription(SpeechToTextModel value) { - if (mounted) { - setState(() { - transcriptionError = null; - transcription = value; - contentChangedStream.add(true); - }); - } - } - - void setTranscriptionError(String value) { - if (mounted) { - setState(() { - transcriptionError = value; - contentChangedStream.add(true); - }); - } - } - - void showTokenEmojiPopup( - PangeaToken token, - ) { - OverlayUtil.showPositionedCard( - overlayKey: "overlay_emoji_selector_${event.eventId}", - context: context, - cardToShow: LemmaMeaningBuilder( - langCode: - MatrixState.pangeaController.languageController.activeL2Code()!, - constructId: token.vocabConstructID, - builder: (context, controller) { - return Material( - type: MaterialType.transparency, - child: Container( - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.surface, - borderRadius: BorderRadius.circular( - AppConfig.borderRadius, - ), - ), - child: LemmaEmojiPicker( - emojis: controller.lemmaInfo?.emoji ?? [], - onSelect: (emoji) async { - final resp = await showFutureLoadingDialog( - context: context, - future: () => setTokenEmoji(token, emoji), - ); - if (mounted && !resp.isError) { - MatrixState.pAnyState.closeOverlay( - "overlay_emoji_selector_${event.eventId}", - ); - } - }, - loading: controller.isLoading, - ), - ), - ); - }, - ), - transformTargetId: tokenEmojiPopupKey(token), - closePrevOverlay: false, - addBorder: false, - maxWidth: (40 * 5) + (4 * 5) + 16, - maxHeight: 60, - ); - } - - Future setTokenEmoji(PangeaToken token, String emoji) async { - await token.setEmoji([emoji]); - if (mounted) setState(() {}); - } - - String tokenEmojiPopupKey(PangeaToken token) => - "${token.uniqueId}_${event.eventId}_emoji_button"; - - ///////////////////////////////////// - /// Build - ///////////////////////////////////// - @override - Widget build(BuildContext context) { - return MessageSelectionPositioner( - overlayController: this, - chatController: widget.chatController, - event: widget._event, - nextEvent: widget._nextEvent, - prevEvent: widget._prevEvent, - initialSelectedToken: widget._initialSelectedToken, - ); - } -} diff --git a/lib/pangea/toolbar/widgets/message_toolbar_selection_area.dart b/lib/pangea/toolbar/widgets/message_toolbar_selection_area.dart deleted file mode 100644 index eae99d9ae..000000000 --- a/lib/pangea/toolbar/widgets/message_toolbar_selection_area.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; - -class ToolbarSelectionArea extends StatelessWidget { - final Event event; - final ChatController controller; - final PangeaMessageEvent? pangeaMessageEvent; - final bool isOverlay; - final Widget child; - final Event? nextEvent; - final Event? prevEvent; - - const ToolbarSelectionArea({ - required this.event, - required this.controller, - this.pangeaMessageEvent, - this.isOverlay = false, - required this.child, - this.nextEvent, - this.prevEvent, - super.key, - }); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - if (pangeaMessageEvent != null && !isOverlay) { - controller.showToolbar( - event, - pangeaMessageEvent: pangeaMessageEvent, - nextEvent: nextEvent, - prevEvent: prevEvent, - ); - } - }, - onLongPress: () { - if (pangeaMessageEvent != null && !isOverlay) { - controller.showToolbar( - event, - pangeaMessageEvent: pangeaMessageEvent, - nextEvent: nextEvent, - prevEvent: prevEvent, - ); - } - }, - child: child, - ); - } -} diff --git a/lib/pangea/toolbar/widgets/message_translation_card.dart b/lib/pangea/toolbar/widgets/message_translation_card.dart deleted file mode 100644 index 76fce80d6..000000000 --- a/lib/pangea/toolbar/widgets/message_translation_card.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/models/representation_content_model.dart'; -import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; -import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class MessageTranslationCard extends StatefulWidget { - final PangeaMessageEvent messageEvent; - - const MessageTranslationCard({ - super.key, - required this.messageEvent, - }); - - @override - MessageTranslationCardState createState() => MessageTranslationCardState(); -} - -class MessageTranslationCardState extends State { - PangeaRepresentation? repEvent; - bool _fetchingTranslation = false; - - @override - void initState() { - super.initState(); - loadTranslation(); - } - - Future loadTranslation() async { - if (!mounted) return; - try { - setState(() => _fetchingTranslation = true); - repEvent = await widget.messageEvent.l1Respresentation(); - } catch (err) { - ErrorHandler.logError( - e: err, - data: {}, - ); - } finally { - if (mounted) { - setState(() => _fetchingTranslation = false); - } - } - } - - String? get l1Code => - MatrixState.pangeaController.languageController.activeL1Code(); - String? get l2Code => - MatrixState.pangeaController.languageController.activeL2Code(); - - /// Show warning if message's language code is user's L1 - /// or if translated text is same as original text. - /// Warning does not show if was previously closed - bool get notGoingToTranslate { - final bool isWrittenInL1 = - l1Code != null && widget.messageEvent.originalSent?.langCode == l1Code; - - return isWrittenInL1; - } - - @override - Widget build(BuildContext context) { - debugPrint('MessageTranslationCard build'); - if (!_fetchingTranslation && repEvent == null) { - return CardErrorWidget( - error: L10n.of(context).errorFetchingTranslation, - maxWidth: AppConfig.toolbarMinWidth, - ); - } - - final loadingTranslation = repEvent == null; - - if (_fetchingTranslation || loadingTranslation) { - return const ToolbarContentLoadingIndicator(); - } - - return Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - repEvent!.text, - style: AppConfig.messageTextStyle( - widget.messageEvent.event, - Theme.of(context).colorScheme.primary, - ), - textAlign: TextAlign.center, - ), - if (notGoingToTranslate) - const InstructionsInlineTooltip( - instructionsEnum: InstructionsEnum.l1Translation, - ), - ], - ); - } -} diff --git a/lib/pangea/toolbar/widgets/missing_voice_button.dart b/lib/pangea/toolbar/widgets/missing_voice_button.dart deleted file mode 100644 index 4e1666ec2..000000000 --- a/lib/pangea/toolbar/widgets/missing_voice_button.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'dart:io'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:android_intent_plus/android_intent.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/widgets/future_loading_dialog.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class MissingVoiceButton extends StatelessWidget { - const MissingVoiceButton({super.key}); - - Future launchTTSSettings(BuildContext context) async { - if (!kIsWeb && Platform.isAndroid) { - const intent = AndroidIntent( - action: 'com.android.settings.TTS_SETTINGS', - package: 'com.talktolearn.chat', - ); - - await showFutureLoadingDialog( - context: context, - future: intent.launch, - ); - } - } - - @override - Widget build(BuildContext context) { - if (kIsWeb || !Platform.isAndroid) { - return const SizedBox(); - } - - return TextButton( - style: ButtonStyle( - backgroundColor: WidgetStateProperty.all( - Theme.of(context).colorScheme.primary.withAlpha(25), - ), - ), - onPressed: () async { - MatrixState.pAnyState.closeOverlay(); - await launchTTSSettings(context); - }, - child: Center( - child: Text(L10n.of(context).openVoiceSettings), - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart b/lib/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart deleted file mode 100644 index 4bec6d586..000000000 --- a/lib/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart +++ /dev/null @@ -1,264 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/pangea/analytics_misc/put_analytics_controller.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/choice_array.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_record.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_audio_button.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -/// The multiple choice activity view -class MultipleChoiceActivity extends StatefulWidget { - final PracticeActivityCardState practiceCardController; - final PracticeActivityModel currentActivity; - final VoidCallback? onError; - final MessageOverlayController overlayController; - final String? initialSelectedChoice; - final bool clearResponsesOnUpdate; - - const MultipleChoiceActivity({ - super.key, - required this.practiceCardController, - required this.currentActivity, - required this.overlayController, - this.initialSelectedChoice, - this.clearResponsesOnUpdate = false, - this.onError, - }); - - @override - MultipleChoiceActivityState createState() => MultipleChoiceActivityState(); -} - -class MultipleChoiceActivityState extends State { - int? selectedChoiceIndex; - - PracticeRecord? get currentRecordModel => - widget.practiceCardController.currentCompletionRecord; - - @override - void initState() { - super.initState(); - if (widget.currentActivity.multipleChoiceContent == null) { - throw Exception( - "MultipleChoiceActivityState: currentActivity.multipleChoiceContent is null", - ); - } - if (widget.initialSelectedChoice != null) { - currentRecordModel?.addResponse( - target: widget.currentActivity.practiceTarget, - cId: widget.currentActivity.morphFeature == null - ? widget.currentActivity.targetTokens.first.vocabConstructID - : widget.currentActivity.targetTokens.first - .morphIdByFeature(widget.currentActivity.morphFeature!)!, - text: widget.initialSelectedChoice, - score: 1, - ); - } - } - - @override - void didUpdateWidget(covariant MultipleChoiceActivity oldWidget) { - super.didUpdateWidget(oldWidget); - if (widget.currentActivity.hashCode != oldWidget.currentActivity.hashCode) { - setState(() => selectedChoiceIndex = null); - } - } - - void updateChoice(String value, int index) { - final bool isCorrect = - widget.currentActivity.multipleChoiceContent!.isCorrect(value, index); - - if (currentRecordModel?.hasTextResponse(value) ?? false) { - return; - } - - if (widget.clearResponsesOnUpdate) { - currentRecordModel?.clearResponses(); - } - - currentRecordModel?.addResponse( - target: widget.currentActivity.practiceTarget, - cId: widget.currentActivity.morphFeature == null - ? widget.currentActivity.targetTokens.first.vocabConstructID - : widget.currentActivity.targetTokens.first - .morphIdByFeature(widget.currentActivity.morphFeature!)!, - text: value, - score: isCorrect ? 1 : 0, - ); - - if (currentRecordModel == null || - currentRecordModel?.latestResponse == null || - widget.practiceCardController.currentActivity == null) { - ErrorHandler.logError( - e: "Missing necessary information to send analytics in multiple choice activity", - data: { - "currentRecordModel": currentRecordModel, - "latestResponse": currentRecordModel?.latestResponse, - "currentActivity": widget.practiceCardController.currentActivity, - }, - ); - debugger(when: kDebugMode); - return; - } - - MatrixState.pangeaController.putAnalytics.setState( - AnalyticsStream( - // note - this maybe should be the activity event id - eventId: widget.overlayController.event.eventId, - roomId: widget.overlayController.event.room.id, - constructs: currentRecordModel!.latestResponse!.toUses( - widget.practiceCardController.currentActivity!, - widget.practiceCardController.metadata, - ), - ), - ); - - // If the selected choice is correct, send the record - if (widget.currentActivity.multipleChoiceContent!.isCorrect(value, index)) { - // If the activity is an emoji activity, set the emoji value - - // TODO: this widget is deprecated for use with emoji activities - // if (widget.currentActivity.activityType == ActivityTypeEnum.emoji) { - // if (widget.currentActivity.targetTokens?.length != 1) { - // debugger(when: kDebugMode); - // } else { - // widget.currentActivity.targetTokens!.first.setEmoji(value); - // } - // } - - // The next entry in the analytics stream should be from the above putAnalytics.setState. - // So we can wait for the stream to update before calling onActivityFinish. - final streamFuture = MatrixState - .pangeaController.getAnalytics.analyticsStream.stream.first; - streamFuture.then((_) { - widget.practiceCardController.onActivityFinish(); - }); - } - - if (mounted) { - setState( - () => selectedChoiceIndex = index, - ); - } - } - - List choices(BuildContext context) { - final activity = widget.currentActivity.multipleChoiceContent; - final List choices = []; - for (int i = 0; i < activity!.choices.length; i++) { - final String value = activity.choices[i]; - final color = currentRecordModel?.hasTextResponse(value) ?? false - ? activity.choiceColor(i) - : null; - final isGold = activity.isCorrect(value, i); - choices.add( - Choice( - text: value, - color: color, - isGold: isGold, - ), - ); - } - return choices; - } - - String _getDisplayCopy(String value) { - if (widget.currentActivity.activityType != ActivityTypeEnum.morphId) { - return value; - } - final morphFeature = widget - .practiceCardController.widget.targetTokensAndActivityType.morphFeature; - if (morphFeature == null) return value; - - return getGrammarCopy( - category: morphFeature.name, - lemma: value, - context: context, - ) ?? - value; - } - - @override - Widget build(BuildContext context) { - final PracticeActivityModel practiceActivity = widget.currentActivity; - final question = practiceActivity.multipleChoiceContent!.question; - - // if (ActivityTypeEnum.emoji == practiceActivity.activityType) { - // return WordEmojiChoiceRow( - // activity: practiceActivity, - // selectedChoiceIndex: selectedChoiceIndex, - // onTap: updateChoice, - // ); - // } - - final content = Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (question.isNotEmpty) - Text( - question, - textAlign: TextAlign.center, - style: AppConfig.messageTextStyle( - widget.overlayController.event, - Theme.of(context).colorScheme.primary, - ).merge(const TextStyle(fontStyle: FontStyle.italic)), - ), - if (question.isNotEmpty) const SizedBox(height: 8.0), - const SizedBox(height: 8), - if (practiceActivity.activityType == - ActivityTypeEnum.wordFocusListening) - WordAudioButton( - text: practiceActivity.multipleChoiceContent!.answers.first, - uniqueID: - "audio-activity-${widget.overlayController.event.eventId}", - langCode: widget - .overlayController.pangeaMessageEvent.messageDisplayLangCode, - ), - if (practiceActivity.activityType == - ActivityTypeEnum.hiddenWordListening) - MessageAudioCard( - overlayController: widget.overlayController, - onError: widget.onError, - ), - ChoicesArray( - isLoading: false, - originalSpan: "placeholder", - onPressed: updateChoice, - selectedChoiceIndex: selectedChoiceIndex, - choices: choices(context), - isActive: true, - id: currentRecordModel?.hashCode.toString(), - enableAudio: practiceActivity.activityType.includeTTSOnClick, - langCode: - MatrixState.pangeaController.languageController.activeL2Code(), - getDisplayCopy: _getDisplayCopy, - enableMultiSelect: - widget.currentActivity.activityType == ActivityTypeEnum.emoji, - ), - ], - ); - - return ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: AppConfig.toolbarMinWidth, - maxHeight: AppConfig.toolbarMaxHeight, - ), - child: Padding( - padding: const EdgeInsets.all(8), - child: content, - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart b/lib/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart deleted file mode 100644 index 3728d3d1b..000000000 --- a/lib/pangea/toolbar/widgets/practice_activity/practice_activity_card.dart +++ /dev/null @@ -1,319 +0,0 @@ -import 'dart:async'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/igc/card_error_widget.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; -import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_generation_repo.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_record.dart'; -import 'package:fluffychat/pangea/practice_activities/practice_target.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/toolbar/event_wrappers/practice_activity_event.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/message_morph_choice.dart'; -import 'package:fluffychat/pangea/toolbar/reading_assistance_input_row/practice_match_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/multiple_choice_activity.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/toolbar_content_loading_indicator.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -/// The wrapper for practice activity content. -/// Handles the activities associated with a message, -/// their navigation, and the management of completion records -class PracticeActivityCard extends StatefulWidget { - final PracticeTarget targetTokensAndActivityType; - final MessageOverlayController overlayController; - - const PracticeActivityCard({ - super.key, - required this.targetTokensAndActivityType, - required this.overlayController, - }); - - @override - PracticeActivityCardState createState() => PracticeActivityCardState(); -} - -class PracticeActivityCardState extends State { - bool fetchingActivity = true; - bool savoringTheJoy = false; - - Completer? currentActivityCompleter; - - PracticeRepo practiceGenerationController = PracticeRepo(); - - PangeaController get pangeaController => MatrixState.pangeaController; - String? _error; - - PracticeActivityModel? get currentActivity => - widget.overlayController.activity; - - PracticeRecord? get currentCompletionRecord => currentActivity?.record; - - PangeaMessageEvent? get pangeaMessageEvent => - widget.overlayController.pangeaMessageEvent; - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback( - (_) => _fetchActivity(), - ); - } - - @override - void didUpdateWidget(PracticeActivityCard oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.targetTokensAndActivityType != - widget.targetTokensAndActivityType) { - _fetchActivity(); - } - } - - @override - void dispose() { - practiceGenerationController.dispose(); - super.dispose(); - } - - void _updateFetchingActivity(bool value) { - if (fetchingActivity == value) return; - if (mounted) setState(() => fetchingActivity = value); - } - - Future _fetchActivity({ - ActivityQualityFeedback? activityFeedback, - }) async { - _error = null; - if (!mounted || - !pangeaController.languageController.languagesSet || - widget.overlayController.practiceSelection == null) { - _updateFetchingActivity(false); - return; - } - - try { - _updateFetchingActivity(true); - final activity = await _fetchActivityModel( - activityFeedback: activityFeedback, - ); - - if (activity == null) { - widget.overlayController.exitPracticeFlow(); - return; - } - - widget.overlayController - .setState(() => widget.overlayController.activity = activity); - } catch (e, s) { - debugPrint( - "Error fetching activity: $e", - ); - ErrorHandler.logError( - e: e, - s: s, - data: { - 'activity': currentActivity?.toJson(), - 'record': currentCompletionRecord?.toJson(), - 'targetTokens': widget.targetTokensAndActivityType.tokens - .map((token) => token.toJson()) - .toList(), - 'activityType': widget.targetTokensAndActivityType.activityType, - 'morphFeature': widget.targetTokensAndActivityType.morphFeature, - }, - ); - debugger(when: kDebugMode); - _error = e.toString(); - } finally { - _updateFetchingActivity(false); - } - } - - Future _fetchActivityModel({ - ActivityQualityFeedback? activityFeedback, - }) async { - debugPrint( - "fetching activity model of type: ${widget.targetTokensAndActivityType.activityType}", - ); - if (pangeaMessageEvent == null) return null; - // check if we already have an activity matching the specs - final tokens = widget.targetTokensAndActivityType.tokens; - final type = widget.targetTokensAndActivityType.activityType; - final morph = widget.targetTokensAndActivityType.morphFeature; - - // final existingActivity = - // widget.pangeaMessageEvent.practiceActivities.firstWhereOrNull( - // (activity) => - // activity.practiceActivity.activityType == type && - // const ListEquality() - // .equals(widget.targetTokensAndActivityType.tokens, tokens) && - // activity.practiceActivity.morphFeature == morph, - // ); - - // if (existingActivity != null) { - // currentActivityCompleter = Completer(); - // currentActivityCompleter!.complete(existingActivity); - // existingActivity.practiceActivity.targetTokens = tokens; - // return existingActivity.practiceActivity; - // } - - final req = MessageActivityRequest( - userL1: MatrixState.pangeaController.languageController.userL1!.langCode, - userL2: MatrixState.pangeaController.languageController.userL2!.langCode, - messageText: pangeaMessageEvent!.messageDisplayText, - messageTokens: - pangeaMessageEvent?.messageDisplayRepresentation?.tokens ?? [], - activityQualityFeedback: activityFeedback, - targetTokens: tokens, - targetType: type, - targetMorphFeature: morph, - ); - - final PracticeActivityModelResponse activityResponse = - await practiceGenerationController.getPracticeActivity( - req, - pangeaMessageEvent, - context, - ); - - if (activityResponse.activity == null) return null; - - currentActivityCompleter = activityResponse.eventCompleter; - activityResponse.activity!.targetTokens = tokens; - return activityResponse.activity; - } - - ConstructUseMetaData get metadata => ConstructUseMetaData( - eventId: widget.overlayController.event.eventId, - roomId: widget.overlayController.event.room.id, - timeStamp: DateTime.now(), - ); - - final Duration _savorTheJoyDuration = const Duration(seconds: 1); - - Future _savorTheJoy() async { - try { - if (mounted) setState(() => savoringTheJoy = true); - await Future.delayed(_savorTheJoyDuration); - if (mounted) setState(() => savoringTheJoy = false); - } catch (e, s) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: e, - s: s, - m: 'Failed to savor the joy', - data: { - 'activity': currentActivity, - 'record': currentCompletionRecord, - }, - ); - } - } - - /// Called when the user finishes an activity. - /// Saves the completion record and sends it to the server. - /// Fetches a new activity if there are any left to complete. - /// Exits the practice flow if there are no more activities. - void onActivityFinish() async { - try { - if (currentCompletionRecord == null || currentActivity == null) { - debugger(when: kDebugMode); - return; - } - - await _savorTheJoy(); - - // wait for savor the joy before popping from the activity queue - // to keep the completed activity on screen for a moment - widget.overlayController - .onActivityFinish(currentActivity!.activityType, null); - - TtsController.stop(); - } catch (e, s) { - _onError(); - debugger(when: kDebugMode); - ErrorHandler.logError( - e: e, - s: s, - data: { - 'activity': currentActivity, - 'record': currentCompletionRecord, - }, - ); - } - } - - void _onError() { - // widget.overlayController.practiceSelection?.revealAllTokens(); - // widget.overlayController.activity = null; - // widget.overlayController.exitPracticeFlow(); - } - - // /// The widget that displays the current activity. - // /// If there is no current activity, the widget returns a sizedbox with a height of 80. - // /// If the activity type is multiple choice, the widget returns a MultipleChoiceActivity. - // /// If the activity type is unknown, the widget logs an error and returns a text widget with an error message. - Widget? get activityWidget { - if (currentActivity == null) { - return null; - } - if (currentActivity!.multipleChoiceContent != null) { - if (currentActivity!.activityType == ActivityTypeEnum.morphId) { - return MessageMorphInputBarContent( - overlayController: widget.overlayController, - activity: currentActivity!, - ); - } - return MultipleChoiceActivity( - practiceCardController: this, - currentActivity: currentActivity!, - onError: _onError, - overlayController: widget.overlayController, - initialSelectedChoice: null, - clearResponsesOnUpdate: - currentActivity?.activityType == ActivityTypeEnum.emoji, - ); - } - if (currentActivity!.matchContent != null) { - return MatchActivityCard( - currentActivity: currentActivity!, - overlayController: widget.overlayController, - ); - } - debugger(when: kDebugMode); - return const Text("No activity found"); - } - - @override - Widget build(BuildContext context) { - if (_error != null || (!fetchingActivity && currentActivity == null)) { - debugger(when: kDebugMode); - return CardErrorWidget( - error: L10n.of(context).errorFetchingActivity, - maxWidth: 500, - ); - } - - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (activityWidget != null && !fetchingActivity) activityWidget!, - // Conditionally show the darkening and progress indicator based on the loading state - if (!savoringTheJoy && fetchingActivity) ...[ - // Circular progress indicator in the center - const ToolbarContentLoadingIndicator( - height: 40, - ), - ], - ], - ); - } -} diff --git a/lib/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart b/lib/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart deleted file mode 100644 index 9628df870..000000000 --- a/lib/pangea/toolbar/widgets/practice_activity/word_zoom_activity_button.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'package:flutter/material.dart'; - -class WordZoomActivityButton extends StatelessWidget { - final Widget icon; - final bool isSelected; - final VoidCallback onPressed; - final VoidCallback? onDoubleTap; - final VoidCallback? onLongPress; - final String? tooltip; - final double? opacity; - - const WordZoomActivityButton({ - required this.icon, - required this.isSelected, - required this.onPressed, - this.onDoubleTap, - this.onLongPress, - this.tooltip, - this.opacity, - super.key, - }); - - @override - Widget build(BuildContext context) { - Widget buttonContent = AnimatedSize( - duration: const Duration(milliseconds: 200), - curve: Curves.easeInOut, - child: GestureDetector( - onDoubleTap: onDoubleTap, - onLongPress: onLongPress, - child: IconButton( - onPressed: onPressed, - icon: AnimatedBuilder( - animation: Listenable.merge([ValueNotifier(isSelected)]), - builder: (context, child) { - return Transform.scale( - scale: isSelected ? 1.25 : 1.0, - child: icon, - ); - }, - ), - iconSize: 24, // Keep this constant as scaling handles the size change - color: isSelected ? Theme.of(context).colorScheme.primary : null, - visualDensity: VisualDensity.compact, - // style: IconButton.styleFrom( - // backgroundColor: isSelected - // ? Theme.of(context).colorScheme.primary.withValues(alpha: 0.25) - // : Colors.transparent, - // ), - ), - ), - ); - - if (opacity != null) { - buttonContent = Opacity( - opacity: opacity!, - child: buttonContent, - ); - } - - if (tooltip != null) { - buttonContent = Tooltip( - message: tooltip!, - child: buttonContent, - ); - } - - return buttonContent; - } -} diff --git a/lib/pangea/toolbar/widgets/practice_mode_buttons.dart b/lib/pangea/toolbar/widgets/practice_mode_buttons.dart deleted file mode 100644 index de58c3963..000000000 --- a/lib/pangea/toolbar/widgets/practice_mode_buttons.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/toolbar_button.dart'; - -class PracticeModeButtons extends StatelessWidget { - final MessageOverlayController overlayController; - - const PracticeModeButtons({ - required this.overlayController, - super.key, - }); - - static const double iconWidth = 36.0; - static const double buttonSize = 40.0; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisSize: MainAxisSize.min, - spacing: 4.0, - children: [ - Container( - width: buttonSize + 4, - height: buttonSize + 4, - alignment: Alignment.center, - child: ToolbarButton( - mode: MessageMode.listening, - overlayController: overlayController, - buttonSize: buttonSize, - ), - ), - Container( - width: buttonSize + 4, - height: buttonSize + 4, - alignment: Alignment.center, - child: ToolbarButton( - mode: MessageMode.wordMorph, - overlayController: overlayController, - buttonSize: buttonSize, - ), - ), - Container( - width: buttonSize + 4, - height: buttonSize + 4, - alignment: Alignment.center, - child: ToolbarButton( - mode: MessageMode.wordMeaning, - overlayController: overlayController, - buttonSize: buttonSize, - ), - ), - Container( - width: buttonSize + 4, - height: buttonSize + 4, - alignment: Alignment.center, - child: ToolbarButton( - mode: MessageMode.wordEmoji, - overlayController: overlayController, - buttonSize: buttonSize, - ), - ), - ], - ), - const SizedBox(height: 4.0), - ], - ); - } -} diff --git a/lib/pangea/toolbar/widgets/practice_mode_transition_animation.dart b/lib/pangea/toolbar/widgets/practice_mode_transition_animation.dart deleted file mode 100644 index 6f342e574..000000000 --- a/lib/pangea/toolbar/widgets/practice_mode_transition_animation.dart +++ /dev/null @@ -1,200 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_positioner.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/overlay_center_content.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class PracticeModeTransitionAnimation extends StatefulWidget { - final String targetId; - final MessageSelectionPositionerState controller; - const PracticeModeTransitionAnimation({ - super.key, - required this.targetId, - required this.controller, - }); - - @override - State createState() => - PracticeModeTransitionAnimationState(); -} - -class PracticeModeTransitionAnimationState - extends State - with SingleTickerProviderStateMixin { - AnimationController? _animationController; - Animation? _offsetAnimation; - Animation? _sizeAnimation; - - bool _finishedAnimation = false; - - RenderBox? get _centerMessageRenderBox { - try { - return MatrixState.pAnyState.getRenderBox(widget.targetId); - } catch (e) { - return null; - } - } - - Offset? get _centerMessageOffset { - final renderBox = _centerMessageRenderBox; - if (renderBox == null) { - return null; - } - return renderBox.localToGlobal(Offset.zero); - } - - Size? get _centerMessageSize { - final renderBox = _centerMessageRenderBox; - if (renderBox == null) { - return null; - } - return renderBox.size; - } - - @override - void initState() { - super.initState(); - WidgetsBinding.instance.addPostFrameCallback((_) { - final startOffset = Offset( - widget.controller.ownMessage - ? widget.controller.messageRightOffset! - : widget.controller.messageLeftOffset!, - widget.controller.overlayMessageOffset!.dy, - ); - - final endOffset = Offset( - _centerMessageOffset!.dx - widget.controller.columnWidth, - _centerMessageOffset!.dy, - ); - - _animationController = AnimationController( - vsync: this, - duration: widget.controller.transitionAnimationDuration, - // duration: const Duration(seconds: 3), - ); - - _offsetAnimation = Tween( - begin: startOffset, - end: endOffset, - ).animate( - CurvedAnimation( - parent: _animationController!, - curve: FluffyThemes.animationCurve, - ), - ); - - final startSize = Size( - widget.controller.originalMessageSize.width, - widget.controller.originalMessageSize.height, - ); - - _sizeAnimation = Tween( - begin: startSize, - end: _centerMessageSize!, - ).animate( - CurvedAnimation( - parent: _animationController!, - curve: FluffyThemes.animationCurve, - ), - ); - - widget.controller.onStartedTransition(); - _animationController!.forward().then((_) { - widget.controller.onFinishedTransition(); - if (mounted) { - setState(() { - _finishedAnimation = true; - }); - } - }); - }); - } - - @override - void dispose() { - _animationController?.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - if (_offsetAnimation == null || _finishedAnimation) { - return const SizedBox(); - } - - return AnimatedBuilder( - animation: _offsetAnimation!, - builder: (context, child) { - return Positioned( - top: _offsetAnimation!.value.dy, - left: - widget.controller.ownMessage ? null : _offsetAnimation!.value.dx, - right: - widget.controller.ownMessage ? _offsetAnimation!.value.dx : null, - child: OverlayCenterContent( - event: widget.controller.widget.event, - overlayController: widget.controller.widget.overlayController, - chatController: widget.controller.widget.chatController, - nextEvent: widget.controller.widget.nextEvent, - prevEvent: widget.controller.widget.prevEvent, - hasReactions: widget.controller.hasReactions, - sizeAnimation: _sizeAnimation, - readingAssistanceMode: widget.controller.readingAssistanceMode, - ), - ); - }, - ); - } -} - -class CenteredMessage extends StatelessWidget { - final String targetId; - final MessageSelectionPositionerState controller; - - const CenteredMessage({ - super.key, - required this.targetId, - required this.controller, - }); - - @override - Widget build(BuildContext context) { - return Opacity( - opacity: controller.finishedTransition ? 1.0 : 0.0, - child: GestureDetector( - onTap: controller.widget.chatController.clearSelectedEvents, - child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - width: - controller.mediaQuery!.size.width - controller.columnWidth, - height: 20.0, - ), - OverlayCenterContent( - event: controller.widget.event, - overlayController: controller.widget.overlayController, - chatController: controller.widget.chatController, - nextEvent: controller.widget.nextEvent, - prevEvent: controller.widget.prevEvent, - hasReactions: controller.hasReactions, - overlayKey: MatrixState.pAnyState - .layerLinkAndKey( - "overlay_center_message_${controller.widget.event.eventId}", - ) - .key, - readingAssistanceMode: controller.readingAssistanceMode, - ), - const SizedBox( - height: AppConfig.readingAssistanceInputBarHeight + 60.0, - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/select_mode_buttons.dart b/lib/pangea/toolbar/widgets/select_mode_buttons.dart deleted file mode 100644 index 616652710..000000000 --- a/lib/pangea/toolbar/widgets/select_mode_buttons.dart +++ /dev/null @@ -1,789 +0,0 @@ -import 'dart:async'; -import 'dart:io'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - -import 'package:just_audio/just_audio.dart'; -import 'package:material_symbols_icons/symbols.dart'; -import 'package:matrix/matrix.dart'; -import 'package:path_provider/path_provider.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pages/chat/events/audio_player.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/extensions/pangea_event_extension.dart'; -import 'package:fluffychat/pangea/events/utils/report_message.dart'; -import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_audio_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -enum SelectMode { - audio(Icons.volume_up), - translate(Icons.translate), - practice(Symbols.fitness_center), - emoji(Symbols.imagesmode), - speechTranslation(Icons.translate); - - final IconData icon; - const SelectMode(this.icon); - - String tooltip(BuildContext context) { - final l10n = L10n.of(context); - switch (this) { - case SelectMode.audio: - return l10n.playAudio; - case SelectMode.translate: - case SelectMode.speechTranslation: - return l10n.translationTooltip; - case SelectMode.practice: - return l10n.practice; - case SelectMode.emoji: - return l10n.image; - } - } -} - -enum MessageActions { - reply, - forward, - edit, - delete, - copy, - download, - pin, - unpin, - report, - info, - deleteOnError, - sendAgain; - - IconData get icon { - switch (this) { - case MessageActions.reply: - return Icons.reply_all; - case MessageActions.forward: - return Symbols.forward; - case MessageActions.edit: - return Symbols.edit; - case MessageActions.delete: - return Symbols.delete; - case MessageActions.copy: - return Icons.copy_outlined; - case MessageActions.download: - return Symbols.download; - case MessageActions.pin: - return Icons.push_pin; - case MessageActions.unpin: - return Icons.push_pin_outlined; - case MessageActions.report: - return Icons.shield_outlined; - case MessageActions.info: - return Icons.info_outlined; - case MessageActions.deleteOnError: - return Icons.delete; - case MessageActions.sendAgain: - return Icons.send_outlined; - } - } - - String tooltip(BuildContext context) { - final l10n = L10n.of(context); - switch (this) { - case MessageActions.reply: - return l10n.reply; - case MessageActions.forward: - return l10n.forward; - case MessageActions.edit: - return l10n.edit; - case MessageActions.delete: - return l10n.redactMessage; - case MessageActions.copy: - return l10n.copy; - case MessageActions.download: - return l10n.download; - case MessageActions.pin: - return l10n.pinMessage; - case MessageActions.unpin: - return l10n.unpin; - case MessageActions.report: - return l10n.reportMessage; - case MessageActions.info: - return l10n.messageInfo; - case MessageActions.deleteOnError: - return l10n.delete; - case MessageActions.sendAgain: - return l10n.tryToSendAgain; - } - } -} - -class SelectModeButtons extends StatefulWidget { - final VoidCallback lauchPractice; - final MessageOverlayController overlayController; - final ChatController controller; - - const SelectModeButtons({ - required this.lauchPractice, - required this.overlayController, - required this.controller, - super.key, - }); - - @override - State createState() => SelectModeButtonsState(); -} - -class SelectModeButtonsState extends State { - static const double iconWidth = 36.0; - static const double buttonSize = 40.0; - - static List get textModes => [ - SelectMode.audio, - SelectMode.translate, - SelectMode.practice, - SelectMode.emoji, - ]; - - static List get audioModes => [ - SelectMode.speechTranslation, - ]; - - bool _isLoadingAudio = false; - PangeaAudioFile? _audioBytes; - File? _audioFile; - String? _audioError; - - StreamSubscription? _onPlayerStateChanged; - StreamSubscription? _onAudioPositionChanged; - - bool _isLoadingTranslation = false; - String? _translationError; - - bool _isLoadingSpeechTranslation = false; - String? _speechTranslationError; - - Completer? _transcriptionCompleter; - - MatrixState? matrix; - - SelectMode? get _selectedMode => widget.overlayController.selectedMode; - - @override - void initState() { - super.initState(); - - matrix = Matrix.of(context); - if (messageEvent?.isAudioMessage == true) { - _fetchTranscription(); - } - } - - @override - void dispose() { - matrix?.audioPlayer?.dispose(); - matrix?.audioPlayer = null; - matrix?.voiceMessageEventId.value = null; - - _onPlayerStateChanged?.cancel(); - _onAudioPositionChanged?.cancel(); - super.dispose(); - } - - PangeaMessageEvent? get messageEvent => - widget.overlayController.pangeaMessageEvent; - - String? get l1Code => - MatrixState.pangeaController.languageController.userL1?.langCodeShort; - String? get l2Code => - MatrixState.pangeaController.languageController.userL2?.langCodeShort; - - void _clear() { - setState(() { - // Audio errors do not go away when I switch modes and back - // Is there any reason to wipe error records on clear? - _translationError = null; - _speechTranslationError = null; - }); - - widget.overlayController.updateSelectedSpan(null); - widget.overlayController.setShowTranslation(false); - widget.overlayController.setShowSpeechTranslation(false); - } - - Future _updateMode(SelectMode? mode) async { - _clear(); - - if (mode == null) { - matrix?.audioPlayer?.stop(); - matrix?.audioPlayer?.seek(null); - widget.overlayController.setSelectMode(mode); - return; - } - - final selectedMode = _selectedMode == mode && - (mode != SelectMode.audio || _audioError != null) - ? null - : mode; - widget.overlayController.setSelectMode(selectedMode); - - if (selectedMode == SelectMode.audio) { - _playAudio(); - return; - } else { - matrix?.audioPlayer?.stop(); - matrix?.audioPlayer?.seek(null); - } - - if (selectedMode == SelectMode.practice) { - widget.lauchPractice(); - return; - } - - if (selectedMode == SelectMode.translate) { - await _fetchTranslation(); - widget.overlayController.setShowTranslation(true); - } - - if (selectedMode == SelectMode.speechTranslation) { - await _fetchSpeechTranslation(); - widget.overlayController.setShowSpeechTranslation(true); - } - } - - Future _fetchAudio() async { - if (!mounted || messageEvent == null) return; - setState(() => _isLoadingAudio = true); - - try { - final String langCode = messageEvent!.messageDisplayLangCode; - final Event? localEvent = messageEvent!.getTextToSpeechLocal( - langCode, - messageEvent!.messageDisplayText, - ); - - if (localEvent != null) { - _audioBytes = await localEvent.getPangeaAudioFile(); - } else { - _audioBytes = await messageEvent!.getMatrixAudioFile( - langCode, - ); - } - - if (!kIsWeb) { - final tempDir = await getTemporaryDirectory(); - - File? file; - file = File('${tempDir.path}/${_audioBytes!.name}'); - await file.writeAsBytes(_audioBytes!.bytes); - _audioFile = file; - } - } catch (e, s) { - _audioError = e.toString(); - ErrorHandler.logError( - e: e, - s: s, - m: 'something wrong getting audio in MessageAudioCardState', - data: { - 'widget.messageEvent.messageDisplayLangCode': - messageEvent?.messageDisplayLangCode, - }, - ); - } finally { - if (mounted) setState(() => _isLoadingAudio = false); - } - } - - Future _playAudio() async { - final playerID = - "${widget.overlayController.pangeaMessageEvent.eventId}_button"; - - if (matrix?.audioPlayer != null && - matrix?.voiceMessageEventId.value == playerID) { - // If the audio player is already initialized and playing the same message, pause it - if (matrix!.audioPlayer!.playerState.playing) { - await matrix?.audioPlayer?.pause(); - return; - } - // If the audio player is paused, resume it - await matrix?.audioPlayer?.play(); - return; - } - - matrix?.audioPlayer?.dispose(); - matrix?.audioPlayer = AudioPlayer(); - matrix?.voiceMessageEventId.value = - "${widget.overlayController.pangeaMessageEvent.eventId}_button"; - - _onPlayerStateChanged = - matrix?.audioPlayer?.playerStateStream.listen((state) { - if (state.processingState == ProcessingState.completed) { - _updateMode(null); - } - setState(() {}); - }); - - _onAudioPositionChanged ??= - matrix?.audioPlayer?.positionStream.listen((state) { - if (_audioBytes?.tokens != null) { - widget.overlayController.highlightCurrentText( - state.inMilliseconds, - _audioBytes!.tokens!, - ); - } - }); - - try { - if (matrix?.audioPlayer != null && - matrix!.audioPlayer!.playerState.playing) { - await matrix?.audioPlayer?.pause(); - return; - } else if (matrix?.audioPlayer?.position != Duration.zero) { - TtsController.stop(); - await matrix?.audioPlayer?.play(); - return; - } - - if (_audioBytes == null) { - await _fetchAudio(); - } - - if (_audioBytes == null) return; - - if (_audioFile != null) { - await matrix?.audioPlayer?.setFilePath(_audioFile!.path); - } else { - await matrix?.audioPlayer?.setAudioSource( - BytesAudioSource( - _audioBytes!.bytes, - _audioBytes!.mimeType, - ), - ); - } - - TtsController.stop(); - await matrix?.audioPlayer?.play(); - } catch (e, s) { - setState(() => _audioError = e.toString()); - ErrorHandler.logError( - e: e, - s: s, - m: 'something wrong playing message audio', - data: { - 'event': messageEvent?.event.toJson(), - }, - ); - } - } - - Future _fetchTranslation() async { - if (l1Code == null || - messageEvent == null || - widget.overlayController.translation != null) { - return; - } - - try { - if (mounted) setState(() => _isLoadingTranslation = true); - final rep = await messageEvent!.l1Respresentation(); - widget.overlayController.setTranslation(rep.text); - } catch (e, s) { - _translationError = e.toString(); - ErrorHandler.logError( - e: e, - s: s, - m: 'Error fetching translation', - data: { - 'l1Code': l1Code, - 'messageEvent': messageEvent?.event.toJson(), - }, - ); - } finally { - if (mounted) setState(() => _isLoadingTranslation = false); - } - } - - Future _fetchTranscription() async { - try { - if (_transcriptionCompleter != null) { - // If a transcription is already in progress, wait for it to complete - await _transcriptionCompleter!.future; - return; - } - - _transcriptionCompleter = Completer(); - if (l1Code == null || messageEvent == null) { - _transcriptionCompleter?.completeError( - 'Language code or message event is null', - ); - return; - } - - final resp = await messageEvent!.getSpeechToText( - l1Code!, - l2Code!, - ); - - widget.overlayController.setTranscription(resp!); - _transcriptionCompleter?.complete(resp.transcript.text); - } catch (err) { - widget.overlayController.setTranscriptionError( - err.toString(), - ); - _transcriptionCompleter?.completeError(err); - ErrorHandler.logError( - e: err, - data: {}, - ); - } - } - - Future _fetchSpeechTranslation() async { - if (messageEvent == null || - l1Code == null || - l2Code == null || - widget.overlayController.speechTranslation != null) { - return; - } - - try { - setState(() => _isLoadingSpeechTranslation = true); - - if (widget.overlayController.transcription == null) { - await _fetchTranscription(); - if (widget.overlayController.transcription == null) { - throw Exception('Transcription is null'); - } - } - - final translation = await messageEvent!.sttTranslationByLanguageGlobal( - langCode: l1Code!, - l1Code: l1Code!, - l2Code: l2Code!, - ); - if (translation == null) { - throw Exception('Translation is null'); - } - - widget.overlayController.setSpeechTranslation(translation.translation); - } catch (err, s) { - debugPrint("Error fetching speech translation: $err, $s"); - _speechTranslationError = err.toString(); - ErrorHandler.logError( - e: err, - data: {}, - ); - } finally { - if (mounted) setState(() => _isLoadingSpeechTranslation = false); - } - } - - bool get _isError { - switch (_selectedMode) { - case SelectMode.audio: - return _audioError != null; - case SelectMode.translate: - return _translationError != null; - case SelectMode.speechTranslation: - return _speechTranslationError != null; - default: - return false; - } - } - - bool get _isLoading { - switch (_selectedMode) { - case SelectMode.audio: - return _isLoadingAudio; - case SelectMode.translate: - return _isLoadingTranslation; - case SelectMode.speechTranslation: - return _isLoadingSpeechTranslation; - default: - return false; - } - } - - Widget _icon(SelectMode mode) { - if (_isError && mode == _selectedMode) { - return Icon( - Icons.error_outline, - size: 20, - color: Theme.of(context).colorScheme.error, - ); - } - - if (_isLoading && mode == _selectedMode) { - return const Center( - child: SizedBox( - height: 20.0, - width: 20.0, - child: CircularProgressIndicator.adaptive(), - ), - ); - } - - if (mode == SelectMode.audio) { - return Icon( - matrix?.audioPlayer?.playerState.playing == true - ? Icons.pause_outlined - : Icons.volume_up, - size: 20, - color: mode == _selectedMode ? Colors.white : null, - ); - } - - return Icon( - mode.icon, - size: 20, - color: mode == _selectedMode ? Colors.white : null, - ); - } - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - final isSubscribed = - MatrixState.pangeaController.subscriptionController.isSubscribed; - List modes = widget.overlayController.showLanguageAssistance - ? messageEvent?.isAudioMessage == true - ? audioModes - : textModes - : []; - - if (isSubscribed == false) modes = []; - return Material( - type: MaterialType.transparency, - child: SizedBox( - height: AppConfig.toolbarMenuHeight, - child: Row( - mainAxisSize: MainAxisSize.min, - children: List.generate(modes.length + 1, (index) { - if (index < modes.length) { - final mode = modes[index]; - return Container( - width: 45.0, - alignment: Alignment.center, - child: Tooltip( - message: mode.tooltip(context), - child: PressableButton( - borderRadius: BorderRadius.circular(20), - depressed: mode == _selectedMode, - color: theme.colorScheme.primaryContainer, - onPressed: () => _updateMode(mode), - playSound: true, - colorFactor: - theme.brightness == Brightness.light ? 0.55 : 0.3, - child: AnimatedContainer( - duration: FluffyThemes.animationDuration, - height: buttonSize, - width: buttonSize, - decoration: BoxDecoration( - color: theme.colorScheme.primaryContainer, - shape: BoxShape.circle, - ), - child: _icon(mode), - ), - ), - ), - ); - } else { - return Container( - width: 45.0, - alignment: Alignment.center, - child: MoreButton( - controller: widget.controller, - messageEvent: widget.overlayController.pangeaMessageEvent, - ), - ); - } - }), - ), - ), - ); - } -} - -class MoreButton extends StatelessWidget { - final ChatController controller; - final PangeaMessageEvent? messageEvent; - - const MoreButton({ - super.key, - required this.controller, - this.messageEvent, - }); - - bool _messageActionEnabled(MessageActions action) { - if (messageEvent == null) return false; - if (controller.selectedEvents.isEmpty) return false; - final events = controller.selectedEvents; - - if (events.any((e) => !e.status.isSent)) { - if (action == MessageActions.sendAgain) { - return true; - } - - if (events.every((e) => e.status.isError) && - action == MessageActions.deleteOnError) { - return true; - } - - return false; - } - - final isPinned = events.length == 1 && - controller.room.pinnedEventIds.contains(events.first.eventId); - - switch (action) { - case MessageActions.reply: - return events.length == 1 && controller.room.canSendDefaultMessages; - case MessageActions.edit: - return controller.canEditSelectedEvents && - !events.first.isActivityMessage && - events.single.messageType == MessageTypes.Text; - case MessageActions.delete: - return controller.canRedactSelectedEvents; - case MessageActions.copy: - return events.length == 1 && - events.single.messageType == MessageTypes.Text; - case MessageActions.download: - return controller.canSaveSelectedEvent; - case MessageActions.pin: - return controller.canPinSelectedEvents && !isPinned; - case MessageActions.unpin: - return controller.canPinSelectedEvents && isPinned; - case MessageActions.forward: - case MessageActions.report: - case MessageActions.info: - return events.length == 1; - case MessageActions.deleteOnError: - case MessageActions.sendAgain: - return false; - } - } - - Future _showMenu(BuildContext context) async { - final RenderBox button = context.findRenderObject() as RenderBox; - final RenderBox overlay = Overlay.of(context, rootOverlay: true) - .context - .findRenderObject() as RenderBox; - - final Offset offset = button.localToGlobal(Offset.zero, ancestor: overlay); - - final RelativeRect position = RelativeRect.fromRect( - Rect.fromPoints( - offset, - offset + button.size.bottomRight(Offset.zero), - ), - Offset.zero & overlay.size, - ); - - final action = await showMenu( - useRootNavigator: true, - context: context, - position: position, - items: MessageActions.values - .where(_messageActionEnabled) - .map( - (action) => PopupMenuItem( - value: action, - child: Row( - children: [ - Icon(action.icon), - const SizedBox(width: 8.0), - Text(action.tooltip(context)), - ], - ), - ), - ) - .toList(), - ); - - if (action == null) return; - _onActionPressed(action, context); - } - - void _onActionPressed( - MessageActions action, - BuildContext context, - ) { - switch (action) { - case MessageActions.reply: - controller.replyAction(); - break; - case MessageActions.forward: - controller.forwardEventsAction(); - break; - case MessageActions.edit: - controller.editSelectedEventAction(); - break; - case MessageActions.delete: - controller.redactEventsAction(); - break; - case MessageActions.copy: - controller.copyEventsAction(); - break; - case MessageActions.download: - controller.saveSelectedEvent(context); - break; - case MessageActions.pin: - case MessageActions.unpin: - controller.pinEvent(); - break; - case MessageActions.report: - final event = controller.selectedEvents.first; - controller.clearSelectedEvents(); - reportEvent( - event, - controller, - controller.context, - ); - break; - case MessageActions.info: - controller.showEventInfo(); - controller.clearSelectedEvents(); - break; - case MessageActions.deleteOnError: - controller.deleteErrorEventsAction(); - break; - case MessageActions.sendAgain: - controller.sendAgainAction(); - break; - } - } - - @override - Widget build(BuildContext context) { - final theme = Theme.of(context); - return Tooltip( - message: L10n.of(context).more, - child: PressableButton( - borderRadius: BorderRadius.circular(20), - color: theme.colorScheme.primaryContainer, - onPressed: () => _showMenu(context), - playSound: true, - colorFactor: theme.brightness == Brightness.light ? 0.55 : 0.3, - child: AnimatedContainer( - duration: FluffyThemes.animationDuration, - height: 40.0, - width: 40.0, - decoration: BoxDecoration( - color: theme.colorScheme.primaryContainer, - shape: BoxShape.circle, - ), - child: const Icon( - Icons.more_horiz, - size: 20, - ), - ), - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/toolbar_button.dart b/lib/pangea/toolbar/widgets/toolbar_button.dart deleted file mode 100644 index 2c0f569af..000000000 --- a/lib/pangea/toolbar/widgets/toolbar_button.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/common/widgets/pressable_button.dart'; -import 'package:fluffychat/pangea/toolbar/enums/message_mode_enum.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; - -class ToolbarButton extends StatelessWidget { - final MessageMode mode; - final MessageOverlayController overlayController; - final double buttonSize; - - const ToolbarButton({ - required this.mode, - required this.overlayController, - required this.buttonSize, - super.key, - }); - - Color color(BuildContext context) => mode.iconButtonColor( - context, - overlayController, - ); - - bool get enabled => mode == MessageMode.messageTranslation - ? overlayController.isTranslationUnlocked - : true; - - @override - Widget build(BuildContext context) { - return Tooltip( - message: mode.tooltip(context), - child: PressableButton( - borderRadius: BorderRadius.circular(20), - depressed: mode == overlayController.toolbarMode, - color: color(context), - onPressed: () => overlayController.updateToolbarMode(mode), - playSound: true, - colorFactor: - Theme.of(context).brightness == Brightness.light ? 0.55 : 0.3, - child: AnimatedContainer( - duration: FluffyThemes.animationDuration, - height: buttonSize, - width: buttonSize, - decoration: BoxDecoration( - color: color(context), - shape: BoxShape.circle, - ), - child: Icon( - mode.icon, - size: 20, - color: mode == overlayController.toolbarMode ? Colors.white : null, - ), - ), - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/word_card_switcher.dart b/lib/pangea/toolbar/widgets/word_card_switcher.dart deleted file mode 100644 index ce83e0ea3..000000000 --- a/lib/pangea/toolbar/widgets/word_card_switcher.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/config/themes.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_positioner.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/reading_assistance_content.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/select_mode_buttons.dart'; - -class WordCardSwitcher extends StatelessWidget { - final MessageSelectionPositionerState controller; - const WordCardSwitcher({super.key, required this.controller}); - - @override - Widget build(BuildContext context) { - return AnimatedSize( - alignment: - controller.ownMessage ? Alignment.bottomRight : Alignment.bottomLeft, - duration: FluffyThemes.animationDuration, - child: - controller.widget.overlayController.selectedMode == SelectMode.emoji - ? const SizedBox() - : controller.widget.overlayController.selectedToken != null - ? ReadingAssistanceContent( - overlayController: controller.widget.overlayController, - ) - : MessageReactionPicker( - chatController: controller.widget.chatController, - ), - ); - } -} diff --git a/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart deleted file mode 100644 index 67c440508..000000000 --- a/lib/pangea/toolbar/widgets/word_zoom/lemma_meaning_widget.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; -import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; -import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class LemmaMeaningWidget extends StatelessWidget { - final LemmaMeaningBuilderState controller; - - final ConstructUses constructUse; - final TextStyle? style; - final InlineSpan? leading; - - const LemmaMeaningWidget({ - super.key, - required this.controller, - required this.constructUse, - this.style, - this.leading, - }); - - @override - Widget build(BuildContext context) { - if (controller.isLoading) { - return const TextLoadingShimmer(); - } - - if (controller.error != null) { - if (controller.error is UnsubscribedException) { - return ErrorIndicator( - message: L10n.of(context).subscribeToUnlockDefinitions, - style: style, - onTap: () { - MatrixState.pangeaController.subscriptionController - .showPaywall(context); - }, - ); - } - return ErrorIndicator( - message: L10n.of(context).errorFetchingDefinition, - style: style, - ); - } - - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - Flexible( - child: RichText( - textAlign: leading == null ? TextAlign.center : TextAlign.start, - text: TextSpan( - style: style, - children: [ - if (leading != null) leading!, - if (leading != null) - const WidgetSpan(child: SizedBox(width: 6.0)), - TextSpan( - text: controller.lemmaInfo?.meaning, - ), - ], - ), - ), - ), - ], - ); - } -} diff --git a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart b/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart deleted file mode 100644 index 9c38d405f..000000000 --- a/lib/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart +++ /dev/null @@ -1,246 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/config/app_config.dart'; -import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; -import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/lemmas/lemma_reaction_picker.dart'; -import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_widget.dart'; -import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_button.dart'; -import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_unsubscribed_card.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/practice_activity/word_audio_button.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/lemma_meaning_builder.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/new_word_overlay.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class WordZoomWidget extends StatelessWidget { - final PangeaTokenText token; - final ConstructIdentifier construct; - - final String langCode; - final VoidCallback? onClose; - - final bool wordIsNew; - final VoidCallback? onDismissNewWordOverlay; - final Event? event; - - final TokenInfoFeedbackRequestData? requestData; - final PangeaMessageEvent? pangeaMessageEvent; - - const WordZoomWidget({ - super.key, - required this.token, - required this.construct, - required this.langCode, - this.onClose, - this.wordIsNew = false, - this.onDismissNewWordOverlay, - this.event, - this.requestData, - this.pangeaMessageEvent, - }); - - String get transformTargetId => "word-zoom-card-${token.uniqueKey}"; - - LayerLink get layerLink => - MatrixState.pAnyState.layerLinkAndKey(transformTargetId).link; - - @override - Widget build(BuildContext context) { - final bool? subscribed = - MatrixState.pangeaController.subscriptionController.isSubscribed; - final overlayColor = Theme.of(context).scaffoldBackgroundColor; - - final Widget content = subscribed != null && !subscribed - ? const MessageUnsubscribedCard() - : Stack( - children: [ - Container( - height: AppConfig.toolbarMaxHeight - 8, - padding: const EdgeInsets.all(12.0), - constraints: const BoxConstraints( - maxWidth: AppConfig.toolbarMinWidth, - ), - child: CompositedTransformTarget( - link: layerLink, - child: SingleChildScrollView( - child: Column( - spacing: 12.0, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - onClose != null - ? IconButton( - icon: const Icon(Icons.close), - onPressed: onClose, - ) - : const SizedBox( - width: 40.0, - height: 40.0, - ), - Flexible( - child: Container( - constraints: const BoxConstraints( - minHeight: 40.0, - ), - alignment: Alignment.center, - child: Text( - token.content, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 28.0, - fontWeight: FontWeight.w600, - height: 1.2, - color: Theme.of(context).brightness == - Brightness.light - ? AppConfig.yellowDark - : AppConfig.yellowLight, - ), - ), - ), - ), - requestData != null && pangeaMessageEvent != null - ? TokenInfoFeedbackButton( - requestData: requestData!, - langCode: langCode, - event: pangeaMessageEvent!, - onUpdate: () { - // close the zoom when updating - if (onClose != null) { - onClose!(); - } - }, - ) - : const SizedBox( - width: 40.0, - height: 40.0, - ), - ], - ), - LemmaMeaningBuilder( - langCode: langCode, - constructId: construct, - builder: (context, controller) { - return Column( - spacing: 12.0, - mainAxisSize: MainAxisSize.min, - children: [ - if (MatrixState.pangeaController - .languageController.showTranscription) - PhoneticTranscriptionWidget( - text: token.content, - textLanguage: PLanguageStore.byLangCode( - langCode, - ) ?? - LanguageModel.unknown, - style: const TextStyle(fontSize: 14.0), - iconSize: 24.0, - ) - else - WordAudioButton( - text: token.content, - uniqueID: "lemma-content-${token.content}", - langCode: langCode, - iconSize: 24.0, - ), - LemmaReactionPicker( - emojis: controller.lemmaInfo?.emoji ?? [], - loading: controller.isLoading, - event: event, - ), - if (controller.error != null) - ErrorIndicator( - message: L10n.of(context) - .errorFetchingDefinition, - style: const TextStyle(fontSize: 14.0), - ) - else if (controller.isLoading || - controller.lemmaInfo == null) - const CircularProgressIndicator.adaptive() - else - construct.lemma.toLowerCase() == - token.content.toLowerCase() - ? Text( - controller.lemmaInfo!.meaning, - style: - const TextStyle(fontSize: 14.0), - textAlign: TextAlign.center, - ) - : RichText( - text: TextSpan( - style: DefaultTextStyle.of(context) - .style - .copyWith( - fontSize: 14.0, - ), - children: [ - TextSpan(text: construct.lemma), - const WidgetSpan( - child: SizedBox(width: 8.0), - ), - const TextSpan(text: ":"), - const WidgetSpan( - child: SizedBox(width: 8.0), - ), - TextSpan( - text: controller - .lemmaInfo!.meaning, - ), - ], - ), - ), - ], - ); - }, - ), - ], - ), - ), - ), - ), - wordIsNew - ? NewWordOverlay( - key: ValueKey(transformTargetId), - overlayColor: overlayColor, - transformTargetId: transformTargetId, - onDismiss: onDismissNewWordOverlay, - ) - : const SizedBox.shrink(), - ], - ); - - return Material( - type: MaterialType.transparency, - child: SelectionArea( - child: Container( - decoration: BoxDecoration( - color: Theme.of(context).cardColor, - border: Border.all( - color: Theme.of(context).colorScheme.primary, - width: 4.0, - ), - borderRadius: const BorderRadius.all( - Radius.circular(AppConfig.borderRadius), - ), - ), - height: AppConfig.toolbarMaxHeight, - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - content, - ], - ), - ), - ), - ); - } -} diff --git a/lib/pangea/toolbar/word_card/lemma_meaning_display.dart b/lib/pangea/toolbar/word_card/lemma_meaning_display.dart new file mode 100644 index 000000000..1859282b6 --- /dev/null +++ b/lib/pangea/toolbar/word_card/lemma_meaning_display.dart @@ -0,0 +1,80 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_misc/text_loading_shimmer.dart'; +import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_meaning_builder.dart'; +import 'package:fluffychat/pangea/morphs/get_grammar_copy.dart'; + +class LemmaMeaningDisplay extends StatelessWidget { + final String langCode; + final ConstructIdentifier constructId; + final String text; + final Map messageInfo; + + const LemmaMeaningDisplay({ + super.key, + required this.langCode, + required this.constructId, + required this.text, + required this.messageInfo, + }); + + @override + Widget build(BuildContext context) { + return LemmaMeaningBuilder( + langCode: langCode, + constructId: constructId, + messageInfo: messageInfo, + builder: (context, controller) { + if (controller.isError) { + return ErrorIndicator( + message: L10n.of(context).errorFetchingDefinition, + style: const TextStyle(fontSize: 14.0), + ); + } + + if (controller.isLoading || controller.lemmaInfo == null) { + return const TextLoadingShimmer( + width: 125.0, + height: 20.0, + ); + } + + final pos = getGrammarCopy( + category: "POS", + lemma: constructId.category, + context: context, + ) ?? + L10n.of(context).other; + + return RichText( + maxLines: 2, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + text: TextSpan( + style: DefaultTextStyle.of(context).style.copyWith( + fontSize: 14.0, + ), + children: [ + TextSpan( + text: "${constructId.lemma} ($pos)", + ), + const WidgetSpan( + child: SizedBox(width: 8.0), + ), + const TextSpan(text: ":"), + const WidgetSpan( + child: SizedBox(width: 8.0), + ), + TextSpan( + text: controller.lemmaInfo!.meaning, + ), + ], + ), + ); + }, + ); + } +} diff --git a/lib/pangea/toolbar/word_card/lemma_reaction_picker.dart b/lib/pangea/toolbar/word_card/lemma_reaction_picker.dart new file mode 100644 index 000000000..cc823be64 --- /dev/null +++ b/lib/pangea/toolbar/word_card/lemma_reaction_picker.dart @@ -0,0 +1,161 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/analytics_misc/lemma_emoji_setter_mixin.dart'; +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_highlight_emoji_row.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class LemmaReactionPicker extends StatefulWidget with LemmaEmojiSetter { + final Event? event; + final ConstructIdentifier constructId; + final String langCode; + final bool enabled; + + const LemmaReactionPicker({ + super.key, + required this.constructId, + required this.langCode, + this.event, + this.enabled = true, + }); + + @override + LemmaReactionPickerState createState() => LemmaReactionPickerState(); +} + +class LemmaReactionPickerState extends State { + ScaffoldMessengerState? messenger; + StreamSubscription? _emojiSub; + String? _selectedEmoji; + + @override + void initState() { + super.initState(); + _selectedEmoji = widget.constructId.userSetEmoji; + _setEmojiSub(); + } + + @override + void didUpdateWidget(LemmaReactionPicker oldWidget) { + if (oldWidget.constructId != widget.constructId) { + setState(() => _selectedEmoji = widget.constructId.userSetEmoji); + _setEmojiSub(); + } + super.didUpdateWidget(oldWidget); + } + + @override + void dispose() { + messenger?.hideCurrentSnackBar(); + messenger = null; + _emojiSub?.cancel(); + super.dispose(); + } + + bool get _enabled => + (widget.langCode.split("-").first == + MatrixState.pangeaController.userController.userL2?.langCodeShort) && + widget.enabled; + + void _setEmojiSub() { + _emojiSub?.cancel(); + _emojiSub = Matrix.of(context) + .analyticsDataService + .updateDispatcher + .lemmaUpdateStream(widget.constructId) + .listen((update) => _setSelectedEmoji(update.emojis?.firstOrNull)); + } + + void _setSelectedEmoji(String? emoji) { + setState(() => _selectedEmoji = emoji); + } + + Event? _sentReaction(String emoji) { + final userSentEmojis = widget.event! + .aggregatedEvents( + widget.event!.room.timeline!, + RelationshipTypes.reaction, + ) + .where( + (e) => e.senderId == Matrix.of(context).client.userID, + ); + + return userSentEmojis.firstWhereOrNull( + (e) => e.content.tryGetMap('m.relates_to')?['key'] == emoji, + ); + } + + Future _setEmoji( + String emoji, + String targetId, + ) async { + await widget.setLemmaEmoji( + widget.constructId, + widget.langCode, + emoji, + targetId, + ); + messenger = ScaffoldMessenger.of(context); + widget.showLemmaEmojiSnackbar( + messenger!, + context, + widget.constructId, + emoji, + ); + } + + Future _sendOrRedactReaction(String emoji) async { + if (widget.event?.room.timeline == null) return; + try { + final reactionEvent = _sentReaction(emoji); + if (reactionEvent != null) { + await reactionEvent.redactEvent(); + return; + } + + await widget.event!.room.sendReaction( + widget.event!.eventId, + emoji, + ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'emoji': emoji, + 'eventId': widget.event?.eventId, + }, + ); + } + } + + @override + Widget build(BuildContext context) { + final targetId = "emoji-choice-item-${widget.constructId.lemma}-$hashCode"; + return LemmaHighlightEmojiRow( + cId: widget.constructId, + langCode: widget.langCode, + targetId: targetId, + onEmojiSelected: (emoji, target) => emoji != _selectedEmoji + ? _setEmoji(emoji, target) + : _sendOrRedactReaction(emoji), + emoji: _selectedEmoji, + messageInfo: widget.event?.content ?? {}, + selectedEmojiBadge: widget.event != null && + _selectedEmoji != null && + _sentReaction(_selectedEmoji!) == null + ? const Icon( + Icons.add_reaction, + size: 12.0, + ) + : null, + enabled: _enabled, + ); + } +} diff --git a/lib/pangea/toolbar/widgets/message_unsubscribed_card.dart b/lib/pangea/toolbar/word_card/message_unsubscribed_card.dart similarity index 100% rename from lib/pangea/toolbar/widgets/message_unsubscribed_card.dart rename to lib/pangea/toolbar/word_card/message_unsubscribed_card.dart diff --git a/lib/pangea/toolbar/widgets/reading_assistance_content.dart b/lib/pangea/toolbar/word_card/reading_assistance_content.dart similarity index 60% rename from lib/pangea/toolbar/widgets/reading_assistance_content.dart rename to lib/pangea/toolbar/word_card/reading_assistance_content.dart index 1ae64b5a3..3096171c5 100644 --- a/lib/pangea/toolbar/widgets/reading_assistance_content.dart +++ b/lib/pangea/toolbar/word_card/reading_assistance_content.dart @@ -3,9 +3,10 @@ import 'package:flutter/material.dart'; import 'package:matrix/matrix_api_lite/model/message_types.dart'; import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; import 'package:fluffychat/pangea/token_info_feedback/token_info_feedback_request.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/message_selection_overlay.dart'; -import 'package:fluffychat/pangea/toolbar/widgets/word_zoom/word_zoom_widget.dart'; +import 'package:fluffychat/pangea/toolbar/message_selection_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/word_zoom_widget.dart'; import 'package:fluffychat/widgets/matrix.dart'; const double minCardHeight = 70; @@ -46,24 +47,29 @@ class ReadingAssistanceContent extends StatelessWidget { token: overlayController.selectedToken!.text, construct: overlayController.selectedToken!.vocabConstructID, event: overlayController.event, - wordIsNew: overlayController.isNewToken(overlayController.selectedToken!), onClose: () => overlayController.updateSelectedSpan(null), langCode: overlayController.pangeaMessageEvent.messageDisplayLangCode, onDismissNewWordOverlay: () => overlayController.setState(() {}), - requestData: selectedTokenIndex >= 0 - ? TokenInfoFeedbackRequestData( - userId: Matrix.of(context).client.userID!, - roomId: overlayController.event.room.id, - fullText: overlayController.pangeaMessageEvent.messageDisplayText, - detectedLanguage: - overlayController.pangeaMessageEvent.messageDisplayLangCode, - tokens: tokens ?? [], - selectedToken: selectedTokenIndex, - wordCardL1: MatrixState.pangeaController.languageController - .activeL1Code()!, - ) - : null, - pangeaMessageEvent: overlayController.pangeaMessageEvent, + onFlagTokenInfo: (LemmaInfoResponse lemmaInfo, String phonetics) { + if (selectedTokenIndex < 0) return; + final requestData = TokenInfoFeedbackRequestData( + userId: Matrix.of(context).client.userID!, + roomId: overlayController.event.room.id, + fullText: overlayController.pangeaMessageEvent.messageDisplayText, + detectedLanguage: + overlayController.pangeaMessageEvent.messageDisplayLangCode, + tokens: tokens ?? [], + selectedToken: selectedTokenIndex, + wordCardL1: MatrixState.pangeaController.userController.userL1Code!, + lemmaInfo: lemmaInfo, + phonetics: phonetics, + ); + overlayController.widget.chatController.showTokenFeedbackDialog( + requestData, + overlayController.pangeaMessageEvent.messageDisplayLangCode, + overlayController.pangeaMessageEvent, + ); + }, ); } } diff --git a/lib/pangea/toolbar/word_card/token_feedback_button.dart b/lib/pangea/toolbar/word_card/token_feedback_button.dart new file mode 100644 index 000000000..c5a7ece94 --- /dev/null +++ b/lib/pangea/toolbar/word_card/token_feedback_button.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_meaning_builder.dart'; +import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_builder.dart'; + +class TokenFeedbackButton extends StatelessWidget { + final LanguageModel textLanguage; + final ConstructIdentifier constructId; + final String text; + + final Function(LemmaInfoResponse, String) onFlagTokenInfo; + final Map messageInfo; + + const TokenFeedbackButton({ + super.key, + required this.textLanguage, + required this.constructId, + required this.text, + required this.onFlagTokenInfo, + required this.messageInfo, + }); + + @override + Widget build(BuildContext context) { + return LemmaMeaningBuilder( + langCode: textLanguage.langCode, + constructId: constructId, + messageInfo: messageInfo, + builder: (context, lemmaController) { + return PhoneticTranscriptionBuilder( + textLanguage: textLanguage, + text: text, + builder: (context, transcriptController) { + final enabled = (lemmaController.lemmaInfo != null || + lemmaController.isError) && + (transcriptController.transcription != null || + transcriptController.isError); + + final lemmaInfo = + lemmaController.lemmaInfo ?? LemmaInfoResponse.error; + + final transcript = transcriptController.transcription ?? 'ERROR'; + + return IconButton( + color: Theme.of(context).iconTheme.color, + icon: const Icon(Icons.flag_outlined), + onPressed: enabled + ? () { + onFlagTokenInfo( + lemmaInfo, + transcript, + ); + } + : null, + tooltip: enabled ? L10n.of(context).reportWordIssueTooltip : null, + ); + }, + ); + }, + ); + } +} diff --git a/lib/pangea/toolbar/word_card/word_card_switcher.dart b/lib/pangea/toolbar/word_card/word_card_switcher.dart new file mode 100644 index 000000000..014273478 --- /dev/null +++ b/lib/pangea/toolbar/word_card/word_card_switcher.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/themes.dart'; +import 'package:fluffychat/pangea/toolbar/layout/message_selection_positioner.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/select_mode_buttons.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/reading_assistance_content.dart'; + +class WordCardSwitcher extends StatelessWidget { + final MessageSelectionPositionerState controller; + const WordCardSwitcher({super.key, required this.controller}); + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: controller.widget.overlayController.selectedMode, + builder: (context, mode, __) { + return AnimatedSize( + alignment: controller.ownMessage + ? Alignment.bottomRight + : Alignment.bottomLeft, + duration: FluffyThemes.animationDuration, + child: controller.widget.overlayController.selectedToken != null + ? ReadingAssistanceContent( + overlayController: controller.widget.overlayController, + ) + : mode != SelectMode.emoji + ? ValueListenableBuilder( + valueListenable: controller.reactionNotifier, + builder: (context, _, __) => MessageReactionPicker( + chatController: controller.widget.chatController, + ), + ) + : const SizedBox.shrink(), + ); + }, + ); + } +} diff --git a/lib/pangea/toolbar/word_card/word_zoom_widget.dart b/lib/pangea/toolbar/word_card/word_zoom_widget.dart new file mode 100644 index 000000000..f8094f26c --- /dev/null +++ b/lib/pangea/toolbar/word_card/word_zoom_widget.dart @@ -0,0 +1,211 @@ +import 'package:flutter/material.dart'; + +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/common/widgets/word_audio_button.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_info_response.dart'; +import 'package:fluffychat/pangea/phonetic_transcription/phonetic_transcription_widget.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/new_word_overlay.dart'; +import 'package:fluffychat/pangea/toolbar/reading_assistance/tokens_util.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/lemma_meaning_display.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/lemma_reaction_picker.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/message_unsubscribed_card.dart'; +import 'package:fluffychat/pangea/toolbar/word_card/token_feedback_button.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class WordZoomWidget extends StatelessWidget { + final PangeaTokenText token; + final ConstructIdentifier construct; + + final String langCode; + final VoidCallback? onClose; + + final Event? event; + + final bool enableEmojiSelection; + final VoidCallback? onDismissNewWordOverlay; + final Function(LemmaInfoResponse, String)? onFlagTokenInfo; + + const WordZoomWidget({ + super.key, + required this.token, + required this.construct, + required this.langCode, + this.onClose, + this.event, + this.enableEmojiSelection = true, + this.onDismissNewWordOverlay, + this.onFlagTokenInfo, + }); + + String get transformTargetId => "word-zoom-card-${token.uniqueKey}"; + + LayerLink get layerLink => + MatrixState.pAnyState.layerLinkAndKey(transformTargetId).link; + + @override + Widget build(BuildContext context) { + final bool? subscribed = + MatrixState.pangeaController.subscriptionController.isSubscribed; + final overlayColor = Theme.of(context).scaffoldBackgroundColor; + final showTranscript = + MatrixState.pangeaController.userController.showTranscription; + + final Widget content = subscribed != null && !subscribed + ? const MessageUnsubscribedCard() + : Stack( + children: [ + Container( + height: AppConfig.toolbarMaxHeight - 8, + padding: const EdgeInsets.all(12.0), + constraints: const BoxConstraints( + maxWidth: AppConfig.toolbarMinWidth, + ), + child: CompositedTransformTarget( + link: layerLink, + child: Column( + spacing: 12.0, + children: [ + SizedBox( + height: 40.0, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + onClose != null + ? IconButton( + color: Theme.of(context).iconTheme.color, + icon: const Icon(Icons.close), + onPressed: onClose, + ) + : const SizedBox( + width: 40.0, + height: 40.0, + ), + Flexible( + child: Container( + constraints: const BoxConstraints( + minHeight: 40.0, + ), + alignment: Alignment.center, + child: SelectableText( + token.content, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 28.0, + fontWeight: FontWeight.w600, + height: 1.2, + color: Theme.of(context).brightness == + Brightness.light + ? AppConfig.yellowDark + : AppConfig.yellowLight, + overflow: TextOverflow.ellipsis, + ), + ), + ), + ), + onFlagTokenInfo != null + ? TokenFeedbackButton( + textLanguage: PLanguageStore.byLangCode( + langCode, + ) ?? + LanguageModel.unknown, + constructId: construct, + text: token.content, + onFlagTokenInfo: onFlagTokenInfo!, + messageInfo: event?.content ?? {}, + ) + : const SizedBox( + width: 40.0, + height: 40.0, + ), + ], + ), + ), + Expanded( + child: Column( + spacing: 4.0, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + showTranscript + ? PhoneticTranscriptionWidget( + text: token.content, + textLanguage: PLanguageStore.byLangCode( + langCode, + ) ?? + LanguageModel.unknown, + style: const TextStyle(fontSize: 14.0), + iconSize: 24.0, + maxLines: 2, + ) + : WordAudioButton( + text: token.content, + uniqueID: "lemma-content-${token.content}", + langCode: langCode, + iconSize: 24.0, + ), + LemmaReactionPicker( + constructId: construct, + langCode: langCode, + event: event, + enabled: enableEmojiSelection, + ), + LemmaMeaningDisplay( + langCode: langCode, + constructId: construct, + text: token.content, + messageInfo: event?.content ?? {}, + ), + ], + ), + ), + ], + ), + ), + ), + TokensUtil.isRecentlyCollected(token) + ? NewWordOverlay( + key: ValueKey(transformTargetId), + overlayColor: overlayColor, + transformTargetId: transformTargetId, + onDismiss: onDismissNewWordOverlay, + ) + : const SizedBox.shrink(), + ], + ); + + return GestureDetector( + onTap: () { + // Absorb taps to prevent them from propagating + // to widgets below and closing the overlay. + }, + child: Material( + type: MaterialType.transparency, + child: Container( + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + border: Border.all( + color: Theme.of(context).colorScheme.primary, + width: 4.0, + ), + borderRadius: const BorderRadius.all( + Radius.circular(AppConfig.borderRadius), + ), + ), + height: AppConfig.toolbarMaxHeight, + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + content, + ], + ), + ), + ), + ); + } +} diff --git a/lib/pangea/translation/full_text_translation_repo.dart b/lib/pangea/translation/full_text_translation_repo.dart new file mode 100644 index 000000000..b1e621f11 --- /dev/null +++ b/lib/pangea/translation/full_text_translation_repo.dart @@ -0,0 +1,108 @@ +//Question for Jordan - is this for an individual token or could it be a span? + +import 'dart:async'; +import 'dart:convert'; + +import 'package:async/async.dart'; +import 'package:http/http.dart'; + +import 'package:fluffychat/pangea/common/utils/error_handler.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_request_model.dart'; +import 'package:fluffychat/pangea/translation/full_text_translation_response_model.dart'; +import '../common/config/environment.dart'; +import '../common/network/requests.dart'; +import '../common/network/urls.dart'; + +class _TranslateCacheItem { + final Future response; + final DateTime timestamp; + + const _TranslateCacheItem({ + required this.response, + required this.timestamp, + }); +} + +class FullTextTranslationRepo { + static final Map _cache = {}; + static const Duration _cacheDuration = Duration(minutes: 10); + + static Future> get( + String accessToken, + FullTextTranslationRequestModel request, + ) { + final cached = _getCached(request); + if (cached != null) { + return _getResult(request, cached); + } + + final future = _fetch(accessToken, request); + _setCached(request, future); + return _getResult(request, future); + } + + static Future _fetch( + String accessToken, + FullTextTranslationRequestModel request, + ) async { + final Requests req = Requests( + choreoApiKey: Environment.choreoApiKey, + accessToken: accessToken, + ); + + final Response res = await req.post( + url: PApiUrls.simpleTranslation, + body: request.toJson(), + ); + + if (res.statusCode != 200) { + throw Exception( + 'Failed to translate text: ${res.statusCode} ${res.reasonPhrase}', + ); + } + + return FullTextTranslationResponseModel.fromJson( + jsonDecode(utf8.decode(res.bodyBytes)), + ).bestTranslation; + } + + static Future> _getResult( + FullTextTranslationRequestModel request, + Future future, + ) async { + try { + final res = await future; + return Result.value(res); + } catch (e, s) { + _cache.remove(request.hashCode.toString()); + ErrorHandler.logError( + e: e, + s: s, + data: request.toJson(), + ); + return Result.error(e); + } + } + + static Future? _getCached( + FullTextTranslationRequestModel request, + ) { + final cacheKeys = [..._cache.keys]; + for (final key in cacheKeys) { + if (DateTime.now().difference(_cache[key]!.timestamp) >= _cacheDuration) { + _cache.remove(key); + } + } + + return _cache[request.hashCode.toString()]?.response; + } + + static void _setCached( + FullTextTranslationRequestModel request, + Future response, + ) => + _cache[request.hashCode.toString()] = _TranslateCacheItem( + response: response, + timestamp: DateTime.now(), + ); +} diff --git a/lib/pangea/translation/full_text_translation_request_model.dart b/lib/pangea/translation/full_text_translation_request_model.dart new file mode 100644 index 000000000..62375e56c --- /dev/null +++ b/lib/pangea/translation/full_text_translation_request_model.dart @@ -0,0 +1,61 @@ +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; + +class FullTextTranslationRequestModel { + final String text; + final String? srcLang; + final String tgtLang; + final String userL1; + final String userL2; + final bool? deepL; + final int? offset; + final int? length; + + const FullTextTranslationRequestModel({ + required this.text, + this.srcLang, + required this.tgtLang, + required this.userL2, + required this.userL1, + this.deepL = false, + this.offset, + this.length, + }); + + Map toJson() => { + ModelKey.text: text, + ModelKey.srcLang: srcLang, + ModelKey.tgtLang: tgtLang, + ModelKey.userL2: userL2, + ModelKey.userL1: userL1, + ModelKey.deepL: deepL, + ModelKey.offset: offset, + ModelKey.length: length, + }; + + // override equals and hashcode + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + + return other is FullTextTranslationRequestModel && + other.text == text && + other.srcLang == srcLang && + other.tgtLang == tgtLang && + other.userL2 == userL2 && + other.userL1 == userL1 && + other.deepL == deepL && + other.offset == offset && + other.length == length; + } + + @override + int get hashCode => + text.hashCode ^ + srcLang.hashCode ^ + tgtLang.hashCode ^ + userL2.hashCode ^ + userL1.hashCode ^ + deepL.hashCode ^ + offset.hashCode ^ + length.hashCode; +} diff --git a/lib/pangea/translation/full_text_translation_response_model.dart b/lib/pangea/translation/full_text_translation_response_model.dart new file mode 100644 index 000000000..ebba1fea1 --- /dev/null +++ b/lib/pangea/translation/full_text_translation_response_model.dart @@ -0,0 +1,28 @@ +import 'package:fluffychat/pangea/common/constants/model_keys.dart'; + +class FullTextTranslationResponseModel { + final List translations; + final String source; + final String? deepL; + + const FullTextTranslationResponseModel({ + required this.translations, + required this.source, + required this.deepL, + }); + + factory FullTextTranslationResponseModel.fromJson(Map json) { + return FullTextTranslationResponseModel( + translations: (json["translations"] as Iterable) + .map( + (e) => e, + ) + .toList() + .cast(), + source: json[ModelKey.srcLang], + deepL: json['deepl_res'], + ); + } + + String get bestTranslation => deepL ?? translations.first; +} diff --git a/lib/pangea/user/models/analytics_profile_model.dart b/lib/pangea/user/analytics_profile_model.dart similarity index 86% rename from lib/pangea/user/models/analytics_profile_model.dart rename to lib/pangea/user/analytics_profile_model.dart index 127e7d3c9..c7ed6c35a 100644 --- a/lib/pangea/user/models/analytics_profile_model.dart +++ b/lib/pangea/user/analytics_profile_model.dart @@ -1,7 +1,7 @@ import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; class AnalyticsProfileModel { LanguageModel? baseLanguage; @@ -21,12 +21,12 @@ class AnalyticsProfileModel { final profileJson = json[PangeaEventTypes.profileAnalytics]; - final baseLanguage = profileJson[ModelKey.userSourceLanguage] != null - ? PLanguageStore.byLangCode(profileJson[ModelKey.userSourceLanguage]) + final baseLanguage = profileJson[ModelKey.sourceLanguage] != null + ? PLanguageStore.byLangCode(profileJson[ModelKey.sourceLanguage]) : null; - final targetLanguage = profileJson[ModelKey.userTargetLanguage] != null - ? PLanguageStore.byLangCode(profileJson[ModelKey.userTargetLanguage]) + final targetLanguage = profileJson[ModelKey.targetLanguage] != null + ? PLanguageStore.byLangCode(profileJson[ModelKey.targetLanguage]) : null; final languageAnalytics = {}; @@ -59,11 +59,11 @@ class AnalyticsProfileModel { final json = {}; if (targetLanguage != null) { - json[ModelKey.userTargetLanguage] = targetLanguage!.langCodeShort; + json[ModelKey.targetLanguage] = targetLanguage!.langCodeShort; } if (baseLanguage != null) { - json[ModelKey.userSourceLanguage] = baseLanguage!.langCodeShort; + json[ModelKey.sourceLanguage] = baseLanguage!.langCodeShort; } final analytics = {}; @@ -108,7 +108,7 @@ class AnalyticsProfileModel { } final currentRoomId = analyticsRoomIdByLanguage(language); - if (currentRoomId == null) { + if (currentRoomId != analyticsRoomId) { languageAnalytics![language]!.analyticsRoomId = analyticsRoomId; } languageAnalytics![language]!.level = level; diff --git a/lib/pangea/user/controllers/permissions_controller.dart b/lib/pangea/user/controllers/permissions_controller.dart deleted file mode 100644 index 169c75a18..000000000 --- a/lib/pangea/user/controllers/permissions_controller.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/common/controllers/base_controller.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; - -class PermissionsController extends BaseController { - late PangeaController _pangeaController; - - PermissionsController(PangeaController pangeaController) : super() { - _pangeaController = pangeaController; - } - - /// Returns false if user is null - bool isUser18() { - final DateTime? dob = - _pangeaController.userController.profile.userSettings.dateOfBirth; - if (dob == null) return false; - final today = DateTime.now(); - final age = today.year - dob.year; - - // Check if the birthday has occurred yet this year - final hasHadBirthdayThisYear = (today.month > dob.month) || - (today.month == dob.month && today.day >= dob.day); - - // Return true if they are 18 or older - return age > 18 || (age == 18 && hasHadBirthdayThisYear); - } - - bool canShareVideo(String? roomID) => isUser18(); - - bool canSharePhoto(String? roomID) => true; - - bool canShareFile(String? roomID) => true; - - bool canShareLocation(String? roomID) => isUser18(); - - bool userToolSetting(ToolSetting setting) { - switch (setting) { - case ToolSetting.interactiveTranslator: - return _pangeaController - .userController.profile.toolSettings.interactiveTranslator; - case ToolSetting.interactiveGrammar: - return _pangeaController - .userController.profile.toolSettings.interactiveGrammar; - case ToolSetting.immersionMode: - return _pangeaController - .userController.profile.toolSettings.immersionMode; - case ToolSetting.definitions: - return _pangeaController - .userController.profile.toolSettings.definitions; - case ToolSetting.autoIGC: - return _pangeaController.userController.profile.toolSettings.autoIGC; - default: - return false; - } - } - - bool isToolEnabled(ToolSetting setting, Room? room) { - // Rules can't be edited; default to true - return userToolSetting(setting); - // if (room?.isSpaceAdmin ?? false) { - // return userToolSetting(setting); - // } - // final int? classPermission = - // room != null ? classLanguageToolPermission(room, setting) : 1; - // if (classPermission == 0) return false; - // if (classPermission == 2) return true; - // return userToolSetting(setting); - } - - bool isWritingAssistanceEnabled(Room? room) { - // Rules can't be edited; default to true - return true; - // return isToolEnabled(ToolSetting.interactiveTranslator, room) && - // isToolEnabled(ToolSetting.interactiveGrammar, room); - } -} diff --git a/lib/pangea/user/models/activities_profile_model.dart b/lib/pangea/user/models/activities_profile_model.dart deleted file mode 100644 index b9e9d41ed..000000000 --- a/lib/pangea/user/models/activities_profile_model.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; - -class ActivitiesProfileModel { - final List _bookmarkedActivities; - - ActivitiesProfileModel({ - required List bookmarkedActivities, - }) : _bookmarkedActivities = bookmarkedActivities; - - static ActivitiesProfileModel get empty => ActivitiesProfileModel( - bookmarkedActivities: [], - ); - - bool isBookmarked(String id) => _bookmarkedActivities.contains(id); - - void addBookmark(String activityId) { - if (!_bookmarkedActivities.contains(activityId)) { - _bookmarkedActivities.add(activityId); - } - } - - void removeBookmark(String activityId) { - _bookmarkedActivities.remove(activityId); - } - - // Future> getBookmarkedActivities() => Future.wait( - // _bookmarkedActivities.map((id) => ActivityPlanRepo.get(id)).toList(), - // ); - - // List getBookmarkedActivitiesSync() => _bookmarkedActivities - // .map((id) => ActivityPlanRepo.getCached(id)) - // .whereType() - // .toList(); - - static ActivitiesProfileModel fromJson(Map json) { - if (!json.containsKey(PangeaEventTypes.profileActivities)) { - return ActivitiesProfileModel.empty; - } - - final profileJson = json[PangeaEventTypes.profileActivities]; - return ActivitiesProfileModel( - bookmarkedActivities: - List.from(profileJson[ModelKey.bookmarkedActivities] ?? []), - ); - } - - Map toJson() { - return { - ModelKey.bookmarkedActivities: _bookmarkedActivities, - }; - } -} diff --git a/lib/pangea/user/pangea_push_rules_extension.dart b/lib/pangea/user/pangea_push_rules_extension.dart new file mode 100644 index 000000000..ca670f69b --- /dev/null +++ b/lib/pangea/user/pangea_push_rules_extension.dart @@ -0,0 +1,47 @@ +import 'package:matrix/matrix.dart'; + +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; + +extension PangeaPushRulesExtension on Client { + Future setPangeaPushRules() async { + if (!isLogged()) return; + final List analyticsRooms = + rooms.where((room) => room.isAnalyticsRoom).toList(); + + for (final Room room in analyticsRooms) { + final pushRule = room.pushRuleState; + if (pushRule != PushRuleState.dontNotify) { + await room.setPushRuleState(PushRuleState.dontNotify); + } + } + + if (!(globalPushRules?.override?.any( + (element) => element.ruleId == PangeaEventTypes.textToSpeechRule, + ) ?? + false)) { + await setPushRule( + PushRuleKind.override, + PangeaEventTypes.textToSpeechRule, + [PushRuleAction.dontNotify], + conditions: [ + PushCondition( + kind: 'event_match', + key: 'content.msgtype', + pattern: MessageTypes.Audio, + ), + PushCondition( + kind: 'event_match', + key: 'content.transcription.lang_code', + pattern: '*', + ), + PushCondition( + kind: 'event_match', + key: 'content.transcription.text', + pattern: '*', + ), + ], + ); + } + } +} diff --git a/lib/pangea/user/controllers/user_controller.dart b/lib/pangea/user/user_controller.dart similarity index 61% rename from lib/pangea/user/controllers/user_controller.dart rename to lib/pangea/user/user_controller.dart index b548be8d4..43b9736ea 100644 --- a/lib/pangea/user/controllers/user_controller.dart +++ b/lib/pangea/user/user_controller.dart @@ -1,23 +1,22 @@ import 'dart:async'; import 'package:collection/collection.dart'; -import 'package:jwt_decode/jwt_decode.dart'; import 'package:matrix/matrix.dart' as matrix; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/pangea/analytics_misc/client_analytics_extension.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; -import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/user/models/activities_profile_model.dart'; -import 'package:fluffychat/pangea/user/models/analytics_profile_model.dart'; -import '../models/user_model.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_model.dart'; +import 'package:fluffychat/pangea/languages/language_service.dart'; +import 'package:fluffychat/pangea/languages/p_language_store.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; +import 'package:fluffychat/pangea/user/analytics_profile_model.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'user_model.dart'; class LanguageUpdate { final LanguageModel? prevBaseLang; @@ -35,43 +34,28 @@ class LanguageUpdate { /// Controller that manages saving and reading of user/profile information class UserController { - late PangeaController _pangeaController; - final StreamController languageStream = StreamController.broadcast(); final StreamController settingsUpdateStream = StreamController.broadcast(); - UserController(PangeaController pangeaController) : super() { - _pangeaController = pangeaController; - } - - matrix.Client get client => _pangeaController.matrixState.client; - - /// Convenience function that returns the user ID currently stored in the client. - String? get userId => client.userID; - /// Cached version of the user profile, so it doesn't have /// to be read in from client's account data each time it is accessed. Profile? _cachedProfile; AnalyticsProfileModel? analyticsProfile; - ActivitiesProfileModel? activitiesProfile; /// Listens for account updates and updates the cached profile StreamSubscription? _profileListener; - /// Listen for updates to account data in syncs and update the cached profile - void _addProfileListener() { - _profileListener ??= client.onSync.stream - .where((sync) => sync.accountData != null) - .listen((sync) { - final profileData = client.accountData[ModelKey.userProfile]?.content; - final Profile? fromAccountData = Profile.fromAccountData(profileData); - if (fromAccountData != null) { - _cachedProfile = fromAccountData; - } - }); + matrix.Client get client => MatrixState.pangeaController.matrixState.client; + + void _onProfileUpdate(matrix.SyncUpdate sync) { + final profileData = client.accountData[ModelKey.userProfile]?.content; + final Profile? fromAccountData = Profile.fromAccountData(profileData); + if (fromAccountData != null) { + _cachedProfile = fromAccountData; + } } /// The user's profile. Will be empty if the client's accountData hasn't @@ -107,8 +91,8 @@ class UserController { waitForDataInSync = false, }) async { await initialize(); - final prevTargetLang = _pangeaController.languageController.userL2; - final prevBaseLang = _pangeaController.languageController.userL1; + final prevTargetLang = userL2; + final prevBaseLang = userL1; final prevHash = profile.hashCode; final Profile updatedProfile = update(profile); @@ -119,12 +103,11 @@ class UserController { await updatedProfile.saveProfileData(waitForDataInSync: waitForDataInSync); - if ((prevTargetLang != _pangeaController.languageController.userL2) || - (prevBaseLang != _pangeaController.languageController.userL1)) { + if ((prevTargetLang != userL2) || (prevBaseLang != userL1)) { languageStream.add( LanguageUpdate( - baseLang: _pangeaController.languageController.userL1!, - targetLang: _pangeaController.languageController.userL2!, + baseLang: userL1!, + targetLang: userL2!, prevBaseLang: prevBaseLang, prevTargetLang: prevTargetLang, ), @@ -150,12 +133,16 @@ class UserController { try { await _initialize(); - _addProfileListener(); + + _profileListener ??= client.onSync.stream + .where((sync) => sync.accountData != null) + .listen(_onProfileUpdate); + _addAnalyticsRoomIdsToPublicProfile(); if (profile.userSettings.targetLanguage != null && profile.userSettings.targetLanguage!.isNotEmpty && - _pangeaController.languageController.userL2 == null) { + userL2 == null) { // update the language list and send an update to refresh analytics summary await PLanguageStore.initialize(forceRefresh: true); } @@ -189,37 +176,21 @@ class UserController { final resp = await client.getUserProfile(client.userID!); analyticsProfile = AnalyticsProfileModel.fromJson(resp.additionalProperties); - activitiesProfile = - ActivitiesProfileModel.fromJson(resp.additionalProperties); } catch (e) { // getting a 404 error for some users without pre-existing profile // still want to set other properties, so catch this error analyticsProfile = AnalyticsProfileModel(); - activitiesProfile = ActivitiesProfileModel.empty; } // Do not await. This function pulls level from analytics, // so it waits for analytics to finish initializing. Analytics waits for user controller to // finish initializing, so this would cause a deadlock. if (analyticsProfile!.isEmpty) { - _pangeaController.getAnalytics.initCompleter.future - .timeout(const Duration(seconds: 10)) - .then((_) { - updateAnalyticsProfile( - level: _pangeaController.getAnalytics.constructListModel.level, - ); - }).catchError((e, s) { - ErrorHandler.logError( - e: e, - s: s, - data: { - "publicProfile": analyticsProfile?.toJson(), - "userId": client.userID, - }, - level: - e is TimeoutException ? SentryLevel.warning : SentryLevel.error, - ); - }); + final analyticsService = + MatrixState.pangeaController.matrixState.analyticsDataService; + + final data = await analyticsService.derivedData; + updateAnalyticsProfile(level: data.level); } } @@ -238,9 +209,6 @@ class UserController { await initialize(); } - /// Returns a boolean value indicating whether a new JWT (JSON Web Token) is needed. - bool needNewJWT(String token) => Jwt.isExpired(token); - /// Retrieves matrix access token. String get accessToken { final token = client.accessToken; @@ -250,21 +218,6 @@ class UserController { return token; } - /// Returns the full name of the user. - /// If the [userId] is null, an error will be logged and null will be returned. - /// The full name is obtained by extracting the substring before the first occurrence of ":" in the [userId] - /// and then replacing all occurrences of "@" with an empty string. - String? get fullname { - if (userId == null) { - ErrorHandler.logError( - e: "calling fullname with userId == null", - data: {}, - ); - return null; - } - return userId!.substring(0, userId!.indexOf(":")).replaceAll("@", ""); - } - /// Checks if user data is available and the user's l2 is set. Future get isUserL2Set async { try { @@ -294,39 +247,6 @@ class UserController { ); } - /// Checks if the user's languages are set. - /// Returns a [Future] that completes with a [bool] value - /// indicating whether the user's languages are set. - /// - /// A user's languages are considered set if the source and target languages - /// are not null, not empty, and not equal to the [LanguageKeys.unknownLanguage] constant. - /// - /// If an error occurs during the process, it logs the error and returns `false`. - Future get areUserLanguagesSet async { - try { - final String? srcLang = profile.userSettings.sourceLanguage; - final String? tgtLang = profile.userSettings.targetLanguage; - return srcLang != null && - tgtLang != null && - srcLang.isNotEmpty && - tgtLang.isNotEmpty && - srcLang != LanguageKeys.unknownLanguage && - tgtLang != LanguageKeys.unknownLanguage; - } catch (err, s) { - ErrorHandler.logError( - e: err, - s: s, - data: {}, - ); - return false; - } - } - - /// Returns a boolean value indicating whether the user's profile is public. - bool get isPublic { - return profile.userSettings.publicProfile ?? true; - } - /// Retrieves the user's email address. /// /// This method fetches the user's email address by making a request to the @@ -364,12 +284,11 @@ class UserController { LanguageModel? baseLanguage, LanguageModel? targetLanguage, }) async { - targetLanguage ??= _pangeaController.languageController.userL2; - baseLanguage ??= _pangeaController.languageController.userL1; + targetLanguage ??= userL2; + baseLanguage ??= userL1; if (targetLanguage == null || analyticsProfile == null) return; - final analyticsRoom = - _pangeaController.matrixState.client.analyticsRoomLocal(targetLanguage); + final analyticsRoom = client.analyticsRoomLocal(targetLanguage); if (analyticsProfile!.targetLanguage == targetLanguage && analyticsProfile!.baseLanguage == baseLanguage && @@ -394,8 +313,7 @@ class UserController { Future _addAnalyticsRoomIdsToPublicProfile() async { if (analyticsProfile?.languageAnalytics == null) return; - final analyticsRooms = - _pangeaController.matrixState.client.allMyAnalyticsRooms; + final analyticsRooms = client.allMyAnalyticsRooms; if (analyticsRooms.isEmpty) return; for (final analyticsRoom in analyticsRooms) { @@ -426,15 +344,13 @@ class UserController { } Future addXPOffset(int offset) async { - final targetLanguage = _pangeaController.languageController.userL2; + final targetLanguage = userL2; if (targetLanguage == null || analyticsProfile == null) return; analyticsProfile!.addXPOffset( targetLanguage, offset, - _pangeaController.matrixState.client - .analyticsRoomLocal(targetLanguage) - ?.id, + client.analyticsRoomLocal(targetLanguage)?.id, ); await _savePublicProfileUpdate( PangeaEventTypes.profileAnalytics, @@ -442,68 +358,6 @@ class UserController { ); } - Future addBookmarkedActivity({ - required String activityId, - }) async { - if (activitiesProfile == null) { - throw Exception("Activities profile is not initialized"); - } - - activitiesProfile!.addBookmark(activityId); - await _savePublicProfileUpdate( - PangeaEventTypes.profileActivities, - activitiesProfile!.toJson(), - ); - } - - // Future> getBookmarkedActivities() async { - // if (activitiesProfile == null) { - // throw Exception("Activities profile is not initialized"); - // } - - // return activitiesProfile!.getBookmarkedActivities(); - // } - - // List getBookmarkedActivitiesSync() { - // if (activitiesProfile == null) { - // throw Exception("Activities profile is not initialized"); - // } - - // return activitiesProfile!.getBookmarkedActivitiesSync(); - // } - - Future updateBookmarkedActivity({ - required String activityId, - required String newActivityId, - }) async { - if (activitiesProfile == null) { - throw Exception("Activities profile is not initialized"); - } - - activitiesProfile!.removeBookmark(activityId); - activitiesProfile!.addBookmark(newActivityId); - await _savePublicProfileUpdate( - PangeaEventTypes.profileActivities, - activitiesProfile!.toJson(), - ); - } - - Future removeBookmarkedActivity({ - required String activityId, - }) async { - if (activitiesProfile == null) { - throw Exception("Activities profile is not initialized"); - } - - activitiesProfile!.removeBookmark(activityId); - await _savePublicProfileUpdate( - PangeaEventTypes.profileActivities, - activitiesProfile!.toJson(), - ); - } - - bool isBookmarked(String id) => activitiesProfile?.isBookmarked(id) ?? false; - Future getPublicAnalyticsProfile( String userId, ) async { @@ -525,4 +379,68 @@ class UserController { return AnalyticsProfileModel(); } } + + bool isToolEnabled(ToolSetting setting) { + return userToolSetting(setting); + } + + bool userToolSetting(ToolSetting setting) { + switch (setting) { + case ToolSetting.interactiveTranslator: + return profile.toolSettings.interactiveTranslator; + case ToolSetting.interactiveGrammar: + return profile.toolSettings.interactiveGrammar; + case ToolSetting.immersionMode: + return profile.toolSettings.immersionMode; + case ToolSetting.definitions: + return profile.toolSettings.definitions; + case ToolSetting.autoIGC: + return profile.toolSettings.autoIGC; + case ToolSetting.enableAutocorrect: + return profile.toolSettings.enableAutocorrect; + default: + return false; + } + } + + String? get userL1Code { + final source = profile.userSettings.sourceLanguage; + return source == null || source.isEmpty + ? LanguageService.systemLanguage?.langCode + : source; + } + + String? get userL2Code { + final target = profile.userSettings.targetLanguage; + return target == null || target.isEmpty ? null : target; + } + + LanguageModel? get userL1 { + if (userL1Code == null) return null; + final langModel = PLanguageStore.byLangCode(userL1Code!); + return langModel?.langCode == LanguageKeys.unknownLanguage + ? null + : langModel; + } + + LanguageModel? get userL2 { + if (userL2Code == null) return null; + final langModel = PLanguageStore.byLangCode(userL2Code!); + return langModel?.langCode == LanguageKeys.unknownLanguage + ? null + : langModel; + } + + bool get languagesSet => + userL1Code != null && + userL2Code != null && + userL1Code!.isNotEmpty && + userL2Code!.isNotEmpty && + userL1Code != LanguageKeys.unknownLanguage && + userL2Code != LanguageKeys.unknownLanguage; + + bool get showTranscription => + (userL1 != null && userL2 != null && userL1?.script != userL2?.script) || + (userL1?.script != LanguageKeys.unknownLanguage || + userL2?.script == LanguageKeys.unknownLanguage); } diff --git a/lib/pangea/user/models/user_model.dart b/lib/pangea/user/user_model.dart similarity index 91% rename from lib/pangea/user/models/user_model.dart rename to lib/pangea/user/user_model.dart index 6ffe2a844..60ce1873a 100644 --- a/lib/pangea/user/models/user_model.dart +++ b/lib/pangea/user/user_model.dart @@ -3,10 +3,11 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/pangea/common/constants/model_keys.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/instructions/instruction_settings.dart'; -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/language_level_type_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import '../../learning_settings/models/language_model.dart'; +import '../languages/language_model.dart'; /// The user's settings learning settings. class UserSettings { @@ -15,6 +16,7 @@ class UserSettings { bool? publicProfile; String? targetLanguage; String? sourceLanguage; + GenderEnum gender; String? country; LanguageLevelTypeEnum cefrLevel; @@ -24,6 +26,7 @@ class UserSettings { this.publicProfile, this.targetLanguage, this.sourceLanguage, + this.gender = GenderEnum.unselected, this.country, this.cefrLevel = LanguageLevelTypeEnum.a1, }); @@ -36,11 +39,16 @@ class UserSettings { ? DateTime.parse(json[ModelKey.userCreatedAt]) : null, publicProfile: json[ModelKey.publicProfile], - targetLanguage: json[ModelKey.l2LanguageKey], - sourceLanguage: json[ModelKey.l1LanguageKey], + targetLanguage: json[ModelKey.targetLanguage], + sourceLanguage: json[ModelKey.sourceLanguage], + gender: json[ModelKey.userGender] is String + ? GenderEnumExtension.fromString( + json[ModelKey.userGender], + ) + : GenderEnum.unselected, country: json[ModelKey.userCountry], cefrLevel: json[ModelKey.cefrLevel] is String - ? LanguageLevelTypeEnumExtension.fromString( + ? LanguageLevelTypeEnum.fromString( json[ModelKey.cefrLevel], ) : LanguageLevelTypeEnum.a1, @@ -51,8 +59,9 @@ class UserSettings { data[ModelKey.userDateOfBirth] = dateOfBirth?.toIso8601String(); data[ModelKey.userCreatedAt] = createdAt?.toIso8601String(); data[ModelKey.publicProfile] = publicProfile; - data[ModelKey.l2LanguageKey] = targetLanguage; - data[ModelKey.l1LanguageKey] = sourceLanguage; + data[ModelKey.targetLanguage] = targetLanguage; + data[ModelKey.sourceLanguage] = sourceLanguage; + data[ModelKey.userGender] = gender.string; data[ModelKey.userCountry] = country; data[ModelKey.cefrLevel] = cefrLevel.string; return data; @@ -95,10 +104,10 @@ class UserSettings { publicProfile: (accountData[ModelKey.publicProfile] ?.content[ModelKey.publicProfile] as bool?) ?? false, - targetLanguage: accountData[ModelKey.l2LanguageKey] - ?.content[ModelKey.l2LanguageKey] as String?, - sourceLanguage: accountData[ModelKey.l1LanguageKey] - ?.content[ModelKey.l1LanguageKey] as String?, + targetLanguage: accountData[ModelKey.targetLanguage] + ?.content[ModelKey.targetLanguage] as String?, + sourceLanguage: accountData[ModelKey.sourceLanguage] + ?.content[ModelKey.sourceLanguage] as String?, country: accountData[ModelKey.userCountry]?.content[ModelKey.userCountry] as String?, ); @@ -111,6 +120,7 @@ class UserSettings { publicProfile: publicProfile, targetLanguage: targetLanguage, sourceLanguage: sourceLanguage, + gender: gender, country: country, cefrLevel: cefrLevel, ); @@ -126,6 +136,7 @@ class UserSettings { (other.publicProfile ?? false) == (publicProfile ?? false) && other.targetLanguage == targetLanguage && other.sourceLanguage == sourceLanguage && + other.gender == gender && other.country == country && other.cefrLevel == cefrLevel; } @@ -137,6 +148,7 @@ class UserSettings { (publicProfile ?? false).hashCode, targetLanguage.hashCode, sourceLanguage.hashCode, + gender.hashCode, country.hashCode, cefrLevel.hashCode, ]); @@ -408,10 +420,10 @@ class PangeaProfile { factory PangeaProfile.fromJson(Map json) { final l2 = LanguageModel.codeFromNameOrCode( - json[ModelKey.l2LanguageKey], + json[ModelKey.targetLanguage], ); final l1 = LanguageModel.codeFromNameOrCode( - json[ModelKey.l1LanguageKey], + json[ModelKey.sourceLanguage], ); return PangeaProfile( @@ -430,8 +442,8 @@ class PangeaProfile { data[ModelKey.userCreatedAt] = createdAt; data[ModelKey.userPangeaUserId] = pangeaUserId; data[ModelKey.userDateOfBirth] = dateOfBirth; - data[ModelKey.l2LanguageKey] = targetLanguage; - data[ModelKey.l1LanguageKey] = sourceLanguage; + data[ModelKey.targetLanguage] = targetLanguage; + data[ModelKey.sourceLanguage] = sourceLanguage; data[ModelKey.publicProfile] = publicProfile; data[ModelKey.userCountry] = country; return data; diff --git a/lib/pangea/vocab_practice/choice_cards/audio_choice_card.dart b/lib/pangea/vocab_practice/choice_cards/audio_choice_card.dart new file mode 100644 index 000000000..e80359415 --- /dev/null +++ b/lib/pangea/vocab_practice/choice_cards/audio_choice_card.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/common/widgets/word_audio_button.dart'; +import 'package:fluffychat/pangea/vocab_practice/choice_cards/game_choice_card.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +/// Displays an audio button with a select label in a row layout +/// TODO: needs a better design and button handling +class AudioChoiceCard extends StatelessWidget { + final String text; + final VoidCallback onPressed; + final bool isCorrect; + final double height; + final bool isEnabled; + + const AudioChoiceCard({ + required this.text, + required this.onPressed, + required this.isCorrect, + this.height = 72.0, + this.isEnabled = true, + super.key, + }); + + @override + Widget build(BuildContext context) { + return GameChoiceCard( + shouldFlip: false, + transformId: text, + onPressed: onPressed, + isCorrect: isCorrect, + height: height, + isEnabled: isEnabled, + child: Row( + children: [ + Expanded( + child: WordAudioButton( + text: text, + uniqueID: "vocab_practice_choice_$text", + langCode: + MatrixState.pangeaController.userController.userL2!.langCode, + ), + ), + Text(L10n.of(context).select), + ], + ), + ); + } +} diff --git a/lib/pangea/vocab_practice/choice_cards/game_choice_card.dart b/lib/pangea/vocab_practice/choice_cards/game_choice_card.dart new file mode 100644 index 000000000..5d08a4105 --- /dev/null +++ b/lib/pangea/vocab_practice/choice_cards/game_choice_card.dart @@ -0,0 +1,186 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +/// A unified choice card that handles flipping, color tinting, hovering, and alt widgets +class GameChoiceCard extends StatefulWidget { + final Widget child; + final Widget? altChild; + final VoidCallback onPressed; + final bool isCorrect; + final double height; + final bool shouldFlip; + final String? transformId; + final bool isEnabled; + + const GameChoiceCard({ + required this.child, + this.altChild, + required this.onPressed, + required this.isCorrect, + this.height = 72.0, + this.shouldFlip = false, + this.transformId, + this.isEnabled = true, + super.key, + }); + + @override + State createState() => _GameChoiceCardState(); +} + +class _GameChoiceCardState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _scaleAnim; + bool _flipped = false; + bool _isHovered = false; + bool _useAltChild = false; + bool _clicked = false; + + @override + void initState() { + super.initState(); + + if (widget.shouldFlip) { + _controller = AnimationController( + duration: const Duration(milliseconds: 220), + vsync: this, + ); + + _scaleAnim = Tween(begin: 1.0, end: 0.0).animate( + CurvedAnimation(parent: _controller, curve: Curves.easeInOut), + ); + + _controller.addListener(_onAnimationUpdate); + } + } + + void _onAnimationUpdate() { + // Swap to altChild when card is almost fully shrunk + if (_controller.value >= 0.95 && !_useAltChild && widget.altChild != null) { + setState(() => _useAltChild = true); + } + + // Mark as flipped when card is fully shrunk + if (_controller.value >= 0.95 && !_flipped) { + setState(() => _flipped = true); + } + } + + @override + void dispose() { + if (widget.shouldFlip) { + _controller.removeListener(_onAnimationUpdate); + _controller.dispose(); + } + super.dispose(); + } + + Future _handleTap() async { + if (!widget.isEnabled) return; + + if (widget.shouldFlip) { + if (_flipped) return; + // Animate forward (shrink), then reverse (expand) + await _controller.forward(); + await _controller.reverse(); + } else { + if (_clicked) return; + setState(() => _clicked = true); + } + + widget.onPressed(); + } + + @override + Widget build(BuildContext context) { + final ColorScheme colorScheme = Theme.of(context).colorScheme; + + final Color baseColor = colorScheme.surfaceContainerHighest; + final Color hoverColor = colorScheme.onSurface.withValues(alpha: 0.08); + final Color tintColor = widget.isCorrect + ? AppConfig.success.withValues(alpha: 0.3) + : AppConfig.error.withValues(alpha: 0.3); + + Widget card = MouseRegion( + onEnter: + widget.isEnabled ? ((_) => setState(() => _isHovered = true)) : null, + onExit: + widget.isEnabled ? ((_) => setState(() => _isHovered = false)) : null, + child: SizedBox( + width: double.infinity, + height: widget.height, + child: GestureDetector( + onTap: _handleTap, + child: widget.shouldFlip + ? AnimatedBuilder( + animation: _scaleAnim, + builder: (context, child) { + final bool showContent = _scaleAnim.value > 0.1; + return Transform.scale( + scaleY: _scaleAnim.value, + child: Container( + decoration: BoxDecoration( + color: baseColor, + borderRadius: BorderRadius.circular(16), + ), + foregroundDecoration: BoxDecoration( + color: _flipped + ? tintColor + : (_isHovered ? hoverColor : Colors.transparent), + borderRadius: BorderRadius.circular(16), + ), + margin: const EdgeInsets.symmetric( + vertical: 6, + horizontal: 0, + ), + padding: const EdgeInsets.symmetric(horizontal: 16), + height: widget.height, + alignment: Alignment.center, + child: Opacity( + opacity: showContent ? 1.0 : 0.0, + child: _useAltChild && widget.altChild != null + ? widget.altChild! + : widget.child, + ), + ), + ); + }, + ) + : Container( + decoration: BoxDecoration( + color: baseColor, + borderRadius: BorderRadius.circular(16), + ), + foregroundDecoration: BoxDecoration( + color: _clicked + ? tintColor + : (_isHovered ? hoverColor : Colors.transparent), + borderRadius: BorderRadius.circular(16), + ), + margin: + const EdgeInsets.symmetric(vertical: 6, horizontal: 0), + padding: const EdgeInsets.symmetric(horizontal: 16), + height: widget.height, + alignment: Alignment.center, + child: widget.child, + ), + ), + ), + ); + + // Wrap with transform target if transformId is provided + if (widget.transformId != null) { + final transformTargetId = + 'vocab-choice-card-${widget.transformId!.replaceAll(' ', '_')}'; + card = CompositedTransformTarget( + link: MatrixState.pAnyState.layerLinkAndKey(transformTargetId).link, + child: card, + ); + } + + return card; + } +} diff --git a/lib/pangea/vocab_practice/choice_cards/meaning_choice_card.dart b/lib/pangea/vocab_practice/choice_cards/meaning_choice_card.dart new file mode 100644 index 000000000..5faeb0398 --- /dev/null +++ b/lib/pangea/vocab_practice/choice_cards/meaning_choice_card.dart @@ -0,0 +1,97 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/vocab_practice/choice_cards/game_choice_card.dart'; + +/// Choice card for meaning activity with emoji, and alt text on flip +class MeaningChoiceCard extends StatelessWidget { + final String choiceId; + final String displayText; + final String? emoji; + final VoidCallback onPressed; + final bool isCorrect; + final double height; + final bool isEnabled; + + const MeaningChoiceCard({ + required this.choiceId, + required this.displayText, + this.emoji, + required this.onPressed, + required this.isCorrect, + this.height = 72.0, + this.isEnabled = true, + super.key, + }); + + @override + Widget build(BuildContext context) { + final baseTextSize = + (Theme.of(context).textTheme.titleMedium?.fontSize ?? 16) * + (height / 72.0).clamp(1.0, 1.4); + final emojiSize = baseTextSize * 1.2; + + return GameChoiceCard( + shouldFlip: true, + transformId: choiceId, + onPressed: onPressed, + isCorrect: isCorrect, + height: height, + isEnabled: isEnabled, + altChild: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (emoji != null && emoji!.isNotEmpty) + SizedBox( + width: height * .7, + height: height, + child: Center( + child: Text( + emoji!, + style: TextStyle(fontSize: emojiSize), + ), + ), + ), + Expanded( + child: Text( + ConstructIdentifier.fromString(choiceId)!.lemma, + overflow: TextOverflow.ellipsis, + maxLines: 2, + textAlign: TextAlign.left, + style: TextStyle( + fontSize: baseTextSize, + ), + ), + ), + ], + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (emoji != null && emoji!.isNotEmpty) + SizedBox( + width: height * .7, + height: height, + child: Center( + child: Text( + emoji!, + style: TextStyle(fontSize: emojiSize), + ), + ), + ), + Expanded( + child: Text( + displayText, + overflow: TextOverflow.ellipsis, + maxLines: 2, + textAlign: TextAlign.left, + style: TextStyle( + fontSize: baseTextSize, + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/pangea/vocab_practice/completed_activity_session_view.dart b/lib/pangea/vocab_practice/completed_activity_session_view.dart new file mode 100644 index 000000000..177b6b6eb --- /dev/null +++ b/lib/pangea/vocab_practice/completed_activity_session_view.dart @@ -0,0 +1,292 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_misc/level_up/star_rain_widget.dart'; +import 'package:fluffychat/pangea/analytics_summary/animated_progress_bar.dart'; +import 'package:fluffychat/pangea/vocab_practice/percent_marker_bar.dart'; +import 'package:fluffychat/pangea/vocab_practice/stat_card.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_page.dart'; +import 'package:fluffychat/widgets/avatar.dart'; +import 'package:fluffychat/widgets/matrix.dart'; +import 'package:fluffychat/widgets/mxc_image.dart'; + +class CompletedActivitySessionView extends StatefulWidget { + final VocabPracticeState controller; + const CompletedActivitySessionView(this.controller, {super.key}); + + @override + State createState() => + _CompletedActivitySessionViewState(); +} + +class _CompletedActivitySessionViewState + extends State { + late final Future> progressChangeFuture; + double currentProgress = 0.0; + Uri? avatarUrl; + bool shouldShowRain = false; + + @override + void initState() { + super.initState(); + + // Fetch avatar URL + final client = Matrix.of(context).client; + client.fetchOwnProfile().then((profile) { + if (mounted) { + setState(() => avatarUrl = profile.avatarUrl); + } + }); + + progressChangeFuture = widget.controller.calculateProgressChange( + widget.controller.sessionLoader.value!.totalXpGained, + ); + } + + void _onProgressChangeLoaded(Map progressChange) { + //start with before progress + currentProgress = progressChange['before'] ?? 0.0; + + //switch to after progress after first frame, to activate animation + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + setState(() { + currentProgress = progressChange['after'] ?? 0.0; + // Start the star rain + shouldShowRain = true; + }); + } + }); + } + + String _formatTime(int seconds) { + final minutes = seconds ~/ 60; + final remainingSeconds = seconds % 60; + return '${minutes.toString().padLeft(2, '0')}:${remainingSeconds.toString().padLeft(2, '0')}'; + } + + @override + Widget build(BuildContext context) { + final username = + Matrix.of(context).client.userID?.split(':').first.substring(1) ?? ''; + final bool accuracyAchievement = + widget.controller.sessionLoader.value!.accuracy == 100; + final bool timeAchievement = + widget.controller.sessionLoader.value!.elapsedSeconds <= 60; + final int numBonusPoints = widget + .controller.sessionLoader.value!.completedUses + .where((use) => use.xp > 0) + .length; + //give double bonus for both, single for one, none for zero + final int bonusXp = (accuracyAchievement && timeAchievement) + ? numBonusPoints * 2 + : (accuracyAchievement || timeAchievement) + ? numBonusPoints + : 0; + + return FutureBuilder>( + future: progressChangeFuture, + builder: (context, snapshot) { + if (!snapshot.hasData) { + return const SizedBox.shrink(); + } + + // Initialize progress when data is available + if (currentProgress == 0.0 && !shouldShowRain) { + _onProgressChangeLoaded(snapshot.data!); + } + + return Stack( + children: [ + Padding( + padding: const EdgeInsets.only(bottom: 16, right: 16, left: 16), + child: Column( + children: [ + Text( + L10n.of(context).congratulationsYouveCompletedPractice, + style: Theme.of(context).textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: avatarUrl == null + ? Avatar( + name: username, + showPresence: false, + size: 100, + ) + : ClipOval( + child: MxcImage( + uri: avatarUrl, + width: 100, + height: 100, + ), + ), + ), + Column( + children: [ + Padding( + padding: const EdgeInsets.only( + top: 16.0, + bottom: 16.0, + ), + child: AnimatedProgressBar( + height: 20.0, + widthPercent: currentProgress, + backgroundColor: Theme.of(context) + .colorScheme + .surfaceContainerHighest, + duration: const Duration(milliseconds: 500), + ), + ), + Text( + "+ ${widget.controller.sessionLoader.value!.totalXpGained + bonusXp} XP", + style: Theme.of(context) + .textTheme + .titleLarge + ?.copyWith( + color: AppConfig.goldLight, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + StatCard( + icon: Icons.my_location, + text: + "${L10n.of(context).accuracy}: ${widget.controller.sessionLoader.value!.accuracy}%", + isAchievement: accuracyAchievement, + achievementText: "+ $numBonusPoints XP", + child: PercentMarkerBar( + height: 20.0, + widthPercent: widget + .controller.sessionLoader.value!.accuracy / + 100.0, + markerWidth: 20.0, + markerColor: AppConfig.success, + backgroundColor: !(widget.controller.sessionLoader + .value!.accuracy == + 100) + ? Theme.of(context) + .colorScheme + .surfaceContainerHighest + : Color.alphaBlend( + AppConfig.goldLight.withValues(alpha: 0.3), + Theme.of(context) + .colorScheme + .surfaceContainerHighest, + ), + ), + ), + StatCard( + icon: Icons.alarm, + text: + "${L10n.of(context).time}: ${_formatTime(widget.controller.sessionLoader.value!.elapsedSeconds)}", + isAchievement: timeAchievement, + achievementText: "+ $numBonusPoints XP", + child: TimeStarsWidget( + elapsedSeconds: widget + .controller.sessionLoader.value!.elapsedSeconds, + timeForBonus: widget + .controller.sessionLoader.value!.timeForBonus, + ), + ), + Column( + children: [ + //expanded row button + ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 12.0, + vertical: 8.0, + ), + ), + onPressed: () => + widget.controller.reloadSession(), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + L10n.of(context).anotherRound, + ), + ], + ), + ), + const SizedBox(height: 16), + ElevatedButton( + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric( + horizontal: 12.0, + vertical: 8.0, + ), + ), + onPressed: () => Navigator.of(context).pop(), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + L10n.of(context).quit, + ), + ], + ), + ), + ], + ), + ], + ), + ), + ], + ), + ), + if (shouldShowRain) + const StarRainWidget( + showBlast: true, + rainDuration: Duration(seconds: 5), + ), + ], + ); + }, + ); + } +} + +class TimeStarsWidget extends StatelessWidget { + final int elapsedSeconds; + final int timeForBonus; + + const TimeStarsWidget({ + required this.elapsedSeconds, + required this.timeForBonus, + super.key, + }); + + int get starCount { + if (elapsedSeconds <= timeForBonus) return 5; + if (elapsedSeconds <= timeForBonus * 1.5) return 4; + if (elapsedSeconds <= timeForBonus * 2) return 3; + if (elapsedSeconds <= timeForBonus * 2.5) return 2; + return 1; // anything above 2.5x timeForBonus + } + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: List.generate( + 5, + (index) => Icon( + index < starCount ? Icons.star : Icons.star_outline, + color: AppConfig.goldLight, + size: 36, + ), + ), + ); + } +} diff --git a/lib/pangea/vocab_practice/percent_marker_bar.dart b/lib/pangea/vocab_practice/percent_marker_bar.dart new file mode 100644 index 000000000..2bc8b63a0 --- /dev/null +++ b/lib/pangea/vocab_practice/percent_marker_bar.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; + +// A progress bar with a rounded marker indicating a percentage position + +class PercentMarkerBar extends StatelessWidget { + final double height; + final double widthPercent; + final double markerWidth; + final Color markerColor; + final Color? backgroundColor; + + const PercentMarkerBar({ + required this.height, + required this.widthPercent, + this.markerWidth = 10.0, + this.markerColor = AppConfig.goldLight, + this.backgroundColor, + super.key, + }); + + @override + Widget build(BuildContext context) { + return LayoutBuilder( + builder: (context, constraints) { + final totalWidth = constraints.maxWidth; + final halfMarker = markerWidth / 2; + + // Calculate the center position of the marker + final targetPosition = totalWidth * widthPercent.clamp(0.0, 1.0); + + // Calculate the start position, clamping to keep marker within bounds + final markerStart = + (targetPosition - halfMarker).clamp(0.0, totalWidth - markerWidth); + + return Stack( + alignment: Alignment.centerLeft, + children: [ + // Background bar + Padding( + padding: const EdgeInsets.symmetric(horizontal: 2), + child: Container( + height: height, + width: constraints.maxWidth, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(height / 2), + color: backgroundColor ?? + Theme.of(context).colorScheme.secondaryContainer, + ), + ), + ), + // Marker circle + Padding( + padding: const EdgeInsets.symmetric(horizontal: 2), + child: Container( + margin: EdgeInsets.only(left: markerStart), + height: height, + width: markerWidth, + decoration: BoxDecoration( + color: markerColor, + borderRadius: BorderRadius.circular(height / 2), + ), + ), + ), + ], + ); + }, + ); + } +} diff --git a/lib/pangea/vocab_practice/stat_card.dart b/lib/pangea/vocab_practice/stat_card.dart new file mode 100644 index 000000000..2c1f5d570 --- /dev/null +++ b/lib/pangea/vocab_practice/stat_card.dart @@ -0,0 +1,85 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/config/themes.dart'; + +class StatCard extends StatelessWidget { + final IconData icon; + final String text; + final String achievementText; + final Widget child; + final bool isAchievement; + + const StatCard({ + required this.icon, + required this.text, + required this.achievementText, + required this.child, + this.isAchievement = false, + super.key, + }); + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + final isColumnMode = FluffyThemes.isColumnMode(context); + final colorScheme = theme.colorScheme; + final backgroundColor = isAchievement + ? Color.alphaBlend( + colorScheme.surface.withAlpha(170), + AppConfig.goldLight, + ) + : colorScheme.surfaceContainer; + + TextStyle? titleStyle = theme.textTheme.titleMedium; + if (!isColumnMode) { + titleStyle = theme.textTheme.bodyMedium; + } + titleStyle = titleStyle?.copyWith( + fontWeight: FontWeight.bold, + ); + + TextStyle? achievementStyle = theme.textTheme.titleSmall; + if (!isColumnMode) { + achievementStyle = theme.textTheme.bodySmall; + } + achievementStyle = achievementStyle?.copyWith( + fontWeight: FontWeight.bold, + ); + + return Container( + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.circular(12), + ), + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + Icon( + icon, + ), + const SizedBox(width: 8), + Text( + text, + style: titleStyle, + ), + if (isAchievement) ...[ + const Spacer(), + Text( + achievementText, + style: achievementStyle, + ), + ], + ], + ), + const SizedBox(height: 8), + child, + ], + ), + ); + } +} diff --git a/lib/pangea/vocab_practice/vocab_audio_activity_generator.dart b/lib/pangea/vocab_practice/vocab_audio_activity_generator.dart new file mode 100644 index 000000000..5ac6eab4f --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_audio_activity_generator.dart @@ -0,0 +1,29 @@ +import 'package:fluffychat/pangea/practice_activities/lemma_activity_generator.dart'; +import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; +import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; + +class VocabAudioActivityGenerator { + static Future get( + MessageActivityRequest req, + ) async { + final token = req.targetTokens.first; + final choices = + await LemmaActivityGenerator.lemmaActivityDistractors(token); + + final choicesList = choices.map((c) => c.lemma).toList(); + choicesList.shuffle(); + + return MessageActivityResponse( + activity: PracticeActivityModel( + activityType: req.targetType, + targetTokens: [token], + langCode: req.userL2, + multipleChoiceContent: MultipleChoiceActivity( + choices: choicesList.toSet(), + answers: {token.lemma.text}, + ), + ), + ); + } +} diff --git a/lib/pangea/vocab_practice/vocab_meaning_activity_generator.dart b/lib/pangea/vocab_practice/vocab_meaning_activity_generator.dart new file mode 100644 index 000000000..28ac3a02c --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_meaning_activity_generator.dart @@ -0,0 +1,32 @@ +import 'package:fluffychat/pangea/practice_activities/lemma_activity_generator.dart'; +import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; +import 'package:fluffychat/pangea/practice_activities/multiple_choice_activity_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; + +class VocabMeaningActivityGenerator { + static Future get( + MessageActivityRequest req, + ) async { + final token = req.targetTokens.first; + final choices = + await LemmaActivityGenerator.lemmaActivityDistractors(token); + + if (!choices.contains(token.vocabConstructID)) { + choices.add(token.vocabConstructID); + } + + final Set constructIdChoices = choices.map((c) => c.string).toSet(); + + return MessageActivityResponse( + activity: PracticeActivityModel( + activityType: req.targetType, + targetTokens: [token], + langCode: req.userL2, + multipleChoiceContent: MultipleChoiceActivity( + choices: constructIdChoices, + answers: {token.vocabConstructID.string}, + ), + ), + ); + } +} diff --git a/lib/pangea/vocab_practice/vocab_practice_page.dart b/lib/pangea/vocab_practice/vocab_practice_page.dart new file mode 100644 index 000000000..f05026c46 --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_practice_page.dart @@ -0,0 +1,478 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +import 'package:collection/collection.dart'; + +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_data/derived_analytics_data_model.dart'; +import 'package:fluffychat/pangea/analytics_misc/construct_use_model.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/common/utils/overlay.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/events/event_wrappers/pangea_message_event.dart'; +import 'package:fluffychat/pangea/lemmas/lemma_info_repo.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_generation_repo.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_model.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_repo.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_view.dart'; +import 'package:fluffychat/widgets/future_loading_dialog.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class SessionLoader extends AsyncLoader { + @override + Future fetch() => + VocabPracticeSessionRepo.currentSession; +} + +class VocabPractice extends StatefulWidget { + const VocabPractice({super.key}); + + @override + VocabPracticeState createState() => VocabPracticeState(); +} + +class VocabPracticeState extends State { + SessionLoader sessionLoader = SessionLoader(); + PracticeActivityModel? currentActivity; + bool isLoadingActivity = true; + bool isAwaitingNextActivity = false; + String? activityError; + + bool isLoadingLemmaInfo = false; + final Map _choiceTexts = {}; + final Map _choiceEmojis = {}; + + StreamSubscription? _languageStreamSubscription; + bool _sessionClearedDueToLanguageChange = false; + + @override + void initState() { + super.initState(); + _startSession(); + _listenToLanguageChanges(); + } + + @override + void dispose() { + _languageStreamSubscription?.cancel(); + if (isComplete) { + VocabPracticeSessionRepo.clearSession(); + } else if (!_sessionClearedDueToLanguageChange) { + //don't save if session was cleared due to language change + _saveCurrentTime(); + } + sessionLoader.dispose(); + super.dispose(); + } + + void _saveCurrentTime() { + if (sessionLoader.isLoaded) { + VocabPracticeSessionRepo.updateSession(sessionLoader.value!); + } + } + + /// Resets all session state without disposing the widget + void _resetState() { + currentActivity = null; + isLoadingActivity = true; + isAwaitingNextActivity = false; + activityError = null; + isLoadingLemmaInfo = false; + _choiceTexts.clear(); + _choiceEmojis.clear(); + } + + bool get isComplete => + sessionLoader.isLoaded && sessionLoader.value!.hasCompletedCurrentGroup; + + double get progress => + sessionLoader.isLoaded ? sessionLoader.value!.progress : 0.0; + + int get availableActivities => sessionLoader.isLoaded + ? sessionLoader.value!.currentAvailableActivities + : 0; + + int get completedActivities => + sessionLoader.isLoaded ? sessionLoader.value!.currentIndex : 0; + + int get elapsedSeconds => + sessionLoader.isLoaded ? sessionLoader.value!.elapsedSeconds : 0; + + void updateElapsedTime(int seconds) { + if (sessionLoader.isLoaded) { + sessionLoader.value!.elapsedSeconds = seconds; + } + } + + Future _waitForAnalytics() async { + if (!MatrixState.pangeaController.matrixState.analyticsDataService + .initCompleter.isCompleted) { + MatrixState.pangeaController.initControllers(); + await MatrixState.pangeaController.matrixState.analyticsDataService + .initCompleter.future; + } + } + + void _listenToLanguageChanges() { + _languageStreamSubscription = MatrixState + .pangeaController.userController.languageStream.stream + .listen((_) async { + // If language changed, clear session and back out of vocab practice + if (await _shouldReloadSession()) { + _sessionClearedDueToLanguageChange = true; + await VocabPracticeSessionRepo.clearSession(); + if (mounted) { + Navigator.of(context).pop(); + } + } + }); + } + + Future _startSession() async { + await _waitForAnalytics(); + await sessionLoader.load(); + + // If user languages have changed since last session, clear session + if (await _shouldReloadSession()) { + await VocabPracticeSessionRepo.clearSession(); + sessionLoader.dispose(); + sessionLoader = SessionLoader(); + await sessionLoader.load(); + } + + loadActivity(); + } + + // check if current l1 and l2 have changed from those of the loaded session + Future _shouldReloadSession() async { + if (!sessionLoader.isLoaded) return false; + + final session = sessionLoader.value!; + final currentL1 = + MatrixState.pangeaController.userController.userL1?.langCode; + final currentL2 = + MatrixState.pangeaController.userController.userL2?.langCode; + + if (session.userL1 != currentL1 || session.userL2 != currentL2) { + return true; + } + return false; + } + + Future completeActivitySession() async { + if (!sessionLoader.isLoaded) return; + + _saveCurrentTime(); + sessionLoader.value!.finishSession(); + await VocabPracticeSessionRepo.updateSession(sessionLoader.value!); + + setState(() {}); + } + + Future reloadSession() async { + await showFutureLoadingDialog( + context: context, + future: () async { + // Clear current session storage, dispose old session loader, and clear state variables + await VocabPracticeSessionRepo.clearSession(); + sessionLoader.dispose(); + sessionLoader = SessionLoader(); + _resetState(); + await _startSession(); + }, + ); + + if (mounted) { + setState(() {}); + } + } + + Future?> getExampleMessage( + ConstructIdentifier construct, + ) async { + final ConstructUses constructUse = await Matrix.of(context) + .analyticsDataService + .getConstructUse(construct); + for (final use in constructUse.cappedUses) { + if (use.metadata.eventId == null || use.metadata.roomId == null) { + continue; + } + + final room = MatrixState.pangeaController.matrixState.client + .getRoomById(use.metadata.roomId!); + if (room == null) continue; + + final event = await room.getEventById(use.metadata.eventId!); + if (event == null) continue; + + final timeline = await room.getTimeline(); + final pangeaMessageEvent = PangeaMessageEvent( + event: event, + timeline: timeline, + ownMessage: event.senderId == + MatrixState.pangeaController.matrixState.client.userID, + ); + + final tokens = pangeaMessageEvent.messageDisplayRepresentation?.tokens; + if (tokens == null || tokens.isEmpty) continue; + final token = tokens.firstWhereOrNull( + (token) => token.text.content == use.form, + ); + if (token == null) continue; + + final text = pangeaMessageEvent.messageDisplayText; + final tokenText = token.text.content; + int tokenIndex = text.indexOf(tokenText); + if (tokenIndex == -1) continue; + + final beforeSubstring = text.substring(0, tokenIndex); + if (beforeSubstring.length != beforeSubstring.characters.length) { + tokenIndex = beforeSubstring.characters.length; + } + + final int tokenLength = tokenText.characters.length; + final before = text.characters.take(tokenIndex).toString(); + final after = text.characters.skip(tokenIndex + tokenLength).toString(); + return [ + TextSpan(text: before), + TextSpan( + text: tokenText, + style: const TextStyle( + fontWeight: FontWeight.bold, + ), + ), + TextSpan(text: after), + ]; + } + + return null; + } + + Future loadActivity() async { + if (!sessionLoader.isLoaded) { + try { + await sessionLoader.completer.future; + } catch (_) { + return; + } + } + + if (!mounted) return; + + setState(() { + isAwaitingNextActivity = false; + currentActivity = null; + isLoadingActivity = true; + activityError = null; + _choiceTexts.clear(); + _choiceEmojis.clear(); + }); + + final session = sessionLoader.value!; + final activityRequest = session.currentActivityRequest; + if (activityRequest == null) { + setState(() { + activityError = L10n.of(context).noActivityRequest; + isLoadingActivity = false; + }); + return; + } + + final result = await PracticeRepo.getPracticeActivity( + activityRequest, + messageInfo: {}, + ); + if (result.isError) { + activityError = L10n.of(context).oopsSomethingWentWrong; + } else { + currentActivity = result.result!; + } + + // Prefetch lemma info for meaning activities before marking ready + if (currentActivity != null && + currentActivity!.activityType == ActivityTypeEnum.lemmaMeaning) { + final choices = currentActivity!.multipleChoiceContent!.choices.toList(); + await _prefetchLemmaInfo(choices); + } + + if (mounted) { + setState(() => isLoadingActivity = false); + } + } + + Future onSelectChoice( + ConstructIdentifier choiceConstruct, + String choiceContent, + ) async { + if (currentActivity == null) return; + final activity = currentActivity!; + + activity.onMultipleChoiceSelect(choiceConstruct, choiceContent); + final correct = activity.multipleChoiceContent!.isCorrect(choiceContent); + + // Submit answer immediately (records use and gives XP) + sessionLoader.value!.submitAnswer(activity, correct); + await VocabPracticeSessionRepo.updateSession(sessionLoader.value!); + + final transformTargetId = + 'vocab-choice-card-${choiceContent.replaceAll(' ', '_')}'; + if (correct) { + OverlayUtil.showPointsGained(transformTargetId, 5, context); + } else { + OverlayUtil.showPointsGained(transformTargetId, -1, context); + } + if (!correct) return; + + // display the fact that the choice was correct before loading the next activity + setState(() => isAwaitingNextActivity = true); + await Future.delayed(const Duration(milliseconds: 1000)); + setState(() => isAwaitingNextActivity = false); + + // Only move to next activity when answer is correct + sessionLoader.value!.completeActivity(activity); + await VocabPracticeSessionRepo.updateSession(sessionLoader.value!); + + if (isComplete) { + await completeActivitySession(); + } + + await loadActivity(); + } + + Future> calculateProgressChange(int xpGained) async { + final derivedData = await MatrixState + .pangeaController.matrixState.analyticsDataService.derivedData; + final currentLevel = derivedData.level; + final currentXP = derivedData.totalXP; + + final minXPForCurrentLevel = + DerivedAnalyticsDataModel.calculateXpWithLevel(currentLevel); + final minXPForNextLevel = derivedData.minXPForNextLevel; + + final xpRange = minXPForNextLevel - minXPForCurrentLevel; + + final progressBefore = + ((currentXP - minXPForCurrentLevel) / xpRange).clamp(0.0, 1.0); + + final newTotalXP = currentXP + xpGained; + final progressAfter = + ((newTotalXP - minXPForCurrentLevel) / xpRange).clamp(0.0, 1.0); + + return { + 'before': progressBefore, + 'after': progressAfter, + }; + } + + @override + Widget build(BuildContext context) => VocabPracticeView(this); + + String getChoiceText(String choiceId) { + if (_choiceTexts.containsKey(choiceId)) return _choiceTexts[choiceId]!; + final cId = ConstructIdentifier.fromString(choiceId); + return cId?.lemma ?? choiceId; + } + + String? getChoiceEmoji(String choiceId) => _choiceEmojis[choiceId]; + + //fetches display info for all choices from constructIDs + Future _prefetchLemmaInfo(List choiceIds) async { + if (!mounted) return; + setState(() => isLoadingLemmaInfo = true); + + final results = await Future.wait( + choiceIds.map((id) async { + final cId = ConstructIdentifier.fromString(id); + if (cId == null) { + return null; + } + try { + final result = await cId.getLemmaInfo({}); + return result; + } catch (e) { + return null; + } + }), + ); + + // Check if any result is an error + for (int i = 0; i < results.length; i++) { + final res = results[i]; + if (res != null && res.isError) { + // Clear cache for failed items so retry will fetch fresh + final failedId = choiceIds[i]; + final cId = ConstructIdentifier.fromString(failedId); + if (cId != null) { + LemmaInfoRepo.clearCache(cId.lemmaInfoRequest({})); + } + + if (mounted) { + setState(() { + activityError = L10n.of(context).oopsSomethingWentWrong; + isLoadingLemmaInfo = false; + }); + } + return; + } + // Update choice texts/emojis if successful + if (res != null && !res.isError) { + final id = choiceIds[i]; + final info = res.result!; + _choiceTexts[id] = info.meaning; + _choiceEmojis[id] = _choiceEmojis[id] ?? info.emoji.firstOrNull; + } + } + + // Check for duplicate choice texts and remove duplicates + _removeDuplicateChoices(); + + if (mounted) { + setState(() => isLoadingLemmaInfo = false); + } + } + + /// Removes duplicate choice texts, keeping the correct answer if it's a duplicate, or the first otherwise + void _removeDuplicateChoices() { + if (currentActivity?.multipleChoiceContent == null) return; + + final activity = currentActivity!.multipleChoiceContent!; + final correctAnswers = activity.answers; + + final Map> textToIds = {}; + + for (final id in _choiceTexts.keys) { + final text = _choiceTexts[id]!; + textToIds.putIfAbsent(text, () => []).add(id); + } + + // Find duplicates and remove them + final Set idsToRemove = {}; + for (final entry in textToIds.entries) { + final duplicateIds = entry.value; + if (duplicateIds.length > 1) { + // Find if any of the duplicates is the correct answer + final correctId = duplicateIds.firstWhereOrNull( + (id) => correctAnswers.contains(id), + ); + + // Remove all duplicates except one + if (correctId != null) { + idsToRemove.addAll(duplicateIds.where((id) => id != correctId)); + } else { + idsToRemove.addAll(duplicateIds.skip(1)); + } + } + } + + if (idsToRemove.isNotEmpty) { + activity.choices.removeAll(idsToRemove); + for (final id in idsToRemove) { + _choiceTexts.remove(id); + _choiceEmojis.remove(id); + } + } + } +} diff --git a/lib/pangea/vocab_practice/vocab_practice_session_model.dart b/lib/pangea/vocab_practice/vocab_practice_session_model.dart new file mode 100644 index 000000000..0cbe7f270 --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_practice_session_model.dart @@ -0,0 +1,253 @@ +import 'dart:math'; + +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'; +import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; +import 'package:fluffychat/pangea/events/models/pangea_token_text_model.dart'; +import 'package:fluffychat/pangea/lemmas/lemma.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:fluffychat/pangea/practice_activities/message_activity_request.dart'; +import 'package:fluffychat/pangea/practice_activities/practice_activity_model.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class VocabPracticeSessionModel { + final DateTime startedAt; + final List sortedConstructIds; + final List activityTypes; + final String userL1; + final String userL2; + + int currentIndex; + int currentGroup; + + final List completedUses; + bool finished; + int elapsedSeconds; + + VocabPracticeSessionModel({ + required this.startedAt, + required this.sortedConstructIds, + required this.activityTypes, + required this.userL1, + required this.userL2, + required this.completedUses, + this.currentIndex = 0, + this.currentGroup = 0, + this.finished = false, + this.elapsedSeconds = 0, + }) : assert( + activityTypes.every( + (t) => {ActivityTypeEnum.lemmaMeaning, ActivityTypeEnum.lemmaAudio} + .contains(t), + ), + ), + assert( + activityTypes.length == practiceGroupSize, + ); + + static const int practiceGroupSize = 10; + + int get currentAvailableActivities => min( + ((currentGroup + 1) * practiceGroupSize), + sortedConstructIds.length, + ); + + bool get hasCompletedCurrentGroup => + currentIndex >= currentAvailableActivities; + + int get timeForBonus => 60; + + double get progress => + (currentIndex / currentAvailableActivities).clamp(0.0, 1.0); + + List get currentPracticeGroup => sortedConstructIds + .skip(currentGroup * practiceGroupSize) + .take(practiceGroupSize) + .toList(); + + ConstructIdentifier? get currentConstructId { + if (currentIndex < 0 || hasCompletedCurrentGroup) { + return null; + } + return currentPracticeGroup[currentIndex % practiceGroupSize]; + } + + ActivityTypeEnum? get currentActivityType { + if (currentIndex < 0 || hasCompletedCurrentGroup) { + return null; + } + return activityTypes[currentIndex % practiceGroupSize]; + } + + MessageActivityRequest? get currentActivityRequest { + final constructId = currentConstructId; + if (constructId == null || currentActivityType == null) return null; + + final activityType = currentActivityType; + return MessageActivityRequest( + userL1: userL1, + userL2: userL2, + activityQualityFeedback: null, + targetTokens: [ + PangeaToken( + lemma: Lemma( + text: constructId.lemma, + saveVocab: true, + form: constructId.lemma, + ), + pos: constructId.category, + text: PangeaTokenText.fromString(constructId.lemma), + morph: {}, + ), + ], + targetType: activityType!, + targetMorphFeature: null, + ); + } + + int get totalXpGained => completedUses.fold(0, (sum, use) => sum + use.xp); + + double get accuracy { + if (completedUses.isEmpty) return 0.0; + final correct = completedUses.where((use) => use.xp > 0).length; + final result = correct / completedUses.length; + return (result * 100).truncateToDouble(); + } + + void finishSession() { + finished = true; + + // give bonus XP uses for each construct if earned + if (accuracy >= 100) { + final bonusUses = completedUses + .where((use) => use.xp > 0) + .map( + (use) => OneConstructUse( + useType: ConstructUseTypeEnum.bonus, + constructType: use.constructType, + metadata: ConstructUseMetaData( + roomId: use.metadata.roomId, + timeStamp: DateTime.now(), + ), + category: use.category, + lemma: use.lemma, + form: use.form, + xp: ConstructUseTypeEnum.bonus.pointValue, + ), + ) + .toList(); + + MatrixState + .pangeaController.matrixState.analyticsDataService.updateService + .addAnalytics( + null, + bonusUses, + ); + } + + if (elapsedSeconds <= timeForBonus) { + final bonusUses = completedUses + .where((use) => use.xp > 0) + .map( + (use) => OneConstructUse( + useType: ConstructUseTypeEnum.bonus, + constructType: use.constructType, + metadata: ConstructUseMetaData( + roomId: use.metadata.roomId, + timeStamp: DateTime.now(), + ), + category: use.category, + lemma: use.lemma, + form: use.form, + xp: ConstructUseTypeEnum.bonus.pointValue, + ), + ) + .toList(); + + MatrixState + .pangeaController.matrixState.analyticsDataService.updateService + .addAnalytics( + null, + bonusUses, + ); + } + } + + void submitAnswer(PracticeActivityModel activity, bool isCorrect) { + final useType = isCorrect + ? activity.activityType.correctUse + : activity.activityType.incorrectUse; + + final use = OneConstructUse( + useType: useType, + constructType: ConstructTypeEnum.vocab, + metadata: ConstructUseMetaData( + roomId: null, + timeStamp: DateTime.now(), + ), + category: activity.targetTokens.first.pos, + lemma: activity.targetTokens.first.lemma.text, + form: activity.targetTokens.first.lemma.text, + xp: useType.pointValue, + ); + + completedUses.add(use); + + // Give XP immediately + MatrixState.pangeaController.matrixState.analyticsDataService.updateService + .addAnalytics( + null, + [use], + ); + } + + void completeActivity(PracticeActivityModel activity) { + currentIndex += 1; + } + + factory VocabPracticeSessionModel.fromJson(Map json) { + return VocabPracticeSessionModel( + startedAt: DateTime.parse(json['startedAt'] as String), + sortedConstructIds: (json['sortedConstructIds'] as List) + .map((e) => ConstructIdentifier.fromJson(e)) + .whereType() + .toList(), + activityTypes: (json['activityTypes'] as List) + .map( + (e) => ActivityTypeEnum.values.firstWhere( + (at) => at.name == (e as String), + ), + ) + .whereType() + .toList(), + userL1: json['userL1'] as String, + userL2: json['userL2'] as String, + currentIndex: json['currentIndex'] as int, + currentGroup: json['currentGroup'] as int, + completedUses: (json['completedUses'] as List?) + ?.map((e) => OneConstructUse.fromJson(e)) + .whereType() + .toList() ?? + [], + finished: json['finished'] as bool? ?? false, + elapsedSeconds: json['elapsedSeconds'] as int? ?? 0, + ); + } + + Map toJson() { + return { + 'startedAt': startedAt.toIso8601String(), + 'sortedConstructIds': sortedConstructIds.map((e) => e.toJson()).toList(), + 'activityTypes': activityTypes.map((e) => e.name).toList(), + 'userL1': userL1, + 'userL2': userL2, + 'currentIndex': currentIndex, + 'currentGroup': currentGroup, + 'completedUses': completedUses.map((e) => e.toJson()).toList(), + 'finished': finished, + 'elapsedSeconds': elapsedSeconds, + }; + } +} diff --git a/lib/pangea/vocab_practice/vocab_practice_session_repo.dart b/lib/pangea/vocab_practice/vocab_practice_session_repo.dart new file mode 100644 index 000000000..955b65d98 --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_practice_session_repo.dart @@ -0,0 +1,102 @@ +import 'dart:math'; + +import 'package:get_storage/get_storage.dart'; + +import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_model.dart'; +import 'package:fluffychat/widgets/matrix.dart'; + +class VocabPracticeSessionRepo { + static final GetStorage _storage = GetStorage('vocab_practice_session'); + + static Future get currentSession async { + final cached = _getCached(); + if (cached != null) { + return cached; + } + + final r = Random(); + final activityTypes = [ + ActivityTypeEnum.lemmaMeaning, + //ActivityTypeEnum.lemmaAudio, + ]; + + final types = List.generate( + VocabPracticeSessionModel.practiceGroupSize, + (_) => activityTypes[r.nextInt(activityTypes.length)], + ); + + final targets = await _fetch(); + final session = VocabPracticeSessionModel( + userL1: MatrixState.pangeaController.userController.userL1!.langCode, + userL2: MatrixState.pangeaController.userController.userL2!.langCode, + startedAt: DateTime.now(), + sortedConstructIds: targets, + activityTypes: types, + completedUses: [], + ); + await _setCached(session); + return session; + } + + static Future updateSession( + VocabPracticeSessionModel session, + ) => + _setCached(session); + + static Future reloadSession() async { + _storage.erase(); + return currentSession; + } + + static Future clearSession() => _storage.erase(); + + static Future> _fetch() async { + final constructs = await MatrixState + .pangeaController.matrixState.analyticsDataService + .getAggregatedConstructs(ConstructTypeEnum.vocab) + .then((map) => map.values.toList()); + + // maintain a Map of ConstructIDs to last use dates and a sorted list of ConstructIDs + // based on last use. Update the map / list on practice completion + final Map constructLastUseMap = {}; + final List sortedTargetIds = []; + for (final construct in constructs) { + constructLastUseMap[construct.id] = construct.lastUsed; + sortedTargetIds.add(construct.id); + } + + sortedTargetIds.sort((a, b) { + final dateA = constructLastUseMap[a]; + final dateB = constructLastUseMap[b]; + if (dateA == null && dateB == null) return 0; + if (dateA == null) return -1; + if (dateB == null) return 1; + return dateA.compareTo(dateB); + }); + + return sortedTargetIds; + } + + static VocabPracticeSessionModel? _getCached() { + final keys = List.from(_storage.getKeys()); + if (keys.isEmpty) return null; + try { + final json = _storage.read(keys.first) as Map; + return VocabPracticeSessionModel.fromJson(json); + } catch (e) { + _storage.remove(keys.first); + return null; + } + } + + static Future _setCached(VocabPracticeSessionModel session) async { + await _storage.erase(); + await _storage.write( + session.startedAt.toIso8601String(), + session.toJson(), + ); + } +} diff --git a/lib/pangea/vocab_practice/vocab_practice_view.dart b/lib/pangea/vocab_practice/vocab_practice_view.dart new file mode 100644 index 000000000..258251bd0 --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_practice_view.dart @@ -0,0 +1,333 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_summary/animated_progress_bar.dart'; +import 'package:fluffychat/pangea/common/utils/async_state.dart'; +import 'package:fluffychat/pangea/common/widgets/error_indicator.dart'; +import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; +import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/instructions/instructions_inline_tooltip.dart'; +import 'package:fluffychat/pangea/practice_activities/activity_type_enum.dart'; +import 'package:fluffychat/pangea/vocab_practice/choice_cards/audio_choice_card.dart'; +import 'package:fluffychat/pangea/vocab_practice/choice_cards/game_choice_card.dart'; +import 'package:fluffychat/pangea/vocab_practice/choice_cards/meaning_choice_card.dart'; +import 'package:fluffychat/pangea/vocab_practice/completed_activity_session_view.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_page.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_practice_session_model.dart'; +import 'package:fluffychat/pangea/vocab_practice/vocab_timer_widget.dart'; +import 'package:fluffychat/widgets/layouts/max_width_body.dart'; + +class VocabPracticeView extends StatelessWidget { + final VocabPracticeState controller; + + const VocabPracticeView(this.controller, {super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Row( + spacing: 8.0, + children: [ + Expanded( + child: AnimatedProgressBar( + height: 20.0, + widthPercent: controller.progress, + barColor: Theme.of(context).colorScheme.primary, + ), + ), + //keep track of state to update timer + ValueListenableBuilder( + valueListenable: controller.sessionLoader.state, + builder: (context, state, __) { + if (state is AsyncLoaded) { + return VocabTimerWidget( + key: ValueKey(state.value.startedAt), + initialSeconds: state.value.elapsedSeconds, + onTimeUpdate: controller.updateElapsedTime, + isRunning: !controller.isComplete, + ); + } + return const SizedBox.shrink(); + }, + ), + ], + ), + ), + body: MaxWidthBody( + withScrolling: false, + padding: const EdgeInsets.all(0.0), + showBorder: false, + child: controller.isComplete + ? CompletedActivitySessionView(controller) + : _OngoingActivitySessionView(controller), + ), + ); + } +} + +class _OngoingActivitySessionView extends StatelessWidget { + final VocabPracticeState controller; + const _OngoingActivitySessionView(this.controller); + + @override + Widget build(BuildContext context) { + return ValueListenableBuilder( + valueListenable: controller.sessionLoader.state, + builder: (context, state, __) { + return switch (state) { + AsyncError(:final error) => + ErrorIndicator(message: error.toString()), + AsyncLoaded(:final value) => + value.currentConstructId != null && + value.currentActivityType != null + ? _VocabActivityView( + value.currentConstructId!, + value.currentActivityType!, + controller, + ) + : const Center( + child: SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator.adaptive(), + ), + ), + _ => const Center( + child: SizedBox( + width: 24, + height: 24, + child: CircularProgressIndicator.adaptive(), + ), + ), + }; + }, + ); + } +} + +class _VocabActivityView extends StatelessWidget { + final ConstructIdentifier constructId; + final ActivityTypeEnum activityType; + final VocabPracticeState controller; + + const _VocabActivityView( + this.constructId, + this.activityType, + this.controller, + ); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + //per-activity instructions, add switch statement once there are more types + const InstructionsInlineTooltip( + instructionsEnum: InstructionsEnum.selectMeaning, + padding: EdgeInsets.symmetric(horizontal: 16.0), + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Text( + constructId.lemma, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.titleLarge?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + ), + _ExampleMessageWidget(controller, constructId), + Flexible( + child: _ActivityChoicesWidget( + controller, + activityType, + constructId, + ), + ), + ], + ), + ), + ], + ); + } +} + +class _ExampleMessageWidget extends StatelessWidget { + final VocabPracticeState controller; + final ConstructIdentifier constructId; + + const _ExampleMessageWidget(this.controller, this.constructId); + + @override + Widget build(BuildContext context) { + return FutureBuilder?>( + future: controller.getExampleMessage(constructId), + builder: (context, snapshot) { + if (!snapshot.hasData || snapshot.data == null) { + return const SizedBox(); + } + + return Padding( + //styling like sent message bubble + padding: const EdgeInsets.all(16.0), + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 12, + vertical: 8, + ), + decoration: BoxDecoration( + color: Color.alphaBlend( + Colors.white.withAlpha(180), + ThemeData.dark().colorScheme.primary, + ), + borderRadius: BorderRadius.circular(16), + ), + child: RichText( + text: TextSpan( + style: TextStyle( + color: Theme.of(context).colorScheme.onPrimaryFixed, + fontSize: + AppConfig.fontSizeFactor * AppConfig.messageFontSize, + ), + children: snapshot.data!, + ), + ), + ), + ); + }, + ); + } +} + +class _ActivityChoicesWidget extends StatelessWidget { + final VocabPracticeState controller; + final ActivityTypeEnum activityType; + final ConstructIdentifier constructId; + + const _ActivityChoicesWidget( + this.controller, + this.activityType, + this.constructId, + ); + + @override + Widget build(BuildContext context) { + if (controller.activityError != null) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //allow try to reload activity in case of error + ErrorIndicator(message: controller.activityError!), + const SizedBox(height: 16), + TextButton.icon( + onPressed: controller.loadActivity, + icon: const Icon(Icons.refresh), + label: Text(L10n.of(context).tryAgain), + ), + ], + ); + } + + final activity = controller.currentActivity; + if (controller.isLoadingActivity || + activity == null || + (activity.activityType == ActivityTypeEnum.lemmaMeaning && + controller.isLoadingLemmaInfo)) { + return Container( + constraints: const BoxConstraints(maxHeight: 400.0), + child: const Center( + child: CircularProgressIndicator.adaptive(), + ), + ); + } + + final choices = activity.multipleChoiceContent!.choices.toList(); + return LayoutBuilder( + builder: (context, constraints) { + //Constrain max height to keep choices together on large screens, and allow shrinking to fit on smaller screens + final constrainedHeight = constraints.maxHeight.clamp(0.0, 400.0); + final cardHeight = + (constrainedHeight / (choices.length + 1)).clamp(50.0, 80.0); + + return Container( + constraints: const BoxConstraints(maxHeight: 400.0), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: choices.map((choiceId) { + final bool isEnabled = !controller.isAwaitingNextActivity; + return _buildChoiceCard( + activity: activity, + choiceId: choiceId, + cardHeight: cardHeight, + isEnabled: isEnabled, + onPressed: () => + controller.onSelectChoice(constructId, choiceId), + ); + }).toList(), + ), + ), + ); + }, + ); + } + + Widget _buildChoiceCard({ + required activity, + required String choiceId, + required double cardHeight, + required bool isEnabled, + required VoidCallback onPressed, + }) { + final isCorrect = activity.multipleChoiceContent!.isCorrect(choiceId); + + switch (activity.activityType) { + case ActivityTypeEnum.lemmaMeaning: + return MeaningChoiceCard( + key: ValueKey( + '${constructId.string}_${activityType.name}_meaning_$choiceId', + ), + choiceId: choiceId, + displayText: controller.getChoiceText(choiceId), + emoji: controller.getChoiceEmoji(choiceId), + onPressed: onPressed, + isCorrect: isCorrect, + height: cardHeight, + isEnabled: isEnabled, + ); + + case ActivityTypeEnum.lemmaAudio: + return AudioChoiceCard( + key: ValueKey( + '${constructId.string}_${activityType.name}_audio_$choiceId', + ), + text: choiceId, + onPressed: onPressed, + isCorrect: isCorrect, + height: cardHeight, + isEnabled: isEnabled, + ); + + default: + return GameChoiceCard( + key: ValueKey( + '${constructId.string}_${activityType.name}_basic_$choiceId', + ), + shouldFlip: false, + transformId: choiceId, + onPressed: onPressed, + isCorrect: isCorrect, + height: cardHeight, + isEnabled: isEnabled, + child: Text(controller.getChoiceText(choiceId)), + ); + } + } +} diff --git a/lib/pangea/vocab_practice/vocab_timer_widget.dart b/lib/pangea/vocab_practice/vocab_timer_widget.dart new file mode 100644 index 000000000..2ef4d06af --- /dev/null +++ b/lib/pangea/vocab_practice/vocab_timer_widget.dart @@ -0,0 +1,94 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; + +class VocabTimerWidget extends StatefulWidget { + final int initialSeconds; + final ValueChanged onTimeUpdate; + final bool isRunning; + + const VocabTimerWidget({ + required this.initialSeconds, + required this.onTimeUpdate, + this.isRunning = true, + super.key, + }); + + @override + VocabTimerWidgetState createState() => VocabTimerWidgetState(); +} + +class VocabTimerWidgetState extends State { + final Stopwatch _stopwatch = Stopwatch(); + late int _initialSeconds; + Timer? _timer; + + @override + void initState() { + super.initState(); + _initialSeconds = widget.initialSeconds; + if (widget.isRunning) { + _startTimer(); + } + } + + @override + void didUpdateWidget(VocabTimerWidget oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.isRunning && !widget.isRunning) { + _stopTimer(); + } else if (!oldWidget.isRunning && widget.isRunning) { + _startTimer(); + } + } + + @override + void dispose() { + _stopTimer(); + super.dispose(); + } + + void _startTimer() { + _stopwatch.start(); + _timer = Timer.periodic(const Duration(seconds: 1), (_) { + final currentSeconds = _getCurrentSeconds(); + setState(() {}); + widget.onTimeUpdate(currentSeconds); + }); + } + + void _stopTimer() { + _stopwatch.stop(); + _timer?.cancel(); + _timer = null; + } + + int _getCurrentSeconds() { + if (!_stopwatch.isRunning) { + return widget.initialSeconds; + } + return _initialSeconds + (_stopwatch.elapsedMilliseconds / 1000).round(); + } + + String _formatTime(int seconds) { + final minutes = seconds ~/ 60; + final remainingSeconds = seconds % 60; + return '${minutes.toString().padLeft(2, '0')}:${remainingSeconds.toString().padLeft(2, '0')}'; + } + + @override + Widget build(BuildContext context) { + return Row( + children: [ + const Icon(Icons.alarm, size: 20), + const SizedBox(width: 4.0), + Text( + _formatTime(_getCurrentSeconds()), + style: Theme.of(context).textTheme.titleMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + ], + ); + } +} diff --git a/lib/pangea/word_bank/vocab_bank_repo.dart b/lib/pangea/word_bank/vocab_bank_repo.dart deleted file mode 100644 index 84b8c852d..000000000 --- a/lib/pangea/word_bank/vocab_bank_repo.dart +++ /dev/null @@ -1,1161 +0,0 @@ -import 'dart:convert'; -import 'dart:developer'; - -import 'package:flutter/foundation.dart'; - -import 'package:get_storage/get_storage.dart'; -import 'package:http/http.dart'; - -import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; -import 'package:fluffychat/pangea/common/config/environment.dart'; -import 'package:fluffychat/pangea/common/network/requests.dart'; -import 'package:fluffychat/pangea/common/network/urls.dart'; -import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; -import 'package:fluffychat/pangea/word_bank/vocab_request.dart'; -import 'package:fluffychat/pangea/word_bank/vocab_response.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -class VocabRepo { - static final GetStorage _lemmaStorage = GetStorage('vocab_storage'); - - static void set(VocabRequest request, VocabResponse response) { - // set expireAt if not set - response.expireAt ??= DateTime.now().add(const Duration(days: 100)); - _lemmaStorage.write(request.storageKey, response.toJson()); - } - - static Future get( - VocabRequest request, [ - bool useExpireAt = false, - ]) async { - try { - debugger(when: kDebugMode); - final cachedJson = _lemmaStorage.read(request.storageKey); - - final cached = - cachedJson == null ? null : VocabResponse.fromJson(cachedJson); - - if (cached != null) { - // at this point we have a cache without feedback - if (!useExpireAt) { - // return cache as is if we're not using expireAt - return cached; - } else if (cached.expireAt != null) { - if (DateTime.now().isBefore(cached.expireAt!)) { - // return cache as is if we're using expireAt and it's set but not expired - return cached; - } - } - } - - final Requests req = Requests( - choreoApiKey: Environment.choreoApiKey, - accessToken: MatrixState.pangeaController.userController.accessToken, - ); - - final Response res = await req.post( - url: PApiUrls.lemmaDictionary, - body: request.toJson(), - ); - - final decodedBody = jsonDecode(utf8.decode(res.bodyBytes)); - final response = VocabResponse.fromJson(decodedBody); - - set(request, response); - - return response; - } catch (err, stack) { - ErrorHandler.logError( - e: err, - s: stack, - data: { - "request": request.toJson(), - }, - ); - - return VocabRepo.placeholderData(); - } - } - - /// Preference previously used words if list is non-empty - /// Otherwise, pull from a set of starter words for each language - static Future getAllCandidateVocab( - VocabRequest request, - ) async { - final List myVocab = MatrixState - .pangeaController.getAnalytics.constructListModel - .constructList(type: ConstructTypeEnum.vocab) - .map((use) => use.id) - .toList(); - - final List vocabBank = - (await VocabRepo.get(request)).vocab; - - final List all = [...myVocab, ...vocabBank]; - - final deduped = all.toSet().toList(); - - return VocabResponse(vocab: deduped); - } - - static Future getSemanticallySimilarWords( - VocabRequest request, - ) async { - // Pull from a list of semantically similar words - // Either from - final candidates = (await VocabRepo.getAllCandidateVocab(request)).vocab; - - // we filter out words that do not share the same part of speech as the token - // TODO: semantic similarity is not implemented yet - final sharingPos = candidates - .where( - (element) => - (element.category.toLowerCase() == request.pos?.toLowerCase() && - element.lemma.toLowerCase() != request.lemma?.toLowerCase()), - ) - .toList(); - - // we prefer to return words that share the same part of speech as the token - // but if there are no words that share the same part of speech, we return all words - final similarWords = sharingPos.isEmpty ? candidates : sharingPos; - - return VocabResponse(vocab: similarWords); - } - - Future getSementicallyDisimiliarWords( - VocabRequest request, - ) async { - // Pull from previously used words if list is non-empty - // Otherwise, pull from a set of starter words for each language - final candidates = (await VocabRepo.getAllCandidateVocab(request)).vocab; - - final sharingPos = candidates - .where( - (element) => - element.category.toLowerCase() != request.pos?.toLowerCase() && - element.lemma.toLowerCase() != request.lemma?.toLowerCase(), - ) - .toList(); - - final disSimilarWords = sharingPos.isEmpty ? candidates : sharingPos; - - return VocabResponse(vocab: disSimilarWords); - } - - VocabResponse getWordPredictor(VocabRequest request) { - // Pull from previously used words if list is non-empty - // Otherwise, pull from a set of starter words for each language - - // Can we locally narrow down the candidate words to a smaller set based some simple rules? - // For example, if the user is learning a language with a different script, we can filter out words that are not in the target script - // we might be able to narrow it down based on a model that predicts the next morphological features/tags of a word, independent of language or context. - // This kind of model could be shared across languages, and could be used to predict the next word in a sentence, or the next morphological feature of a word. - // We could use this to go from the user's vocabularly list to a list of candidate words that are likely to be useful to the user. - - // we then use a server-side service, likely LLM but could be a simpler model, to rank the words based on the context, the previous words as well as previous two messages - // in the conversation - return VocabResponse(); - } - - static VocabResponse placeholderData([LanguageModel? language]) { - language ??= MatrixState.pangeaController.languageController.userL2 == null - ? PLanguageStore.byLangCode(LanguageKeys.defaultLanguage) - : MatrixState.pangeaController.languageController.userL2!; - - //TODO - move this to the server and fill out all our languages - final Map placeholder = { - "es": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hola", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "adios", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tarde", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "noche", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dia", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "bueno", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "zh": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "你好", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "再见", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "下午", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "晚上", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "天", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "好", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "fr": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "bonjour", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "au revoir", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "après-midi", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "soir", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "jour", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "bon", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "de": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hallo", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "auf wiedersehen", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "nachmittag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "abend", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "gut", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "en": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hello", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "goodbye", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "afternoon", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "evening", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "day", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "good", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "it": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "ciao", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "arrivederci", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "pomeriggio", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "sera", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "giorno", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "buono", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "pt": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "oi", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tchau", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tarde", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "noite", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dia", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "bom", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "ru": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "привет", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "до свидания", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "день", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "вечер", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ночь", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "хороший", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "ja": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "こんにちは", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "さようなら", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "午後", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "夜", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "日", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "良い", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "ko": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "안녕하세요", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "안녕히 가세요", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "오후", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "밤", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "낮", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "좋은", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "ar": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "مرحبا", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "وداعا", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "مساء", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ليل", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "يوم", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "جيد", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "hi": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "नमस्ते", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "अलविदा", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "दोपहर", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "रात", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "दिन", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "अच्छा", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "tr": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "merhaba", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "hoşça kal", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "öğleden sonra", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "akşam", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "gün", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "iyi", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "nl": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hallo", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tot ziens", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "middag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "avond", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "goed", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "pl": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "cześć", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "do widzenia", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "popołudnie", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "wieczór", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dzień", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dobry", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "sv": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hej", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "hej då", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "eftermiddag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "kväll", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "bra", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "da": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hej", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "farvel", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "eftermiddag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "aften", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "god", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "no": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hei", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ha det", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ettermiddag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "kveld", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dag", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "god", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "fi": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "hei", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "hei hei", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "iltapäivä", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ilta", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "päivä", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "hyvä", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "cs": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "ahoj", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "na shledanou", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "odpoledne", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "večer", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "den", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dobrý", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "hu": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "szia", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "viszontlátásra", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "délután", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "este", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "nap", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "jó", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "ro": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "salut", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "la revedere", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "după-amiază", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "seară", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "zi", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "bun", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "el": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "γεια", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "αντίο", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "απόγευμα", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "βράδυ", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ημέρα", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "καλό", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "bg": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "здравей", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "довиждане", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "следобед", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "вечер", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ден", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "добър", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "uk": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "привіт", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "до побачення", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "після обіду", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "вечір", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "день", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "добрий", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "hr": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "zdravo", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "doviđenja", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "popodne", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "večer", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dan", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dobar", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "sr": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "здраво", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "довиђења", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "поподне", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "вече", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "дан", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "добар", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "bs": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "zdravo", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "doviđenja", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "popodne", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "veče", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dan", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "dobar", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - "vi": VocabResponse( - vocab: [ - ConstructIdentifier( - lemma: "xin chào", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tạm biệt", - category: "INTJ", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "buổi chiều", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "buổi tối", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "ngày", - category: "NOUN", - type: ConstructTypeEnum.vocab, - ), - ConstructIdentifier( - lemma: "tốt", - category: "ADJ", - type: ConstructTypeEnum.vocab, - ), - ], - ), - }; - - return placeholder[language!.langCodeShort]!; - } -} diff --git a/lib/pangea/word_bank/vocab_request.dart b/lib/pangea/word_bank/vocab_request.dart deleted file mode 100644 index df2b14450..000000000 --- a/lib/pangea/word_bank/vocab_request.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; - -class VocabRequest { - String langCode; - LanguageLevelTypeEnum level; - String? prefix; - String? suffix; - String? lemma; - String? pos; - - int count; - - VocabRequest({ - required this.langCode, - required this.level, - this.lemma, - this.pos, - this.prefix, - this.suffix, - this.count = 10, - }); - - VocabRequest.fromJson(Map json) - : langCode = json['langCode'], - level = LanguageLevelTypeEnum.values[json['level']], - prefix = json['prefix'], - suffix = json['suffix'], - count = json['count'], - lemma = json['lemma'], - pos = json['pos']; - - Map toJson() => { - 'langCode': langCode, - 'level': level.index, - 'prefix': prefix, - 'suffix': suffix, - 'lemma': lemma, - 'pos': pos, - 'count': count, - }; - - String get storageKey => - '${langCode}_${level.index}_${prefix}_${suffix}_$count'; - - @override - operator ==(Object other) { - if (other is VocabRequest) { - return langCode == other.langCode && - level == other.level && - prefix == other.prefix && - suffix == other.suffix && - count == other.count && - lemma == other.lemma && - pos == other.pos; - } - return false; - } - - @override - int get hashCode => - langCode.hashCode ^ - level.hashCode ^ - prefix.hashCode ^ - suffix.hashCode ^ - count.hashCode ^ - lemma.hashCode ^ - pos.hashCode; -} diff --git a/lib/pangea/word_bank/vocab_response.dart b/lib/pangea/word_bank/vocab_response.dart deleted file mode 100644 index a66e4fe26..000000000 --- a/lib/pangea/word_bank/vocab_response.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:fluffychat/pangea/constructs/construct_identifier.dart'; - -class VocabResponse { - List vocab; - - DateTime? expireAt; - - VocabResponse({this.vocab = const []}) { - expireAt = DateTime.now().add(const Duration(days: 100)); - } - - VocabResponse.fromJson(Map json) - : vocab = (json['vocab'] as List) - .map((e) => ConstructIdentifier.fromJson(e)) - .toList(); - - Map toJson() => { - 'vocab': vocab.map((e) => e.toJson()).toList(), - }; -} diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart index 5b803ebc7..0579ea92c 100644 --- a/lib/utils/background_push.dart +++ b/lib/utils/background_push.dart @@ -34,7 +34,7 @@ import 'package:unifiedpush_ui/unifiedpush_ui.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/languages/language_constants.dart'; import 'package:fluffychat/utils/push_helper.dart'; import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import '../config/app_config.dart'; diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index 3fc7e5b35..b64c855e7 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -152,6 +152,7 @@ abstract class ClientManager { PangeaEventTypes.courseUser, PangeaEventTypes.teacherMode, PangeaEventTypes.courseChatList, + PangeaEventTypes.analyticsSettings, // Pangea# }, logLevel: kReleaseMode ? Level.warning : Level.verbose, @@ -171,17 +172,6 @@ abstract class ClientManager { onSoftLogout: enableSoftLogout ? (client) => client.refreshAccessToken() : null, // #Pangea - syncFilter: Filter( - room: RoomFilter( - state: StateFilter(lazyLoadMembers: true), - timeline: StateFilter( - notTypes: [ - PangeaEventTypes.construct, - PangeaEventTypes.summaryAnalytics, - ], - ), - ), - ), shouldReplaceRoomLastEvent: (_, event) { return event.content.tryGet(ModelKey.transcription) == null && !event.type.startsWith("p.") && diff --git a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart index b10adec5d..65bd3119c 100644 --- a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart +++ b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart @@ -63,7 +63,8 @@ extension IsStateExtension on Event { // #Pangea bool get isVisibleInPangeaGui { if (!room.showActivityChatUI) { - return true; + return type != EventTypes.RoomMember || + roomMemberChangeType != RoomMemberChangeType.avatar; } return type != EventTypes.RoomMember; diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 102297718..00ef99abc 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -8,7 +8,7 @@ import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/public_spaces/public_room_bottom_sheet.dart'; +import 'package:fluffychat/pangea/chat_list/widgets/public_room_bottom_sheet.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; diff --git a/lib/widgets/adaptive_dialogs/dialog_text_field.dart b/lib/widgets/adaptive_dialogs/dialog_text_field.dart index 7b8e07b26..7838da05f 100644 --- a/lib/widgets/adaptive_dialogs/dialog_text_field.dart +++ b/lib/widgets/adaptive_dialogs/dialog_text_field.dart @@ -10,7 +10,7 @@ class DialogTextField extends StatelessWidget { final String? prefixText; final String? suffixText; final String? errorText; - final bool obscureText = false; + final bool obscureText; final bool isDestructive = false; final int? minLines; final int? maxLines; @@ -35,6 +35,7 @@ class DialogTextField extends StatelessWidget { this.controller, this.counterText, this.errorText, + this.obscureText = false, // #Pangea this.onSubmitted, // Pangea# @@ -73,23 +74,26 @@ class DialogTextField extends StatelessWidget { ); case TargetPlatform.iOS: case TargetPlatform.macOS: + final placeholder = labelText ?? hintText; return Column( - mainAxisSize: MainAxisSize.min, children: [ - CupertinoTextField( - controller: controller, - obscureText: obscureText, - minLines: minLines, - maxLines: maxLines, - maxLength: maxLength, - keyboardType: keyboardType, - autocorrect: autocorrect, - prefix: prefixText != null ? Text(prefixText) : null, - suffix: suffixText != null ? Text(suffixText) : null, - placeholder: labelText ?? hintText, - // #Pangea - onSubmitted: onSubmitted, - // Pangea# + SizedBox( + height: placeholder == null ? null : ((maxLines ?? 1) + 1) * 20, + child: CupertinoTextField( + controller: controller, + obscureText: obscureText, + minLines: minLines, + maxLines: maxLines, + maxLength: maxLength, + keyboardType: keyboardType, + autocorrect: autocorrect, + prefix: prefixText != null ? Text(prefixText) : null, + suffix: suffixText != null ? Text(suffixText) : null, + placeholder: placeholder, + // #Pangea + onSubmitted: onSubmitted, + // Pangea# + ), ), if (errorText != null) Text( diff --git a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart index 05c158c0b..cba2d7247 100644 --- a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart +++ b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart @@ -37,91 +37,89 @@ Future showTextInputDialog({ useRootNavigator: useRootNavigator, builder: (context) { final error = ValueNotifier(null); - return ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 512), - child: AlertDialog.adaptive( - title: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256), - child: Text(title), - ), - content: ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 256), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (message != null) - SelectableLinkify( - text: message, - textScaleFactor: MediaQuery.textScalerOf(context).scale(1), - linkStyle: TextStyle( - color: Theme.of(context).colorScheme.primary, - decorationColor: Theme.of(context).colorScheme.primary, - ), - options: const LinkifyOptions(humanize: false), - onOpen: (url) => UrlLauncher(context, url.url).launchUrl(), - ), - const SizedBox(height: 16), - ValueListenableBuilder( - valueListenable: error, - builder: (context, error, _) { - return DialogTextField( - hintText: hintText, - errorText: error, - labelText: labelText, - controller: controller, - initialText: initialText, - prefixText: prefixText, - suffixText: suffixText, - // #Pangea - // minLines: minLines, - // maxLines: maxLines, - minLines: autoSubmit ? 1 : minLines, - maxLines: autoSubmit ? 1 : maxLines, - onSubmitted: autoSubmit - ? (_) { - final input = controller.text; - final errorText = validator?.call(input); - if (errorText != null) { - error = errorText; - return; - } - Navigator.of(context).pop(input); - } - : null, - // Pangea# - maxLength: maxLength, - keyboardType: keyboardType, - ); - }, - ), - ], - ), - ), - actions: [ - AdaptiveDialogAction( - onPressed: () => Navigator.of(context).pop(null), - child: Text(cancelLabel ?? L10n.of(context).cancel), - ), - AdaptiveDialogAction( - onPressed: () { - final input = controller.text; - final errorText = validator?.call(input); - if (errorText != null) { - error.value = errorText; - return; - } - Navigator.of(context).pop(input); - }, - autofocus: true, - child: Text( - okLabel ?? L10n.of(context).ok, - style: isDestructive - ? TextStyle(color: Theme.of(context).colorScheme.error) - : null, - ), - ), - ], + return AlertDialog.adaptive( + title: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Text(title), ), + content: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 256), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (message != null) + SelectableLinkify( + text: message, + textScaleFactor: MediaQuery.textScalerOf(context).scale(1), + linkStyle: TextStyle( + color: Theme.of(context).colorScheme.primary, + decorationColor: Theme.of(context).colorScheme.primary, + ), + options: const LinkifyOptions(humanize: false), + onOpen: (url) => UrlLauncher(context, url.url).launchUrl(), + ), + const SizedBox(height: 16), + ValueListenableBuilder( + valueListenable: error, + builder: (context, error, _) { + return DialogTextField( + hintText: hintText, + errorText: error, + labelText: labelText, + controller: controller, + initialText: initialText, + prefixText: prefixText, + suffixText: suffixText, + // #Pangea + // minLines: minLines, + // maxLines: maxLines, + minLines: autoSubmit ? 1 : minLines, + maxLines: autoSubmit ? 1 : maxLines, + onSubmitted: autoSubmit + ? (_) { + final input = controller.text; + final errorText = validator?.call(input); + if (errorText != null) { + error = errorText; + return; + } + Navigator.of(context).pop(input); + } + : null, + // Pangea# + maxLength: maxLength, + keyboardType: keyboardType, + obscureText: obscureText, + ); + }, + ), + ], + ), + ), + actions: [ + AdaptiveDialogAction( + onPressed: () => Navigator.of(context).pop(null), + child: Text(cancelLabel ?? L10n.of(context).cancel), + ), + AdaptiveDialogAction( + onPressed: () { + final input = controller.text; + final errorText = validator?.call(input); + if (errorText != null) { + error.value = errorText; + return; + } + Navigator.of(context).pop(input); + }, + autofocus: true, + child: Text( + okLabel ?? L10n.of(context).ok, + style: isDestructive + ? TextStyle(color: Theme.of(context).colorScheme.error) + : null, + ), + ), + ], ); }, ); diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart index ae0e10471..bfba786b1 100644 --- a/lib/widgets/avatar.dart +++ b/lib/widgets/avatar.dart @@ -28,6 +28,7 @@ class Avatar extends StatelessWidget { final double? presenceSize; final Offset? presenceOffset; + final Widget? miniIcon; // Pangea# const Avatar({ @@ -47,6 +48,7 @@ class Avatar extends StatelessWidget { this.userId, this.presenceSize, this.presenceOffset, + this.miniIcon, // Pangea# super.key, }); @@ -138,7 +140,13 @@ class Avatar extends StatelessWidget { ), // #Pangea // if (presenceUserId != null) - if (presenceUserId != null && size >= 32.0 && showPresence) + if (miniIcon != null) + Positioned( + bottom: presenceOffset?.dy ?? -3, + right: presenceOffset?.dx ?? -3, + child: miniIcon!, + ) + else if (presenceUserId != null && size >= 32.0 && showPresence) // Pangea# PresenceBuilder( client: client, diff --git a/lib/widgets/fluffy_chat_app.dart b/lib/widgets/fluffy_chat_app.dart index 12045d233..aa773d5d5 100644 --- a/lib/widgets/fluffy_chat_app.dart +++ b/lib/widgets/fluffy_chat_app.dart @@ -11,7 +11,7 @@ import 'package:fluffychat/config/routes.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/firebase_analytics.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/locale_provider.dart'; +import 'package:fluffychat/pangea/languages/locale_provider.dart'; import 'package:fluffychat/widgets/app_lock.dart'; import 'package:fluffychat/widgets/theme_builder.dart'; import '../config/app_config.dart'; diff --git a/lib/widgets/layouts/two_column_layout.dart b/lib/widgets/layouts/two_column_layout.dart index 292c17d60..c9ad03897 100644 --- a/lib/widgets/layouts/two_column_layout.dart +++ b/lib/widgets/layouts/two_column_layout.dart @@ -1,17 +1,9 @@ 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/pages/chat_list/chat_list.dart'; -import 'package:fluffychat/pages/settings/settings.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/find_your_people/find_your_people_constants.dart'; -import 'package:fluffychat/widgets/navigation_rail.dart'; +import 'package:fluffychat/pangea/spaces/space_navigation_column.dart'; class TwoColumnLayout extends StatelessWidget { // #Pangea @@ -30,10 +22,10 @@ class TwoColumnLayout extends StatelessWidget { }); @override Widget build(BuildContext context) { - final theme = Theme.of(context); - // #Pangea - bool showNavRail = FluffyThemes.isColumnMode(context); + // final theme = Theme.of(context); + final isColumnMode = FluffyThemes.isColumnMode(context); + bool showNavRail = isColumnMode; if (!showNavRail) { final roomID = state.pathParameters['roomid']; final spaceID = state.pathParameters['spaceid']; @@ -46,114 +38,40 @@ class TwoColumnLayout extends StatelessWidget { showNavRail = state.fullPath?.endsWith(':spaceid') == true; } } - // Pangea# + final columnWidth = + (showNavRail ? (FluffyThemes.navRailWidth + 1.0) : 0.0) + + (isColumnMode ? (FluffyThemes.columnWidth + 1.0) : 0.0); + // Pangea# return ScaffoldMessenger( child: Scaffold( - body: Row( + // #Pangea + // body: Row( + body: Stack( + fit: StackFit.expand, + // Pangea# children: [ // #Pangea - if (showNavRail) ...[ - SpacesNavigationRail( - activeSpaceId: state.pathParameters['spaceid'], - path: state.fullPath, - ), - Container( - color: Theme.of(context).dividerColor, - width: 1, - ), - ], - if (FluffyThemes.isColumnMode(context)) ...[ - // Pangea# - Container( - clipBehavior: Clip.antiAlias, - decoration: const BoxDecoration(), - // #Pangea - // width: FluffyThemes.columnWidth + FluffyThemes.navRailWidth, - // child: mainView, - width: FluffyThemes.columnWidth, - child: _MainView(state: state), - // Pangea# - ), - Container( - width: 1.0, - color: theme.dividerColor, - ), - // Pangea# - ], - // Pangea# - Expanded( - child: ClipRRect( - child: sideView, - ), + Positioned.fill( + left: columnWidth, + child: ClipRRect(child: sideView), ), + SpaceNavigationColumn( + state: state, + showNavRail: showNavRail, + ), + // Container( + // clipBehavior: Clip.antiAlias, + // decoration: const BoxDecoration(), + // width: FluffyThemes.columnWidth + FluffyThemes.navRailWidth, + // child: mainView, + // ), + // Container(width: 1.0, color: theme.dividerColor), + // Expanded(child: ClipRRect(child: sideView)), + // Pangea# ], ), ), ); } } - -// #Pangea -class _MainView extends StatelessWidget { - final GoRouterState state; - - const _MainView({ - required this.state, - }); - - @override - Widget build(BuildContext context) { - final path = state.fullPath; - if (path == null) { - return ChatList( - activeChat: state.pathParameters['roomid'], - activeSpaceId: state.pathParameters['spaceid'], - ); - } - - 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; - } else if (path.contains("analytics/activities")) { - indicator = ProgressIndicatorEnum.activities; - } - - return AnalyticsPage( - indicator: indicator, - isSidebar: true, - ); - } - - if (path.contains("settings")) { - return Settings(key: state.pageKey); - } - - if (path.contains('course')) { - return Center( - child: SizedBox( - width: 250.0, - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${FindYourPeopleConstants.sideBearFileName}", - errorWidget: (context, url, error) => const SizedBox(), - placeholder: (context, url) => const Center( - child: CircularProgressIndicator.adaptive(), - ), - ), - ), - ); - } - - return ChatList( - activeChat: state.pathParameters['roomid'], - activeSpaceId: state.pathParameters['spaceid'], - ); - } -} -// Pangea# diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index a6d1384af..ef3a4b537 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:app_links/app_links.dart'; import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; import 'package:http/http.dart' as http; @@ -19,10 +20,12 @@ import 'package:universal_html/html.dart' as html; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/l10n/l10n.dart'; +import 'package:fluffychat/pangea/analytics_data/analytics_data_service.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; -import 'package:fluffychat/pangea/learning_settings/utils/locale_provider.dart'; +import 'package:fluffychat/pangea/join_codes/space_code_controller.dart'; +import 'package:fluffychat/pangea/languages/locale_provider.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -71,6 +74,9 @@ class MatrixState extends State with WidgetsBindingObserver { // #Pangea static late PangeaController pangeaController; static PangeaAnyState pAnyState = PangeaAnyState(); + late StreamSubscription? _uriListener; + + final Map _analyticsServices = {}; // Pangea# SharedPreferences get store => widget.store; @@ -96,6 +102,18 @@ class MatrixState extends State with WidgetsBindingObserver { return widget.clients[_activeClient]; } + // #Pangea + AnalyticsDataService get analyticsDataService { + if (_analyticsServices[client.clientName] == null) { + Logs().w( + 'Tried to access AnalyticsDataService for client ${client.clientName}, but it does not exist.', + ); + _analyticsServices[client.clientName] = AnalyticsDataService(client); + } + return _analyticsServices[client.clientName]!; + } + // Pangea# + VoipPlugin? voipPlugin; bool get isMultiAccount => widget.clients.length > 1; @@ -241,7 +259,10 @@ class MatrixState extends State with WidgetsBindingObserver { String? get activeRoomId { final route = FluffyChatApp.router.routeInformationProvider.value.uri.path; if (!route.startsWith('/rooms/')) return null; - return route.split('/')[2]; + // #Pangea + // return route.split('/')[2]; + return FluffyChatApp.router.state.pathParameters['roomid']; + // Pangea# } final linuxNotifications = @@ -267,21 +288,60 @@ class MatrixState extends State with WidgetsBindingObserver { ), ), ); - pangeaController = PangeaController(matrix: widget, matrixState: this); + pangeaController = PangeaController(matrixState: this); WidgetsBinding.instance.addPostFrameCallback((_) { _setAppLanguage(); _setLanguageListener(); }); + _uriListener = AppLinks().uriLinkStream.listen(_processIncomingUris); // Pangea# } // #Pangea + bool _showingScreenSizeDialog = false; + double? _lastShownPopupHeight; + @override + void didChangeMetrics() { + _showScreenSizeDialog(); + super.didChangeMetrics(); + } + + Future _showScreenSizeDialog() async { + if (_showingScreenSizeDialog || !kIsWeb) { + return; + } + + final height = MediaQuery.heightOf(context); + if (height > 500) { + _lastShownPopupHeight = null; + return; + } + + if (_lastShownPopupHeight != null && height >= _lastShownPopupHeight!) { + return; + } + + _showingScreenSizeDialog = true; + _lastShownPopupHeight = height; + await showOkAlertDialog( + context: + FluffyChatApp.router.routerDelegate.navigatorKey.currentContext ?? + context, + title: L10n.of(context).screenSizeWarning, + ); + _lastShownPopupHeight = MediaQuery.heightOf(context); + _showingScreenSizeDialog = false; + } + StreamSubscription? _languageListener; Future _setLanguageListener() async { await pangeaController.userController.initialize(); _languageListener?.cancel(); - _languageListener = pangeaController.userController.languageStream.stream - .listen((_) => _setAppLanguage()); + _languageListener = + pangeaController.userController.languageStream.stream.listen((update) { + _setAppLanguage(); + analyticsDataService.updateService.onUpdateLanguages(update); + }); } void _setAppLanguage() { @@ -406,6 +466,9 @@ class MatrixState extends State with WidgetsBindingObserver { c.onNotification.stream.listen(showLocalNotification); }); } + // #Pangea + _analyticsServices[name] ??= AnalyticsDataService(c); + // Pangea# } void _cancelSubs(String name) { @@ -420,6 +483,8 @@ class MatrixState extends State with WidgetsBindingObserver { // #Pangea onUiaRequest[name]?.cancel(); onUiaRequest.remove(name); + _analyticsServices[name]?.dispose(); + _analyticsServices.remove(name); // Pangea# } @@ -563,6 +628,7 @@ class MatrixState extends State with WidgetsBindingObserver { linuxNotifications?.close(); // #Pangea _languageListener?.cancel(); + _uriListener?.cancel(); // Pangea# super.dispose(); @@ -603,6 +669,13 @@ class MatrixState extends State with WidgetsBindingObserver { final file = MatrixFile(bytes: exportBytes, name: exportFileName); file.save(context); } + + // #Pangea + Future _processIncomingUris(Uri? uri) async { + if (uri == null) return; + await SpaceCodeController.onOpenAppViaUrl(uri); + } + // Pangea# } class _AccountBundleWithClient { diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart index 01c56e45e..5c444dead 100644 --- a/lib/widgets/member_actions_popup_menu_button.dart +++ b/lib/widgets/member_actions_popup_menu_button.dart @@ -6,6 +6,8 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/level_display_name.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; +import 'package:fluffychat/pangea/bot/widgets/bot_chat_settings_dialog.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; import 'adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; @@ -16,6 +18,9 @@ void showMemberActionsPopupMenu({ required BuildContext context, required User user, void Function()? onMention, + // #Pangea + Room? room, + // Pangea# }) async { final theme = Theme.of(context); final displayname = user.calcDisplayname(); @@ -119,6 +124,17 @@ void showMemberActionsPopupMenu({ ], ), ), + if (user.id == BotName.byEnvironment && room != null && room.isRoomAdmin) + PopupMenuItem( + value: _MemberActions.botSettings, + child: Row( + children: [ + const Icon(Icons.settings_outlined), + const SizedBox(width: 18), + Text(L10n.of(context).botSettings), + ], + ), + ), // Pangea# if (onMention != null) PopupMenuItem( @@ -178,7 +194,7 @@ void showMemberActionsPopupMenu({ ), const SizedBox(width: 18), Text( - L10n.of(context).kickFromChat, + L10n.of(context).kick, style: TextStyle(color: theme.colorScheme.onErrorContainer), ), ], @@ -195,7 +211,7 @@ void showMemberActionsPopupMenu({ ), const SizedBox(width: 18), Text( - L10n.of(context).banFromChat, + L10n.of(context).ban, style: TextStyle(color: theme.colorScheme.onErrorContainer), ), ], @@ -337,10 +353,15 @@ void showMemberActionsPopupMenu({ enableEncryption: false, ), ); - Navigator.of(context).pop(); final roomId = roomIdResult.result; if (roomId == null) return; router.go('/rooms/$roomId'); + case _MemberActions.botSettings: + await BotChatSettingsDialog.show( + context: context, + room: room!, + ); + return; // Pangea# case _MemberActions.info: await UserDialog.show( @@ -380,5 +401,6 @@ enum _MemberActions { // #Pangea // report, chat, + botSettings, // Pangea# } diff --git a/lib/widgets/navigation_rail.dart b/lib/widgets/navigation_rail.dart index 8c50b0581..04f81476a 100644 --- a/lib/widgets/navigation_rail.dart +++ b/lib/widgets/navigation_rail.dart @@ -1,11 +1,13 @@ import 'package:flutter/material.dart'; +import 'package:badges/badges.dart' as b; import 'package:go_router/go_router.dart'; 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'; @@ -20,6 +22,9 @@ class SpacesNavigationRail extends StatelessWidget { // final void Function() onGoToChats; // final void Function(String) onGoToSpaceId; final String? path; + final double railWidth; + final bool expanded; + final VoidCallback collapse; // Pangea# const SpacesNavigationRail({ @@ -28,6 +33,9 @@ class SpacesNavigationRail extends StatelessWidget { // required this.onGoToChats, // required this.onGoToSpaceId, required this.path, + required this.railWidth, + required this.collapse, + this.expanded = false, // Pangea# super.key, }); @@ -71,12 +79,17 @@ class SpacesNavigationRail extends StatelessWidget { ) .toList(); - return SizedBox( - // #Pangea + // #Pangea + // return SizedBox( + return AnimatedContainer( // width: FluffyThemes.navRailWidth, - width: width, + width: railWidth, + duration: FluffyThemes.animationDuration, // Pangea# child: Column( + // #Pangea + crossAxisAlignment: CrossAxisAlignment.start, + // Pangea# children: [ Expanded( child: ListView.builder( @@ -91,7 +104,10 @@ class SpacesNavigationRail extends StatelessWidget { return NaviRailItem( isSelected: isAnalytics, onTap: () { - context.go("/rooms/analytics"); + collapse(); + AnalyticsNavigationUtil.navigateToAnalytics( + context: context, + ); }, backgroundColor: Colors.transparent, icon: FutureBuilder( @@ -114,6 +130,9 @@ class SpacesNavigationRail extends StatelessWidget { ), ), toolTip: L10n.of(context).home, + // #Pangea + expanded: expanded, + // Pangea# ); } i--; @@ -139,10 +158,14 @@ class SpacesNavigationRail extends StatelessWidget { // unreadBadgeFilter: (room) => true, icon: const Icon(Icons.forum_outlined), selectedIcon: const Icon(Icons.forum), - onTap: () => context.go("/rooms"), - toolTip: L10n.of(context).directMessages, + onTap: () { + collapse(); + context.go("/rooms"); + }, + toolTip: L10n.of(context).allChats, unreadBadgeFilter: (room) => room.firstSpaceParent == null, + expanded: expanded, // Pangea# ); } @@ -161,6 +184,7 @@ class SpacesNavigationRail extends StatelessWidget { borderRadius: BorderRadius.circular(0), isSelected: isCourse, onTap: () { + collapse(); context.go('/rooms/course'); }, icon: ClipPath( @@ -179,6 +203,7 @@ class SpacesNavigationRail extends StatelessWidget { ), ), toolTip: L10n.of(context).addCourse, + expanded: expanded, // Pangea# ); } @@ -197,6 +222,7 @@ class SpacesNavigationRail extends StatelessWidget { borderRadius: BorderRadius.circular(0), // onTap: () => onGoToSpaceId(rootSpaces[i].id), onTap: () { + collapse(); final room = client.getRoomById(rootSpaces[i].id); if (room != null) { chatListHandleSpaceTap( @@ -224,19 +250,39 @@ class SpacesNavigationRail extends StatelessWidget { // AppConfig.borderRadius / 2, // ), // ), - icon: ClipPath( - clipper: MapClipper(), - child: Avatar( - mxContent: rootSpaces[i].avatar, - name: displayname, - border: BorderSide( - width: 1, - color: Theme.of(context).dividerColor, + icon: b.Badge( + showBadge: + rootSpaces[i].membership == Membership.invite, + badgeStyle: b.BadgeStyle( + badgeColor: Theme.of(context).colorScheme.error, + elevation: 4, + borderSide: BorderSide.none, + padding: const EdgeInsetsGeometry.all(0), + ), + badgeContent: Icon( + Icons.error_outline, + color: Theme.of(context).colorScheme.onPrimary, + size: 16, + ), + position: b.BadgePosition.topEnd( + top: -5, + end: -7, + ), + child: ClipPath( + clipper: MapClipper(), + child: Avatar( + mxContent: rootSpaces[i].avatar, + name: displayname, + border: BorderSide( + width: 1, + color: Theme.of(context).dividerColor, + ), + borderRadius: BorderRadius.circular(0), + size: width - (isColumnMode ? 32.0 : 24.0), ), - borderRadius: BorderRadius.circular(0), - size: width - (isColumnMode ? 32.0 : 24.0), ), ), + expanded: expanded, // Pangea# ); }, @@ -244,8 +290,8 @@ class SpacesNavigationRail extends StatelessWidget { ), NaviRailItem( isSelected: isSettings, - onTap: () => context.go('/rooms/settings'), // #Pangea + // onTap: () => context.go('/rooms/settings'), // icon: const Padding( // padding: EdgeInsets.all(10.0), // child: Icon(Icons.settings_outlined), @@ -254,8 +300,13 @@ class SpacesNavigationRail extends StatelessWidget { // padding: EdgeInsets.all(10.0), // child: Icon(Icons.settings), // ), + onTap: () { + collapse(); + context.go('/rooms/settings'); + }, icon: const Icon(Icons.settings_outlined), selectedIcon: const Icon(Icons.settings), + expanded: expanded, // Pangea# toolTip: L10n.of(context).settings, ), diff --git a/lib/widgets/unread_rooms_badge.dart b/lib/widgets/unread_rooms_badge.dart index 58db3dc87..4e93e1acc 100644 --- a/lib/widgets/unread_rooms_badge.dart +++ b/lib/widgets/unread_rooms_badge.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:badges/badges.dart' as b; import 'package:matrix/matrix.dart'; +import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'matrix.dart'; @@ -33,6 +34,9 @@ class UnreadRoomsBadge extends StatelessWidget { .length; return b.Badge( badgeStyle: b.BadgeStyle( + // #Pangea + padding: const EdgeInsetsGeometry.all(1), + // Pangea# badgeColor: theme.colorScheme.primary, elevation: 4, borderSide: BorderSide( @@ -40,13 +44,31 @@ class UnreadRoomsBadge extends StatelessWidget { width: 2, ), ), - badgeContent: Text( - unreadCount.toString(), - style: TextStyle( - color: theme.colorScheme.onPrimary, - fontSize: 12, + // #Pangea + // badgeContent: Text( + // unreadCount.toString(), + // style: TextStyle( + // color: theme.colorScheme.onPrimary, + // fontSize: 12, + // ), + // ), + badgeContent: SizedBox( + width: 15, + height: 15, + child: FittedBox( + fit: BoxFit.scaleDown, + child: Text( + unreadCount < 100 + ? unreadCount.toString() + : L10n.of(context).unreadPlus, + style: TextStyle( + color: theme.colorScheme.onPrimary, + fontSize: 12, + ), + ), ), ), + // Pangea# showBadge: unreadCount != 0, badgeAnimation: const b.BadgeAnimation.scale(), position: badgePosition ?? b.BadgePosition.bottomEnd(), diff --git a/pubspec.lock b/pubspec.lock index 96df7a2eb..cc9dce04b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1555,10 +1555,10 @@ packages: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" mgrs_dart: dependency: transitive description: @@ -2480,26 +2480,26 @@ packages: dependency: transitive description: name: test - sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb" + sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" url: "https://pub.dev" source: hosted - version: "1.26.2" + version: "1.26.3" test_api: dependency: transitive description: name: test_api - sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" + sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 url: "https://pub.dev" source: hosted - version: "0.7.6" + version: "0.7.7" test_core: dependency: transitive description: name: test_core - sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a" + sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" url: "https://pub.dev" source: hosted - version: "0.6.11" + version: "0.6.12" timezone: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 64ec21fb8..77f4dbc51 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -6,7 +6,7 @@ description: Learn a language while texting your friends. # Pangea# publish_to: none # On version bump also increase the build number for F-Droid -version: 4.1.15+13 +version: 4.1.16+1 environment: sdk: ">=3.0.0 <4.0.0" diff --git a/scripts/FIND_UNUSED_INTL_KEYS.md b/scripts/FIND_UNUSED_INTL_KEYS.md new file mode 100644 index 000000000..ecc3176ac --- /dev/null +++ b/scripts/FIND_UNUSED_INTL_KEYS.md @@ -0,0 +1,118 @@ +# Find Unused Translation Keys Script + +This Python script helps identify unused translation keys in the `intl_en.arb` file that are not referenced anywhere in the codebase. + +## Purpose + +The script was created to clean up the internationalization (i18n) files by finding translation keys that are defined but never used. This helps maintain a cleaner codebase and reduces translation overhead. + +## How It Works + +1. **Extracts Keys**: Reads `lib/l10n/intl_en.arb` and extracts all translation keys after line 3243 (configurable) +2. **Filters Metadata**: Automatically excludes keys starting with `@` (metadata keys) +3. **Filters Placeholders**: Excludes nested placeholder keys inside metadata objects (e.g., `l1`, `l2`, `type`, `placeholders`) +4. **Searches Repository**: Uses `git grep` to efficiently search for each key in the repository +5. **Filters Results**: Excludes matches found only in `.arb` files (other language files) +6. **Reports Findings**: Generates a JSON file with the list of unused keys + +## Usage + +```bash +# Run from repository root +python3 scripts/find_unused_intl_keys.py +``` + +## Output + +The script provides two types of output: + +1. **Console Output**: Real-time progress and summary of findings +2. **JSON File**: List of unused keys saved to `scripts/unused_intl_keys.json` + +### Sample Console Output + +``` +Extracting keys from /path/to/intl_en.arb after line 3243... +Found 1869 translation keys to check. + +Searching repository for key references... + Checked 10/1869 keys... + ... + +Search complete! +Total keys checked: 1869 +Used keys: 1381 +Unused keys: 488 + +================================================================================ +RESULTS +================================================================================ + +Found 488 unused keys (not referenced in any .dart files): +-------------------------------------------------------------------------------- + - aaDisplayName + - abDisplayName + - acceptSelection + ... +``` + +### Sample JSON Output + +```json +{ + "unused_keys": [ + "aaDisplayName", + "abDisplayName", + "acceptSelection", + ... + ], + "count": 488, + "source_file": "/path/to/lib/l10n/intl_en.arb", + "start_line": 3243 +} +``` + +## Understanding the Results + +- **Unused keys**: Translation keys that appear only in `.arb` files and nowhere else in the codebase +- **Metadata keys** (starting with `@`) are automatically excluded from the analysis +- **Placeholder keys** (nested inside metadata objects like `placeholders`) are automatically excluded + +## Notes + +- Keys starting with `@` are metadata and are automatically skipped +- Nested keys inside metadata objects (like `l1`, `l2` in placeholders) are automatically filtered out +- Only top-level translation keys are analyzed +- The script searches only for exact key matches in the repository +- False positives are possible if keys are constructed dynamically (e.g., using string interpolation) +- Always review the unused keys list before removing them from the translation files + +## Customization + +To check from a different line number, modify the `start_line` parameter in the `main()` function: + +```python +unused_keys = find_unused_keys(str(arb_file_path), str(repo_path), start_line=3243) +``` + +## Requirements + +- Python 3.x +- Git (for `git grep` command) +- Repository must be a git repository + +## Next Steps + +After identifying unused keys: + +1. Review the unused keys list in `scripts/unused_intl_keys.json` +2. Determine which keys can be safely removed +3. Remove unused keys from `intl_en.arb` +4. Run the script again to verify +5. Consider removing the same keys from other language `.arb` files + +## Related Files + +- Source translation file: `lib/l10n/intl_en.arb` +- Other language files: `lib/l10n/intl_*.arb` +- Generated JSON output: `scripts/unused_intl_keys.json` diff --git a/scripts/REMOVE_INTL_KEY.md b/scripts/REMOVE_INTL_KEY.md new file mode 100644 index 000000000..d2d49e09f --- /dev/null +++ b/scripts/REMOVE_INTL_KEY.md @@ -0,0 +1,46 @@ +# Remove Translation Key Script + +This script removes a specific translation key from all `.arb` files in the project. + +## Usage + +```bash +python3 scripts/remove_intl_key.py +``` + +## Example + +```bash +python3 scripts/remove_intl_key.py "obsoleteKey" +``` + +## What it does + +1. **Takes a key name** as a command-line argument +2. **Validates the key name** and cleans it (removes @ prefix if accidentally provided) +3. **Searches all .arb files** in `lib/l10n/` directory +4. **Removes both the key and its metadata**: + - The main key-value pair (e.g., `"myKey": "My Value"`) + - The associated metadata entry (e.g., `"@myKey": {...}`) +5. **Preserves file structure** and formatting +6. **Provides detailed feedback** about what was removed + +## Safety Features + +- **Confirmation prompt** before making changes +- **Validates input** to prevent common mistakes +- **Detailed reporting** of what was removed from each file +- **Preserves JSON structure** and formatting +- **Only modifies files** that actually contain the key + +## Output + +The script provides: +- A list of processed files and what was removed from each +- Summary of total entries removed +- Warning if the key wasn't found in any files + +## Related Scripts + +- `find_unused_intl_keys.py` - Finds keys that are not used in the codebase +- `remove_unused_intl_keys.py` - Removes all unused keys at once \ No newline at end of file diff --git a/scripts/REMOVE_UNUSED_INTL_KEYS.md b/scripts/REMOVE_UNUSED_INTL_KEYS.md new file mode 100644 index 000000000..e999c5abe --- /dev/null +++ b/scripts/REMOVE_UNUSED_INTL_KEYS.md @@ -0,0 +1,93 @@ +# Remove Unused Translation Keys Script + +This Python script removes unused translation keys from all `.arb` files in the repository. + +## Purpose + +After identifying unused keys with `find_unused_intl_keys.py`, this script automates the removal of those keys from all language files. It removes both the key-value pairs and their corresponding metadata entries. + +## How It Works + +1. **Loads Unused Keys**: Reads the list of unused keys from `unused_intl_keys.json` +2. **Processes Each File**: For each `.arb` file in `lib/l10n/`: + - Loads the file as JSON + - Identifies keys to remove (both base keys and their `@key` metadata) + - Removes those keys while preserving order + - Writes the cleaned JSON back to the file +3. **Reports Results**: Shows how many keys were removed from each file + +## Usage + +```bash +# First, generate the list of unused keys +python3 scripts/find_unused_intl_keys.py + +# Then, remove those keys from all .arb files +python3 scripts/remove_unused_intl_keys.py +``` + +## Output + +The script provides progress output showing how many keys were removed from each file: + +``` +Loading unused keys from JSON file... +Found 488 unused keys to remove. + +Found 54 .arb files to process. + +Processing .arb files... +================================================================================ +intl_en.arb: Removed 488 keys/metadata entries +intl_es.arb: Removed 557 keys/metadata entries +intl_fr.arb: Removed 950 keys/metadata entries +... +================================================================================ + +Total keys/metadata entries removed: 50015 +Processed 54 .arb files successfully. +``` + +## What Gets Removed + +For each unused key (e.g., `accountInformation`), the script removes: +1. The key itself: `"accountInformation": "Account information"` +2. Its metadata (if present): `"@accountInformation": { ... }` + +## Important Notes + +- **Backup recommended**: The script modifies files in place. Consider committing your work or creating a backup before running. +- **JSON parsing**: The script uses Python's JSON library, which: + - Preserves the order of keys (using OrderedDict) + - May reformat indentation to 2 spaces + - Resolves duplicate keys by keeping the last value +- **Validation**: After running, verify the files are still valid JSON and that the application still works correctly. + +## Requirements + +- Python 3.x +- Input file: `scripts/unused_intl_keys.json` (generated by `find_unused_intl_keys.py`) + +## Example + +```bash +# Full workflow +cd /path/to/repository + +# Step 1: Find unused keys +python3 scripts/find_unused_intl_keys.py + +# Step 2: Review the list in scripts/unused_intl_keys.json + +# Step 3: Remove the unused keys +python3 scripts/remove_unused_intl_keys.py + +# Step 4: Verify the changes +git diff lib/l10n/ +``` + +## Related Files + +- Input: `scripts/unused_intl_keys.json` +- Modified: All `lib/l10n/intl_*.arb` files +- Related: `scripts/find_unused_intl_keys.py` (generates the input file) diff --git a/scripts/find_hardcoded_keys.py b/scripts/find_hardcoded_keys.py new file mode 100755 index 000000000..896d2913c --- /dev/null +++ b/scripts/find_hardcoded_keys.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +""" +Script to find hardcoded json keys and replace with ModelKey equivalents + +This script: +1. Reads model_keys.dart and extracts string values +2. Searches the repository for equivalent hardcoded strings +3. Replaces hardcoded strings with ModelKeys + +Usage: + python3 scripts/find_hardcoded_keys.py +""" + +import json +import os +import re +import subprocess +from pathlib import Path +from typing import Set, List + +def extract_pairs(model_keys_path: str) -> List[(str, str)]: + """ + Extract ModelKey names and string values from model_keys.dart file + + ModelKey entries are of the form + static const String name = 'value'; + or + static const String name = "value"; + + Args: + model_keys_path: Path to model_keys.dart + + Returns: + List of ModelKey names and string values, as tuples + """ + pairs = [] + + # Parse each entry for ModelKey name and value + with open(model_keys_path, 'r') as f: + file_content = f.read() + + reg_filter = re.compile("static[\n ]+const[\n ]+String[\n ]+[a-zA-Z0-9]+[\n ]+=[\n ]+[\"\'][a-zA-Z0-9_.]+[\"\'];") + entries = reg_filter.findall(file_content) + + for entry in entries: + parts = entry.strip().split() + + name = parts[3] + value = parts[5] + trimmed_value = value.strip(";\'\"") + pairs.append((name, trimmed_value)) + + return pairs + +def search_and_replace(name: str, value: str, repo_path: str): + """ + Search for a hardcoded ModelKey value in the repository, + using git grep for efficiency. + + Replaces with ModelKey.name if found. + + Args: + name: Name of ModelKey entry + value: ModelKey string value to search for and replace + repo_path: Path to the repository root + + """ + search = "[\"\']" + value + "[\"\']" + replace = "ModelKey." + name + + try: + # Use git grep for fast searching + # Find all files that contain the given hardcoded ModelKey value + result = subprocess.run( + ['git', 'grep', '-l', search], + cwd=repo_path, + capture_output=True, + text=True + ) + + # Remove model_keys.dart and any non-dart files + files = result.stdout.strip().split('\n') + for file in files: + if ("model_keys.dart" not in file) & file.endswith('.dart'): + with open(file, 'r+') as f: + file_content = f.read() + + # Files without ModelKey import statements + # may not need edits - leave to user discretion + import_str = "import 'package:fluffychat/pangea/common/constants/model_keys.dart';" + if import_str not in file_content: + print("The file " + file + " contains the text \"" + value + "\"") + # file_content = import_str + "\n" + file_content + + else: + # Replace instances of hardcoded value in file + file_content = re.sub(search, replace, file_content) + f.seek(0) + f.write(file_content) + f.truncate() + + except subprocess.CalledProcessError: + return False + +def find_hardcoded_values(model_keys_path: str, repo_path: str): + """ + Use helper functions to find hardcoded + ModelKey values and replace them. + + Args: + model_keys_path: Path to model_keys.dart + repo_path: Path to the repository root + """ + # Find list of all ModelKeys to be searched for + # as tuples of (name, value) + pairs = extract_pairs(model_keys_path) + + print(f"Found {len(pairs)} ModelKeys to check.\n") + + print("Searching and replacing hardcoded ModelKey values...") + for pair in pairs: + search_and_replace(pair[0], pair[1], repo_path) + print("Replacement complete") + +def main(): + """Main function to run the hardcoded key replacement function.""" + # Get repository root + repo_path = Path(__file__).parent.parent.absolute() + model_keys_path = repo_path / 'lib' / 'pangea' / 'common' / 'constants' / 'model_keys.dart' + + if not model_keys_path.exists(): + print(f"Error: Could not find {model_keys_path}") + return 1 + + # Find list of all ModelKeys + # and replace any hardcoded values with ModelKey + find_hardcoded_values(str(model_keys_path), str(repo_path)) + + return 0 + +if __name__ == '__main__': + exit(main()) \ No newline at end of file diff --git a/scripts/find_unused_intl_keys.py b/scripts/find_unused_intl_keys.py new file mode 100755 index 000000000..61b28fed3 --- /dev/null +++ b/scripts/find_unused_intl_keys.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python3 +""" +Script to find unused translation keys in intl_en.arb after line 3243. + +This script: +1. Reads intl_en.arb and extracts all translation keys after line 3243 +2. Filters out metadata keys (those starting with @) +3. Searches the repository for references to each key +4. Returns a JSON file with unused keys + +Usage: + python3 scripts/find_unused_intl_keys.py + +Output: + scripts/unused_intl_keys.json - JSON file containing the list of unused keys +""" + +import json +import os +import re +import subprocess +from pathlib import Path +from typing import Set, List + + +def extract_keys_after_line(arb_file_path: str, start_line: int = 3243) -> List[str]: + """ + Extract translation keys from .arb file after a specific line. + + ARB files are JSON files where keys starting with @ are metadata. + We only want the actual translation keys (non-@ keys), not placeholder + keys or other nested metadata fields. + + This function extracts only TOP-LEVEL keys that first appear after the + specified line number. Keys that appear as placeholders are ignored. + + Args: + arb_file_path: Path to the .arb file + start_line: Line number to start extracting from (1-indexed) + + Returns: + List of translation key names + """ + # Load the entire JSON to get proper structure + with open(arb_file_path, 'r', encoding='utf-8') as f: + data = json.load(f) + + # Read file again to get line numbers for each key + with open(arb_file_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + + keys = [] + + # Extract only top-level keys (not nested keys inside metadata) + for key in data.keys(): + # Skip metadata keys (those starting with @) + if key.startswith('@'): + continue + + # Find the FIRST occurrence of this key as a top-level definition + # A top-level key appears at the start of a line (after whitespace) + # with the pattern: "keyName": (not nested inside another object) + for line_num, line in enumerate(lines, start=1): + # Match key at the beginning of a line (indentation level 1) + # This ensures we're matching top-level keys, not nested ones + if re.match(r'^ "' + re.escape(key) + r'":\s*', line): + # Only include keys that appear after the specified line + if line_num > start_line: + keys.append(key) + break + + return keys + + +def search_key_in_repository(key: str, repo_path: str, exclude_dirs: Set[str]) -> bool: + """ + Search for a key in the repository using git grep for efficiency. + + Args: + key: Translation key to search for + repo_path: Path to the repository root + exclude_dirs: Set of directory names to exclude from search + + Returns: + True if the key is found, False otherwise + """ + try: + # Use git grep for fast searching, excluding the l10n directory + # We search for the key name as it would appear in Dart code + result = subprocess.run( + ['git', 'grep', '-q', key], + cwd=repo_path, + capture_output=True, + text=True + ) + + # git grep returns 0 if found, 1 if not found + if result.returncode == 0: + # Found the key, but we need to verify it's not just in the .arb files + # Run again with output to check the files + result_with_output = subprocess.run( + ['git', 'grep', '-l', key], + cwd=repo_path, + capture_output=True, + text=True + ) + + # Check if any non-.arb files contain the key + files = result_with_output.stdout.strip().split('\n') + for file in files: + if not file.endswith('.arb'): + return True + + return False + else: + return False + + except subprocess.CalledProcessError: + return False + + +def find_unused_keys(arb_file_path: str, repo_path: str, start_line: int = 3243) -> List[str]: + """ + Find unused translation keys in the repository. + + Args: + arb_file_path: Path to the .arb file + repo_path: Path to the repository root + start_line: Line number to start checking from + + Returns: + List of unused keys + """ + # Directories to exclude from search + exclude_dirs = {'.git', 'build', 'node_modules', '.dart_tool', 'l10n'} + + print(f"Extracting keys from {arb_file_path} after line {start_line}...") + keys = extract_keys_after_line(arb_file_path, start_line) + print(f"Found {len(keys)} translation keys to check.\n") + + unused_keys = [] + used_count = 0 + + print("Searching repository for key references...") + for i, key in enumerate(keys, 1): + # Print progress every 10 keys + if i % 10 == 0: + print(f" Checked {i}/{len(keys)} keys...") + + if search_key_in_repository(key, repo_path, exclude_dirs): + used_count += 1 + else: + unused_keys.append(key) + + print(f"\nSearch complete!") + print(f"Total keys checked: {len(keys)}") + print(f"Used keys: {used_count}") + print(f"Unused keys: {len(unused_keys)}") + + return unused_keys + + +def main(): + """Main function to run the unused key finder.""" + # Get repository root + repo_path = Path(__file__).parent.parent.absolute() + arb_file_path = repo_path / 'lib' / 'l10n' / 'intl_en.arb' + + if not arb_file_path.exists(): + print(f"Error: Could not find {arb_file_path}") + return 1 + + # Find unused keys starting from line 3243 + unused_keys = find_unused_keys(str(arb_file_path), str(repo_path), start_line=3243) + + # Print results + print("\n" + "="*80) + print("RESULTS") + print("="*80) + + if unused_keys: + print(f"\nFound {len(unused_keys)} unused keys (not referenced in any .dart files):") + print("-" * 80) + for key in sorted(unused_keys): + print(f" - {key}") + else: + print("\nNo unused keys found! All keys are referenced in the codebase.") + + # Save results to JSON file + output_file = repo_path / 'scripts' / 'unused_intl_keys.json' + with open(output_file, 'w', encoding='utf-8') as f: + json.dump({ + 'unused_keys': sorted(unused_keys), + 'count': len(unused_keys), + 'source_file': str(arb_file_path), + 'start_line': 3243 + }, f, indent=2, ensure_ascii=False) + + print(f"\nJSON output saved to: {output_file}") + + return 0 + + +if __name__ == '__main__': + exit(main()) diff --git a/scripts/remove_intl_key.py b/scripts/remove_intl_key.py new file mode 100755 index 000000000..c83bae452 --- /dev/null +++ b/scripts/remove_intl_key.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +""" +Script to remove a specific translation key from all .arb files. + +This script: +1. Takes a key name as a command-line argument +2. Removes that key and its metadata entry from all .arb files +3. Preserves the overall order and structure of the files + +Usage: + python3 scripts/remove_intl_key.py + +Example: + python3 scripts/remove_intl_key.py "obsoleteKey" + +Input: + key_name - The name of the key to remove (without the @ prefix for metadata) + +Output: + Updates all .arb files in lib/l10n/ by removing the specified key and its metadata +""" + +import json +import sys +from pathlib import Path +from collections import OrderedDict + + +def remove_key_from_arb_file(arb_file_path: str, key_to_remove: str) -> int: + """ + Remove a specific key and its metadata from an .arb file. + + This function removes both the key-value pair and its corresponding + metadata entry (which is prefixed with @). + + Args: + arb_file_path: Path to the .arb file + key_to_remove: Name of the key to remove + + Returns: + Number of entries removed from this file (0-2: key and/or metadata) + """ + # Read the JSON file + with open(arb_file_path, 'r', encoding='utf-8') as f: + data = json.load(f, object_pairs_hook=OrderedDict) + + # Track what we remove + removed_count = 0 + keys_to_delete = [] + + # Check if the main key exists + if key_to_remove in data: + keys_to_delete.append(key_to_remove) + removed_count += 1 + + # Check if the metadata key exists + metadata_key = f"@{key_to_remove}" + if metadata_key in data: + keys_to_delete.append(metadata_key) + removed_count += 1 + + # Remove the keys + for key in keys_to_delete: + del data[key] + + # Only write back if we actually removed something + if removed_count > 0: + with open(arb_file_path, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + f.write('\n') # Add trailing newline + + return removed_count + + +def validate_key_name(key_name: str) -> str: + """ + Validate and clean the key name. + + Args: + key_name: The key name provided by the user + + Returns: + Cleaned key name (without @ prefix if it was provided) + + Raises: + ValueError: If the key name is invalid + """ + if not key_name: + raise ValueError("Key name cannot be empty") + + # Remove @ prefix if user accidentally included it + if key_name.startswith('@'): + key_name = key_name[1:] + + # Check if key name is still valid after cleaning + if not key_name: + raise ValueError("Key name cannot be just '@'") + + # Validate key name format (basic validation) + if not key_name.replace('_', '').replace('-', '').isalnum(): + print(f"Warning: Key name '{key_name}' contains special characters. This might not match any existing keys.") + + return key_name + + +def main(): + """Main function to remove a specific key from all .arb files.""" + # Check command line arguments + if len(sys.argv) != 2: + print("Usage: python3 scripts/remove_intl_key.py ") + print("Example: python3 scripts/remove_intl_key.py \"obsoleteKey\"") + return 1 + + # Get and validate the key name + try: + key_to_remove = validate_key_name(sys.argv[1]) + except ValueError as e: + print(f"Error: {e}") + return 1 + + # Get repository root + repo_path = Path(__file__).parent.parent.absolute() + l10n_dir = repo_path / 'lib' / 'l10n' + + if not l10n_dir.exists(): + print(f"Error: Could not find l10n directory at {l10n_dir}") + return 1 + + # Get all .arb files + arb_files = sorted(l10n_dir.glob('*.arb')) + print(f"Found {len(arb_files)} .arb files to process.") + + if not arb_files: + print(f"Error: No .arb files found in {l10n_dir}") + return 1 + + # Ask for confirmation + print(f"\nAbout to remove key '{key_to_remove}' and its metadata '@{key_to_remove}' from all .arb files.") + confirm = input("Do you want to continue? (y/N): ").lower().strip() + + if confirm not in ['y', 'yes']: + print("Operation cancelled.") + return 0 + + # Process each .arb file + total_removed = 0 + files_modified = 0 + print("\nProcessing .arb files...") + print("=" * 80) + + for arb_file in arb_files: + removed = remove_key_from_arb_file(str(arb_file), key_to_remove) + total_removed += removed + if removed > 0: + files_modified += 1 + entries = "entry" if removed == 1 else "entries" + print(f"{arb_file.name}: Removed {removed} {entries}") + else: + print(f"{arb_file.name}: Key not found") + + print("=" * 80) + print(f"\nSummary:") + print(f"Total entries removed: {total_removed}") + print(f"Files modified: {files_modified}") + print(f"Files processed: {len(arb_files)}") + + if total_removed == 0: + print(f"\nWarning: No occurrences of key '{key_to_remove}' were found in any .arb files.") + print("Please check that the key name is correct and exists in the files.") + else: + print(f"\nSuccessfully removed key '{key_to_remove}' from all .arb files.") + + return 0 + + +if __name__ == '__main__': + exit(main()) \ No newline at end of file diff --git a/scripts/remove_unused_intl_keys.py b/scripts/remove_unused_intl_keys.py new file mode 100755 index 000000000..1c83bde60 --- /dev/null +++ b/scripts/remove_unused_intl_keys.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python3 +""" +Script to remove unused translation keys from all .arb files. + +This script: +1. Reads the unused keys from unused_intl_keys.json +2. Removes those keys and their metadata entries from all .arb files +3. Preserves the overall order and structure of the files + +Usage: + python3 scripts/remove_unused_intl_keys.py + +Input: + scripts/unused_intl_keys.json - JSON file containing the list of unused keys + +Output: + Updates all .arb files in lib/l10n/ by removing unused keys and their metadata +""" + +import json +from pathlib import Path +from typing import List, Set +from collections import OrderedDict + + +def load_unused_keys(json_path: str) -> List[str]: + """ + Load the list of unused keys from the JSON file. + + Args: + json_path: Path to the unused_intl_keys.json file + + Returns: + List of unused key names + """ + with open(json_path, 'r', encoding='utf-8') as f: + data = json.load(f) + return data['unused_keys'] + + +def remove_keys_from_arb_file(arb_file_path: str, keys_to_remove: Set[str]) -> int: + """ + Remove specified keys and their metadata from an .arb file. + + This function removes both the key-value pairs and their corresponding + metadata entries (which are prefixed with @). + + Args: + arb_file_path: Path to the .arb file + keys_to_remove: Set of key names to remove + + Returns: + Number of keys removed from this file + """ + # Read the JSON file + with open(arb_file_path, 'r', encoding='utf-8') as f: + data = json.load(f, object_pairs_hook=OrderedDict) + + # Track what we remove + removed_count = 0 + keys_to_delete = [] + + # Identify all keys to remove (including metadata keys) + for key in data.keys(): + # Check if this is a metadata key (starts with @) + if key.startswith('@'): + # Get the base key name + base_key = key[1:] + # Remove if the base key is in our removal list + if base_key in keys_to_remove: + keys_to_delete.append(key) + removed_count += 1 + else: + # Remove if the key itself is in our removal list + if key in keys_to_remove: + keys_to_delete.append(key) + removed_count += 1 + + # Remove the keys + for key in keys_to_delete: + del data[key] + + # Write back to file with proper formatting + with open(arb_file_path, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + f.write('\n') # Add trailing newline + + return removed_count + + +def main(): + """Main function to remove unused keys from all .arb files.""" + # Get repository root + repo_path = Path(__file__).parent.parent.absolute() + json_path = repo_path / 'scripts' / 'unused_intl_keys.json' + l10n_dir = repo_path / 'lib' / 'l10n' + + if not json_path.exists(): + print(f"Error: Could not find {json_path}") + print("Please run find_unused_intl_keys.py first to generate the list of unused keys.") + return 1 + + # Load unused keys + print("Loading unused keys from JSON file...") + unused_keys = load_unused_keys(str(json_path)) + keys_to_remove = set(unused_keys) + print(f"Found {len(keys_to_remove)} unused keys to remove.\n") + + # Get all .arb files + arb_files = sorted(l10n_dir.glob('*.arb')) + print(f"Found {len(arb_files)} .arb files to process.\n") + + if not arb_files: + print(f"Error: No .arb files found in {l10n_dir}") + return 1 + + # Process each .arb file + total_removed = 0 + print("Processing .arb files...") + print("=" * 80) + + for arb_file in arb_files: + removed = remove_keys_from_arb_file(str(arb_file), keys_to_remove) + total_removed += removed + print(f"{arb_file.name}: Removed {removed} keys/metadata entries") + + print("=" * 80) + print(f"\nTotal keys/metadata entries removed: {total_removed}") + print(f"Processed {len(arb_files)} .arb files successfully.") + + return 0 + + +if __name__ == '__main__': + exit(main()) diff --git a/scripts/translate/keys_to_translate.txt b/scripts/translate/keys_to_translate.txt new file mode 100644 index 000000000..d5adb63c4 --- /dev/null +++ b/scripts/translate/keys_to_translate.txt @@ -0,0 +1,9 @@ +# Example keys file for translate_keys.py +# Lines starting with # are comments and will be ignored +# One key per line + +languageLevelA2 +languageLevelB1 +languageLevelB2 +languageLevelC1 +languageLevelC2 \ No newline at end of file diff --git a/scripts/translate.py b/scripts/translate/translate.py similarity index 100% rename from scripts/translate.py rename to scripts/translate/translate.py diff --git a/scripts/translate/translate_keys.py b/scripts/translate/translate_keys.py new file mode 100755 index 000000000..b6d529fd9 --- /dev/null +++ b/scripts/translate/translate_keys.py @@ -0,0 +1,496 @@ +#!/usr/bin/env python3 +""" +Translate a specific set of keys in the ARB files. + +This script accepts a list of keys and: +1. Finds the value in the source ARB file (intl_en.arb) +2. Finds each instance of the value in the target ARB files (intl_*.arb) +3. Translates the value using OpenAI (reusing translate.py model) +4. Replaces the value in the target ARB files with the translated value + +Usage: + python translate_keys.py --keys key1 key2 key3 + python translate_keys.py --keys-file keys.txt + + +WARNING: Has not been tested extensively. Has not been tested with pluralization or +complex placeholders. Verify results before committing. +""" + +import argparse +import sys +from pathlib import Path +from typing import Any, List + +try: + from openai import OpenAI +except ImportError: + print("Error: openai package not found. Please install it with: pip install openai") + sys.exit(1) + +# We'll implement all necessary functions locally to avoid path issues + +# Get the client root directory (where this script is run from when called as module) +client_root = ( + Path.cwd() if Path.cwd().name == "client" else Path(__file__).parent.parent.parent +) +l10n_dir = client_root / "lib" / "l10n" + + +def load_translations(lang_code: str) -> dict[str, str]: + """Load translations for a language code using the correct path.""" + import json + + path_to_translations = l10n_dir / f"intl_{lang_code}.arb" + if not path_to_translations.exists(): + translations = {} + else: + with open(path_to_translations, encoding="utf-8") as f: + translations = json.loads(f.read()) + + return translations + + +def load_supported_languages() -> List[tuple[str, str]]: + """Load the supported languages from the languages.json file with correct path.""" + import json + + languages_path = client_root / "scripts" / "languages.json" + with open(languages_path, "r", encoding="utf-8") as f: + raw_languages = json.load(f) + + languages: List[tuple[str, str]] = [] + for lang in raw_languages: + assert isinstance(lang, dict), "Each language entry must be a dictionary." + language_code = lang.get("language_code", None) + language_name = lang.get("language_name", None) + assert ( + language_code and language_name + ), f"Each language must have a 'language_code' and 'language_name'. Found: {lang}" + languages.append((language_code, language_name)) + return languages + + +def save_translations(lang_code: str, translations: dict[str, str]) -> None: + """Save translations for a language code using the correct path.""" + import json + from collections import OrderedDict + from datetime import datetime + + path_to_translations = l10n_dir / f"intl_{lang_code}.arb" + + translations["@@locale"] = lang_code + translations["@@last_modified"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") + + # Load existing data to preserve order if exists. + if path_to_translations.exists(): + with open(path_to_translations, "r", encoding="utf-8") as f: + try: + existing_data = json.load(f, object_pairs_hook=OrderedDict) + except json.JSONDecodeError: + existing_data = OrderedDict() + else: + existing_data = OrderedDict() + + # Update existing keys and append new keys (preserving existing order). + for key, value in translations.items(): + if key in existing_data: + existing_data[key] = value # update value; order remains unchanged + else: + existing_data[key] = value # new key appended at the end + + with open(path_to_translations, "w", encoding="utf-8") as f: + f.write(json.dumps(existing_data, indent=2, ensure_ascii=False)) + + +def reconcile_metadata( + lang_code: str, + translation_keys: List[str], + english_translations_dict: dict[str, Any], +) -> None: + """ + For each translation key, update its metadata (the key prefixed with '@') by merging + any existing metadata with computed metadata. For basic translations, if no metadata exists, + add it; otherwise, leave it as is. + """ + translations = load_translations(lang_code) + + for key in translation_keys: + # Skip keys that weren't successfully translated + if key not in translations: + continue + + translation = translations[key] + meta_key = f"@{key}" + existing_meta = translations.get(meta_key, {}) + assert isinstance(translation, str) + + # Case 1: Basic translations, no placeholders. + if "{" not in translation: + if not existing_meta: + translations[meta_key] = {"type": "String", "placeholders": {}} + # if metadata exists, leave it as is. + + # Case 2: Translations with placeholders (no pluralization). + elif ( + "{" in translation + and "plural," not in translation + and "other{" not in translation + ): + # Compute placeholders. + computed_placeholders = {} + for placeholder in translation.split("{")[1:]: + placeholder_name = placeholder.split("}")[0] + computed_placeholders[placeholder_name] = {} + # Obtain placeholder type from english translation or default to {} + placeholder_type = ( + english_translations_dict.get(meta_key, {}) + .get("placeholders", {}) + .get(placeholder_name, {}) + .get("type") + ) + if placeholder_type: + computed_placeholders[placeholder_name]["type"] = placeholder_type + if existing_meta: + # Merge computed placeholders into existing metadata. + existing_meta.setdefault("type", "String") + existing_meta["placeholders"] = computed_placeholders + translations[meta_key] = existing_meta + else: + # Obtain type from english translation or default to "String". + translation_type = english_translations_dict.get(meta_key, {}).get( + "type", "String" + ) + translations[meta_key] = { + "type": translation_type, + "placeholders": computed_placeholders, + } + + # Case 3: Translations with pluralization. + elif ( + "{" in translation and "plural," in translation and "other{" in translation + ): + # Extract placeholders appearing before the plural part. + prefix = translation.split("plural,")[0].split("{")[1] + placeholders_list = [ + p.strip() for p in prefix.split(",") if p.strip() != "" + ] + computed_placeholders = {ph: {} for ph in placeholders_list} + for ph in placeholders_list: + # Obtain placeholder type from english translation or default to {} + placeholder_type = ( + english_translations_dict.get(meta_key, {}) + .get("placeholders", {}) + .get(ph, {}) + .get("type") + ) + if placeholder_type: + computed_placeholders[ph]["type"] = placeholder_type + if existing_meta: + existing_meta.setdefault("type", "String") + existing_meta["placeholders"] = computed_placeholders + translations[meta_key] = existing_meta + else: + # Obtain type from english translation or default to "String". + translation_type = english_translations_dict.get(meta_key, {}).get( + "type", "String" + ) + translations[meta_key] = { + "type": "String", + "placeholders": computed_placeholders, + } + + save_translations(lang_code, translations) + + +def get_all_target_language_files() -> List[Path]: + """Get all target ARB files (excluding intl_en.arb).""" + arb_files = list(l10n_dir.glob("intl_*.arb")) + # Filter out the English source file + return [f for f in arb_files if f.name != "intl_en.arb"] + + +def extract_language_code_from_filename(arb_path: Path) -> str: + """Extract language code from ARB filename (e.g., intl_es.arb -> es).""" + filename = arb_path.stem # Get filename without extension + return filename.replace("intl_", "") + + +def translate_batch_with_openai( + translation_requests: dict[str, str], + target_language: str, + source_language: str = "English", +) -> dict[str, str]: + """ + Translate a batch of texts using OpenAI API. + + Args: + translation_requests: Dictionary of {key: text} to translate + target_language: Target language name (e.g., "Spanish", "French") + source_language: Source language name (default: "English") + + Returns: + Dictionary of {key: translated_text} + """ + import json + + client = OpenAI() + + # Create a batch translation prompt + prompt = f""" + Translate the following JSON object from {source_language} to {target_language}. + Preserve any placeholders (text within curly braces like {{username}}) exactly as they are. + Preserve any special formatting or ICU message format syntax. + Return only a JSON object with the same keys but translated values. + + JSON to translate: {json.dumps(translation_requests, indent=2)} + """ + + try: + chat_completion = client.chat.completions.create( + messages=[ + { + "role": "system", + "content": "You are a professional translator. You translate text accurately while preserving any placeholders and special formatting. Always respond with valid JSON only.", + }, + { + "role": "user", + "content": prompt, + }, + ], + model="gpt-4o-mini", + temperature=0.0, + ) + + response = chat_completion.choices[0].message.content.strip() + + # Clean up common JSON formatting issues + if response.startswith("```json"): + response = response[7:] + if response.endswith("```"): + response = response[:-3] + response = response.strip() + + # Parse the JSON response + translated_batch = json.loads(response) + return translated_batch + + except json.JSONDecodeError as e: + print(f"JSON parsing error when translating batch to {target_language}: {e}") + print(f"Response was: {response[:200]}...") + # Fallback to original texts if parsing fails + return translation_requests + except (ConnectionError, TimeoutError) as e: + print(f"Network error translating batch to {target_language}: {e}") + return translation_requests # Return original texts if translation fails + except ValueError as e: + print(f"API error translating batch to {target_language}: {e}") + return translation_requests # Return original texts if translation fails + + +def get_language_display_name(lang_code: str) -> str: + """Get the display name for a language code.""" + supported_languages = load_supported_languages() + for code, display_name in supported_languages: + if code == lang_code: + return display_name + + # Fallback mapping for common language codes + fallback_names = { + "es": "Spanish", + "fr": "French", + "de": "German", + "it": "Italian", + "pt": "Portuguese", + "pt_PT": "Portuguese", + "ja": "Japanese", + "ko": "Korean", + "zh": "Chinese", + "zh_Hant": "Traditional Chinese", + "ru": "Russian", + "ar": "Arabic", + "hi": "Hindi", + "nl": "Dutch", + "sv": "Swedish", + "da": "Danish", + "no": "Norwegian", + "nb": "Norwegian", + "fi": "Finnish", + "pl": "Polish", + "cs": "Czech", + "sk": "Slovak", + "hu": "Hungarian", + "ro": "Romanian", + "bg": "Bulgarian", + "hr": "Croatian", + "sl": "Slovenian", + "et": "Estonian", + "lv": "Latvian", + "lt": "Lithuanian", + "el": "Greek", + "tr": "Turkish", + "th": "Thai", + "vi": "Vietnamese", + "id": "Indonesian", + "ms": "Malay", + "fil": "Filipino", + "he": "Hebrew", + "uk": "Ukrainian", + "be": "Belarusian", + "ca": "Catalan", + "gl": "Galician", + "eu": "Basque", + } + + return fallback_names.get(lang_code, lang_code.title()) + + +def translate_keys(keys_to_translate: List[str]) -> None: + """ + Translate specific keys in all target ARB files using batch translation. + + Args: + keys_to_translate: List of keys to translate + """ + # Load English translations (source) + english_translations = load_translations("en") + + # Validate that all keys exist in English + missing_keys = [key for key in keys_to_translate if key not in english_translations] + if missing_keys: + print( + f"Error: The following keys were not found in intl_en.arb: {missing_keys}" + ) + return + + # Filter out metadata keys + keys_to_translate = [key for key in keys_to_translate if not key.startswith("@")] + + # Get all target ARB files + target_files = get_all_target_language_files() + + print(f"Found {len(target_files)} target language files") + print(f"Translating {len(keys_to_translate)} keys: {keys_to_translate}") + + # Process keys in batches of 10 + batch_size = 10 + + for arb_file in target_files: + lang_code = extract_language_code_from_filename(arb_file) + lang_display_name = get_language_display_name(lang_code) + + print(f"\nProcessing {lang_display_name} ({lang_code})...") + + # Load current translations for this language + current_translations = load_translations(lang_code) + + # Track which keys were actually updated + updated_keys = [] + + # Process keys in batches + for i in range(0, len(keys_to_translate), batch_size): + batch = keys_to_translate[i : i + batch_size] + + # Prepare translation requests for this batch + translation_requests = {} + for key in batch: + english_text = english_translations[key] + translation_requests[key] = english_text + + print( + f" Translating batch {i//batch_size + 1} ({len(batch)} keys): {batch}" + ) + + # Translate the batch + translated_batch = translate_batch_with_openai( + translation_requests, lang_display_name + ) + + # Update translations and track updated keys + for key in batch: + if key in translated_batch: + translated_text = translated_batch[key] + current_translations[key] = translated_text + updated_keys.append(key) + print( + f" {key}: '{english_translations[key]}' -> '{translated_text}'" + ) + else: + print(f" Warning: Key '{key}' not found in translation response") + + # Save the updated translations + if updated_keys: + save_translations(lang_code, current_translations) + + # Reconcile metadata for updated keys + reconcile_metadata(lang_code, updated_keys, english_translations) + + print(f" ✓ Updated {len(updated_keys)} keys in {lang_code}") + else: + print(f" - No keys updated in {lang_code}") + + +def read_keys_from_file(file_path: Path) -> List[str]: + """Read keys from a text file (one key per line).""" + if not file_path.exists(): + raise FileNotFoundError(f"Keys file not found: {file_path}") + + with open(file_path, "r", encoding="utf-8") as f: + keys = [ + line.strip() + for line in f + if line.strip() and not line.strip().startswith("#") + ] + + return keys + + +def main(): + parser = argparse.ArgumentParser( + description="Translate specific keys in ARB files", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" + Examples: + pip install openai + python translate_keys.py --keys about accept account + python -m scripts.translate.translate_keys.py --keys-file scripts.translate.keys_to_translate.txt + """, + ) + + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument("--keys", nargs="+", help="List of keys to translate") + group.add_argument( + "--keys-file", + type=Path, + help="File containing keys to translate (one per line)", + ) + + args = parser.parse_args() + + # Get the keys to translate + if args.keys: + keys_to_translate = args.keys + else: + keys_to_translate = read_keys_from_file(args.keys_file) + + if not keys_to_translate: + print("Error: No keys to translate") + sys.exit(1) + + # Change to the client directory so relative paths work + original_cwd = Path.cwd() + client_dir = Path(__file__).parent.parent.parent + + try: + import os + + os.chdir(client_dir) + translate_keys(keys_to_translate) + finally: + os.chdir(original_cwd) + + print("\n✓ Translation complete!") + + +if __name__ == "__main__": + main() diff --git a/test/pangea/choreo_record_test.dart b/test/pangea/choreo_record_test.dart index 0da9d0702..cd8ee065e 100644 --- a/test/pangea/choreo_record_test.dart +++ b/test/pangea/choreo_record_test.dart @@ -1,7 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:fluffychat/pangea/choreographer/models/choreo_edit.dart'; -import 'package:fluffychat/pangea/choreographer/models/choreo_record.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_edit_model.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; void main() async { group("Optimized choreo record tests", () { @@ -9,7 +9,7 @@ void main() async { const String originalText = "Parameter"; const String editedText = "Perrimeter"; - final ChoreoEdit edits = ChoreoEdit.fromText( + final ChoreoEditModel edits = ChoreoEditModel.fromText( originalText: originalText, editedText: editedText, ); @@ -23,7 +23,7 @@ void main() async { const String originalText = "step"; const String editedText = "steps"; - final ChoreoEdit edits = ChoreoEdit.fromText( + final ChoreoEditModel edits = ChoreoEditModel.fromText( originalText: originalText, editedText: editedText, ); @@ -41,7 +41,7 @@ void main() async { steps.add(""); steps.add("Si"); - final record = ChoreoRecord( + final record = ChoreoRecordModel( originalText: "Yes", choreoSteps: [], openMatches: [], @@ -64,7 +64,7 @@ void main() async { steps.add(""); steps.add("Si"); - final record = ChoreoRecord( + final record = ChoreoRecordModel( originalText: "Yes", choreoSteps: [], openMatches: [], @@ -75,7 +75,7 @@ void main() async { } final json = record.toJson(); - final received = ChoreoRecord.fromJson(json); + final received = ChoreoRecordModel.fromJson(json); assert( received.choreoSteps[0].edits != null && @@ -94,7 +94,7 @@ void main() async { steps.add("Cinco"); steps.add("Cincai"); - final record = ChoreoRecord( + final record = ChoreoRecordModel( originalText: "One", choreoSteps: [], openMatches: [], @@ -105,7 +105,7 @@ void main() async { } final json = record.toJson(); - final received = ChoreoRecord.fromJson(json); + final received = ChoreoRecordModel.fromJson(json); // Initial step and steps following empty strings // will have text instead of edits diff --git a/test/pangea/text_normalization_test.dart b/test/pangea/text_normalization_test.dart new file mode 100644 index 000000000..b8aef771a --- /dev/null +++ b/test/pangea/text_normalization_test.dart @@ -0,0 +1,352 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:matrix/matrix_api_lite/utils/logs.dart'; + +import 'package:fluffychat/pangea/choreographer/igc/text_normalization_util.dart'; + +final List> normalizeTestCases = [ + // 1. Amharic (am) - beta + {"input": "ሰላም!", "expected": "ሰላም"}, + {"input": "ተማሪ።", "expected": "ተማሪ"}, + {"input": "ኢትዮጵያ...", "expected": "ኢትዮጵያ"}, + + // 2. Arabic (ar) - beta + {"input": "السلام عليكم!", "expected": "السلام عليكم"}, + {"input": "مرحباً", "expected": "مرحباً"}, + {"input": "القاهرة.", "expected": "القاهرة"}, + {"input": "مدرسة؟", "expected": "مدرسة"}, + + // 3. Bengali (bn) - beta + {"input": "নমস্কার!", "expected": "নমস্কার"}, + {"input": "ভালো আছেন?", "expected": "ভালো আছেন"}, + {"input": "ঢাকা।", "expected": "ঢাকা"}, + + // 4. Bulgarian (bg) - beta + {"input": "Здравей!", "expected": "здравей"}, + {"input": "България", "expected": "българия"}, + {"input": "София.", "expected": "софия"}, + + // 5. Catalan (ca) - full + {"input": "Hola!", "expected": "hola"}, + {"input": "França", "expected": "franca"}, + {"input": "Barcelòna...", "expected": "barcelòna"}, + {"input": "això", "expected": "això"}, + + // 6. Czech (cs) - beta + {"input": "Dobrý den!", "expected": "dobry den"}, + {"input": "Děkuji", "expected": "dekuji"}, + {"input": "Praha.", "expected": "praha"}, + {"input": "škola?", "expected": "skola"}, + + // 7. Danish (da) - beta + {"input": "Hej!", "expected": "hej"}, + {"input": "København", "expected": "kobenhavn"}, + {"input": "Danskе.", "expected": "danske"}, + {"input": "æøå", "expected": "æøå"}, + + // 8. German (de) - full + {"input": "Guten Tag!", "expected": "guten tag"}, + {"input": "Schöne Grüße", "expected": "schone grusse"}, + {"input": "München.", "expected": "munchen"}, + {"input": "Straße?", "expected": "strasse"}, + {"input": "Hörst du mich?", "expected": "horst du mich"}, + + // 9. Greek (el) - beta + {"input": "Γεια σας!", "expected": "γεια σας"}, + {"input": "Αθήνα", "expected": "αθηνα"}, + {"input": "ελληνικά.", "expected": "ελληνικα"}, + + // 10. English (en) - full + {"input": "Hello world!", "expected": "hello world"}, + {"input": "It's a beautiful day.", "expected": "its a beautiful day"}, + {"input": "Don't worry, be happy!", "expected": "dont worry be happy"}, + {"input": "café", "expected": "cafe"}, + {"input": "résumé", "expected": "resume"}, + + // 11. Spanish (es) - full + {"input": "¡Hola mundo!", "expected": "hola mundo"}, + {"input": "Adiós", "expected": "adios"}, + {"input": "España.", "expected": "espana"}, + {"input": "niño", "expected": "nino"}, + {"input": "¿Cómo estás?", "expected": "como estas"}, + + // 12. Estonian (et) - beta + {"input": "Tere!", "expected": "tere"}, + {"input": "Tallinn", "expected": "tallinn"}, + {"input": "Eesti.", "expected": "eesti"}, + + // 13. Basque (eu) - beta + {"input": "Kaixo!", "expected": "kaixo"}, + {"input": "Euskera", "expected": "euskera"}, + {"input": "Bilbo.", "expected": "bilbo"}, + + // 14. Finnish (fi) - beta + {"input": "Hei!", "expected": "hei"}, + {"input": "Helsinki", "expected": "helsinki"}, + {"input": "Suomi.", "expected": "suomi"}, + {"input": "Käännös", "expected": "kaannos"}, + + // 15. French (fr) - full + {"input": "Bonjour!", "expected": "bonjour"}, + {"input": "À bientôt", "expected": "a bientot"}, + {"input": "Paris.", "expected": "paris"}, + {"input": "Français?", "expected": "francais"}, + {"input": "C'est magnifique!", "expected": "cest magnifique"}, + + // 16. Galician (gl) - beta + {"input": "Ola!", "expected": "ola"}, + {"input": "Galicia", "expected": "galicia"}, + {"input": "Santiago.", "expected": "santiago"}, + + // 17. Gujarati (gu) - beta + {"input": "નમસ્તે!", "expected": "નમસ્તે"}, + {"input": "ગુજરાત", "expected": "ગુજરાત"}, + {"input": "અમદાવાદ.", "expected": "અમદાવાદ"}, + + // 18. Hindi (hi) - beta + {"input": "नमस्ते!", "expected": "नमस्ते"}, + {"input": "भारत", "expected": "भारत"}, + {"input": "दिल्ली.", "expected": "दिल्ली"}, + {"input": "शिक्षा?", "expected": "शिक्षा"}, + + // 19. Hungarian (hu) - beta + {"input": "Szia!", "expected": "szia"}, + {"input": "Budapest", "expected": "budapest"}, + {"input": "Magyar.", "expected": "magyar"}, + {"input": "köszönöm", "expected": "koszonom"}, + + // 20. Indonesian (id) - beta + {"input": "Halo!", "expected": "halo"}, + {"input": "Jakarta", "expected": "jakarta"}, + {"input": "Indonesia.", "expected": "indonesia"}, + {"input": "selamat pagi", "expected": "selamat pagi"}, + + // 21. Italian (it) - full + {"input": "Ciao!", "expected": "ciao"}, + {"input": "Arrivederci", "expected": "arrivederci"}, + {"input": "Roma.", "expected": "roma"}, + {"input": "perché?", "expected": "perche"}, + {"input": "È bellissimo!", "expected": "e bellissimo"}, + + // 22. Japanese (ja) - full + {"input": "こんにちは!", "expected": "こんにちは"}, + {"input": "東京", "expected": "東京"}, + {"input": "ありがとう。", "expected": "ありがとう"}, + {"input": "さようなら?", "expected": "さようなら"}, + + // 23. Kannada (kn) - beta + {"input": "ನಮಸ್ತೆ!", "expected": "ನಮಸ್ತೆ"}, + {"input": "ಬೆಂಗಳೂರು", "expected": "ಬೆಂಗಳೂರು"}, + {"input": "ಕರ್ನಾಟಕ.", "expected": "ಕರ್ನಾಟಕ"}, + + // 24. Korean (ko) - full + {"input": "안녕하세요!", "expected": "안녕하세요"}, + {"input": "서울", "expected": "서울"}, + {"input": "한국어.", "expected": "한국어"}, + {"input": "감사합니다?", "expected": "감사합니다"}, + + // 25. Lithuanian (lt) - beta + {"input": "Labas!", "expected": "labas"}, + {"input": "Vilnius", "expected": "vilnius"}, + {"input": "Lietuva.", "expected": "lietuva"}, + {"input": "ačiū", "expected": "aciu"}, + + // 26. Latvian (lv) - beta + {"input": "Sveiki!", "expected": "sveiki"}, + {"input": "Rīga", "expected": "riga"}, + {"input": "Latvija.", "expected": "latvija"}, + + // 27. Malay (ms) - beta + {"input": "Selamat pagi!", "expected": "selamat pagi"}, + {"input": "Kuala Lumpur", "expected": "kuala lumpur"}, + {"input": "Malaysia.", "expected": "malaysia"}, + + // 28. Mongolian (mn) - beta + {"input": "Сайн байна уу!", "expected": "сайн байна уу"}, + {"input": "Улаанбаатар", "expected": "улаанбаатар"}, + {"input": "Монгол.", "expected": "монгол"}, + + // 29. Marathi (mr) - beta + {"input": "नमस्कार!", "expected": "नमस्कार"}, + {"input": "मुंबई", "expected": "मुंबई"}, + {"input": "महाराष्ट्र.", "expected": "महाराष्ट्र"}, + + // 30. Dutch (nl) - beta + {"input": "Hallo!", "expected": "hallo"}, + {"input": "Amsterdam", "expected": "amsterdam"}, + {"input": "Nederland.", "expected": "nederland"}, + {"input": "dankjewel", "expected": "dankjewel"}, + + // 31. Punjabi (pa) - beta + {"input": "ਸਤਿ ਸ਼੍ਰੀ ਅਕਾਲ!", "expected": "ਸਤਿ ਸ਼੍ਰੀ ਅਕਾਲ"}, + {"input": "ਪੰਜਾਬ", "expected": "ਪੰਜਾਬ"}, + {"input": "ਅੰਮ੍ਰਿਤਸਰ.", "expected": "ਅੰਮ੍ਰਿਤਸਰ"}, + + // 32. Polish (pl) - beta + {"input": "Cześć!", "expected": "czesc"}, + {"input": "Warszawa", "expected": "warszawa"}, + {"input": "Polska.", "expected": "polska"}, + {"input": "dziękuję", "expected": "dziekuje"}, + + // 33. Portuguese (pt) - full + {"input": "Olá!", "expected": "ola"}, + {"input": "Obrigado", "expected": "obrigado"}, + {"input": "São Paulo.", "expected": "sao paulo"}, + {"input": "coração", "expected": "coracao"}, + {"input": "não?", "expected": "nao"}, + + // 34. Romanian (ro) - beta + {"input": "Salut!", "expected": "salut"}, + {"input": "București", "expected": "bucuresti"}, + {"input": "România.", "expected": "romania"}, + {"input": "mulțumesc", "expected": "multumesc"}, + + // 35. Russian (ru) - full + {"input": "Привет!", "expected": "привет"}, + {"input": "Москва", "expected": "москва"}, + {"input": "Россия.", "expected": "россия"}, + {"input": "спасибо?", "expected": "спасибо"}, + {"input": "магазин", "expected": "магазин"}, + {"input": "магазин.", "expected": "магазин"}, + + // 36. Slovak (sk) - beta + {"input": "Ahoj!", "expected": "ahoj"}, + {"input": "Bratislava", "expected": "bratislava"}, + {"input": "Slovensko.", "expected": "slovensko"}, + {"input": "ďakujem", "expected": "dakujem"}, + + // 37. Serbian (sr) - beta + {"input": "Здраво!", "expected": "здраво"}, + {"input": "Београд", "expected": "београд"}, + {"input": "Србија.", "expected": "србија"}, + + // 38. Ukrainian (uk) - beta + {"input": "Привіт!", "expected": "привіт"}, + {"input": "Київ", "expected": "київ"}, + {"input": "Україна.", "expected": "україна"}, + + // 39. Urdu (ur) - beta + {"input": "السلام علیکم!", "expected": "السلام علیکم"}, + {"input": "کراچی", "expected": "کراچی"}, + {"input": "پاکستان.", "expected": "پاکستان"}, + + // 40. Vietnamese (vi) - full + {"input": "Xin chào!", "expected": "xin chao"}, + {"input": "Hà Nội", "expected": "ha noi"}, + {"input": "Việt Nam.", "expected": "viet nam"}, + {"input": "cảm ơn?", "expected": "cam on"}, + + // 41. Cantonese (yue) - beta + {"input": "你好!", "expected": "你好"}, + {"input": "香港", "expected": "香港"}, + {"input": "廣東話.", "expected": "廣東話"}, + + // 42. Chinese Simplified (zh-CN) - full + {"input": "你好!", "expected": "你好"}, + {"input": "北京", "expected": "北京"}, + {"input": "中国.", "expected": "中国"}, + {"input": "谢谢?", "expected": "谢谢"}, + + // 43. Chinese Traditional (zh-TW) - full + {"input": "您好!", "expected": "您好"}, + {"input": "台北", "expected": "台北"}, + {"input": "台灣.", "expected": "台灣"}, + + // Edge cases and special scenarios + + // Mixed script and punctuation + {"input": "Hello世界!", "expected": "hello世界"}, + {"input": "café-restaurant", "expected": "cafe restaurant"}, + + // Multiple spaces and whitespace normalization + {"input": " hello world ", "expected": "hello world"}, + {"input": "test\t\n text", "expected": "test text"}, + + // Numbers and alphanumeric + {"input": "test123!", "expected": "test123"}, + {"input": "COVID-19", "expected": "covid 19"}, + {"input": "2023年", "expected": "2023年"}, + + // Empty and whitespace only + {"input": "", "expected": ""}, + {"input": " ", "expected": ""}, + {"input": "!!!", "expected": ""}, + + // Special punctuation combinations + {"input": "What?!?", "expected": "what"}, + {"input": "Well...", "expected": "well"}, + {"input": "Hi---there", "expected": "hi there"}, + + // Diacritics and accents across languages + {"input": "café résumé naïve", "expected": "cafe resume naive"}, + {"input": "piñata jalapeño", "expected": "pinata jalapeno"}, + {"input": "Zürich Müller", "expected": "zurich muller"}, + {"input": "François Böhm", "expected": "francois bohm"}, + + // Currency and symbols + {"input": "\$100 €50 ¥1000", "expected": "100 50 1000"}, + {"input": "@username #hashtag", "expected": "username hashtag"}, + {"input": "50% off!", "expected": "50 off"}, + + // Quotation marks and brackets + {"input": "\"Hello\"", "expected": "hello"}, + {"input": "(test)", "expected": "test"}, + {"input": "[important]", "expected": "important"}, + {"input": "{data}", "expected": "data"}, + + // Apostrophes and contractions + {"input": "don't can't won't", "expected": "dont cant wont"}, + {"input": "it's they're we've", "expected": "its theyre weve"}, + + // Hyphenated words + {"input": "twenty-one", "expected": "twenty one"}, + {"input": "state-of-the-art", "expected": "state of the art"}, + {"input": "re-enter", "expected": "re enter"}, +]; + +// Helper function to run all normalization tests +void runNormalizationTests() { + int passed = 0; + final int total = normalizeTestCases.length; + + for (int i = 0; i < normalizeTestCases.length; i++) { + final testCase = normalizeTestCases[i]; + final input = testCase['input']!; + final expected = testCase['expected']!; + final actual = normalizeString(input, 'en'); // Default to English for tests + + if (actual == expected) { + passed++; + Logs().i('✓ Test ${i + 1} PASSED: "$input" → "$actual"'); + } else { + Logs().i( + '✗ Test ${i + 1} FAILED: "$input" → "$actual" (expected: "$expected")', + ); + } + } + + Logs().i( + '\nTest Results: $passed/$total tests passed (${(passed / total * 100).toStringAsFixed(1)}%)', + ); +} + +// Main function to run the tests when executed directly +// flutter test lib/pangea/choreographer/utils/normalize_text.dart +void main() { + group('Normalize String Tests', () { + for (int i = 0; i < normalizeTestCases.length; i++) { + final testCase = normalizeTestCases[i]; + final input = testCase['input']!; + final expected = testCase['expected']!; + + test('Test ${i + 1}: "$input" should normalize to "$expected"', () { + final actual = + normalizeString(input, 'en'); // Default to English for tests + expect( + actual, + equals(expected), + reason: 'Input: "$input" → Got: "$actual" → Expected: "$expected"', + ); + }); + } + }); +}